Probing: एक लेयर क्या जानती है?
यह देखने के लिए कि लेयर के एक्टिवेशन्स में क्या जानकारी मौजूद है, उस पर एक साधारण क्लासिफायर को ट्रेन करें। फिर समझें कि 'जानकारी का मौजूद होना' और 'मॉडल द्वारा उसका इस्तेमाल किया जाना' एक ही बात क्यों नहीं हैं।
60 सेकंड में
Probing: एक लेयर क्या जानती है?
यह देखने के लिए कि लेयर के एक्टिवेशन्स में क्या जानकारी मौजूद है, उस पर एक साधारण क्लासिफायर को ट्रेन करें। फिर समझें कि 'जानकारी का मौजूद होना' और 'मॉडल द्वारा उसका इस्तेमाल किया…
Probe को साधारण क्यों रखें
- 1
इकट्ठा करें (Collect)
मॉडल से लेबल्ड उदाहरण गुज़ारें और एक लेयर पर एक्टिवेशन्स सेव करें। - 2
अलग करें (Split)
एक टेस्ट सेट अलग रखें जिस पर probe कभी ट्रेन न हो। - 3
ट्रेन करें (Train)
ट्रेनिंग एक्टिवेशन्स पर लॉजिस्टिक रिग्रेशन को फिट करें। - 4
तुलना करें (Compare)
टेस्ट एक्यूरेसी की तुलना चांस (तुक्के) और एक कंट्रोल टास्क से करें। - 5
हर लेयर के लिए दोहराएँ (Repeat per layer)
यह देखने के लिए कि जानकारी कहाँ सामने आती है, लेयर के अनुसार एक्यूरेसी का ग्राफ बनाएँ।
Numpy में एक probe
import numpy as np
def train_probe(X, y, steps=500, lr=0.1):
w, b = np.zeros(X.shape[1]), 0.0
for _ in range(steps):
p = 1 / (1 + np.exp(-(X @ w + b))) # sigmoid
w -= lr * X.T @ (p - y) / len(y) # gradient of log-loss
b -= lr * np.mean(p - y)
return w, b
def accuracy(X, y, w, b):
return np.mean(((X @ w + b) > 0) == y)दो जाल: कंट्रोल टास्क और कोरिलेशन
- हो सकता है कि probe टास्क को खुद ही सीख ले। बहुत सारे डायमेंशन्स और कम उदाहरणों के साथ, ट्रेनिंग डेटा पर रैंडम लेबल्स भी फिट हो सकते हैं। हमेशा अलग रखे गए (held-out) डेटा पर टेस्ट करें, और एक कंट्रोल टास्क चलाएं, जैसे कि शफ़ल किए गए लेबल्स। एक अच्छा probe असली टास्क पर अच्छा प्रदर्शन करता है और कंट्रोल टास्क पर उसका रिजल्ट चांस के करीब होता है।
- डिकोड किया जा सकना, इस्तेमाल होने जैसा नहीं है। किसी लेयर में ऐसी जानकारी हो सकती है जिसका इस्तेमाल मॉडल अपने आउटपुट के लिए कभी नहीं करता। उदाहरण के लिए, एक probe किसी लेयर से वाक्य की लंबाई को पढ़ सकता है, भले ही मॉडल का जवाब लंबाई पर निर्भर न करता हो।
- "मॉडल खेल को समझता है"
- "लेयर 6 वह जगह है जहाँ मॉडल विषय तय करता है"
- केवल ट्रेनिंग एक्यूरेसी रिपोर्ट करना
- "विषय लेयर 6 के एक्टिवेशन्स से लीनियर रूप से डिकोड करने योग्य है"
- "इस दिशा को हटाने से आउटपुट बदल जाता है, इसलिए ऐसा लगता है कि मॉडल इसका इस्तेमाल करता है"
- टेस्ट एक्यूरेसी, एक कंट्रोल टास्क और एक बेसलाइन रिपोर्ट करना
और देखें और पढ़ें
लैब
सिंथेटिक एक्टिवेशन्स पर काम करने वाला एक numpy probe, एक कंट्रोल टास्क और इसके द्वारा सीखी गई दिशा की जाँच के साथ।
समस्या
अपने कंप्यूटर पर स्टार्टर कोड चलाएं (इसके लिए numpy की आवश्यकता है)। फिर:
- टेस्ट एक्यूरेसी, कंट्रोल एक्यूरेसी और probe तथा वास्तविक दिशा के बीच कोसाइन (cosine) को रिकॉर्ड करें।
- सिग्नल स्ट्रेंथ को
1.5से बदलकर0.3, और फिर0.0करें। तीनों नंबरों का क्या होता है? n = 100सेट करें (स्लाइस बदलकर 75/25 का अनुपात बनाए रखें) और ट्रेनिंग एक्यूरेसी की तुलना टेस्ट एक्यूरेसी से करें। इस अंतर को समझाएं।- दो वाक्य लिखें कि यह खिलौना प्रयोग (toy) आपको किसी असली मॉडल की प्रोबिंग के बारे में क्या बता सकता है और क्या नहीं।
प्रैक्टिस लैब
कोड में बदलाव करें और इसे रन करें। Python आपके ब्राउज़र में चलता है — हमारे सर्वर पर कुछ नहीं भेजा जाता।
कोई आउटपुट नहीं। वैल्यूज़ देखने के लिए print(...) जोड़ें।
आपका काम तब पूरा होगा जब
कठिन सवाल
उत्तर देखने से पहले ख़ुद जवाब देने की कोशिश करें। अगर आप इनके जवाब दे सकते हैं, तो आप पाठ समझ गए हैं।
Q1आपका probe किसी मॉडल में हाई एक्यूरेसी के साथ यह खोज लेता है कि "क्या यह टेक्स्ट टॉक्सिक है?"। एक साथी कहता है: "बहुत बढ़िया, मॉडल के अंदर एक टॉक्सिसिटी डिटेक्टर मौजूद है।" इस दावे में क्या ग़लती है?दिखाएं
Probe यह दिखाता है कि जानकारी डिकोड करने योग्य है, यह नहीं कि मॉडल के पास कोई समर्पित डिटेक्टर है या वह इसका इस्तेमाल करता है। टॉक्सिक टेक्स्ट का संबंध दूसरी चीज़ों से भी हो सकता है, जैसे कि कुछ ख़ास शब्द या विषय, जिन्हें probe इसके बजाय पकड़ सकता है। ऐसा बड़ा दावा करने के लिए, आपको इंटरवेंशन करने होंगे: उस दिशा को हटाकर देखें कि क्या टॉक्सिसिटी से जुड़ा व्यवहार बदलता है, और ऐसे उदाहरणों पर टेस्ट करें जहाँ एक-दूसरे से जुड़े इन फीचर्स को अलग-अलग किया गया हो।
Q2कोई प्रॉपर्टी लगभग हर लेयर से डिकोड करने योग्य क्यों हो सकती है, और यह कहाँ 'कंप्यूट' होती है, इसके लिए इसका क्या मतलब है?दिखाएं
रेजिडुअल स्ट्रीम जानकारी को आगे ले जाती है, इसलिए एक बार जब किसी शुरुआती लेयर में कोई प्रॉपर्टी लिख दी जाती है, तो वह बाद की लेयर्स में भी पढ़ने योग्य रह सकती है। कुछ प्रॉपर्टीज़ को किसी भी लेयर पर इनपुट से दोबारा कंप्यूट करना भी आसान होता है। इसलिए लेयर्स में डिकोड होने की क्षमता यह बहुत कम बताती है कि कंप्यूटेशन वास्तव में कहाँ होता है। इसे ढूँढने के लिए, देखें कि एक्यूरेसी सबसे पहले तेज़ी से कहाँ बढ़ती है और फिर पैचिंग का इस्तेमाल करके टेस्ट करें कि कौन-से कंपोनेंट्स इसका कारण हैं।
अक्सर पूछे जाने वाले सवाल
Probe के रूप में डीप न्यूरल नेटवर्क का उपयोग क्यों नहीं करते?
क्योंकि एक शक्तिशाली probe उलझे हुए इनपुट्स से भी उस प्रॉपर्टी को खुद ही कैलकुलेट कर सकता है। तब हाई एक्यूरेसी आपको probe के बारे में बताती है, मॉडल के बारे में नहीं। साधारण probes सवाल को निष्पक्ष और ईमानदार रखते हैं। कुछ रिसर्चर्स छोटे नॉन-लीनियर probes का उपयोग ज़रूर करते हैं, लेकिन वे इस अंतर को सावधानी से रिपोर्ट करते हैं।
कंट्रोल टास्क क्या होता है?
टास्क का एक ऐसा रूप जहाँ लेबल्स में इनपुट के बारे में कोई वास्तविक जानकारी नहीं होती, उदाहरण के लिए शफ़ल किए गए लेबल्स। यदि आपका probe उस पर भी अच्छा स्कोर करता है, तो वह चीज़ों को याद (memorise) कर रहा है, न कि मॉडल द्वारा स्टोर की गई किसी चीज़ को पढ़ रहा है।
मुझे किसी असली मॉडल से एक्टिवेशन्स कहाँ से मिलेंगे?
एक ओपन-वेट मॉडल से, आप फ़ॉरवर्ड पास के दौरान प्रत्येक ब्लॉक के आउटपुट को सेव कर सकते हैं। Hugging Face और PyTorch की दुनिया में इसके लिए लाइब्रेरीज़ मौजूद हैं, और कुछ तो ख़ास तौर पर इंटरप्रिटेबिलिटी के लिए बनाई गई हैं। उनके मौजूदा डॉक्स देखें, क्योंकि ये टूल्स अक्सर बदलते रहते हैं।
यदि probe की एक्यूरेसी लेयर 2 से लेयर 8 तक बढ़ती है, तो इससे मुझे क्या पता चलता है?
यह कि बाद की लेयर्स में जानकारी को लीनियर रूप से पढ़ना आसान हो जाता है। यह आपको यह नहीं बताता कि मॉडल इसे वहाँ जानबूझकर कैलकुलेट करता है या इसका इस्तेमाल करता है। यह एक उपयोगी मैप है कि आगे कहाँ देखना है।
पाठ का टेस्ट
5 सवाल। पास होने और इस पाठ को पूरा करने के लिए 3 सही होने चाहिए (60%)।