Phase 10: LLMs from Scratch

अंतर ध्यान (V2)

Softmax ध्यान प्रत्येक गैर-मिलान टोकन पर संभावना की एक छोटी राशि फैलाता है। 100k से अधिक टोकन जो शोर जोड़ता है और संकेत डूब जाता है। अंतर ट्रांसफार्मर (Ye et al., ICLR 2025) इसे दो सॉफ्टमैक्स के अंतर के रूप में ध्यान की गणना करके तय करता है, साझा शोर तल को घटाकर। DIFF V2 (Microsoft, जनवरी 2026) उत्पादन-स्टैक पुनर्लेखन हैः बेसलाइन ट्रांसफार्मर के लिए डिकोड विलंबता को मेल खाता है, कोई कस्टम कर्नेल नहीं, फ्लैशएटेंशन-संगत है। यह सबक V1 से V2 अंत-से-अंत है, एक काम खिलौना कार्यान्वयन के साथ अंतर ऑपरेशन आप stdlib पायथन में चलाने के लिए कर सकते हैं.

Type: Build

Languages: Python (stdlib)

Prerequisites: Phase 7 · 02 (self-attention), Phase 7 · 15 (attention variants), Phase 10 · 14 (architecture walkthrough)

Time: ~60 minutes

सीखने के लक्ष्य

  • स्पष्ट रूप से बताएं कि सॉफ्टमैक्स ध्यान में शोर का स्तर क्यों है और यह संदर्भ लंबाई के साथ क्यों बढ़ता है।
  • अंतर ध्यान सूत्र का व्युत्पन्न करें और बताएं कि घटाने से सिग्नल को संरक्षित करते हुए साझा शोर घटक क्यों रद्द होता है।
  • V1 से V2 अंतर पर चलेंः क्या तेजी से, क्या सरल हो गया, क्या अधिक स्थिर हो गया, और उत्पादन पूर्व प्रशिक्षण के लिए प्रत्येक परिवर्तन क्यों आवश्यक था।
  • शुद्ध पायथन में खरोंच से अंतर ध्यान लागू करें और सिंथेटिक सिग्नल-प्लस-शोर क्वेरी पर शोर-बदलाव गुण का अनुभवजन्य रूप से सत्यापित करें।

समस्या

मानक सॉफ्टमैक्स ध्यान में एक गणितीय गुण है जो पैमाने पर एक परिचालन सिरदर्द में बदल जाता है।q, ध्यान वजन हैं softmax(qK^T / sqrt(d)). सॉफ्टमैक्स कभी भी सटीक शून्य नहीं उत्पन्न कर सकता है प्रत्येक गैर-मिलान टोकन को कुछ सकारात्मक द्रव्यमान मिलता है। यह अवशिष्ट द्रव्यमान शोर है, और यह संदर्भ लंबाई के साथ पैमाने पर होता है। 128k टोकन पर, भले ही प्रत्येक गैर-मिलान टोकन को केवल 0.001% की संभावना मिलती है, उनमें से 127,999 संयुक्त रूप से कुल का लगभग 12% योगदान देते हैं। मॉडल को शोर तल के चारों ओर मार्ग करना सीखना होगा जो संदर्भ के साथ बढ़ता है।

अनुभवजन्य रूप से यह ध्यान के सिर में हस्तक्षेप के रूप में प्रकट होता हैः लंबे संदर्भ RAG में भ्रामक उद्धरण, 100k टोकन निकालने के कार्यों पर मध्य में खोने वाली विफलता, और 32k से अधिक समय के लिए सुई-इन-हेयस्टैक बेंचमार्क पर सूक्ष्म सटीकता में गिरावट। अंतर ट्रांसफार्मर पेपर (arXiv:2410.05258, ICLR 2025) ने अंतर को मापाः डीआईएफएफ ट्रांसफार्मर कम उलझन, उच्च दीर्घ-संदर्भ सटीकता और समान आकार की मूल रेखाओं की तुलना में कम भ्रमों को प्रभावित करते हैं।

डीआईएफएफ वी 1 में तीन समस्याएं थीं, जिससे इसे सीमा पूर्व प्रशिक्षण पाइपलाइनों से बाहर रखा गया। इसके मूल्य कैश को प्रति डिकोड चरण में दो बार लोड किया जाना था, इसके लिए कस्टम CUDA कर्नेल की आवश्यकता थी जो फ्लैशएटेंशन संगतता को तोड़ती थी, और इसके प्रति हेड RMSNorm ने 70B- प्लस स्केल पर लंबी अवधि के प्रशिक्षण को अस्थिर कर दिया था। DIFF V2 (Microsoft unilm ब्लॉग, 20 जनवरी 2026) ने तीनों को ठीक किया। यह पाठ दोनों संस्करणों को चलाता है, अंतर ऑपरेटर का निर्माण करता है, और खिलौना क्वेरी पर शोर रद्द करने का बेंचमार्क करता है।

अवधारणा

softmax की शोर तल

एक प्रश्न के लिए qऔर कुंजी K = [k_1, ..., k_N], ध्यान वजन निम्नानुसार है:

w_i = exp(q . k_i / sqrt(d)) / sum_j exp(q . k_j / sqrt(d))

नहींw_iकभी शून्य है.k_iq, स्कोर q . k_i0 नहीं है यह शून्य के आसपास भिन्नता के साथ उतार-चढ़ाव करता है ||q||^2 / d. softmax सामान्यीकरण के बाद, प्रत्येक संबंधित नहीं टोकन अभी भी योगदान O(1/N)अनलिंक्ड टोकन का कुल योगदान O((N-1)/N) = O(1) छोटी मात्रा नहीं।

मॉडल एक हार्ड टॉप-के की तरह कुछ चाहता हैः मिलान टोकन पर उच्च वजन, लगभग शून्य वजन कहीं और। सॉफ्टमैक्स सीधे ऐसा करने के लिए बहुत चिकनी है।

अंतर विचार

प्रत्येक सिर के Q और K प्रक्षेपणों को दो में विभाजित करेंः Q = (Q_1, Q_2) और K = (K_1, K_2) । दो ध्यान मानचित्रों की गणना करेंः

A_1 = softmax(Q_1 K_1^T / sqrt(d))
A_2 = softmax(Q_2 K_2^T / sqrt(d))

आउटपुटः

DiffAttn = (A_1 - lambda * A_2) V

घटाव दोनों मानचित्रों के बीच जो भी शोर वितरण होता है उसे रद्द करता है। यदि दोनों मानचित्रों में 127k से संबंधित नहीं टोकन पर लगभग समान वजन होता है (जो वे यादृच्छिक आरंभिकरण पर करेंगे), तो वे रद्द कर देते हैं। कुछ वास्तव में प्रासंगिक टोकन पर संकेत पीक वजन केवल तभी रद्द होता है जब यह दोनों मानचित्रों में समान परिमाण पर दिखाई देता है, जो यह एक बार मॉडल ट्रेन नहीं करेगा।

lambdaप्रति व्यक्ति एक सीखने योग्य स्केलर है, जिसे पैरामीटर के रूप में lambda = exp(lambda_q1 dot lambda_k1) - exp(lambda_q2 dot lambda_k2) + lambda_init. यह नकारात्मक हो सकता है.lambda_init0.8 जैसे छोटे सकारात्मक संख्या के लिए डिफ़ॉल्ट।

क्यों यह मैच सिर शोर रद्द करने

एक ही आवाज को रिकॉर्ड करने वाले दो शोरबाज़ माइक्रोफ़ोनों के बारे में सोचें। दोनों स्पीकर को उठाते हैं और संबंधित पृष्ठभूमि शोर करते हैं। एक को दूसरे से घटाएं और साझा शोर बाहर गिर जाता है। आवाज जीवित रहती है क्योंकि दो संकेत पूर्ण रद्द होने से रोकने के लिए पर्याप्त रूप से चरण या परिमाण में भिन्न होते हैं। प्रति सिर।lambdaयह संतुलन सीखता है।

V1 बनाम V2: अंतर

V1 ने पैरामीटर की गिनती को बेसलाइन ट्रांसफार्मर के बराबर रखा। प्रति सिर दो क्वेरी प्राप्त करने के लिए यह सिर आयाम को आधा कर दिया। यह लागत सिर अभिव्यक्ति और अधिक दर्दनाक प्रति सिर मूल्य कैश को आधा कर दिया। डेकोड को प्रति चरण मूल्य कैश को दो बार लोड करना पड़ा (एक बार प्रति सॉफ्टमैक्स शाखा) । परिणामः पैरामीटर की गिनती के बावजूद मूल रेखा से धीमा डेकोड करना।

V2 क्वेरी हेड की संख्या को दोगुना करता है और KV हेड को समान रखता है (ऊपर-प्रक्षेपण से मापदंडों को उधार लेना) । सिर आयाम मूल रेखा के समान रहता है। घटाए जाने के बाद, अतिरिक्त आयाम को मूल रेखा ट्रांसफार्मर के O_W प्रोजेक्शन से मेल खाने के लिए वापस नीचे परोसा जाता है। तीन चीजें एक साथ होती हैंः

  1. डीकोडिंग गति बेसलाइन से मेल खाती है (केवी कैश एक बार लोड किया जाता है) ।
  2. FlashAttention अपरिवर्तित चलाता है (कोई कस्टम कर्नेल नहीं) ।
  3. डिकोड पर अंकगणितीय तीव्रता बढ़ जाती है (एचबीएम से लोड किए गए प्रति बाइट अधिक गणना) ।

V2 प्रति सिर RMSNorm को भी हटा देता है जिसका उपयोग V1 ने घटाव को स्थिर करने के लिए किया था। 70B-वर्ग के पूर्व-प्रशिक्षण पैमाने पर, RMSNorm ने देर से प्रशिक्षण को अस्थिर कर दिया। V2 इसे एक सरल आरंभिकरण योजना के साथ बदल देता है जो अतिरिक्त मॉड्यूल के बिना प्रशिक्षण को स्थिर रखता है।

जब तक इसे प्राप्त करने के लिए

WorkloadBenefit
Long-context RAG (64k+)Cleaner attention maps, fewer hallucinated citations
Needle-in-haystack benchmarksSubstantial accuracy lift past 32k
Multi-document QALess cross-document interference
Code completion at 8kMarginal, not worth the architecture change
Short chat (< 4k)Essentially indistinguishable from baseline

4k टोकन पर शोर तल पर्याप्त छोटा है कि मानक ध्यान ठीक है। 128k पर यह आपको चोट पहुंचा रहा है।

यह अन्य 2026 बटन के साथ कैसे ढेर

FeatureCompatible with DIFF V2?
GQAYes (V2 increases Q heads, not KV heads)
MLA (DeepSeek)Yes in principle, no published paper combining them
MoEYes (attention is independent of MLP block)
RoPEYes (unchanged)
YaRN / long-context scalingYes (exactly where DIFF helps most)
FlashAttentionYes in V2 (was no in V1)
Speculative decodingYes (attention change is invisible to the spec-decode loop)

इसे बनाओ

code/main.pyएक खिलौना क्वेरी के साथ ज्ञात संकेत-प्लस-शोर संरचना आप सीधे शोर-बदला अनुपात मापने की अनुमति देता है।

चरण 1: मानक सॉफ्टमैक्स ध्यान

Stdlib मैट्रिक्स ऑपरेशनः सूचियों की सूची, मैनुअल मैटमुल, सॉफ्टमैक्स अधिकतम के संख्यात्मक-स्थिरता घटाने के साथ।

pythondef softmax(row):
    m = max(row)
    exps = [math.exp(x - m) for x in row]
    s = sum(exps)
    return [e / s for e in exps]

चरण 2: Q, K को दो भागों में विभाजित करें

V1 शैलीः सिर के आयाम को आधा करें। V2 शैलीः सिर के आयाम को बनाए रखें और सिरों की संख्या दोगुनी करें। खिलौना कार्यान्वयन शैक्षणिक स्पष्टता के लिए V1 का उपयोग करता है गणित समान है, केवल लेखांकन अलग है।

चरण 3: दो सॉफ्टमैक्स शाखा + घटाव

pythonA1 = [softmax([dot(q1, k) / scale for k in K1]) for q1 in Q1]
A2 = [softmax([dot(q2, k) / scale for k in K2]) for q2 in Q2]
diff_weights = [[a1 - lam * a2 for a1, a2 in zip(r1, r2)] for r1, r2 in zip(A1, A2)]
out = [[sum(w * v[j] for w, v in zip(row, V)) for j in range(d_v)] for row in diff_weights]

नोटः आउटपुट वजन नकारात्मक हो सकता है। यह ठीक है मान कैश अभी भी हस्ताक्षरित योगदान को संभालता है। बाद में V प्रोजेक्शन संकेत को अवशोषित करता है।

चरण 4: शोर रद्द करने का माप

लंबाई 1024 के लिए एक सिंथेटिक अनुक्रम का निर्माण। सिग्नल टोकन को एक ज्ञात स्थिति में रखें, बाकी को शोर से भरें। सिग्नल स्थिति पर (a) मानक सॉफ्टमैक्स ध्यान भार और (b) अंतर ध्यान भार की गणना करें। प्रत्येक में संकेत-शोर के अनुपात को मापें। डीआईएफएफ ध्यान विश्वसनीय रूप से दो शाखाओं को अलग करने के लिए प्रशिक्षित किए गए हैं, इसके आधार पर 3x-10x के गुणक से संकेत-शाम अनुपात अधिक बनाता है।

चरण 5: V1 बनाम V2 पैरामीटर लेखांकन

एक कॉन्फिग (छिपे हुए = 4096, हेड्स = 32, d_head = 128) को देखते हुए, प्रिंट करेंः

  • बेसलाइन ट्रांसफार्मर: Q, K, V प्रत्येक आकार hidden hidden, 4 पर MLP छिपा हुआ.
  • DIFF V1: Q, K प्रत्येक आकार hidden hidden, V आकार hidden hidden(अपरिवर्तित), सिर कम आधे से आंतरिक रूप से। प्रति सिर जोड़ता हैlambdaपैरामीटर (O(heads * d_head)).
  • डीआईएफएफ वी 2: क्यू आकार 2 hidden hidden, K आकार hidden hidden, V आकार hidden hidden. अतिरिक्त मंद O_W से पहले वापस नीचे प्रक्षेपित .lambdaपैरामीटर।

खिलौना V2 के लिए अतिरिक्त पैरामीटर लागत को मापता है (करीब hidden * hiddenप्रति ध्यान ब्लॉक) और इसे प्रिंट करता है।

इसका प्रयोग करें

DIFF V2 अभी तक अप्रैल 2026 तक हर उत्पादन अनुमान सर्वर में शिपिंग नहीं कर रहा है, लेकिन vLLM और SGLang में एकीकरण चल रहा है। इस बीच पैटर्न में दिखाई देता हैः

  • माइक्रोसॉफ्ट के आंतरिक दीर्घ संदर्भ उत्पादन मॉडल।
  • 256k से अधिक संदर्भ को लक्षित करने वाले कई खुले मॉडल प्रशिक्षण में शोध प्रतिकृति।
  • हाइब्रिड वास्तुकला जो DIFF ध्यान को वैकल्पिक परतों पर स्लाइडिंग विंडो ध्यान के साथ जोड़ती है।

जब आप 2026 में इस के लिए पहुंचेंगेः

  • 64k से अधिक प्रभावी संदर्भ को लक्षित करते हुए नए मॉडल को खरोंच से प्रशिक्षित करना। शुरुआत से ही अंतर ध्यान दें; बाद में पुनर्व्यवस्था महंगा है।
  • एक लंबे संदर्भ मॉडल जहां मध्य में खोने विफलताओं अपने मूल्यांकन पर हावी है ठीक-ट्यूनिंग। Q पर एक LoRA अनुमानों DIFF संरचना के करीब हो सकता है।

जब आप नहीं करेंगेः

  • आप एक पूर्व-प्रशिक्षित घने मॉडल की सेवा कर रहे हैं जिसमें स्थिर दीर्घ-संदर्भ प्रदर्शन है। पुनर्व्यवस्थाई लागत शायद ही कभी मौजूदा वजन पर वापस आती है।
  • आपका संदर्भ हमेशा 16K से नीचे है। शोर तल नगण्य है।

इसे भेजें

यह सबक हमें फल देता हैoutputs/skill-diff-attention-integrator.md. एक मॉडल वास्तुकला, लक्षित संदर्भ लंबाई, प्रवृत्ति प्रोफ़ाइल और प्रशिक्षण बजट को देखते हुए, यह एक नए पूर्व-प्रशिक्षण रन या लोरा फाइन-ट्यूनिंग में अंतर ध्यान जोड़ने के लिए एक समावेशन योजना तैयार करता है।

व्यायाम

  1. दौड़ेंcode/main.py. सिग्नल-टू-शाम अनुपात की जांच करें कि अंतर ध्यान के लिए रिपोर्ट की गई है, सिंथेटिक क्वेरी पर मानक सॉफ्टमैक्स ध्यान से अधिक है। शोर की amplitude को भिन्न करें और क्रॉसओवर बिंदु दिखाएं जहां मानक ध्यान उपयोग करने योग्य नहीं हो जाता है।
  1. 7B-वर्ग के मॉडल (hidden=4096, heads=32, d_head=128, 32 layers) के लिए मूल रेखा से DIFF V1 और मूल रेखा से DIFF V2 तक पैरामीटर-कंटेंट डेल्टा की गणना करें। दिखाएं कि किन घटकों ने पैरामीटर प्राप्त किए और कौन सा समान रहा।
  1. डीआईएफएफ वी 1 पेपर (आरएक्सआईवी:2410.05258) की धारा 3 और डीआईएफएफ वी 2 हॉगिंग फेस ब्लॉग की धारा 2 को पढ़ें। दो वाक्य में समझाएं कि प्रति सिर आरएमएसएनआरएम 1 क्यों आवश्यक था और क्यों वी 2 इसे प्रशिक्षण विचलन के बिना हटा सकता था।
  1. एक अपवर्तन लागू करेंः गणना अंतर ध्यान के साथ lambda = 0(शुद्ध पहले सॉफ्टमैक्स) और lambda = 1(पूर्ण घटाव) सिंथेटिक क्वेरी पर, मापें कि कैसे संकेत-गूंज के माध्यम से स्वीप में परिवर्तन होता है। पहचानें lambdaजो संकेत-गूंज को अधिकतम करता है।
  1. खेलौना को GQA + DIFF V2 तक बढ़ाएं। 8 KV हेड और 32 Q हेड चुनें। दिखाएं कि KV कैश आकार एक ही (8, 32) कॉन्फ़िगरेशन के साथ एक मूल GQA मॉडल से मेल खाता है।

प्रमुख शर्तें

TermWhat people sayWhat it actually means
Differential attention"Two softmaxes minus each other"Split Q, K into two halves, compute two softmax maps, subtract the second (scaled by lambda) from the first, then multiply by V
Noise floor"The non-zero tail of softmax"The O(1/N) weight softmax puts on every unrelated token, which sums to O(1) across long contexts
lambda"The subtraction scale"Per-head learnable scalar parameterized as exp(lq1.lk1) - exp(lq2.lk2) + lambda_init; can be negative
DIFF V1"The ICLR 2025 version"Original Differential Transformer; halves head dim to preserve parameter count, needs custom kernel, slower decode
DIFF V2"The January 2026 fix"Doubles Q heads keeping KV heads; matches baseline decode speed and works with FlashAttention
Per-head RMSNorm"The V1 stabilizer"Extra norm V1 applied after the difference; V2 removed it to prevent late-training instability
Signal-to-noise ratio"How much attention is wasted"Ratio of weight on the true signal position to average weight on unrelated positions
Lost in the middle"Long-context failure mode"Empirical phenomenon where retrieval accuracy dips for documents in the middle of a long context — DIFF attention reduces this
Arithmetic intensity"FLOPs per byte loaded"Ratio V2 increased at decode by doubling queries per KV load; important for memory-bound decode

आगे पढ़ना

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.