कुछ शॉट VLM के लिए फ्लेमिंगो और गेट क्रॉस-अटेंशन
Type: Learn
Languages: Python (stdlib, gated cross-attention + Perceiver resampler demo)
Prerequisites: Phase 12 · 03 (BLIP-2 Q-Former)
Time: ~120 minutes
सीखने के लक्ष्य
- समझाएं कि कैसे गेट-क्रॉस-एटेंशन ने टैनह(गेट) = 0 के माध्यम से आरंभिकरण पर जमे हुए एलएलएम की पाठ क्षमता को संरक्षित किया।
- एक प्रतिबिंब प्रतिबिंबकर्ता के माध्यम से चलेंः N छवि पैच → K क्रॉस-अटेंशन के माध्यम से फिक्स्ड "लैटिनेंट" क्वेरी।
- वर्णन करें कि फ्लेमिंगो छवि-पाठ अनुक्रमों को परस्पर जोड़कर कारणों से छिपाकर कैसे संभालता है जो छवि स्थान का सम्मान करता है।
- कुछ शॉट के मल्टीमोडल प्रॉम्प्ट संरचना (3 छवि-कैप्शन उदाहरण फिर एक क्वेरी छवि) को पुनः प्रस्तुत करें।
समस्या
BLIP-2 32 दृश्य टोकन को जमे हुए LLM की इनपुट परत में खिलाता है। प्रति संकेत एक छवि के लिए काम करता है. लेकिन क्या होगा अगर आप पाठ के साथ बहुत से चित्रों को फ़ीड करना चाहते हैं, जैसे कि "यहां छवि A है, इसे कैप्शन दें; यहाँ छवि B है, इसे कैप्शन दें; अब यहाँ छवि C है, इसे कैप्शन दें"? एलएलएम के आत्म-विचार को एक स्ट्रीम में छवि टोकन और पाठ टोकन को संभालने की आवश्यकता होगी, और यह सवाल कि कौन सी स्थिति कौन सी छवियों को ध्यान में रख सकती है, परेशान हो जाता है।
फ्लेमिंगो का जवाबः LLM की इनपुट स्ट्रीम को बिल्कुल भी न बदलें। मौजूदा LLM ब्लॉकों के बीच अतिरिक्त क्रॉस-अटेंशन परतें डालें। पाठ टोकन अभी भी एलएलएम के कारण स्व-विचार के माध्यम से बहते हैं हमेशा की तरह. LLM के प्रत्येक कुछ ब्लॉक के बीच, पाठ टोकन एक नई गेट लेयर के माध्यम से छवि सुविधाओं को क्रॉस-एटेंडेड भी करते हैं। गेट (शून्य पर शुरू) का मतलब है कि शून्य चरण पर नई परतें नो-ऑप्स हैं मॉडल पूर्व प्रशिक्षित एलएलएम की तरह व्यवहार करता है। प्रशिक्षण के साथ-साथ गेट खुलता है और दृश्य जानकारी बहना शुरू होती है।
Flamingo ने दूसरे प्रश्न का उत्तर दियाः आप प्रति प्रॉम्प्ट प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति प्रति
अवधारणा
जमे हुए LLM
फ्लेमिंगो एक जमे हुए चिंचिला 70B LLM के साथ शुरू होता है। सभी 70B वजन छूने नहीं. मौजूदा पाठ आत्म-ध्यान और FFN सामान्य रूप से काम करते हैं।
रिसेप्टर रिसेम्पलर
प्रॉम्प्ट में प्रत्येक छवि के लिए, ViT N पैच टोकन उत्पन्न करता है। पर्सीवर रीसैम्पलर में K फिक्स्ड लर्नेबल लैंट हैं (फ्लैमिंगो K=64 का उपयोग करता है) । प्रत्येक रीसैम्पलर ब्लॉक दो उप-चरणों से बना हैः
- क्रॉस-अटेंशनः K लटेंट्स N पैच टोकन पर मौजूद होते हैं (Q लटेंट्स से, K/V पैच से) ।
- आत्म-विचार + लटेंट्स के भीतर एफएफएन।
6 resampler ब्लॉक के बाद, आउटपुट K=64 dim 1024 के दृश्य टोकन है, भले ही ViT ने कितने पैच बनाए हों। एक 224x224 छवि (196 पैच) और एक 480x480 छवि (900 पैच) दोनों 64 resampler टोकन के रूप में बाहर निकलते हैं।
वीडियो के लिए, रीसैम्पलर को समय के साथ लागू किया जाता हैः प्रत्येक फ्रेम के पैच 64 लटेंट्स का उत्पादन करते हैं, और एक समय स्थिति एन्कोडिंग मॉडल को t=0 से t=N को अलग करने की अनुमति देता है। पूरा वीडियो T * 64 दृश्य टोकन बन जाता है।
ग्लिटेड क्रॉस-अटेंशन
जमे हुए LLM की प्रत्येक M परत के बीच (Flamingo M=4 का उपयोग करता है), एक नया गैलेटेड क्रॉस-अटेंशन ब्लॉक डालेंः
x_after_llm_block = llm_block(x_before)
cross = cross_attn(x_after, resampler_output)
gated = tanh(alpha) * cross + x_after
x_before_next_block = gatedalphaशून्य पर शुरू करने के लिए एक सीखने योग्य स्केलर है।tanh(0) = 0, तो init पर गेट शाखा शून्य योगदान देता है.- जैसे
alphaशून्य से दूर चला जाता है, क्रॉस-अटेंशन योगदान सुचारू रूप से बढ़ता है। - शेष कनेक्शन का मतलब है कि एक पूरी तरह से खुला गेट भी LLM के पाठ प्रतिनिधित्व को ओवरराइट नहीं करता है; यह केवल ऊपर दृश्य जानकारी जोड़ता है।
यह फ्लेमिंगो में सबसे महत्वपूर्ण डिजाइन विकल्प हैः दृश्य कंडीशनिंग आरंभिकरण पर अतिरिक्त, बंद और शून्य है। चरण 0 पर एक फ्लेमिंगो केवल पाठ इनपुट पर एक सही चिंचिला 70 बी है।
इंटरलेटेड इनपुट के लिए मास्क क्रॉस-अटेंशन
"<image A> caption A <image B> caption B <image C> ?" जैसे प्रॉम्प्ट में, प्रत्येक टेक्स्ट टोकन को केवल अनुक्रम में उसके सामने आए चित्रों को देखना चाहिए। क्रॉस-अटेंशन मास्क लागू करता हैः स्थिति में टेक्स्ट टोकन tकेवल छवि resampler टोकन के लिए भाग लेता है जिसका छवि सूचकांक i < i_tकहाँi_tस्थिति से पहले नवीनतम छवि है t. "केवल अंतिम पूर्ववर्ती छवि देखता है" या "सभी पूर्ववर्ती चित्र देखता है" दोनों वैध विकल्प हैं; फ्लेमिंगो ने पहले का चयन किया।
संदर्भ में कुछ शॉट सीखने
एक फ्लेमिंगो संकेत इस तरह दिखता हैः
<image1> A photo of a cat. <image2> A photo of a dog. <image3> A photo of aमॉडल पूरा पैटर्न देखता है और "पक्षी" (या जो भी छवि3 दिखाता है) आउटपुट करता है। कोई ग्रेडिएंट कदम नहीं। जमे हुए एलएलएम की संदर्भ में सीखने की क्षमता बंद क्रॉस-अटेंशन के माध्यम से ले जाती है।
प्रशिक्षण के आंकड़े
फ्लेमिंगो तीन डेटा सेट पर प्रशिक्षितः
- मल्टीमोडल मैसिव वेब (एम3डब्ल्यू): 43 मिलियन वेब पृष्ठ जो कि पन्नों और पाठ के साथ परस्पर जुड़े हुए हैं, जो पढ़ने के क्रम को पुनः निर्माण करते हैं।
- छवि-पाठ जोड़े (ALIGN + LTIP): 4.4B जोड़े।
- वीडियो-टेक्स्ट जोड़े (वीटीपी): 27 एम लघु वीडियो क्लिप।
ओबेलिक्स (2023) एक इंटरलेवेड वेब कॉर्पस का एक खुला प्रजनन है, जिस पर आइडेफिक्स, आइडेफिक्स 2 और अधिकांश खुले "फ्लैमिंगो-जैसे" मॉडल प्रशिक्षण देते हैं।
ओपनफ्लैमिंगो और ओटर
ओपनफ्लैमिंगो (2023) ओपनप्रोडक्शन है। वास्तुकला समान है (प्रतिबिंबक पुनः नमूना + जमे हुए एलएलएएमए या एमपीटी पर गेट क्रॉस-अटेंशन) । 3 बी, 4 बी, 9 बी पर चेकपॉइंट। कम बेस एलएलएम और कम डेटा के कारण गुणवत्ता फ्लैमिंगो में देरी होती है।
ओटर (2023) ने एमआईएमआईसी-आईटी (मल्टीमोडल निर्देशों का एक डेटासेट) पर निर्देशों के ट्यूनिंग के साथ ओपनफ्लैमिंगो पर निर्माण किया, जिसमें निर्देशों के बाद भी गटेड क्रॉस-अटेंशन काम करता है।
वंशज
- Idefics / Idefics2 / Idefics3: Hugging Face की गेट-गेट क्रॉस-अटेंशन वंशावली, धीरे-धीरे सरल (Idefics2 ने अनुकूलनशील पूलिंग के साथ प्रत्यक्ष पैच टोकन के पक्ष में रीसैम्पलर को छोड़ दिया) ।
- फ्लेमिंगो-टू-कैमेलेन संक्रमणः 2024 तक कई टीमें प्रारंभिक विलय (पढ़ना 12.11) में चली गईं; फ्लेमिंगो शैली का गेट क्रॉस-अटेंशन उत्पादन में बना हुआ है जहां रीढ़ की हड्डी को फ्रीज करने की आवश्यकता है।
- मिथुनों का इंटरलेव इनपुटः अवधारणागत रूप से फ्लेमिंगो की इंटरलेव प्रारूप लचीलापन को विरासत में देता है, हालांकि सटीक तंत्र स्वामित्व वाला है।
BLIP-2 की तुलना
| BLIP-2 | Flamingo | |
|---|---|---|
| Visual bridge | Q-Former once at input | Gated cross-attention at every M layers |
| Visual tokens | 32 per image | 64 per image per cross-attn layer |
| Frozen LLM | Yes | Yes |
| Few-shot in-context | Weak | Strong — the paper's centerpiece |
| Interleaved inputs | No native support | Yes, the design target |
| Training data | 130M pairs | 1.3B pairs + 43M interleaved pages |
| Parameter count | 188M trained | ~10B trained (cross-attn layers) |
| Compute | Days on 8 A100s | Weeks on thousands of TPUv4 |
एक बजट पर एकल-छवि वीक्यूए के लिए बीएलआईपी-2 चुनें। इंटरलेविड, कुछ शॉट, या मल्टी-छवि तर्क के लिए फ्लेमिंगो / आइडेफिक्स2 चुनें।
इसका प्रयोग करें
code/main.pyदिखाता हैः
- 8 सीखने योग्य लटेंट्स (शुद्ध पायथन क्रॉस-अटेंशन) के साथ 36 नकली पैच टोकन पर एक पर्सेवर रीसैम्पलर।
- एक बंद पार ध्यान कदम के साथ
alpha = 0→ आउटपुट इनपुट के बराबर है (LLM अपरिवर्तित), तोalpha = 2.0→ दृश्य योगदान मिश्रित। - एक इंटरलेवेड मास्क बिल्डर जो "(चित्र 1) (पाठ 1) (चित्र 2) (पाठ 2)" अनुक्रम के लिए 2 डी ध्यान मास्क का उत्पादन करता है।
इसे भेजें
यह सबक हमें फल देता हैoutputs/skill-gated-bridge-diagnostic.md. एक खुला VLM की विन्यास (रेसैम्पलर Y/N, क्रॉस-एटन आवृत्ति, गेट योजना) को देखते हुए, यह फ्लेमिंगो वंश तत्वों की पहचान करता है और फ्रीजिंग रणनीति की व्याख्या करता है। यह डिबगिंग के लिए उपयोगी है कि एक बारीक-ट्यून टेक्स्ट प्रदर्शन में गिरावट क्यों आती है (जवाबः गेट बहुत तेजी से चौड़ा हो गया है) ।
व्यायाम
- फ्लेमिंगो-9बी के दृश्य पैरामीटर की गणना करेंः 9बी एलएलएम + 1.4बी गेट वाले क्रॉस-अटेंशन परतें + 64 एम रीसैम्पलर। कुल पैरामीटर का कितना अंश प्रशिक्षित किया जाता है?
- बंद अवशिष्ट को लागू करें
y = tanh(alpha) * cross + xप्रयोगात्मक रूप से दिखाएँ किalpha=0,y==xठीक ही शुरू में.
- OpenFlamingo धारा 3.2 (arXiv:2308.01390) को पढ़ें कि वे एक बैच में कई छवियों को कैसे संभालते हैं जब प्रत्येक प्रॉम्प्ट में एक अलग छवि संख्या होती है। पैडिंग रणनीति का वर्णन करें।
- फ्लेमिंगो का क्रॉस-एटेंशन मास्क एक टेक्स्ट टोकन को केवल सबसे हालिया पूर्ववर्ती छवि को ध्यान देने की अनुमति क्यों देता है, बजाय सभी पूर्ववर्ती छवियों के? फ्लेमिंगो पेपर सेक्शन 2.4 पढ़ें और समझौता की व्याख्या करें।
- संदर्भ में कुछ शॉटः नए फ्लेमिंगो संस्करण के लिए "मुख्य वस्तु की छवि → रंग" के 4 उदाहरणों के साथ एक प्रॉम्प्ट बनाएं। उदाहरणों की संख्या 0 से 8 तक भिन्न करते समय अपेक्षित सटीकता पैटर्न का वर्णन करें।
प्रमुख शर्तें
| Term | What people say | What it actually means |
|---|---|---|
| Perceiver resampler | "Fixed-latent cross-attention" | Module that produces K fixed tokens from a variable number of input patches |
| Gated cross-attention | "Tanh-gated bridge" | Residual layer y = tanh(alpha)*cross + x, learnable alpha, init 0 |
| Interleaved input | "Mixed sequence" | Prompt format with images and text mixed freely in reading order |
| Frozen LLM | "No LLM gradients" | The text LLM's weights do not update; only resampler + cross-attn layers train |
| Few-shot | "In-context examples" | Give a few (image, answer) pairs in the prompt; model generalizes without finetuning |
| OBELICS | "Interleaved web corpus" | Open dataset of 141M web pages with images and text in reading order |
| Chinchilla | "70B frozen base" | Flamingo's frozen text LLM, from DeepMind's Chinchilla paper |
| Gate schedule | "How alpha moves" | The rate at which the cross-attention gate opens during training |
| Cross-attn frequency | "Every M layers" | How often a gated cross-attention block is inserted; Flamingo uses M=4 |
| OpenFlamingo | "Open reproduction" | MosaicML/LAION open checkpoint at 3-9B; architecture-identical to Flamingo |
आगे पढ़ना
- Alayrac et al. — Flamingo (arXiv:2204.14198) मूल कागज।
- Awadalla et al. — OpenFlamingo (arXiv:2308.01390) खुले में प्रजनन।
- Laurençon et al. — OBELICS (arXiv:2306.16527) आपस में जुड़ने वाली वेब कॉर्पस।
- Jaegle et al. — Perceiver IO (arXiv:2107.14795) सामान्य प्रेक्षक वास्तुकला।
- Li et al. — Otter (arXiv:2305.03726) निर्देशों से सुसंगत फ्लेमिंगो वंशज।
- Laurençon et al. — Idefics2 (arXiv:2405.02246) फ्लेमिंगो दृष्टिकोण का आधुनिक सरलीकरण।
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.