توجه متقابل فلامینگو و گیت برای VLM های چند گلوله
Type: Learn
Languages: Python (stdlib, gated cross-attention + Perceiver resampler demo)
Prerequisites: Phase 12 · 03 (BLIP-2 Q-Former)
Time: ~120 minutes
اهداف یادگیری
- توضیح دهید که چگونه توجه متقابل دروازه ای توانایی متن LLM منجمد را در هنگام ابتدایی از طریق tanh(gate) = 0 حفظ می کند.
- از طریق یک نمونه برداری مجدد Perceiver راه بروید: N تصویر پیچ → K سوالات "لاتنت" ثابت از طریق توجه متقابل.
- توضیح دهید که چگونه فلامینگو به ترتیب متن تصویر با پوشش علتانه ای که به قرار دادن تصویر احترام می گذارد، برخورد می کند.
- یک ساختار چند عکس چند حالت را تکرار کنید (3 مثال تصویر سرشنوی سپس یک تصویر سوال).
مشکل
BLIP-2 32 توکن بصری را به لایه ورودی LLM منجمد می دهد. براي هر ارسال يک عکس کار ميکنه اما اگر می خواهید تصاویر زیادی را با متن به هم متصل کنید، مثل این که "این تصویر A است، سرشناس آن؛ این تصویر B است، سرشناس آن؛ حالا این تصویر C است، سرشناس آن". توجه خود LLM باید به مدیریت نماد تصویر و نماد متن در یک جریان واحد باشد و سوال اینکه کدام موقعیت می تواند به کدام تصاویر توجه کند، می شود.
جواب فلامینگو: اصلا جریان ورودی LLM را تغییر ندهید. لایه های اضافی توجه متقابل بین بلوک های موجود LLM را وارد کنید. نماد متن هنوز مثل هميشه از طریق توجه به خود LLM جریان داره بین هر چند بلوک LLM، توکن های متن نیز از طریق یک لایه جدید بسته به ویژگی های تصویر به هم می پیوندند. دروازه (در ابتدا به صفر) به این معنی است که در مرحله صفر لایه های جدید بدون عملیات هستند مدل دقیقا مانند LLM پیش از آموزش رفتار می کند. با پیشرفت آموزش، دروازه باز می شود و اطلاعات بصری شروع به جریان می کند.
دومین سوال Flamingo پاسخ داد: چگونه شما با تعداد متغیر تصاویر (0, 1 یا بسیاری) در هر پرامپت کار می کنید؟ یک نمونه برداری مجدد Perceiver یک ماژول کوچک توجه متقابل است که هر تعداد پچ هایی را که دارید را می گیرد و تعداد ثابت از توکن های پنهان بصری را تولید می کند. لایه توجه متقابل LLM بدون توجه به تعداد تصاویر در پرامپت شکل مشابهی را می بیند.
مفهوم
مدرک تحصیلی قانونی منجمد
فلامينگو با يک سند "چينچيللا 70B" شروع مي شود. تمام وزن هاي 70B دست نخورده. متن موجود خود توجه و FFN به طور معمول عمل مي کنند.
نمونه گیری مجدد رسیور
برای هر تصویر در پرامپت، ViT نمادهای N پچ تولید می کند. نمونه گیری بازبینی گیرنده دارای K ثابت است که می تواند یاد گرفته شود (Flamingo از K = 64 استفاده می کند). هر بلوک نمونه گیری بازبینی دو زیر مرحله است:
- توجه متقابل: K latences در برابر N patch tokens (Q از latences، K/V از patches) حضور دارند.
- توجه به خود + FFN در غفلت ها
پس از 6 بلوک نمونه برداری، خروجی K=64 توکن بصری از dim 1024 است، بدون توجه به تعداد پیچ های تولید شده توسط ViT. یک تصویر 224x224 (196 پیچ) و یک تصویر 480x480 (900 پیچ) هر دو به عنوان 64 توکن نمونه برداری خارج می شوند.
برای ویدیو، نمونه گیری مجدد به صورت زمانی اعمال می شود: پیچ های هر فریم 64 خرده تولید می کنند و یک کدگذاری موقعیت زمانی به مدل اجازه می دهد t=0 را از t=N تشخیص دهد. ویدیو کامل تبدیل به توکن های بصری T * 64 می شود.
توجه متقابل
بین هر لایه M LLM منجمد (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، پس در ابتدا شاخه بسته صفر را به دست می آورد.- مثل
alphaاگر از صفر دور شود، سهم توجه متقابل به طور منظم رشد می کند. - اتصال باقیمانده به این معنی است که حتی یک در کاملا باز، نمایش متن LLM را بیش از حد نمی نویسد؛ آن را فقط اطلاعات بصری در بالا اضافه می کند.
این تنها مهم ترین انتخاب طراحی در فلامینگو است: شرایط بصری اضافه، بسته و صفر در ابتداء است. یک فلامینگو در مرحله 0 یک چینچیلا 70B کامل در ورودی های فقط متن است.
توجه متقابل پوشیده برای ورودی های متقابل
در یک پیامک مانند "<تصاویر A> سرایت A <تصاویر B> سرایت B <تصاویر C> ؟"، هر توکن متن فقط باید تصاویر پیش از آن را در ردیف مشاهده کند. ماسک توجه متقاطع: توکن متن در موقعیت tفقط به توکن های نمونه سازی تصویر که شاخص تصویر آن ها را می گیردi < i_tکجاi_tآخرین تصویر قبل از موقعیت استt"تنها آخرین تصویر قبلی را می بیند" یا "همه تصاویر قبلی را می بیند" هر دو انتخاب معتبر هستند. فلامینگو اولین را انتخاب کرد.
یادگیری چند شوت در زمینه
يه پیام فلامينگو به نظر مياد:
<image1> A photo of a cat. <image2> A photo of a dog. <image3> A photo of aمدل الگوی تکمیل را می بیند و "پرد" (یا هر آنچه تصویر 3 نشان می دهد) را می دهد. هیچ گام گرادینت نیست. توانایی یادگیری در زمینه LLM یخ زده شده از طریق توجه متقاطع بسته شده است.
اطلاعات آموزش
فلامينگو با سه مجموعه داده آموزش داده شده:
- MultiModal MassiveWeb (M3W): 43 میلیون صفحه وب با تصاویر و متن متقابل، بازسازی ترتیب خواندن.
- جفت های تصویر-متن (ALIGN + LTIP): 4.4B جفت.
- جفت های ویدئو-متن (VTP): 27 میلیون کلیپ ویدئویی کوتاه.
OBELICS (2023) یک تولید باز از کورپوس وب متقابل است که Idefics، Idefics2 و بیشتر مدل های باز "فلامینگو مانند" در آن آموزش می دهند.
OpenFlamingo و اوتر
OpenFlamingo (2023) بازسازی باز است. معماری یکسان (رسمپلر بازبینی + توجه متقاطع در LLaMA یا MPT یخ زده) . نقاط بازرسی در 3B ، 4B ، 9B. کیفیت Flamingo به دلیل LLM پایه کوچکتر و داده های کمتر عقب مانده است.
اوتر (2023) بر روی OpenFlamingo با تنظیم دستورالعمل در MIMIC-IT (یک مجموعه داده از دستورالعمل های چند مدل) ساخته شده است، که نشان می دهد که توجه متقاطع دروازه ای برای آموزش های بعدی نیز کار می کند.
فرزندان
- 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 |
برای یک تصویر VQA برای بودجه، BLIP-2 را انتخاب کنید، برای یک تصویر چند عکس یا چند تصویر، Flamingo/Idefics2 را انتخاب کنید.
ازش استفاده کن
code/main.pyنشان می دهد:
- یک نمونه برداری مجدد Perceiver روی 36 توکن پچ جعلی با 8 لغز قابل یادگیری (انتباه متقابل پاک پایتون).
- يه قدم با توجهي با گيت
alpha = 0→ output برابر input (LLM بدون تغییر) است، پسalpha = 2.0→ کمک بصری مخلوط شده - یک سازنده ماسک متقابل که ماسک توجه 2D را برای یک سری "(تصاویر 1) (متن 1) (تصاویر 2) (متن 2) " تولید می کند.
-باده
این درس به ما کمک می کندoutputs/skill-gated-bridge-diagnostic.md. با توجه به پیکربندی یک VLM باز (نمایشگر Y / N، فرکانس عبور، طرح دروازه) ، عناصر سلطه Flamingo را شناسایی می کند و استراتژی یخ زدن را توضیح می دهد. مفید برای تنظیم خطا چرا یک تنظیم دقیق عملکرد متن را کاهش می دهد (جواب: دروازه بیش از حد گسترده شده و خیلی سریع است).
تمرینات
- شمارش پارامترهای بصری فلامینگو-9B: 9B LLM + 1.4B لایه های بینایی متقاطع + 64M resampler. چه فرقی از پارامترهای کل آموزش داده شده است؟
- استفاده از بقای بسته شده
y = tanh(alpha) * cross + xدر PyTorch. تجربه ای نشان بده که باalpha=0،y==xدقیقاً در ابتدا
- بخش 3.2 (arXiv:2308.01390) OpenFlamingo را بخوانید که چگونه آنها چندین تصویر را در یک دسته اداره می کنند وقتی هر پیامک تعداد تصویر متفاوتی دارد. استراتژی پر کردن را توصیف کنید.
- چرا ماسک توجه متقاطع فلامینگو اجازه می دهد تا یک نشانه متن فقط به آخرین تصویر قبلی توجه کند نه تمام تصاویر قبلی؟ بخش 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) معماری عمومی Perceiver
- 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.