ML Learning Hub
التعلم العميقمتقدم

المحولات والاهتمام الذاتي

كل كلمة تتحدث مباشرة إلى كل كلمة أخرى — الاهتمام بالجملة بأكملها دفعةً واحدة

غوص عميق في آليات الانتباه: الضرب النقطي المُحجَّم والانتباه متعدد الرؤوس والترميز الموضعي وBERT encoder مقابل GPT decoder.

90 min
9 مخططات
7 المفاهيم المغطاة

المتطلبات الأساسية

RNN / LSTM
NLP Text Classification

المفاهيم المغطاة

Scaled Dot-ProductMulti-head AttentionPositional EncodingFFNBERTGPTTop-p Sampling

الصيغ الرئيسية

الضرب النقطي المقيَّس

الانتباه الأساسي: مدى ارتباط كل استعلام بكل مفتاح — القياس بـ√d_k للاستقرار

متعدد الرؤوس

H دوال انتباه متوازية مدمجة ومُسقَطة — كل رأس يلتقط جانباً مختلفاً من العلاقات

الترميز الموضعي

يُضخِّ معلومات موضع الرمز (بلا تكرار) — أنماط sin/cos بترددات مختلفة

الطبقة الفرعية FFN

التغذية الأمامية الموضعية بعد كل كتلة انتباه — تُسقِط لبُعد أكبر ثم تُقلِّص

محاكاة تفاعلية

Loading visualization…

هندسة النموذج

Loading visualization…
Loading visualization…
🎯

المشكلة في الشبكات التكررية التي حلّها المحوّل

motivation

تعالج RNNs التسلسلات رمزاً بعد رمز — لفهم العلاقة بين الكلمة 1 والكلمة 500، يجب أن تتدفق المعلومات عبر 499 حالة وسيطة. تحل المحولات هذا بالسماح لأي موضع بالانتباه مباشرةً لأي موضع آخر في خطوة واحدة. هذا المسار المباشر مع الحساب المتوازي هو سبب استبدال RNNs بالمحولات في كل شيء تقريباً.

💡

الانتباه كاستعلام ناعم لقاعدة البيانات

intuition

فكر في الانتباه كمخزن قيمة-مفتاح قابل للتفاضل. لديك استعلام (ما تبحث عنه)، مفاتيح (واصفات كل ذاكرة)، وقيم (المحتوى الفعلي). يحسب الانتباه التشابه بين الاستعلام وجميع المفاتيح، يُطبّق softmax، ثم يُعيد مجموعاً موزوناً للقيم.

التحجيم بـ√d_k يمنع الضروب النقطية من الكبر (مما يجعل softmax حاداً جداً، مما يقتل تدفق التدرج عبر التوزيع).

الانتباه متعدد الرؤوس: لماذا رؤوس متعددة؟

math

رأس انتباه واحد يمكنه الانتباه وفق معيار واحد فقط (مثل التوافق النحوي). الرؤوس المتعددة تتعلم أنماط انتباه مختلفة في آنٍ واحد: الرأس 1 للنحو، الرأس 2 للدلالة، الرأس 3 للإحالة. كل رأس يُسقط Q وK وV إلى فضاء فرعي أقل بُعداً.

كل رأس يستخدم مصفوفات إسقاطه المتعلَّمة الخاصة
🔬

BERT مقابل GPT: المشفر مقابل المفكك

deepdive

BERT يستخدم انتباهاً ثنائي الاتجاه — كل رمز ينتبه لجميع الرموز الأخرى. مثالي للفهم (التصنيف، NER) لكن لا يستطيع توليد النص من اليسار لليمين. GPT يستخدم انتباهاً مقنعاً (سببياً) — كل رمز ينتبه للرموز السابقة فقط. يُتيح التوليد الذاتي التراجعي.

القناع السببي (يمنع الانتباه للرموز المستقبلية)
⚙️

كتلة مشفر المحوّل

algorithm
1

تضمينات الإدخال E = تضمين_رمز + ترميز_موضعي

2

الانتباه الذاتي متعدد الرؤوس: Q=EW_Q، K=EW_K، V=EW_V

3

Attention(Q,K,V) = softmax(QKᵀ/√d_k)V

4

إضافة وتطبيع: x₁ = NormLayer(E + Attention(E))

5

شبكة التغذية الأمامية: FFN(x₁) = ReLU(x₁W₁ + b₁)W₂ + b₂

6

إضافة وتطبيع: x₂ = NormLayer(x₁ + FFN(x₁))

7

تكرار لـL طبقة

</>

انتباه الضرب النقطي المعياري من الصفر

code
python39 lines
import torch
import torch.nn.functional as F
import math

def scaled_dot_product_attention(Q, K, V, mask=None):
    class="tok-str">"""
    Q, K, V: (batch, heads, seq_len, d_k)
    """
    d_k = Q.shape[-class="tok-num">1]
    class="tok-comment"># Attention scores
    scores = torch.matmul(Q, K.transpose(-class="tok-num">2, -class="tok-num">1)) / math.sqrt(d_k)
    class="tok-comment"># Causal mask (GPT-style)
    if mask is not None:
        scores = scores.masked_fill(mask == class="tok-num">0, float(class="tok-str">'-inf'))
    class="tok-comment"># Softmax over key dimension
    attn_weights = F.softmax(scores, dim=-class="tok-num">1)
    class="tok-comment"># Weighted sum of values
    return torch.matmul(attn_weights, V), attn_weights

class MultiHeadAttention(torch.nn.Module):
    def __init__(self, d_model, n_heads):
        super().__init__()
        self.d_k = d_model // n_heads
        self.n_heads = n_heads
        self.W_q = torch.nn.Linear(d_model, d_model)
        self.W_k = torch.nn.Linear(d_model, d_model)
        self.W_v = torch.nn.Linear(d_model, d_model)
        self.W_o = torch.nn.Linear(d_model, d_model)

    def forward(self, Q, K, V, mask=None):
        B, T, D = Q.shape
        class="tok-comment"># Project + split into heads
        Q = self.W_q(Q).view(B, T, self.n_heads, self.d_k).transpose(class="tok-num">1, class="tok-num">2)
        K = self.W_k(K).view(B, T, self.n_heads, self.d_k).transpose(class="tok-num">1, class="tok-num">2)
        V = self.W_v(V).view(B, T, self.n_heads, self.d_k).transpose(class="tok-num">1, class="tok-num">2)
        x, weights = scaled_dot_product_attention(Q, K, V, mask)
        class="tok-comment"># Concat heads + project
        x = x.transpose(class="tok-num">1, class="tok-num">2).contiguous().view(B, T, D)
        return self.W_o(x), weights

?اختبار المعرفة

يتم حفظ التقدم في متصفحك — لا حاجة لحساب.

تحتاج مهندس ذكاء اصطناعي أو عالم بيانات؟

أبني نماذج تعلم آلي مخصصة، ووكلاء ذكاء اصطناعي، ورؤية حاسوب، وأتمتة — من الفكرة إلى الإنتاج.