Python में AI की अवधारणाएँ

Python में अटेंशन और सेल्फ़-अटेंशन

अटेंशन हर टोकन को बाकी टोकनों को देखकर तय करने देता है कि कौन-से ज़रूरी हैं। हर टोकन के पास एक query (वह क्या ढूँढ रहा है), एक key (वह क्या देता है) और एक value (वह कौन-सी जानकारी आगे भेजता है) होती है।

आसान शब्दों में अवधारणा

अटेंशन हर टोकन को बाकी टोकनों को देखकर तय करने देता है कि कौन-से ज़रूरी हैं। हर टोकन के पास एक query (वह क्या ढूँढ रहा है), एक key (वह क्या देता है) और एक value (वह कौन-सी जानकारी आगे भेजता है) होती है।

query, key और value से scaled dot-product attention हाथ से निकालें, फिर GPT की तरह causal mask जोड़ें।

मुख्य बातें

  • अटेंशन वेट softmax से आते हैं, इसलिए हर पंक्ति का योग 1 होता है।
  • √d से भाग देने पर लंबे वेक्टर में भी स्कोर बहुत बड़े नहीं होते।
  • causal mask जनरेशन के दौरान टोकन को भविष्य के टोकन देखने से रोकता है।
  • मल्टी-हेड अटेंशन कई अटेंशन साथ-साथ चलाता है, और पोज़िशनल एन्कोडिंग शब्दों का क्रम जोड़ती है।

इसका उपयोग कब करें?

  • समझें कि न्यूरल नेटवर्क और AI लाइब्रेरी के अंदर क्या होता है।
  • संबंधित चुनौतियों में खुद लागू करने से पहले विचार को समझें।
  • मशीन लर्निंग कोर्स, इंटरव्यू और प्रोजेक्ट की तैयारी करें।

इसे काम करते देखें

हीटमैप की किसी पंक्ति पर क्लिक करें और देखें कि वह टोकन कहाँ ध्यान देता है। भविष्य के टोकन छिपाने के लिए causal mask चालू करें, और अटेंशन को केंद्रित करने के लिए तीक्ष्णता बदलें।

उदाहरण कोड

कोड चलाएँ →
main.py
import math

def softmax(row):
    exps = [math.exp(v - max(row)) for v in row]
    return [e / sum(exps) for e in exps]

# Three tokens, each with a query, key and value vector of size 2.
Q = [[1, 0], [0, 1], [1, 1]]
K = [[1, 0], [0, 1], [1, 1]]
V = [[10, 0], [0, 10], [5, 5]]
d = len(K[0])

def attention(causal=False):
    out = []
    for i, q in enumerate(Q):
        # Score: how well this query matches every key, scaled by sqrt(d).
        scores = [sum(a * b for a, b in zip(q, k)) / math.sqrt(d) for k in K]
        if causal:  # a token may only look at itself and earlier tokens
            scores = [s if j <= i else -1e9 for j, s in enumerate(scores)]
        weights = softmax(scores)
        out.append([round(sum(w * v[c] for w, v in zip(weights, V)), 2) for c in range(2)])
    return out

print("attention:", attention())
print("causal attention:", attention(causal=True))

अपेक्षित आउटपुट

attention: [[6.02, 3.98], [3.98, 6.02], [5.0, 5.0]]
causal attention: [[10.0, 0.0], [3.3, 6.7], [5.0, 5.0]]

यह कैसे काम करता है

हर query के लिए स्कोर उसके सभी key के साथ डॉट प्रोडक्ट को √d से भाग देने पर मिलते हैं। softmax स्कोर को वेट में बदलता है, और आउटपुट value का भारित औसत होता है। causal mask के साथ पहला टोकन सिर्फ़ खुद को देख पाता है, इसलिए उसका आउटपुट ठीक उसकी अपनी value [10, 0] होता है।

मान बदलें और Python इंस्टॉल किए बिना CodeUtility ऑनलाइन Python कंपाइलर में प्रोग्राम चलाएँ।

अभ्यास के कार्य

बड़े dataset पर जाने से पहले input बदलें और edge cases की जाँच करें।

  1. इनपुट या वेट बदलें और रन करने से पहले आउटपुट का अनुमान लगाएँ।
  2. हर गणना चरण को देखने के लिए बीच के मान प्रिंट करें।
  3. नीचे दी गई चुनौतियाँ हल करके विचार को खुद लागू करें।
Python IDE में चलाएँ →

चैलेंज से अभ्यास करें

इस पाठ में सीखी बात से एक असली समस्या हल करें। हर चैलेंज ब्राउज़र में चलता है, तुरंत टेस्ट और AI रिव्यू के साथ।

सभी चैलेंज