Sigmoid
تحوّل دالة سيغمويد أي عدد حقيقي إلى قيمة بين 0 و1. يتناول الشرح صيغتها ومشتقتها ومخرجات الاحتمالات والبوابات وشفرة PyTorch.
تحوّل دالة sigmoid، σ(x) = 1 / (1 + e^(−x))، أي عدد حقيقي إلى قيمة بين 0 و1 على منحنى على شكل حرف S: إذ تنتج المدخلات السالبة الكبيرة مخرجات قريبة من 0، وتنتج المدخلات الموجبة الكبيرة مخرجات قريبة من 1، بينما يعطي المدخل 0 القيمة 0.5 تمامًا. في التعلم الآلي (ML)، تشير كلمة "sigmoid" غالبًا إلى هذه الدالة اللوجستية، وهي المنحنى نفسه الذي يحوّل درجة خطية إلى احتمال في الانحدار اللوجستي. تؤدي sigmoid ثلاثة أدوار داخل الشبكة العصبية (NN): فقد كانت في الأصل دالة التنشيط للطبقات المخفية، وتحول الدرجة النهائية إلى احتمال للمخرجات الثنائية ومتعددة التسميات، وتعمل مفتاحًا لينًا للتشغيل والإيقاف في بوابات الخلايا المتكررة والطبقات الأخرى ذات البوابات. انتقلت الطبقات المخفية منذ ذلك الحين إلى دوال مثل ReLU، لذا تقع معظم دوال sigmoid في النماذج الحالية عند المخرجات وفي البوابات.
الصيغة والخصائص#
تتسم sigmoid بالتناظر حول نقطة منتصفها، إذ σ(−x) = 1 − σ(x)، ودالتها العكسية هي دالة logit، log(p / (1 − p))، التي تحوّل الاحتمال مجددًا إلى لوغاريتم الأرجحية. ولهذا يُسمى الخرج الخام للشبكة قبل تطبيق sigmoid قيمة logit. للمشتقة صيغة موجزة هي σ′(x) = σ(x)(1 − σ(x))، وتبلغ ذروتها عند 0.25 عندما x = 0، ثم تقترب من الصفر كلما تسطّح المنحنى عند طرفيه؛ ويُسمى هذا السلوك التشبّع. يحسب المقتطف التالي في PyTorch المخرجات والتدرّجات عند خمس نقاط:
import torch
x = torch.tensor([-6.0, -2.0, 0.0, 2.0, 6.0], requires_grad=True)
y = torch.sigmoid(x)
# Backpropagate to get the derivative sigmoid(x) * (1 - sigmoid(x)) at each input
y.sum().backward()
print(f"Sigmoid: {[round(v, 4) for v in y.tolist()]}")
print(f"Gradient: {[round(v, 4) for v in x.grad.tolist()]}")يطبع المقتطف قيم sigmoid [0.0025, 0.1192, 0.5, 0.8808, 0.9975] والتدرّجات [0.0025, 0.105, 0.25, 0.105, 0.0025]. عند ±6، تبعد المخرجات عن قيمتها الحدية بمقدار لا يتجاوز 0.0025، ويكون التدرّج أصغر 100 مرة منه عند الصفر، لذا يكاد المدخل في ذلك النطاق لا يغيّر الأوزان التي أنتجته.
Sigmoid في الطبقات المخفية#
استخدمت الشبكات متعددة الطبقات المبكرة sigmoid في كل طبقة مخفية، ما تسبب بمشكلتين. يضرب الانتشار العكسي مشتقة تنشيط واحدة لكل طبقة، ولأن مشتقة sigmoid لا تتجاوز 0.25، فإن تلك المشتقات وحدها تضرب التدرّج في 0.25¹⁰ كحد أقصى عبر عشر طبقات sigmoid، أي أقل من جزء من مليون، وهذه هي مشكلة تلاشي التدرّج. كما أن مخرجات sigmoid موجبة دائمًا، لذلك تشترك جميع تدرّجات أوزان العصبون الذي يستقبلها في الإشارة نفسها في كل تحديث، ولا تستطيع الأوزان إلا التذبذب حول قيمها المثلى. توسيط Tanh مخرجاتها حول الصفر، وأظهر Xavier Glorot وYoshua Bengio عام 2010 أن المتوسط الموجب لـsigmoid يدفع الطبقة المخفية العليا في شبكة عميقة ذات تهيئة عشوائية إلى التشبّع. عالجت ReLU المشكلتين وأصبحت الخيار الافتراضي للطبقات المخفية، بينما لا تزال الدوال اللاحقة الناعمة مثل SiLU، أي x · σ(x)، تستخدم sigmoid داخلها بوصفها بوابة.
Sigmoid بوصفها طبقة خرج#
في التصنيف الثنائي، تتحول قيمة خرج واحدة z إلى p = σ(z)، أي الاحتمال المتوقع للفئة الإيجابية، وتعادل عتبة 0.5 على p عتبة 0 على z. يقترن التدريب باستخدام sigmoid بـالإنتروبيا المتقاطعة الثنائية، التي لا يتجاوز تدرّجها بالنسبة إلى logit الفرق p − y، أي الاحتمال المتوقع مطروحًا منه التسمية. تدمج أطر العمل العمليتين لتحقيق الاستقرار العددي: إذ تتلقى BCEWithLogitsLoss في PyTorch قيم logit الخام، وتستخدم داخليًا حيلة log-sum-exp، ما يتجنب حساب لوغاريتم احتمال قُرّب إلى 0 أو 1 تمامًا.
عندما يمكن أن تتزامن التسميات، يستخدم النموذج دالة sigmoid واحدة لكل تسمية، ويُسمى هذا الإعداد التصنيف متعدد التسميات. أما Softmax فتجعل الفئات تتنافس على وحدة احتمال واحدة، ما يناسب التسميات التي يستبعد بعضها بعضًا:
import torch
# Logits from a classifier for the labels "person", "backpack", and "car"
logits = torch.tensor([2.0, 1.5, -3.0])
# Sigmoid scores each label on its own; softmax makes the labels compete for one total
sigmoid_probs = torch.sigmoid(logits)
softmax_probs = torch.softmax(logits, dim=0)
print(f"Sigmoid: {[round(p, 3) for p in sigmoid_probs.tolist()]}, sum {sigmoid_probs.sum():.3f}")
print(f"Softmax: {[round(p, 3) for p in softmax_probs.tolist()]}, sum {softmax_probs.sum():.3f}")يبلغ مجموع درجات sigmoid [0.881, 0.818, 0.047] مقدار 1.746، لذا يتجاوز كل من "person" و"backpack" العتبة 0.5، بينما توزّع softmax قيم logit نفسها على [0.62, 0.376, 0.004] ولا تبقى فوق 0.5 إلا "person". تسجّل نماذج الكشف في YOLO26 درجة كل فئة باستخدام sigmoid مستقلة مدرّبة باستخدام BCEWithLogitsLoss، لذا ليس من الضروري أن يكون مجموع درجات الفئات لمربع ما مساويًا لـ1؛ وتطبّق نماذج تقدير الوضعية في YOLO26 دالة sigmoid على قيمة logit الخاصة بوضوح كل نقطة مفتاحية لإخراج احتمال ظهورها.
Sigmoid بوصفها بوابة#
بما أن خرجها يقع بين 0 و1، تستطيع sigmoid تغيير مقدار الإشارة الأخرى عنصرًا بعنصر، من الحجب التام إلى المرور الكامل، مع الحفاظ على قابلية الاشتقاق:
- خلايا LSTM وGRU: تحدد بوابات sigmoid مقدار الذاكرة القديمة التي ينبغي الإبقاء عليها، والمحتوى الجديد الذي ينبغي كتابته، ومقدار الحالة الذي ينبغي إظهاره في كل خطوة زمنية، بينما تشكّل tanh المحتوى نفسه.
- SwiGLU: تضرب طبقات التغذية الأمامية في كثير من النماذج اللغوية الكبيرة (LLMs) إسقاطًا متعلّمًا بإسقاط ثانٍ مفعّل بدالة SiLU، أي ببوابة مبنية على sigmoid.
- SigLIP: يقيّم نموذج الصور والنصوص هذا كل زوج من الصور والتعليقات التوضيحية في الدفعة باستخدام sigmoid مستقلة، لإنتاج احتمال تطابق بنعم أو لا، لذا لا تتطلب دالة الخسارة تطبيعًا عبر الدفعة.
Sigmoid والدوال ذات الصلة#
- الدالة اللوجستية: مرادف لدالة sigmoid في التعلم الآلي. أما في الرياضيات، فتشمل كلمة "sigmoid" أيضًا منحنيات أخرى على شكل S، ومنها tanh ودالة الخطأ.
- Softmax: تطبّع متجهًا كاملًا إلى احتمالات مجموعها 1. بالنسبة إلى فئتين، تعطي softmax المطبّقة على قيم logit (z₁, z₂) للفئة الأولى σ(z₁ − z₂)، لذا يصف كل من softmax بمخرجين وsigmoid بمخرج واحد النموذج نفسه.
- Tanh: دالة sigmoid معاد تحجيمها، tanh(x) = 2σ(2x) − 1، وتنتج قيمًا من −1 إلى 1 متمركزة حول الصفر، ومشتقتها القصوى 1.
- Hard sigmoid: تقريب خطي مقطعي يتجنب العملية الأسية في الأجهزة المحمولة. تستخدم MobileNetV3 الدالة ReLU6(x + 3) / 6، التي تساوي 0 عندما x < −3، وتساوي 1 عندما x > 3، وتكون خطًا مستقيمًا بينهما.










