فاز 19 · درس 60

لایه‌ی پروجکشن برای هم‌ترازی مدالیته در مدل‌های بینایی-زبان

نوع
ساختنی
زمان
حدود 90 دقیقه
زبان‌ها
Python
یک پل فلزی مینیمال و نورانی که دو صخره‌ی هندسی با جنس و بافت متفاوت را در فضایی تاریک به یکدیگر متصل می‌کند
فهرست مطالب
  1. اهداف یادگیری
  2. صورت مسئله
  3. مبانی نظری
  4. تجمیع قبل از پروجکشن
  5. چرا دولایه و نه یک لایه؟
  6. تابع زیان هم‌ترازی کسینوسی
  7. ترفند انکودر منجمد
  8. پیاده‌سازی
  9. استفاده از ابزارهای واقعی
  10. تست‌ها
  11. تمرین‌ها
  12. اصطلاحات کلیدی
  13. برای مطالعه‌ی بیشتر

وقتی می‌خواهید یک مدل زبانی بزرگ را به یک انکودر تصویر متصل کنید، با یک مانع ساختاری روبه‌رو می‌شوید: خروجی انکودر بینایی در یک فضای برداری کاملاً متفاوت با امبدینگ‌های مدل زبانی قرار دارد. این دو مدالیته زبان یکدیگر را نمی‌فهمند و بدون تغییر شکل این پایه‌ها، امکان ترکیب متن و تصویر در یک معماری چندوجهی (Multimodal) وجود ندارد.

حل این مسئله نیازی به بازآموزی هزینه‌بر مدل‌های بزرگ ندارد. با استفاده از یک پروجکشن دولایه‌ی سبک (MLP Projector) و منجمد نگه‌داشتن انکودر تصویر و مدل زبانی، می‌توان تنها با چند مگابایت وزن اضافه، فضای این دو را روی هم منطبق کرد. این همان فرمول پایه‌ای است که مدل‌هایی مثل LLaVA و BLIP-2 بر پایه‌ی آن ساخته شده‌اند.

این روش سبک محاسباتی بسیار پایینی دارد؛ نیازی به اجاره‌ی سرورهای ابری گران‌قیمت یا دسترسی به GPUهای رده‌بالا نیست و پیاده‌سازی و آموزش آن به‌راحتی روی پردازنده‌ی سیستم شخصی یا تراشه‌های اپل سیلیکون اجرا می‌شود.

یک انکودر بینایی توکن‌های تصویر تولید می‌کند و یک دکودر متن، توکن‌های متنی می‌گیرد. این دو در فضاهای برداری متفاوتی تعریف شده‌اند. یک پروجکتور دولایه‌ی کوچک از نوع پرسپترون چندلایه (MLP) توکن‌های تصویر را به فضای امبدینگ (Embedding) متن تصویر می‌کند و یک تابع زیان (Loss) هم‌ترازی کسینوسی در برابر شرح تصویر متناظر، این دو فضا را با هم سازگار می‌سازد. این پروجکشن کوچک‌ترین جزء یک مدل بینایی-زبان (VLM) است، اما بیشترین اهمیت را در انتقال دانش دارد.

اهداف یادگیری

  • ساخت یک پروجکشن دولایه‌ی MLP برای نگاشت ویژگی‌های تصویر به فضای امبدینگ متن.
  • ساخت یک جدول ساختگی امبدینگ متن بدون توکنایزر پیش‌آموزش‌دیده یا پیکره‌ی واقعی.
  • محاسبه‌ی تابع زیان هم‌ترازی کسینوسی میان توکن‌های تصویر پروجکت‌شده و امبدینگِ شرح تصویر متناظر.
  • آموزش پروجکتور به‌تنهایی، در حالی که انکودر بینایی و جدول متن کاملاً منجمد (Frozen) هستند.

صورت مسئله

فرض کنید یک انکودر بینایی (از درس‌های 58 و 59) دارید که توکن‌هایی با بُعد vision_hidden = 768 تحویل می‌دهد. می‌خواهید یک دکودر متن با بُعد امبدینگ text_hidden = 512 روی آن سوار کنید (هر عدد دیگری هم ممکن بود). دکودر انتظار توکن‌هایی متناسب با متن دارد؛ توکن‌های تصویر ساختار متنی ندارند و در پایه‌ای (Basis) تعریف شده‌اند که انکودر صرفاً حین پیش‌آموزشِ بینایی یاد گرفته است و هیچ ارتباطی با بردارهای کلمه‌ی دکودر ندارند.

یک پروجکشن دولایه‌ی MLP (لایه خطی، GELU و لایه خطی) این شکاف را پر می‌کند. این ماژول به‌قدری کوچک است (حدود 768 * 1024 + 1024 * 512 = 1.3M پارامتر) که ظرف چند دقیقه روی یک GPU آموزش می‌بیند؛ علاوه بر این، تنها قطعه‌ای است که باید حین مرحله‌ی هم‌ترازی آموزش ببیند. انکودر بینایی منجمد می‌ماند، جدول امبدینگ متن هم منجمد می‌ماند و فقط پروجکشن تغییر می‌کند. این همان فرمولی است که LLaVA در سال 2023 عرضه کرد، BLIP-2 در قالب Q-Former بازتعریفش نمود و از آن زمان به بعد، هر VLM با وزن‌های باز به‌نحوی از آن بهره برده است.

مبانی نظری

داده ورودی تصویرانکودر ViT ثابت‌شدهتوکن‌های تصویر B x N x 768تجمیع CLSتصویر کردن با MLP دو لایهامبدینگ تصویر B x 512شناسه‌های زیرنویس متناظرجدول متنی ثابت‌شدهامبدینگ متن B x 512تابع زیان (loss) هم‌ترازی کسینوسی

تجمیع قبل از پروجکشن

انکودر بینایی 197 توکن خروجی می‌دهد. در سمت متن، فقط یک امبدینگ واحد در سطح کل شرح تصویر داریم. برای هم‌تراز کردن آن‌ها به ازای هر نمونه، به یک بردار واحد در سطح تصویر نیاز دارید. تجمیع بر اساس توکن CLS ساده‌ترین روش است: اولین توکن انکودر را برمی‌دارید و تصویر می‌کنید. میانگین‌گیری روی تمام 197 توکن گزینه‌ی دیگری است که SigLIP از آن استفاده می‌کند. هر دو روش، 197 بردار را به یک بردار فشرده می‌کنند.

چرا دولایه و نه یک لایه؟

یک تصویر کردن خطی (Linear projection) تک‌لایه می‌تواند فضا را بچرخاند و مقیاسش را تغییر دهد، اما اگر دو فضا انحنای ناسازگاری داشته باشند، نمی‌تواند پایه‌ی آن‌ها را اصلاح کند. قراردادن GELU میان دو لایه‌ی خطی، یک خمش غیرخطی به پروجکشن می‌دهد؛ این ویژگی از نظر تجربی برای هم‌تراز کردن ویژگی‌های سبک CLIP با امبدینگ‌های مدل زبانی کافی است. پروجکشن‌های عمیق‌تر (مثلاً استفاده از GLU در LLaVA-NeXT یا پشته‌ای از لایه‌های اتنشن در Qwen-VL) گونه‌های توسعه‌یافته هستند؛ اما MLP دولایه خط مبنای (Baseline) استاندارد است و دقیقاً همان سازوکاری است که زیر پوسته‌ی سر پروجکشنِ (Projection head) Q-Former در BLIP-2 کار می‌کند.

لایه ابعاد پارامترها
fc1 (vision_hidden, projection_hidden) 768 * 1024 + 1024
فعال‌ساز GELU 0
fc2 (projection_hidden, text_hidden) 1024 * 512 + 512

حدود 1.3 میلیون پارامتر برای یک سر پروجکشن با ابعاد 768 -> 1024 -> 512.

تابع زیان هم‌ترازی کسینوسی

هم‌ترازی به این معنا نیست که image_emb == text_emb باشد؛ هم‌ترازی یعنی image_emb در فضای مشترک، هم‌جهت با text_emb باشد. تابع زیان کسینوسی برابر با 1 - cos_sim(image, text) است و بازه‌ای بین 0 (هم‌راستای کامل) تا 2 (کاملاً در خلاف جهت) دارد. آموزش، این مقدار را به ازای هر جفت به سمت صفر می‌برد. در درس 62 این موضوع را برای یک دسته‌ی مقابله‌ای (InfoNCE) تعمیم می‌دهیم؛ جایی که هر تصویر باید نسبت به هر شرح دیگری در دسته، به شرح خودش نزدیک‌تر باشد. در این درس از نسخه‌ی جفتی استفاده می‌کنیم تا پویایی آموزش به‌خوبی دیده شود.

ترفند انکودر منجمد

انکودر بینایی 86 میلیون پارامتر دارد. جدول متن هم شامل چند میلیون پارامتر دیگر است. آموزش همه‌ی آن‌ها روی یک پیکره‌ی ساختگی اصلاً شدنی نیست. منجمد کردن هر دو یعنی 1.3 میلیون پارامترِ پروجکشن تنها متغیرهای تغییرپذیرند و چند صد گام روی جفت‌های ساختگی برای کاهش تابع زیان کفایت می‌کند. فرم عملیاتی همه‌ی مدل‌های VLM مبتنی بر تطبیق‌دهنده (Adapter) دقیقاً همین است: بخش‌های سنگین منجمد می‌مانند و رابط (Bridge) سبک آموزش می‌بیند.

تصویر کردن مدالیته‌هارابطی میان دو فضا
MODALITY PROJECTIONThe vision encoder and the text table live in unrelated bases. A two-layer MLP, about 1.3M parameters, carries the pooled image vector across into the text embedding space, and a cosine alignment loss against the paired caption pulls the projected point onto its partner. Encoder and text table stay frozen; the bridge is the only piece that learns.فضای بینایی (768d)فضای متن (512d)منجمدمنجمدتوکن CLS تصویرکپشنخطیGELUخطیآموزش‌پذیر (1.3M پارامتر)زیان کسینوسی جفت را به هم نزدیک می‌کند
انکودر بینایی و جدول متنی در پایه‌هایی کاملاً نامرتبط قرار دارند. یک MLP دو لایه با حدود 1.3 میلیون پارامتر، بردار تجمیع‌شده‌ی تصویر را به فضای امبدینگ متن منتقل می‌کند و یک تابع زیان هم‌ترازی کسینوسی نسبت به کپشن متناظر، نقطه‌ی تصویر شده را به‌سوی جفت خود می‌کشد. انکودر و جدول متنی منجمد می‌مانند؛ رابط تنها بخشی است که آموزش می‌بیند.

پیاده‌سازی

فایل code/main.py این موارد را پیاده‌سازی می‌کند:

  • کلاس MLPProjector(in_dim, hidden_dim, out_dim): یک MLP دولایه‌ی خطی با فعال‌ساز GELU.
  • کلاس MockTextEmbedding(vocab_size, dim): یک جدول امبدینگ منجمد با مقداردهی اولیه‌ی قطعی از طریق seed.
  • تابع make_pair(seed, vocab_size): تولید یک نمونه‌ی جفت‌شده‌ی ساختگی از (تصویر، شرح). شرح‌ها دنباله‌های کوتاهی از شناسه‌ها هستند و امبدینگ شرح از میانگین‌گیری روی امبدینگ توکن‌ها به دست می‌آید.
  • تابع cosine_alignment_loss(image_emb, text_emb): هدف بهینه‌سازی 1 - cos_sim به ازای هر جفت.
  • یک حلقه‌ی آموزش که پروجکشن را برای 200 گام روی 32 جفت ساختگی (به‌صورت چرخشی) با انکودر بینایی و جدول متنِ منجمد اجرا می‌کند و تابع زیان را هر 25 گام یک‌بار نشان می‌دهد.

برای اجرا:

python3 code/main.py

خروجی: گزارش‌های آموزش نشان می‌دهند که مقدار زیان اولیه از حدود 1.07 به نزدیکی 0.80 در 200 گام می‌رسد؛ این نشان می‌دهد که پروجکشن به‌تنهایی می‌تواند توکن‌های تصویر را به سمت فضای متن بکشد. در پایان، شباهت کسینوسی (Cosine Similarity) به ازای هر جفت نیز چاپ می‌شود.

استفاده از ابزارهای واقعی

همین الگو در همه‌ی مدل‌های VLM با وزن‌های باز دیده می‌شود:

  • LLaVA 1.5: پروجکشن دولایه‌ی GELU MLP از بعد پنهان CLIP-ViT-L به بعد امبدینگ LLaMA. انکودر بینایی منجمد، LLM منجمد، آموزش فقط روی پروجکشن (سپس خروج LLM از انجماد در فاز دوم).
  • BLIP-2: مدل Q-Former تعداد 32 توکن پرسمانِ یادگرفتنی را از طریق کراس‌اتنشن (Cross-Attention) با توکن‌های تصویر پردازش می‌کند و سپس به بعد امبدینگ LLM تصویر می‌نماید. سر پروجکشن در انتهای Q-Former دقیقاً معادل همان MLP این درس است.
  • MiniGPT-4: یک پروجکشن خطی تک‌لایه از خروجی Q-Former در BLIP-2 به بعد امبدینگ Vicuna.
  • Qwen-VL: یک تطبیق‌دهنده‌ی کراس‌اتنشن با چند لایه، که قطعه‌ی پایانی آن باز هم یک پروجکشن به بعد امبدینگ مدل زبانی است.

ظاهر کار تغییر می‌کند اما نقش ثابت است: تجمیع توکن‌های تصویر، تصویر کردن به بعد امبدینگ متن، آموزش مستقل پروجکتور.

تست‌ها

فایل code/test_main.py این بخش‌ها را پوشش می‌دهد:

  • تطابق ابعاد خروجی پروجکتور با پارامتر تنظیمی out_dim
  • صفر بودن پارامترهای دارای requires_grad در جدول منجمد امبدینگ متن
  • صفر بودن زیان کسینوسی برای بردارهای یکسان و رسیدن به عدد 2 برای بردارهای کاملاً متضاد
  • برقراری جریان گرادیان (Gradient) در پروجکتور پس از یک گام رو به عقب (Backward Pass)
  • کاهش زیان در حلقه‌ی آموزش بین گام 0 تا گام 200

اجرای آن‌ها:

python3 -m unittest code/test_main.py

تمرین‌ها

  1. تجمیع با توکن CLS را با میانگین‌گیری روی 196 توکن وصله‌ای (Patch tokens) جایگزین کنید و زیان نهایی را بعد از 200 گام بسنجید. میانگین‌گیری معمولاً روی داده‌های ساختگی سریع‌تر یاد می‌گیرد؛ اما CLS روی تصاویر طبیعی کارایی داده‌ای بهتری دارد.

  2. یک پارامتر دمای اسکالرِ یادگرفتنی به زیان کسینوسی اضافه کنید (cos / tau) و ببینید اگر tau بیش از حد کوچک (نویز در گرادیان) یا بیش از حد بزرگ باشد (توقف افت زیان در مقادیر بالا) چه اتفاقی می‌افتد.

  3. ساختار MLP دولایه را با یک لایه‌ی خطی ساده جایگزین کنید و اختلاف زیان را بسنجید. غیرخطی بودن روی ویژگی‌های تصاویر طبیعی اهمیت بیشتری دارد و روی داده‌های ساختگی اثرش کمتر است.

  4. یک جریمه‌ی کوچک L2 روی وزن‌های پروجکتور اضافه کنید و اثر آن را بر هم‌ترازی کسینوسی زیر نظر بگیرید (کسینوس نسبت به مقیاس پایدار (Invariant) است، بنابراین جریمه بیشتر راستاهای بلااستفاده را جمع می‌کند).

  5. وزن‌های پروجکتور را ذخیره کنید، سپس آن‌ها را در کنار انکودر بینایی منجمد بارگذاری کرده و بدون گام رو به عقب یک دور استنتاج بگیرید. بررسی کنید که پروجکتور تنها دست‌سازه‌ی (Artifact) جدیدی است که تحویل می‌دهید؛ انکودر هنگام استقرار باز هم گذر رو به جلوی (Forward pass) خود را اجرا خواهد کرد.

اصطلاحات کلیدی

اصطلاح معنا
هم‌ترازی مدالیته (Modality alignment) فرایند قابل مقایسه کردن امبدینگ‌های تصویر و متن در یک فضای مشترک
سر پروجکشن (Projection head) ماژول کوچکی (معمولاً یک MLP دولایه) که یک فضا را به فضای دیگر تصویر می‌کند
شباهت کسینوسی (Cosine similarity) حاصل ضرب داخلی تقسیم بر حاصل‌ضرب اندازه‌های L2
انکودر منجمد (Frozen encoder) مدل بینایی (یا متنی) که برای تمام پارامترهایش requires_grad=False تنظیم شده است
پیکره‌ی ساختگی (Mock corpus) جفت‌های داده‌ی ساختگی که نیاز به دانلود مجموعه‌داده در آموزش را برطرف می‌کنند

برای مطالعه‌ی بیشتر

  • مقاله‌ی LLaVA برای آموزش دومرحله‌ای (تصویر کردن و سپس خروج LM از حالت انجماد).
  • مقاله‌ی BLIP-2 برای بررسی ساختار Q-Former به‌عنوان یک جایگزین پروجکشنِ یادگیرنده.
  • گزارش فنی Qwen-VL برای بررسی تطبیق‌دهنده‌های کراس‌اتنشن به‌عنوان سرهای پروجکشن عمیق‌تر.

خودآزمایی

به سؤال‌ها جواب بدهید تا ببینید چقدر از درس در ذهنتان مانده است.

  1. پیش از درسچرا انکودر بینایی توکن‌هایی تولید می‌کند که دکودر متنی نمی‌تواند مستقیماً از آن‌ها استفاده کند؟
  2. پیش از درسچرا در عمل یک MLP دو لایه برای هم‌ترازی مدالیته‌ها کافی است؟
  3. حین درسچرا انکودر بینایی در طول این مرحله‌ی هم‌ترازی منجمد (frozen) است؟
  4. حین درسهنگامی که دو بردار در جهت مخالف یکدیگر باشند، خروجی cosine_alignment_loss(image_emb, text_emb) چیست؟
  5. حین درسچرا برای تولید یک بردار سطح تصویر از میان 197 توکن، از تجمیع CLS استفاده می‌شود؟
  6. پس از درسکدام سیستم محیط عملیاتی (پروداکشن) بیشترین شباهت را به الگوی درس 60 دارد؟

سؤالات متداول

چرا در لایه‌ی پروجکشن از MLP دولایه استفاده می‌شود و یک تبدیل خطی کافی نیست؟

تبدیل خطی تک‌لایه تنها مقیاس را تغییر داده یا فضا را دوران می‌دهد، اما اگر دو فضای تصویر و متن انحنای ناسازگار داشته باشند، تابع فعال‌ساز غیرخطی مانند GELU در MLP دولایه خمش لازم برای انطباق هندسی دو فضا را فراهم می‌کند.

هم‌ترازی با تابع زیان کسینوسی دقیقاً چه خروجی‌ای ایجاد می‌کند؟

هم‌ترازی کسینوسی به این معنا نیست که بردار تصویر دقیقاً برابر بردار متن شود، بلکه تضمین می‌کند هر دو بردار در یک فضای مشترک زاویه‌ی نزدیک به صفر داشته باشند و هم‌جهت شوند.

چرا حین آموزش پروجکتور، انکودر تصویر و متن باید منجمد بمانند؟

انکودرها ده‌ها یا صدها میلیون پارامتر دارند و آموزش کامل آن‌ها بسیار سنگین است؛ منجمد نگه‌داشتن آن‌ها باعث می‌شود فقط 1.3 میلیون پارامتر پروجکتور تغییر کند و فرایند هم‌ترازی در چند گام و با داده‌های بسیار کمتر ممکن شود.

ما رو توی گوگل بیشتر ببین

با افزودن نکست ادمین به «منابع ترجیحی» گوگل، درس‌ها و مطالب ما را در بخش اخبار برتر جستجو بیشتر می‌بینید.