GELU (Gaussian Error Linear Unit)
تضرب وحدة GELU (الوحدة الخطية لخطأ غاوس) كل مُدخل في دالة التوزيع التراكمي للتوزيع الطبيعي، وهي دالة تنشيط سلسة تُستخدم في BERT وGPT-2 وTransformers للرؤية. تتضمن أمثلة برمجية.
وحدة الخطأ الخطي الغاوسي (GELU) هي دالة تنشيط تُعرّف بالصيغة GELU(x) = x · Φ(x)، حيث Φ هي دالة التوزيع التراكمي للتوزيع الطبيعي المعياري. وهي تزن كل مدخل بحسب احتمال أن يكون المتغير الطبيعي المعياري أقل منه، لذا تمرّ المدخلات الموجبة الكبيرة دون تغيير تقريبًا، وتقترب المدخلات السالبة الكبيرة من الصفر، بينما تُضرب المدخلات القريبة من الصفر في نحو النصف. قدّم دان هندريكس وكيفن غيمبل هذه الدالة في بحث عام 2016 بعنوان وحدات الخطأ الخطي الغاوسي (GELUs). وأصبحت GELU دالة التنشيط القياسية في نماذج Transformer مثل BERT وGPT-2 وGPT-3 ومحوّل الرؤية (ViT)، حيث تقع بين الطبقتين الخطيتين في كل كتلة تغذية أمامية.
آلية عمل GELU#
اشتق هندريكس وغيمبل GELU من التنظيم العشوائي. تخيّل ضرب كل مدخل x بقناع عشوائي يُبقيه باحتمال Φ(x) ويحوّله إلى صفر فيما عدا ذلك، مثل التسرب مع احتمال إبقاء يزداد بزيادة المدخل. GELU هي القيمة المتوقعة لهذه العملية، Φ(x) · x، لذا تضبط المدخلات بسلاسة وفق قيمها، بينما تضبطها ReLU فجأةً وفق إشاراتها.
للمنحنى الناتج ثلاث خصائص مهمة للتدريب:
- سلسة في كل موضع: تكون GELU ومشتقتها متصلتين، من دون زاوية عند الصفر، لذا تؤدي التغييرات الصغيرة في الأوزان إلى تغييرات صغيرة في المخرجات أثناء الانتشار العكسي.
- غير رتيبة: بالنسبة إلى المدخلات السالبة، تنخفض المخرجات أولًا ثم تعود للارتفاع نحو الصفر، وتبلغ حدًا أدنى يقارب −0.17 عند x ≈ −0.75.
- تدرج المدخلات السالبة: تظل الوحدات ذات المدخلات السالبة بدرجة متوسطة تتلقى تدرجًا، ولذلك تواصل التعلّم في المواضع التي تتوقف عندها وحدات ReLU.
نظرًا إلى أن Φ تتضمن دالة الخطأ، فهناك تقريبان شائعان. يبقى تقريب tanh، 0.5x(1 + tanh(√(2/π)(x + 0.044715x³)))، ضمن نحو 0.0005 من قيمة GELU الدقيقة، واستُخدم في GPT-2. أما تقريب السيغمويد، x · σ(1.702x)، فيبقى ضمن نحو 0.02، وهو QuickGELU المستخدم في CLIP من OpenAI. تحسب nn.GELU في PyTorch الصيغة الدقيقة افتراضيًا، وصيغة tanh باستخدام approximate="tanh":
import torch
from torch import nn
x = torch.tensor([-3.0, -1.0, -0.75, 0.0, 1.0, 3.0])
# Exact GELU: x * Phi(x), where Phi is the standard normal CDF
exact = nn.GELU()(x)
# Tanh approximation, as used in GPT-2
approx = nn.GELU(approximate="tanh")(x)
print(f"GELU exact: {[round(v, 4) for v in exact.tolist()]}")
print(f"GELU tanh: {[round(v, 4) for v in approx.tolist()]}")
print(f"ReLU: {nn.ReLU()(x).tolist()}")تطبع GELU الدقيقة [-0.004, -0.1587, -0.17, 0.0, 0.8413, 2.996]، وتطبع صيغة tanh [-0.0036, -0.1588, -0.17, 0.0, 0.8412, 2.9964]، بينما تطبع ReLU [0.0, 0.0, 0.0, 0.0, 1.0, 3.0]. وتُخرج GELU القيمة −0.17 عند حدها الأدنى قرب −0.75، وتحول 1 إلى 0.8413 لأن Φ(1) = 0.8413، وتقارب ReLU عند ±3. ولا يختلف تقريبا GELU إلا في المنزلة العشرية الرابعة.
مواضع استخدام GELU#
- نماذج GPT: استخدم أول نموذج GPT من OpenAI دالة GELU عام 2018، وحافظ عليها GPT-2 وGPT-3.
- BERT: اختارت BERT من Google دالة GELU بدلًا من ReLU اقتداءً بـ GPT، ولا تزال معظم المُرمِّزات على نمط BERT تستخدمها.
- محوّلات الرؤية: يستخدم ViT دالة GELU في شبكة MLP لكل كتلة مُرمِّز، وحذت كثير من أعمدة الرؤية الفقرية حذوه، ومنها ConvNeXt التي استبدلت ReLU بـ GELU عند تحديث ResNet.
- محوّلات الكشف: تستخدم وحدة مُرمِّز AIFI Transformer في RT-DETR، وهو محوّل الكشف الآني من Baidu، دالة GELU بين طبقتَي التغذية الأمامية في حزمة Ultralytics.
انتقلت كثير من النماذج اللغوية الكبيرة (LLMs) الحديثة من GELU العادية إلى طبقات تغذية أمامية ذات بوابات. تستخدم Gemma من Google دالة GEGLU، التي تضرب إسقاطًا منشّطًا بدالة GELU في إسقاط خطي ثانٍ، فيما تستخدم Llama وPaLM وQwen دالة SwiGLU القائمة على SiLU.
GELU ودوال التنشيط ذات الصلة#
- ReLU: تُعد max(0, x) أقل كلفة، وتُخرج أصفارًا تامة، ولها زاوية عند الصفر. وأفادت ورقة GELU بتحقيق مكاسب على ReLU وELU في كل مهام الرؤية الحاسوبية ومعالجة اللغة الطبيعية والكلام التي اختبرتها.
- SiLU (Swish): تكون x · σ(x) ذات الشكل العام نفسه، مع حد أدنى أعمق يقارب −0.28. وتُعد GELU الخيار المعتاد في Transformers، بينما تنتشر SiLU أكثر في كواشف الالتفاف.
- Leaky ReLU: تحافظ على ميل خطي ثابت للمدخلات السالبة، بينما يشكّل الجانب السالب من GELU منحنى يعود إلى الصفر.
- GEGLU: يضيف الإصدار ذو البوابة إسقاطًا متعلَّمًا ثانيًا. وفي مقارنة نوام شازير عام 2020 على T5، حققت طبقات التغذية الأمامية GEGLU قيمة لوغاريتم الحيرة 1.633 على بيانات محجوبة، مقابل 1.679 لـ GELU و1.677 لـ ReLU عند العدد نفسه من المعلمات.










