1 पॉइंट द्वारा GN⁺ 2023-07-25 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • Transformer के अंदर का attention softmax head को “कुछ न करना” चुनने नहीं देता, जिससे quantization और low-memory deployment मुश्किल हो सकते हैं
  • इस समस्या का संकेत LLM में दिखने वाले outlier weight/activation हैं, और Qualcomm AI Research के पेपर के अनुसार outlier activation में 97% से अधिक whitespace और punctuation की position पर आते हैं
  • मौजूदा softmax में सभी input बहुत negative हों तब भी हर term को 1/k वज़न मिलता है, लेकिन softmax_1 denominator में 1 जोड़कर attention output को 0 के करीब जाने देता है
  • softmax_1 relative ratio को बनाए रखते हुए sum को 0 और 1 के बीच सीमित करता है, और positive derivative की वजह से non-zero gradient भी बचा रहता है
  • यह बदलाव मौजूदा model पर सीधे लगाया जाने वाला patch नहीं है; इसके लिए retraining चाहिए, हालांकि LLaMA जैसे model में zero prefix token तरीके से तेज़ प्रयोग संभव हो सकता है

Quantization को कठिन बनाने वाले outlier

  • Transformer model में ऐसे weight और activation दिखते हैं जो बाकी मानों से कई orders of magnitude बड़े होते हैं, और लगता है कि ये model के व्यवहार में महत्वपूर्ण भूमिका निभाते हैं
  • ऐसे outlier सामान्य scale-and-bias integer quantization में performance गिराते हैं, जिससे बड़े model को Mac Mini या Raspberry Pi जैसी RAM-सीमित मशीनों पर चलाना कठिन हो जाता है
  • RAM उपयोग कम होने पर cloud और edge, दोनों environments में बड़े model या अधिक features संभालने की गुंजाइश बनती है
  • Qualcomm AI Research का पेपर Quantizable Transformers: Removing Outliers by Helping Attention Heads Do Nothing outlier values को attention mechanism के softmax से जोड़ता है
    • इसमें विश्लेषण है कि LLM के outlier activation में 97% से अधिक whitespace और punctuation positions पर होते हैं
    • clipped softmax में zero gradient की समस्या है, और gated attention लाखों नए parameters जोड़ता है

Transformer में softmax की भूमिका

  • Transformer का input embedding शब्दों को दर्शाने वाला floating-point vector होता है
    • Meta का LLaMA 2 3,204 लंबाई का embedding vector इस्तेमाल करता है, और half-precision के आधार पर एक शब्द को व्यक्त करने के लिए 6KB से अधिक चाहिए
    • vocabulary में आम तौर पर 30,000~50,000 entries होती हैं
  • Transformer input vector को उसी आकार के output vector में बदलता है, और अंतिम output vector का उपयोग मौजूदा token के बाद आने वाले token की भविष्यवाणी के लिए होता है
  • residual connection की वजह से attention मूल शब्द जानकारी में context जानकारी जोड़ने की तरह काम करता है
    • उदाहरण के लिए pupil का अर्थ छात्र है या आंख की पुतली, यह पहचानने के लिए context जोड़ता है
  • अंतिम चरण में output vector को vocabulary लंबाई के vector में बदलकर softmax लगाया जाता है और इसे अगले token की probability की तरह संभाला जाता है
    • वास्तविक implementation softmax output probability पर पूरी तरह भरोसा करने के बजाय sampling mechanism का उपयोग करती है
    • output चरण का softmax पूरी vocabulary पर gradient देने का काम करता है, इसलिए इसे एक उचित विकल्प माना जाता है

आंतरिक attention softmax की सीमा

  • आंतरिक attention का मुख्य समीकरण यह है

[ \textrm{Attention}(Q, K, V) = \textrm{softmax}\left(\frac{QK^T}{\sqrt{d}}\right)V ]

  • decoder-only model में (Q), (K), (V) एक ही input sequence से शुरू होते हैं, लेकिन अलग-अलग तरीकों से project किए जाते हैं
  • (QK^T) token embedding vector के बीच correlation खोजता है, और हर row पर softmax लगाकर उसे (V) matrix के value vector मिलाने वाले weight के रूप में इस्तेमाल किया जाता है
  • multi-head attention इस प्रक्रिया को हर layer में कई head पर parallel चलाता है
    • embedding vector को कई segments में बाँटा जाता है, और हर head output vector के एक segment में जानकारी जोड़ता है
  • समस्या यह है कि softmax हर attention head को ज़रूर कोई annotation बनाने के लिए मजबूर करता है
    • head के पास जोड़ने लायक जानकारी न हो तब भी softmax कोई न कोई selection बना देता है
    • head जितना अधिक specialized होगा, उसके लिए “pass” की ज़रूरत उतनी अधिक हो सकती है, लेकिन मौजूदा softmax में abstention का विकल्प नहीं है

प्रस्ताव: softmax_1 और QuietAttention

  • प्रस्तावित बदलाव है softmax के denominator में 1 जोड़ना

[ (\textrm{softmax}_1(x))_i = \frac{\exp(x_i)}{1+\sum_j \exp(x_j)} ]

  • मौजूदा softmax में सभी (x) मान बहुत negative हो जाएँ तब भी हर term (1/k) पर converge करती है

[ \lim_{x_1 \to -\infty} \ldots \lim_{x_k \to -\infty} (\textrm{softmax}(x))_i = \frac{1}{k} \gt 0 ]

  • softmax_1 में इसी स्थिति में हर term 0 पर converge करती है

[ \lim_{x_1 \to -\infty} \ldots \lim_{x_k \to -\infty} (\textrm{softmax}_1(x))_i = 0 ]

  • इसी फर्क की वजह से attention head जानकारी न जोड़ने का विकल्प चुन सकता है
  • प्रस्तावित attention समीकरण यह है

[ \textrm{QuietAttention}(Q, K, V) := \textrm{softmax}_1 \left(\frac{QK^T}{\sqrt{d}}\right)V ]

softmax_1 के गुण और प्रयोग की शर्तें

  • softmax_1 कुल मानों को थोड़ा कम करता है, लेकिन attention के बाद normalization होने से यह कमी compensate हो सकती है
  • output vector के relative ratios मौजूदा softmax जैसे ही रहते हैं

[ \frac{(\textrm{softmax}_1(x))_i}{(\textrm{softmax}_1(x))_j} = \frac{(\textrm{softmax}(x))_i}{(\textrm{softmax}(x))_j} = \frac{\exp(x_i)}{\exp(x_j)} \quad \forall \ i, j ]

  • derivative positive रहती है, इसलिए non-zero gradient बना रहता है, और sum 0 और 1 के बीच होने से output नियंत्रण की सीमा से बाहर नहीं जाता
  • इस समस्या को numerical precision नहीं बल्कि गणितीय समस्या के रूप में देखा गया है, इसलिए extra precision भर से इसका समाधान नहीं होगा
  • एक प्रयोगात्मक विचार यह है कि हर input context के आगे zero vector जोड़ा जाए, और positional encoding सहित यह सुनिश्चित किया जाए कि उसमें bias न जुड़े
    • अगर zero वैसा ही pass हो जाए, तो बाद के हर softmax denominator में 1 जुड़ने जैसा प्रभाव मिलता है
    • fixed embedding और special prefix token इस्तेमाल करने वाले LLaMA model में यह संभव हो सकता है
  • यह मौजूदा model पर सीधे लागू करने वाला प्रयोग नहीं है; model को retraining चाहिए
  • जिन मानों में बदलाव देखना चाहेंगे, वे हैं weight kurtosis और activation infinity norm

1 टिप्पणियां

 
GN⁺ 2023-07-25
Hacker News की रायें
  • लेखक का सुझाव अंतिम output के softmax के बारे में नहीं, बल्कि attention के अंदर वाले softmax के denominator में 1 जोड़ने का है
    attention का softmax key/query matching को probability जैसा दिखाता है, ताकि 0/1 lookup के बजाय continuous-value weights से key-value lookup हो सके
    denominator में 1 जोड़ने से weights का योग 1 से कम हो जाता है, इसलिए यह असली probability vector नहीं रहता, लेकिन अगर model high weights सीख ले तो यह लगभग probability vector जैसा काम करता है, और वह सभी weights low रखकर “किसी भी चीज़ पर भरोसा न करना” भी चुन सकता है
    यह सच में अच्छा है या नहीं, यह बस इसी तरीके से LLM train करके देखना पड़ेगा। हालांकि मुझे नहीं लगता कि बड़ा फर्क होगा। low-confidence attention nodes पहले से ही softmax से पहले के scores को मिलते-जुलते बनाकर लगभग uniform distribution बना सकते हैं, और तब यह कई vectors का average बन जाएगा, जिसके statistically 0 के करीब जाने की संभावना बड़ी है
    साथ ही Transformer में V matrix और attention के बाद की feedforward layer जैसे opt-out implement कर सकने वाले learned weights पहले से बहुत हैं। फिर भी लेख का गैर-academic tone और मूल idea से छेड़छाड़ करने वाला रवैया अच्छा है, और भले ही मैं पूरी तरह आश्वस्त नहीं हूँ, ऐसे लेख और पढ़ना चाहूँगा

    • मेरी समझ में लेखक कह रहा है कि इस बदलाव से बड़े values गायब हो जाते हैं, और Transformer output को कम bits में encode किया जा सकता है, जिससे network memory requirements घटती हैं
      बड़े models चलाने में memory bottleneck होती है, इसलिए अगर यह सच है तो इसका काफी बड़ा मतलब है
    • लेखक द्वारा प्रस्तावित conceptual model मुझे ज़्यादा पसंद है
      जैसे वह हिस्सा जहाँ कहा गया कि वह मूल रूप से इस function को ghostmax कहना चाहता था, x में 0-value item एक और है और exp(0)=1 है, इसलिए V matrix में भी result को कमजोर करने वाला एक 0 vector माना जा सकता है
      “weights का योग 1 से कम है, इसलिए कभी-कभी कुछ भी नहीं चुनता” कहने के बजाय, इसे यूँ देखना बेहतर है कि हर बार options के set पर विचार करते समय कुछ न करना नाम का option भी जबरन साथ में consider किया जाता है
      यह “अगर आपके पास सिर्फ हथौड़ा है तो हर चीज़ कील जैसी दिखती है” और “अगर आपके पास सिर्फ हथौड़ा है तब भी कील ठोंकते हैं और जो कील नहीं है उसे ignore करते हैं” के बीच का फर्क है
      उदाहरण के लिए, speech-to-text system पहले इंसान से language चुनवाता है, और उस language का audio डालने पर काफी ठीक transcription देता है, लेकिन अगर step 1 में language selection गलत हो जाए तो बेकार output आता है। English transcriber में French audio आने पर उसे पहले “यह English नहीं है” कहना चाहिए, तभी वह इंसानी तरीके के करीब होगा
    • अच्छा है या नहीं जाँचने के लिए दो identical models को बड़े dataset पर train करना काफी है
      एक में attention module के softmax denominator में +1 डालें, दूसरे में न डालें। दिखाना होगा कि performance मिलती-जुलती है, और +1 वाले model में runaway कम होता है, जिससे वह अधिक effectively quantized होता है
    • “confidence कम हो तो softmax से पहले के scores को समान बना देना काफी है” से सहमत होना मुश्किल है
      जैसे neural networks identity function को अच्छी तरह model नहीं कर पाते इसलिए residual connections चाहिए होते हैं, वैसे ही मुझे लगता है कि वे low-entropy transformations को implicitly सीखने में भी काफी कमजोर हैं
      भले ही यह expressiveness न बढ़ाए, यह gradient descent से पहुँचना कठिन needle-in-a-haystack type transformation को model के अंदर baked-in करने जैसा असर दे सकता है। असल में कितना उपयोगी है, पता नहीं
    • यह technique कई सालों से ज्ञात थी और PyTorch में भी शामिल है
      इसका widely use न होना इसलिए है कि लोगों ने इसे आज़माया और व्यवहार में यह खास अच्छा काम नहीं करता था। मूल लेख का इसे “8 साल से ज़्यादा समय तक अनदेखा bug” कहना clickbait जैसा है
  • हो सकता है मैं कुछ miss कर रहा हूँ, लेकिन comments इसे इतना बड़ा मामला क्यों मान रहे हैं, समझ नहीं आ रहा। यह trick मैंने सच में कई बार देखी है
    उदाहरण के लिए पुराने Google repository में भी ऐसा code है: https://github.com/google/flaxformer/blob/ee62754ebe5a5eeb11...

    • सही है। कुछ साल पहले हमारे पुराने model में भी हमने इसे इस्तेमाल किया था। details ठीक से याद नहीं, लेकिन लगता है कोई खास असर नहीं था
      stability में यह बिल्कुल मदद करेगा, ऐसा नहीं लगता। scale बढ़ाते समय softmax stability के लिए Q/K layernorm जैसी tricks बेहतर हैं: https://arxiv.org/pdf/2302.05442.pdf
    • अगर popular models अभी भी यह गलती कर रहे हैं, तो यह अब भी ध्यान देने लायक है
      awareness बढ़ाने के लिए blog post या paper लिखना भी पूरी तरह valuable है। अच्छे ideas का कई बार independently discover होना आम बात है
    • असली बात यह है कि लोगों ने quantization, यानी int8 / GGML / GPTQ तरीके में इसे आज़माया है या नहीं
      बड़े denominator की वजह से distribution flatter होना बेहतर quantization behavior तक ले जाता है या नहीं, यह +1 डालने और हटाने वाले cases को सीधे compare करके ही पता चलेगा। मूल लेख मानता है कि यह फायदा बड़ा हो सकता है
    • argument थोड़ा संदिग्ध है
      technically softmax दिए गए formula की तरह नहीं, बल्कि exp(x_i-max(x)) से implement होता है, और उन values को denominator में sum किया जाता है। हो सकता है मैं कुछ miss कर रहा हूँ
      साथ ही residual connections इसलिए इस्तेमाल होते हैं क्योंकि network identity function नहीं सीख पाता, लेकिन 0 सीख सकता है। इसलिए f(x): x+g(x) में g:x ~> 0, यानी लगभग 0 होना काफी है
      f(x): x+g(x) gradients के flow को भी आसान बनाता है
  • यह “खोजी गई” trick PyTorch multi-head attention के standard implementation का हिस्सा है, और इसका नाम add_zero_attention है
    logits में 0 जोड़ा जाता है, इसलिए e^0=1 होने से denominator में 1 आ जाता है: https://pytorch.org/docs/stable/generated/torch.nn.Multihead...

    • documentation काफी खराब है। इसमें बस इतना लिखा है कि “specified होने पर dim=1 पर key और value sequences में zeros का नया batch जोड़ता है”
      meaning को थोड़ा भी explain नहीं करता। अभी लिखे गए दूसरे sentence को जोड़ देने से भी यह कहीं ज़्यादा useful हो जाएगा
    • default false वाला option है। तो क्या इसका मतलब है कि लोगों ने इसे पहले ही आज़माया है और आम तौर पर यह मददगार नहीं है?
    • बढ़िया पकड़ा। मूल लेख के author को यह देखना चाहिए
    • https://en.wikipedia.org/wiki/Multiple_discovery
  • यह AI या इस algorithm की बात नहीं है, लेकिन कई बार ऐसा होता है कि आप किसी छोटी गलती को कितनी भी बार बताएं, लोगों को यह समझा नहीं पाते कि वह सचमुच गलती है
    2011 में अपने project के लिए reddit ranking algorithm copy करने की कोशिश में मैंने source code देखा, और negative total votes वाली posts के लिए उसका behavior बिल्कुल बेतुका था
    मुझे लगा कि एक simple expression में terms उलट गए थे और positive/negative signs गलत तरह से apply हो रहे थे। इसलिए मैंने इस पर blog लिखा और reddit पर post किया, लेकिन reddit employees समेत कई लोगों ने कहा कि मैं पूरी तरह गलत हूं और algorithm intended तरीके से काम कर रहा है
    उन्होंने यह भी कहा कि पहले भी कुछ लोगों ने यही बात notice करके point out की थी, लेकिन उन सबको भी गलत बताया गया था
    आखिरकार मैंने blog post को edit करके लिखा, “मुझसे ज्यादा smart लोगों ने कहा है कि reddit algorithm में कोई गलती नहीं है, बस मेरी variation मुझे ज्यादा समझ में आती है”
    फिर 3 साल बाद, 2014 में, reddit source code में वही fix commit हुआ जिसे मैं और मुझसे पहले वाले लोग लगातार suggest कर रहे थे: https://github.com/reddit-archive/reddit/commit/50d35de04b92...
    open source कई आंखों को bugs खोजने का मौका देता है, लेकिन कभी-कभी bug मिल जाने पर भी आप किसी को convince नहीं कर पाते। बेशक reddit ने 2017 में code बंद कर दिया
    अंत में मैंने अपनी app में न तो वह ranking feature डाला जिसे originally copy करना चाहता था, और न ही voting feature

    • 2008 के आसपास Yahoo में intern रहते हुए, जब मैंने OAuth 1.0 URL बनाने के लिए एक internal tool बनाया था, तब भी ऐसा ही कुछ हुआ
      query parameters में कई values encode करनी थीं, और एक खास parameter को effectively दो बार encode करना पड़ता था, इसलिए मेरे tool ने भी वही किया। लेकिन implementing engineer अड़ा रहा कि मेरा tool गलत है, मेरे intern status का हवाला दिया, और OAuth spec तक निकालकर जबरदस्ती यह interpret किया कि उसका implementation सही है और मैं गलत पढ़ रहा हूं
      आखिरकार Eran Hammer-Lahav को बुलाकर confirm कराने के बाद ही यह निष्कर्ष निकला कि मैं सही था, और तब उस engineer ने मान लिया कि हां, जाहिर है यही सही था। कई दिनों तक हुए personal attacks के लिए कोई acknowledgement या apology बिल्कुल नहीं थी
      मैंने एक अहम lesson सीखा कि ज्यादा senior होना हमेशा सही होना नहीं होता, और अब आम तौर पर मैं ही ज्यादा senior position में होता हूं, लेकिन हर दिन यह याद रखने की कोशिश करता हूं
    • मैं FAANG में काम करता हूं, और यह जानकर सच में हैरान हुआ कि ऐसी चीजें कितनी बार होती हैं
      सिर्फ “codebase में जगह-जगह logs डालकर step-by-step reasoning करने वाला व्यक्ति” बन जाने से भी लंबा और impactful career बनाया जा सकता है। बहुत basic level पर भी कई बार पुराने issues के लिए चौंकाने वाले fixes दिख जाते थे
      हालांकि इसके साथ काफी political मजा भी आता है। लोगों की पहली प्रतिक्रिया denial होती है, और उसके बाद चीजें और बिगड़ती हैं। “अच्छा, इसे fix कर देते हैं” कहने वाले बस 1–2 लोग होते हैं, और कोई न कोई “concurrency/memory management/वगैरह को लेकर पर्याप्त चिंता नहीं दिख रही” जैसी बात को सुंदर language में package करके आपके manager के manager के manager तक CC में डालकर email भेज देता है
      ऐसे में चुपचाप इंतजार करना, भिड़ना या शिकायत न करना बेहतर होता है। अगर कुछ भी नहीं हो रहा, leadership पूछ भी नहीं रही, लेकिन colleagues पूछना शुरू कर दें, तो किसी दूसरी team में जाने की planning करना बेहतर है
    • अभी code देखा, और यह बस बहुत साफ तौर पर गलत है। सच में काफी frustrating रहा होगा
    • पिछले कुछ महीनों को देखते हुए, reddit employees के साथ interaction का इस तरह unfold होना हैरान करने वाला नहीं है
  • outlier features और quantization पर एक दिलचस्प discussion है: https://timdettmers.com/2022/08/17/llm-int8-and-emergent-fea...
    outlier values का इस्तेमाल values को prune करने में होता है, और Transformer लगभग 6.7 अरब parameters के आसपास outlier features को handle करने के तरीके में “phase transition” से गुजरता दिखता है। इससे ablation studies जटिल हो सकती हैं
    Tim Dettmers से बात करने के लिए काफी material लगता है

  • लेखक असल समस्या को पकड़ते हैं और एक सरल हल सुझाते हैं। मेरे geek-filter के सारे मानदंड पास करते हैं
    “यह बात किसी ने पहले क्यों नहीं सोची?” के बारे में, यह सफाई वाजिब लगती है कि लेखक मशीन लर्निंग के बाहर के काम में softmax function से बहुत परिचित थे, और इस समस्या की जाँच करने वाले लोग भले ही “softmax से जुड़ी कोई चीज़” तक पहुँच गए हों, पर शायद softmax को खुद पर्याप्त गहराई से नहीं समझते थे
    हालांकि अगर मूल पोस्ट के लेखक यह टिप्पणी देखें, तो अच्छा होगा कि वे “outlier feedback loop को 99.44% probability से हल कर देगा” वाले दावे को और विस्तार से समझाएँ। अभी outlier का softmax से कैसे संबंध हो सकता है, इस पर सिर्फ वही वाक्य है

    • पता चला कि किसी ने पहले ही यह सोच लिया था। खास तौर पर Google ने, और यह idea कम से कम नवंबर 2021 से flaxformer में मौजूद था
      https://github.com/google/flaxformer/blame/ee62754ebe5a5eeb1...
      टिप्पणी में लिखा है: “एक softmax function जिसमें 0 जैसा अतिरिक्त virtual logit है। पहले train किए गए कुछ models के साथ compatibility के लिए। यह denominator में 1 जोड़ने जैसा है। attention context में, यह कुछ भी न देखने देता है”
      यह इस लेख जैसा ही modified softmax बनाता है। इसे सार्वजनिक रूप से क्यों अनदेखा किया गया, यह समय बताएगा। शायद असर ज्यादा नहीं था, शायद बस दब गया, या शायद Google ने इसे आगे नहीं बढ़ाया
    • सबसे अहम validation गायब है: results
      यह असल में आजमाया नहीं गया, बस माना गया कि काम करेगा। softmax में इतना सरल बदलाव हो तो validation में ज्यादा समय नहीं लगना चाहिए था, इसलिए publication से पहले इसे न आजमाना काफी शर्मनाक है
    • “किसी ने क्यों नहीं सोचा? क्योंकि लेखक मशीन लर्निंग के बाहर softmax से गहराई से परिचित थे” वाली व्याख्या संदिग्ध है
      machine learning community के अंदर softmax बहुत अच्छी तरह समझा जाता है। यह बेहद common trick है और इसकी ऐसी properties भी अच्छी तरह जानी जाती हैं। संभावना कम लगती है कि किसी ने यह सोचा ही न हो
      फिर भी यह संभव है कि मौजूदा softmax convention संयोग से चुना गया हो, और लेखक ने उसकी कमी सही पकड़ी हो
    • शायद इसलिए भी कि समस्या का असर subtle है
      diagnosis सही भी हो, तो full-precision LLMs बेअर्थ tokens को बड़े attention weights देकर harmless attention output बना सकते हैं और इस तरह समस्या से बच सकते हैं
      यह समस्या केवल weights को quantize करते समय महत्वपूर्ण है, और हालिया state-of-the-art LLM development का लक्ष्य जरूरी नहीं कि quantization performance हो
    • “99.44% confidence” को मैंने softmax की miscalibrated probabilities पर मजाक के तौर पर पढ़ा
      जैसे softmax 99.9% confidence या 0.1% confidence तो आसानी से देता है, लेकिन बीच में बहुत कम
  • मुझे पता है कि HN पर academia की शिकायत करना trend में है, लेकिन यह blog post अच्छा तर्क पेश नहीं कर रही
    पूरे लेख की 1/4 लंबाई, शायद 1/8 से भी कम में core बात बताई जा सकती थी, लेकिन इसे informal expressions और academic publishing पर हल्के से ढकी शिकायतों में लपेट दिया गया
    नतीजा यह हुआ कि यहाँ चर्चा लेख के results या idea पर नहीं, बल्कि academic publishing vs blogs, formal writing vs informal writing पर 200 comments बन गई
    अगर मकसद HN front page पर blog post लाना है, तो यह अच्छा style हो सकता है। लेकिन अगर आप चाहते हैं कि लोग idea के pros-cons पर विचार करें और चर्चा करें, तो यह अच्छा नहीं है

    • आखिरकार हम attention economy तक जिस मूल वजह से पहुँचते हैं, वह यही है
      लोगों के पास हर चीज़ पर खर्च करने के लिए limited attention है, लेकिन attention पाने की क्षमता और जरूरत असीमित है। Michael Goldhaber ने यही कहा था
      यही information explosion का बीज बनता है। जैसे अंडा उबालने के तरीके पर 6 अरब videos, या bike-shed style के 200 comments
      इसे रोकने के लिए Google, Facebook, HN जैसी जगहों पर comments, links और newsfeed को rank किया जाता है, लेकिन ranked pool का ज्यादातर हिस्सा बकवास होता है, इसलिए यह बस बकवास की एक और layer बन जाता है
      Goldhaber ने 30–40 साल पहले attention के बारे में जो कहा था, उसे reflect करने वाले information systems हम अब तक design नहीं कर पाए हैं
    • “HN front page पर आना” कहकर मजाक उड़ाया जाता है, लेकिन अगर इसे “informally observe की गई किसी चीज़ पर चर्चा करना” कहें, तो वह नीचा दिखाना कमजोर पड़ जाता है
      उद्देश्य जानकारी देने के साथ-साथ मनोरंजन करना भी हो सकता है। बहुत से लोग core idea के आसपास की ढीली-ढाली चर्चा का आनंद लेते हैं, और लेखक भी academic paper के clinical और formal tone की तुलना में उसे पसंद कर सकते हैं
    • वैसे किसी ने बताया कि PyTorch के Multihead Attention API में इस समस्या का optional workaround है
      फिर भी थोड़ी झुंझलाहट वाली बात है कि उसे देखने के लिए topic से हटे हुए 200 शिकायत-भरे comments पार करने पड़े
  • मैंने मिलता-जुलता experiment किया था, और मेरे setup में इससे मदद नहीं मिली
    मैं पक्का नहीं कहूँगा कि कोई bug वगैरह नहीं था, लेकिन लगता है कि current position पर attention करना इस समस्या को कुछ हद तक हल कर देता है। जब कुछ कहना नहीं होना चाहिए, तो बस current position value output कर देता है
    ठीक-ठीक कहें तो मैंने softmax denominator में 1 नहीं जोड़ा था; बल्कि QK से पहले एक learned parameter, attention sink, जोड़ा और softmax के बाद उसे हटा दिया, ताकि V से multiply करते समय sum 1 न रहे
    मैंने current position देखने और न देखने वाली variants भी आजमाईं, और learned parameter के बजाय हर position पर feedforward network से sink generate करने वाली variant भी। मेरे setup में किसी ने बड़ा फर्क नहीं डाला, लेकिन कई और अजीब चीज़ें भी मिली हुई थीं, इसलिए फिर से आजमाना शायद worthwhile हो सकता है

    • जब आप कहते हैं कि मदद नहीं मिली, तो आपने क्या measure किया था, यह जानना चाहूँगा
      इस लेख के context में task performance और outlier weights की संख्या और size, दोनों महत्वपूर्ण लगते हैं
    • वह इसे उभरे हुए outliers को ठीक करने के तौर पर promote कर रहा है। तुम्हारी variants में शुरू से ऐसे outliers थे भी क्या?
  • results दिखाई नहीं दे रहे। theory को support करने वाले numbers होते, तो यह कहीं ज्यादा मजबूत और convincing होता
    छोटे data पर किसी मौजूदा language model को fine-tune करके यह देखना बहुत कठिन नहीं है कि यह काम करता है या नहीं
    हालांकि मैं इस बात से सहमत हूँ कि बेहतर attention formulas हो सकते हैं। 2020 का paper https://arxiv.org/abs/2005.09561 मेरे train किए हुए एक Transformer model में बहुत मददगार रहा। यह सामान्य language model नहीं था, बल्कि एक खास multimodal graph problem था
    यह paper normalized attention propose करता है, और अगर मैं गलत नहीं हूँ तो यह quantization problem में भी मदद कर सकता है

  • यह तरीका dummy token आम होने से पहले अक्सर इस्तेमाल होता था। मैंने यह idea पहली बार XLNet paper में देखा था
    मेरी जानकारी में यह PyTorch में 2019/2020 से मौजूद था, और शायद कोई इससे भी पुराने references ढूंढ सकता है
    मूल लेख के बढ़ा-चढ़ाकर किए गए अंदाज़ ने मुझे चौंकाया। खासकर जब बात ऐसी चीज़ की हो जिसे ज़्यादातर Transformer researchers समझते हैं। replies में कई लोगों का “research ऐसे ही की जानी चाहिए” वाला रुख भी हैरान करने वाला है। यह ज़्यादा उस बात का उदाहरण लगता है कि research ऐसे क्यों नहीं चलती, और peer review कई मायनों में अच्छी चीज़ है; उनमें से एक यह है कि यह खुद को शर्मिंदा करने वाली स्थितियाँ कम कर देती है

    • वह घमंडी नहीं है। लोगों को informal, सीधे-सपाट और self-deprecating tone पसंद आती है, और यह घमंड के उलट है
      लगता है आप अस्पष्ट self-deprecation को सचमुच का दावा समझ रहे हैं
      इसे महत्वपूर्ण मानकर क्यों share किया गया, संक्षेप में कहें तो यह एक काफी niche समस्या है जो constrained hardware पर ChatGPT की धुंधली-सी नकल चलाने की कोशिश करते समय ही अहम होती है। इसलिए यह पूरी तरह संभव है कि बड़ी research teams ने इसे महत्वपूर्ण न माना हो। आखिर वे 3090 पर LLM चलाने की कोशिश नहीं कर रहे
    • “घमंडी” कहना अजीब है
      लेख की tone बोलचाल वाली, self-deprecating और humorous है। इसके फायदे-नुकसान क्या हैं, पता नहीं, लेकिन reasoning पूरी तरह follow की जा सकती थी। यह घमंड से काफी दूर है
      “खुद को शर्मिंदा करने वाली स्थितियाँ कम करता है” कहने में यह बात छिपी है कि अगर बात गलत हो या पहली खोज न हो तो शर्मिंदगी की बात है। क्या वह घमंडी नहीं है?