Attention maps और उनकी सीमाएं
Attention weights दिखाते हैं कि कोई head कहाँ देखता है। वे यह नहीं दिखाते कि वह वहाँ से क्या लेता है, या मॉडल इसके साथ क्या करता है।
60 सेकंड में
Attention maps और उनकी सीमाएं
Attention weights दिखाते हैं कि कोई head कहाँ देखता है। वे यह नहीं दिखाते कि वह वहाँ से क्या लेता है, या मॉडल इसके साथ क्या करता है।
query · key से स्कोर देता है, softmax की मदद से स्कोर्स को weights में बदलता है, और value वेक्टर्स का एक weighted sum आउटपुट करता है। एक attention map उन्हीं weights का एक heatmap होता है। इसे बनाना आसान है और देखने में अच्छा लगता है, इसलिए यह उन शुरुआती टूल्स में से एक बन गया जिनका इस्तेमाल लोग transformers को समझाने के लिए करते थे।Attention maps क्या दिखाते हैं
- इस इनपुट के लिए, कोई head किन पिछले tokens से पढ़ता है।
- कुछ heads में साफ़ पैटर्न्स: हमेशा पिछले token पर देखना, पहले token पर देखना, या पहले आए किसी मिलते-जुलते शब्द पर देखना।
- आगे कहाँ देखना है इसके लिए संकेत, उदाहरण के लिए एक ऐसा head जो किसी pronoun से किसी noun पर ध्यान देता है।
वे पूरी व्याख्या क्यों नहीं हैं
| सीमा | यह क्यों मायने रखता है |
|---|---|
| Weight योगदान नहीं होता | किसी token को ज़्यादा attention मिल सकता है लेकिन उसका value वेक्टर बहुत छोटा हो सकता है, इसलिए वह आउटपुट में लगभग कुछ भी नहीं जोड़ता। |
| कई heads, कई layers | एक map एक layer में सिर्फ़ एक head दिखाता है। अंतिम आउटपुट सभी heads, सभी layers और MLPs को मिलाता है। |
| Tokens पहले से ही मिले हुए होते हैं | Layer 1 के बाद, स्थिति 5 पर मौजूद वेक्टर में पिछले tokens की जानकारी भी शामिल होती है। "Token 5 पर ध्यान देता है" का असल मतलब "वहाँ कॉपी की गई किसी चीज़ को पढ़ता है" हो सकता है। |
| कारण का कोई टेस्ट नहीं | एक map सिर्फ़ एक अवलोकन है। यह नहीं दिखाता कि अगर head को हटा दिया जाए तो क्या होगा। |
| Sinks और पार्किंग स्पॉट्स | कई मॉडल्स में, heads पहले token या विराम चिह्नों पर बहुत ज़्यादा weight डालते हैं, अक्सर तब जब उनके पास करने के लिए कुछ काम का नहीं होता। |
Weight बनाम contribution, numpy में
import numpy as np
tokens = ["The", "farmer", "sold", "the", "mangoes"]
scores = np.array([3.0, 1.0, 0.5, 0.2, 1.5]) # query . key for each token
weights = np.exp(scores) / np.exp(scores).sum() # softmax
# Value vectors: what each token actually passes on.
values = np.array([
[0.05, 0.02, 0.01], # "The": big weight, tiny value
[1.2, -0.8, 0.9],
[0.3, 0.1, -0.2],
[0.04, 0.01, 0.02],
[1.5, 1.1, -0.7],
])
contrib = weights[:, None] * values # each token's share of the output
size = np.linalg.norm(contrib, axis=1)
for t, w, s in zip(tokens, weights, size):
print(f"{t:8s} attention={w:.2f} size of contribution={s:.2f}")
print("output vector:", np.round(contrib.sum(axis=0), 2))- "मॉडल ने जवाब इसलिए तय किया क्योंकि उसने इस शब्द को देखा था"
- सभी heads का औसत निकालकर एक map बनाना और उस पर भरोसा करना
- यूजर्स को स्पष्टीकरण के रूप में एक map दिखाना
- "यह head इस शब्द से उस स्थिति तक जानकारी ले जाता है"
- अकेले heads को देखना, और value के आकार के हिसाब से तौलना
- इसे एक सुराग मानना, फिर intervention के साथ टेस्ट करना
और देखें और पढ़ें
लैब
numpy पर आधारित एक छोटा सा नोट, जो दिखाता है कि attention map कब गुमराह करता है।
समस्या
इस पाठ के कोड ब्लॉक को अपने शुरुआती बिंदु के रूप में इस्तेमाल करें।
- इसे चलाएं और नोट करें कि किस token को सबसे ज़्यादा attention मिलता है और किसका योगदान सबसे ज़्यादा है।
- एक नया वर्ज़न बनाएं जहाँ attention map सबसे महत्वपूर्ण token की ओर ही इशारा करे। आपको क्या बदलना पड़ा?
- अब एक ऐसा वर्ज़न बनाएं जहाँ दो tokens का attention बराबर हो लेकिन योगदान बहुत अलग हो।
- पढ़ने का काम: किसी attention heatmap का कोई चित्र खोजें (किसी ब्लॉग, टेक्स्टबुक या arXiv पर किसी पेपर में)। तीन वाक्य लिखें: वह चित्र क्या दिखाता है, कोई इससे क्या गलत निष्कर्ष निकाल सकता है, और कौन सा टेस्ट इस दावे की जाँच करेगा।
आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1भले ही आप attention को value साइज़ के हिसाब से तौलें, फिर भी आप इस बारे में गलत क्यों हो सकते हैं कि अंतिम जवाब के लिए कौन सा इनपुट शब्द मायने रखता था?दिखाएं
क्योंकि head का आउटपुट residual stream में जोड़ी जाने वाली कई चीज़ों में से सिर्फ़ एक होता है, और बाद की layers इसे नज़रअंदाज़ कर सकती हैं, रद्द कर सकती हैं या बदल सकती हैं। MLP layers, जो मॉडल का ज़्यादातर ज्ञान रखती हैं, वे तो बिल्कुल दिखाई ही नहीं देतीं। और हर स्थिति पर वेक्टर पहले से ही पिछले tokens का मिश्रण होता है। केवल एक causal टेस्ट, जैसे कि head की patching या ablating करना, यह दिखाता है कि क्या वह जवाब के लिए मायने रखता है या नहीं।
Q2काफ़ी अलग attention maps वाले दो अलग-अलग heads का आउटपुट पर एक जैसा असर क्यों हो सकता है?दिखाएं
मॉडल्स में अक्सर दोहराव (redundancy) होता है: कई heads एक ही जानकारी को अलग-अलग रास्तों से पहुँचा सकते हैं, उदाहरण के लिए एक इसे सीधे किसी शब्द से पढ़ता है और दूसरा पास की किसी स्थिति पर रखी उसकी कॉपी को पढ़ता है। उनके maps अलग दिखते हैं लेकिन residual stream में उनके आउटपुट एक जैसे हो सकते हैं। यही वजह है कि एक head को हटाने से कभी-कभी बहुत कम बदलाव होता है: दूसरा head उसकी भरपाई कर देता है।
अक्सर पूछे जाने वाले सवाल
तो क्या attention maps बेकार हैं?
नहीं। ये सस्ते होते हैं और अक्सर दिलचस्प heads की ओर इशारा करते हैं। समस्या यह है कि इन्हें पूरी व्याख्या मान लिया जाता है। अंदाज़ा लगाने के लिए इनका इस्तेमाल करें, और उन अंदाज़ों की जाँच के लिए interventions का इस्तेमाल करें।
Heads पहले token पर इतना ज़्यादा ध्यान क्यों देते हैं?
Softmax weights का जोड़ 1 होना ज़रूरी है, इसलिए किसी head को अपना attention कहीं न कहीं लगाना ही पड़ता है, भले ही कुछ भी काम का न हो। रिसर्चर्स ने देखा है कि कई मॉडल्स पहले token, या कम जानकारी वाले दूसरे tokens का इस्तेमाल एक तरह की सुस्ताने की जगह (resting place) के रूप में करते हैं। वहाँ weight होने का मतलब आम तौर पर "कुछ करने को नहीं है" होता है, न कि "यह महत्वपूर्ण है"।
Attention rollout क्या है?
यह एक तरीका है जो layers के पार attention maps को जोड़ता है ताकि यह अनुमान लगाया जा सके कि हर इनपुट token आउटपुट की ओर कितना बहता है। यह एक layer को देखने से बेहतर है, लेकिन यह अभी भी value के आकार और MLP layers को नज़रअंदाज़ करता है, इसलिए इसे सिर्फ़ एक कच्ची तस्वीर समझें।
क्या मैं अंतिम यूजर्स को स्पष्टीकरण के रूप में attention maps दिखा सकता हूँ?
सावधान रहें। यूजर्स उन्हें "जवाब की वजह" समझ लेंगे, जबकि वे ऐसा नहीं हैं। अगर आप उन्हें दिखाते हैं, तो ईमानदारी से उन पर "मॉडल ने कहाँ देखा" का लेबल लगाएं, न कि "उसने यह फैसला क्यों लिया" का।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।