GPT نمذجة لغة السببية
Type: Build
Languages: Python
Prerequisites: Phase 7 · 02 (Self-Attention), Phase 7 · 05 (Full Transformer), Phase 7 · 06 (BERT)
Time: ~75 minutes
المشكلة
نموذج اللغة يجيب على سؤال واحد: بالنظر إلى الأول t-1الوهم، ما هو توزيع الاحتمال على الوهمtتدريب على هذه الإشارة التنبؤ بالتوقيت التالي وتحصل على نموذج يمكن أن تولد نص تعسفي رمز واحد في كل مرة.
لتدريبها من نهاية إلى نهاية على تسلسل كامل بالتوازي، تحتاج إلى تنبؤ كل موقف يعتمد فقط على المواقع السابقة. وإلا فإن النموذج يخدع بشكل طفيف من خلال النظر إلى الإجابة.
القناع السببي يفعل هذا. إنه ماتريكس ثلاثية أعلى واحدة من-infقيم إضافية إلى نقاط الاهتمام قبل softmax. بعد softmax، تصبح تلك المواقع 0. كل موقف يمكن أن يلتحق فقط لنفسه والمواقع السابقة. ولأن تطبيقها مرة واحدة على التسلسل كله، تحصل على N متوازية التنبؤات التوقيت التالي في واحد تقدم.
GPT-1 (2018) ، GPT-2 (2019), GPT-3 (2020), GPT-4 (2023), GPT-5 (2025), كلود، لاما، قوان، ميسرال، ديب سيك، كيمي جميعها محولات سببية لمعرفة الكمبيوتر فقط مع نفس الحلقة الأساسية. ما يفصل بينها هو جودة البيانات والتنقية في النطاق والهندسة المعمارية، وبعد التدريب (SFT، RLHF، DPO، وخلفائهم).
المفهوم
!Causal mask creates a triangular attention matrix
القناع
نظراً لسلسلة من الطولN، بناءN × Nالمصفوفة:
M[i, j] = 0 if j <= i
M[i, j] = -inf if j > iإضافةMإلى درجات الاهتمام الخام قبل softmax. exp(-inf) = 0كل صف من المصفوفة الاهتمام هي توزيع الاحتمالات على المواقع السابقة فقط.
تكلفة التنفيذ: واحد torch.tril()وقت الحساب: نانو ثانية تأثير على الميدان: كل شيء
من أين تأتي المثلث
عادة ما يتم عرض القناع كشلاء مقبض على الاهتمام. قم بتشغيل الاستنتج في الاتجاه الآخر ويتوقف عن أن يكون غامضًا: الاهتمام هو التطور الثالث للمستقبل المتوسط ، والثلاثي هو حدود الحلقة من ذلك المتوسط ، مكتوبة كمصفوفة.
Stage 1 — prefix average.أهم خلاصة سببية من التسلسل: الموقفiيصبح متوسط المواقف0…iكحلقة، هذا هوout[i] = X[:i+1].mean(0)نفس الحساب هو مضاعفة المصفوفة واحدة. خذ المصفوفة الثلاثية السفلية من الأعداد، وقسم كل سطر بحسب عددها، مضاعفة:
pythonimport numpy as np
A = np.tril(np.ones((n, n)))
A = A / A.sum(axis=1, keepdims=True)
out = A @ Xالصف iمنAهو[1/(i+1), …, 1/(i+1), 0, …, 0]الصفر فوق المقاطع هي السببية لم يتم إخفاء أي شيء عن المستقبل، لم يكن المستقبل في المجموع.
Stage 2 — learned weights.متوسط متساوي يعامل كل رمز سابق على قدم المساواة. استبدل تلك مع ماتريكس النتيجة المتعلمةS. الآن الصفوف لم تعد تعد مجموعة إلى واحد من خلال البناء ، لذلك قم بتطبيع كل سطر مع softmax بدلاً من تقسيمها بالعد. softmax لا ينتج أبداً صفرًا دقيقًا ، مما يكسر الصلة العاملة ما لم تذهب النتائج المستقبلية إلى -inf، لأنexp(-inf) = 0:
pythondef softmax(x, axis):
e = np.exp(x - np.max(x, axis=axis, keepdims=True))
return e / e.sum(axis=axis, keepdims=True)
S = S + np.triu(np.full((n, n), -np.inf), k=1)
A = softmax(S, axis=1)
out = A @ Xنفس المثلث، نفس المصفوفة الصفوية، نفس المثالي.-infماسك ليس آلة جديدة. إنه إدخال صفر للمرحلة الأولى، مترجم إلى مجال المدخلات لـ softmax.
Stage 3 — content-dependent weights.في المرحلة الثانيةSيتم تحديد النقاط بعد التدريب: وضع 7 دائما يزن وضع 3 نفسه، مهما قال الرموز. دع النقاط تعتمد على الرموز نفسها: S = Q @ K.T / sqrt(d_k)لا شيء آخر يتغير قناع، ومدينة، ومتمول متطابق
ثلاث مراحل، واحدة غير متغيرة: صف أسفل مثلث المصفوفة المثبتة ضرب التسلسل. المتوسط الموحد، الوزن ثابتة تعلمت، الوزن يعتمد على المحتوى. القناع لم يضاف أبدا إلى الاهتمام.
التدريب المتوازي، الإستنتاج المتسلسل
التدريب: إعادة التدريب(N, d_model)التسلسل مرة واحدة، حساب N خسائر الانتروبيا المتقاطعة (واحد لكل موقف) ، المجموع، backprop. متوازية على طول التسلسل. هذا هو السبب في أن مقياس تدريب GPT يمكنك معالجة 1M رموز في مجموعة في مرسل واحد GPU.
الإستنتاج: أنت تولد رمز بثمن.[t1, t2, t3]، الحصول علىt4.[t1, t2, t3, t4]، الحصول علىt5.[t1, t2, t3, t4, t5]، الحصول علىt6. الـ KV cache (الدرس 12) يحفظ الحالات الخفية منt1…tnلذا لا تقوم بإعادة حسابها في كل خطوة. ولكن العمق التسلسلي عند الاستنتاج = طول الخروج. هذا هو الضريبة السريعة و لماذا فك التشفير هو عقد الزجاجة التأخير في كل LLM.
الخسارة التحول واحد
أوراق إشارة[t1, t2, t3, t4]:
- المدخل:
[t1, t2, t3] - الأهداف:
[t2, t3, t4]
لكل منصبi، الحساب-log P(target_i | inputs[:i+1])هذا هو التقاطع للترتيب بأكمله
كل محول لعبة (إل إن إم) سمعت عنهم في هذه الخسارة التدريب المسبق، التنسيق الدقيق،
استراتيجيات فك الكشف
بعد التدريب، اختيار العينات مهم أكثر مما يعتقد الناس.
| Method | What it does | When to use |
|---|---|---|
| Greedy | Argmax every step | Deterministic tasks, code completion |
| Temperature | Divide logits by T, sample | Creative tasks, higher T = more diversity |
| Top-k | Sample from top-k tokens only | Kills low-probability tails |
| Top-p (nucleus) | Sample from smallest set with cumulative prob ≥ p | 2020+ default; adapts to distribution shape |
| Min-p | Keep tokens with p > min_p * max_p | 2024+; better at rejecting long tails than top-p |
| Speculative decoding | Draft model proposes N tokens, big model verifies | 2–3× latency reduction at same quality |
في عام 2026، من-p + درجة حرارة 0.7 هي افتراض معقول لنماذج الوزن المفتوحة.
ما الذي جعل "وصفة GPT" تعمل
- Decoder-only.لا يوجد مبرمجة فوق الصفحة، واحد من الانتباه + FFN لكل طبقة
- Scaling.124M → 1.5B → 175B → تريليونات. قوانين تشينشيللا للتوسع (الدرس 13) تخبرك كيفية إنفاق الحوسبة.
- In-context learning.ظهر حوالي 6B13B. يمكن أن يتبع النموذج أمثلة قليلة دون ضبط دقيقة.
- RLHF.بعد التدريب على تفضيلات الإنسان حول النص الخام المسبق للتدريب إلى مساعدي الدردشة.
- Pre-norm + RoPE + SwiGLU.تدريب مستقر على نطاق واسع
بنية الأساس لم تتغير كثيرا منذ GPT-2 كل شيء مثير للاهتمام حدث في البيانات، والتنمية، وبعد التدريب.
بناءها
الخطوة الأولى: قناع السبب
انظرcode/main.py- خط واحد:
pythondef causal_mask(n):
return [[0.0 if j <= i else float("-inf") for j in range(n)] for i in range(n)]أضفها إلى درجات الاهتمام قبل "سوف ماكس" هذه هي الآلية بأكملها
الخطوة الثانية: نموذج GPT ذو 2 طبقات
قم بتجميع بلوكين للكشف (توهم الذاتي المخفي + FFN ، لا توجد اهتمام متقاطع). أضف إضافة رمزية ، وتشفير موضعي ، وقطع (مرتبطة بمصفوفة إضافة رمزية خدعة قياسية منذ GPT-2).
الخطوة الثالثة: التنبؤ بالرمز التالي، من نهاية إلى نهاية
على لغة لعبة 20 رمز، قم بتحليل كل موقف. احسب خسارة الانتروبيا المتقاطعة ضد الهدف التحول واحد. لا تراجيع هذا هو فحص الصحة العقلية إلى الأمام.
الخطوة الرابعة: أخذ العينات
قم بتنفيذ طموح، درجة الحرارة، أعلى-ك، أعلى-ب، min-ب. قم بتشغيل كل واحد على طلب ثابت ومقارنة الخروج. وظيفة أخذ العينات هي 10 خطوط.
استخدمها
(بيتورش) ، 2026
pythonfrom transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-3B-Instruct")
tok = AutoTokenizer.from_pretrained("meta-llama/Llama-3.2-3B-Instruct")
prompt = "Attention is all you need because"
inputs = tok(prompt, return_tensors="pt")
out = model.generate(
**inputs,
max_new_tokens=64,
temperature=0.7,
top_p=0.9,
do_sample=True,
)
print(tok.decode(out[0]))تحت القبوgenerate()يقوم بتشغيل المخطط الأمامي ، ويسحب علامات الموقف النهائي ، ويأخذ عينات من الرمز التالي ، ويضيفها ، ويكرر. كل كومة استنتاج LLM الإنتاجية (vLLM ، TensorRT-LLM ، llama.cpp ، Ollama ، MLX) تنفذ نفس الحلقة مع تحسين ثقيل prefill المكونة ، الإعداد المستمر ، KV cache paging ، فك التخمين المضاربة.
GPT vs BERT, one line each:توقعات GPT P(x_t | x_{<t}). برت يتوقعP(x_masked | x_unmasked)الخسارة تحدد ما إذا كان النموذج يمكن أن تولد.
أرسله
انظرoutputs/skill-sampling-tuner.md. تحصل المهارة على معايير أخذ العينات لمهمة جيل جديد وتعلم عندما يكون هناك حاجة إلى فك التشخيص المحدد.
التمارين
- Easy.أركض
code/main.pyوالتحقق من أن ماتريكس الاهتمام السببية هي مثلثية أدناه بعد softmax. التحقق من البقع: يجب أن يكون للصف 3 وزنه فقط في الأعمدة 03. - Medium.قم بتنفيذ بحث الشعاع عن الاحجام 4. مقارنة معقدة الشعاع 4 مقابل الفطري على 10 طلبات قصيرة. هل الشعاع دائما يفوز؟ (تلميح: عادةً للتحويل ، وليس للردشة المفتوحة).
- Hard.تنفيذ فك التشفير المضاربة: استخدم نموذج صغير من 2 طبقات كمسودة ونموذج من 6 طبقات كمتحقق. قياس السرعة في ساعة الجدار على 100 اكتمال من الطول 64.
الشروط الرئيسية
| Term | What people say | What it actually means |
|---|---|---|
| Causal mask | "The triangle" | Upper-triangular -inf matrix added to attention scores so position i only sees positions ≤ i. |
| Next-token prediction | "The loss" | Cross-entropy of the model's distribution against the true next token at every position. |
| Autoregressive | "Generate one at a time" | Feed output back as input; parallelism only during training, not during generation. |
| Logits | "Pre-softmax scores" | Raw output of the LM head before softmax; sampling happens on these. |
| Temperature | "Creativity knob" | Divide logits by T; T→0 = greedy, T→∞ = uniform. |
| Top-p | "Nucleus sampling" | Truncate distribution to smallest set summing to ≥p; sample from what remains. |
| Min-p | "Better than top-p" | Keep tokens where p ≥ min_p × max_p; adapts cutoff to sharpness of distribution. |
| Speculative decoding | "Draft + verify" | Cheap model proposes N tokens; big model verifies in parallel. |
| Teacher forcing | "Training trick" | During training, feed the true previous token, not the model's prediction. Standard for every seq2seq LM. |
المزيد من القراءة
- Radford et al. (2018). Improving Language Understanding by Generative Pre-Training GPT-1.
- Radford et al. (2019). Language Models are Unsupervised Multitask Learners GPT-2
- Brown et al. (2020). Language Models are Few-Shot Learners GPT-3 والتعلم في السياق
- Leviathan, Kalman, Matias (2023). Fast Inference from Transformers via Speculative Decodingورقة تشخيص المواصفات
- HuggingFace
modeling_llama.pyرمز مرجعية القائمة على السبب-LM.
This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.
Browse the complete course catalog or open this lesson on GitHub.