Tanh (Hyperbolic Tangent)
تحوّل Tanh المدخلات إلى قيم بين −1 و1 على منحنى S متمركز حول الصفر. يتناول الشرح صيغتها ومشتقتها واستخدامها في RNNs وGANs وأنظمة التحكم، إضافة إلى شفرة PyTorch.
الظل الزائدي، tanh(x) = (eˣ − e^(−x)) / (eˣ + e^(−x))، هو دالة تنشيط تحوّل أي عدد حقيقي إلى قيمة بين −1 و1 على منحنى على شكل حرف S متمركز حول الصفر. وهو سيغمويد معاد التحجيم، tanh(x) = 2σ(2x) − 1، لذا يشترك معه في الشكل، لكنه يُرجع قيماً سالبة للمدخلات السالبة ويكون ميله 1 عند نقطة الأصل. كان tanh دالة التنشيط القياسية للطبقات المخفية في الشبكات العصبية خلال تسعينيات القرن الماضي والعقد الأول من القرن الحالي. واليوم يشكّل الحالة المخفية في الشبكات العصبية المتكررة (RNNs)، ويحدّ مخرجات مولدات الصور وسياسات التحكم، ويحافظ على القيم ضمن نطاق محدد داخل النماذج الأكبر.
الصيغة والخصائص#
دالة tanh فردية، tanh(−x) = −tanh(x)، وtanh(0) = 0. وهي شبه خطية بالقرب من الصفر، tanh(x) ≈ x، وتتسطح باتجاه ±1 بعد نحو ±3. ومشتقتها، 1 − tanh²(x)، تساوي 1 عند نقطة الأصل، أي أربعة أضعاف القيمة القصوى لمشتقة سيغمويد البالغة 0.25، وتقترب من الصفر مع تشبع المنحنى. يقيّم المقتطف أدناه في PyTorch دالة tanh وتدرجها، ثم يقارن متوسط مخرجات tanh وسيغمويد للمدخلات ذات المتوسط الصفري:
import torch
x = torch.tensor([-3.0, -1.0, 0.0, 1.0, 3.0], requires_grad=True)
y = torch.tanh(x)
# The derivative of tanh is 1 - tanh(x)^2, which peaks at 1 when x = 0
y.sum().backward()
print(f"Tanh: {[round(v, 3) for v in y.tolist()]}")
print(f"Gradient: {[round(v, 3) for v in x.grad.tolist()]}")
# For zero-mean inputs, tanh outputs average near 0 and sigmoid outputs near 0.5
torch.manual_seed(0)
z = torch.randn(100_000)
print(f"Mean output, tanh: {torch.tanh(z).mean():.3f}, sigmoid: {torch.sigmoid(z).mean():.3f}")يطبع المقتطف قيم tanh لـ [-0.995, -0.762, 0.0, 0.762, 0.995] وتدرجات [0.01, 0.42, 1.0, 0.42, 0.01]، لذا يكون التدرج عند ±3 جزءاً من مئة من قيمته عند الصفر. وبالنسبة إلى 100,000 مدخل موزع طبيعياً توزيعاً معيارياً، يبلغ متوسط مخرجات tanh نحو 0.0، ومتوسط مخرجات سيغمويد نحو 0.5.
لماذا تساعد المخرجات المتمركزة حول الصفر#
تتناسب تدرجات أوزان العصبون طرديًا مع مدخلاته. عندما تكون جميع المدخلات موجبة، كما هي الحال دائمًا مع مخرجات sigmoid، تكون تدرجات أوزان العصبون ذات الإشارة نفسها في كل تحديث؛ لذلك لا يمكن للأوزان إلا أن ترتفع معًا أو تنخفض معًا، ولا تبلغ قيمها المثلى إلا عبر مسار متعرج. تكون مخرجات tanh موجبة وسالبة بنسب متقاربة، ما يتيح لكل وزن التحرك باستقلالية ويبقي مدخلات الطبقة التالية قريبة من متوسط صفري، حيث يتقارب الانحدار المتدرج بوتيرة أسرع. ولهذا أوصى دليل يان لوكون وزملائه الصادر عام 1998، "Efficient BackProp"، باستخدام الدوال المتماثلة بدلًا من دالة sigmoid اللوجستية في الطبقات المخفية، وتحديدًا الصيغة ذات معامل التحجيم 1.7159 · tanh(2x/3). ومع ذلك، لا تزال tanh تتشبع، كما أن تكديس طبقات tanh عديدة يقلّص التدرجات أثناء الانتشار العكسي، مؤديًا إلى مشكلة تلاشي التدرج.
مواضع استخدام tanh#
- الشبكات المتكررة: تحدّث شبكة RNN بسيطة حالتها وفق المعادلة hₜ = tanh(Wxₜ + Uhₜ₋₁ + b)، وتُعد tanh اللاخطية الافتراضية في
nn.RNNالخاصة بـ PyTorch. وفي خلايا LSTM وGRU، تنتج tanh المحتوى المرشح، وفي LSTM تضغط حالة الخلية قبل إخراجها، بينما تحدد بوابات سيغمويد مقدار ما يُستخدم منها. ويحافظ النطاق المحدود على الحالة التي تُعاد تغذيتها خطوة بعد أخرى كيلا تنمو بلا حد. - مولدات GAN: ينهي DCGAN المولد بدالة tanh كي تقع وحدات البكسل المُولّدة بين −1 و1، وهو النطاق الذي تُحوّل إليه صور التدريب؛ وقد اتبعت كثير من الشبكات التوليدية التنافسية (GANs) اللاحقة هذا الاختيار.
- الأفعال محدودة النطاق: تمرر سياسات التحكم المستمر في التعلم المعزز مخرجاتها عبر tanh لإبقاء كل أمر ضمن حدود المشغلات. وتضغط Soft Actor-Critic عينات سياسة غاوسية بهذه الطريقة.
- الحد الناعم لقيم logits: تحسب نماذج اللغة Gemma 2 من Google المقدار cap · tanh(logits / cap)، بحد أقصى قدره 50 لقيم logits الخاصة بالانتباه و30 للقيم النهائية. تمر قيم logits الصغيرة من دون تغيير يُذكر، ولا يمكن للقيم الكبيرة أن تتجاوز الحد الأقصى.
- تقريب GELU: يقرّب التعبير 0.5x(1 + tanh(√(2/π)(x + 0.044715x³))) دالة GELU بدقة، وتحسب الشيفرة الأصلية لـ GPT-2 وBERT دالة GELU بهذه الطريقة.
- التدفقات المُطبِّعة: غالباً ما تنهي التدفقات على نمط RealNVP كل شبكة تحجيم بدالة tanh، بحيث تحجّم كل طبقة اقتران مدخلاتها بعامل بين e⁻¹ وe، ما يحافظ على الاستقرار العددي أثناء التدريب. تُدرَّب نماذج تقدير الوضعيات في YOLO26 باستخدام خسارة تقدير لوغاريتم الاحتمالية المتبقية، حيث تصف تدفقات RealNVP ذات الطبقات الست، والتي تنهي كل شبكة تحجيم فيها بدالة tanh، مدى بُعد النقاط المفتاحية المتوقعة عن الحقيقة المرجعية.
مقارنة tanh بالدوال ذات الصلة#
- سيغمويد: دالة tanh هي سيغمويد ممددة إلى النطاق من −1 إلى 1 ومضغوطة أفقياً بعامل اثنين، ما يرفع ميلها الأقصى من 0.25 إلى 1. ويجعل نطاق سيغمويد من 0 إلى 1 منها الدالة المفضلة للاحتمالات والبوابات.
- Hardtanh: صيغة خطية مقطعية تقص المدخلات إلى [−1, 1]. وهي أقل كلفة حسابياً، ويكون تدرجها صفراً تماماً خارج هذا النطاق.
- ReLU: لا تصل max(0, x) إلى التشبع أبدًا مع المدخلات الموجبة، ولا تتطلب سوى عملية مقارنة واحدة؛ لذا استبدلت ReLU والبدائل السلسة مثل SiLU دالة tanh في الطبقات المخفية من الشبكات العصبية الالتفافية (CNNs) العميقة والمحوّلات. وفي ورقة AlexNet البحثية، حققت شبكة CNN من أربع طبقات تستخدم ReLU خطأ تدريب نسبته 25% على CIFAR-10، أسرع بست مرات من الشبكة نفسها باستخدام وحدات tanh.










