CLIP و آموزش های پیشگیری از زبان بینایی
Type: Build
Languages: Python (stdlib, InfoNCE + sigmoid loss implementations)
Prerequisites: Phase 12 · 01 (ViT patches), Phase 7 (Transformers)
Time: ~180 minutes
اهداف یادگیری
- از اطلاعات متقابل از دست دادن InfoNCE بازیافت کنید و یک نسخه vektorized با ثبات عددی پیاده سازی کنید.
- توضیح دهید که چرا کاهش جفت بندی سیگمائید (SigLIP) بدون نیاز به نرمترین قیمت های عمومی به دسته 32768+ افزایش می یابد.
- با ساخت قالب های متن طبقه بندی ImageNet را با صفر شوت اجرا کنید (
a photo of a {class}) و مصرف argmax بر روی مشابهی کوسین. - چهار اهرم CLIP / SigLIP که قبل از تمرین به شما می دهد را نام دهید: اندازه دسته، دمای، قالب فوری، کیفیت داده ها.
مشکل
دیدگاه پیش از CLIP تحت نظارت بود. مجموعه داده های برچسب شده را جمع آوری کنید (تصاویر تصویری: 1.2M، 1000 کلاس) ، یک CNN را آموزش دهید، آن را ارسال کنید. برچسب ها گران هستند، برچسب ها به آنچه برچسب ها می توانند بر روی آن توافق کنند، و برچسب ها بدون تنظیم دقیق به وظایف جدید منتقل نمی شوند.
در این وب، بیش از یک میلیارد جفت با برچسب های نرم رایگان وجود دارد. یک تصویر از یک ریترویور طلایی با متن متناوب "ماکس سگ من در پارک" دارای یک سیگنال نظارت است.
پاسخ CLIP: جفت های تصویر-تکلیف به عنوان یک کار مطابقت پذیر. با توجه به دسته ای از تصاویر N و تکلیف N، یاد بگیرید که هر تصویر را با عنوان خود با ضریب N-1 منحرف کنید. نظارت این است که "این دو چیز به هم تعلق دارند؛ این N-1 نمی کنند". هیچ برچسب کلاس. هیچ تشریح انسانی. فقط یک از دست دادن متناقض.
فضای گنجانده شده بیشتر از آنچه برای CLIP آموزش داده شده است. تصویرنت صفر عکس کار می کند زیرا "تصاویر یک گربه" در نزدیکی عکس های گربه ها قرار می گیرد که هرگز به طور صریح به گربه ها برچسب گذاری نشده است. این شرط بندی است که هر 2026 VLM را به وجود آورد.
مفهوم
کدگر دوگانه
CLIP دو برج داره:
- کدگر تصویر
f: ViT یا ResNet، یک ویکتور D-dim را در هر تصویر تولید می کند. - کدرس متن
g: ترانسفارمر کوچک، یک ویکتور D-dim را در هر عنوان تولید می کند.
هر دو برج به اندازه ي طول واحد خود به حالت طبيعي برميگردن.cos(f(x), g(y)) = f(x)^T g(y)چون هر دو واحد استاندارد هستند.
برای یک دسته از زوج های N (تصاویر، عنوان) ، ماتریس شباهت را بسازید Sشکل(N, N):
S[i, j] = cos(f(x_i), g(y_j)) / tauکجاtauدرجه حرارت آموخته شده است (CLIP به 0.07 شروع می شود؛ در فضای ثبت آموخته شده است).
خسارت InfoNCE
CLIP از یک انترپی متقابل متقابل در سطر ها و ستون ها استفاده می کند:
loss_i2t = CE(S, labels=identity) # each image's positive is its own caption
loss_t2i = CE(S^T, labels=identity) # each caption's positive is its own image
loss = (loss_i2t + loss_t2i) / 2این InfoNCE است. نرمترین مقدار در CE هر تصویر را مجبور می کند تا با عنوان خود بیشتر از هر عنوان دیگر در دسته مطابقت داشته باشد. "منفی" همه موارد دسته دیگر است. دسته های بزرگتر = منفی بیشتر = سیگنال قوی تر. CLIP در دسته 32k آموزش دیده است؛ مقیاس مهم است.
دمای
tauکنترل تیز بودن softmax. tau پایین → توزیع تیز، اثر معدن منفی سخت. tau بالا → نرم، همه نمونه ها کمک می کنند. CLIP یاد می گیرد log(1/tau) ، برای جلوگیری از سقوط برش می کند. SigLIP 2 tau اولیه را اصلاح می کند و به جای آن یک تعصب آموخته را استفاده می کند.
چرا سیگمائید بهتر است (SigLIP)
نرم ماکس نیاز به تمام ماتریس شباهت در همگام سازی دارد. در آموزش توزیع شده شما باید همه گنجانده ها را به هر نسخه جمع کنید، سپس نرم ماکس را انجام دهید. این در اندازه جهانی برای ارتباطات مربع است.
SigLIP softmax را با عنصر هوشمند sigmoid جایگزین می کند: برای هر جفت (i, j)، از دست دادن طبقه بندی دوگانه از "آیا این زوج مطابقت دارد؟" برچسب های کلاس مثبت دیگاکال هستند، همه چیز دیگر منفی است. از دست دادن این است:
L = -1/N sum over (i, j) [ y_ij log sigmoid(S[i,j]) + (1-y_ij) log sigmoid(-S[i,j]) ]y_ij = 1اگرi == jهر جفت از دست دادن مستقل است. هیچ جمع آوری لازم نیست. هر GPU بلاک محلی و مبالغ خود را محاسبه می کند. SigLIP 2 به دسته 32k-512k ارزان است که CLIP به طور متناسب بیشتر ارتباطات نیاز دارد.
طبقه بندی صفر شات
با توجه به N نام کلاس، برای هر کلاس یک قالب متن ایجاد کنید:
"a photo of a {class}"هر قالب را با کدرس متن ادغام کنید. تصویر خود را با کدرس تصویر ادغام کنید. Argmax cosine شباهت = کلاس پیش بینی شده. هیچ آموزش در مورد کلاس های هدف نیست.
قالب های فوری مهم هستند. کاغذ اصلی CLIP از 80 قالب در هر کلاس استفاده می کرد (سطح، هنری، عکس، نقاشی و غیره) و متوسط گنجانده ها را محاسبه می کرد. +3 امتیاز ImageNet. استفاده مدرن معمولا یک یا دو قالب را انتخاب می کند.
صوتیات خطی و تنظیمات دقیق
صفر-شوت یک خط است. یک ساند خطی (در بالای ویژگی های CLIP منجمد برای کلاس های هدف شما یک لایه خطی را آموزش دهید) صفر-شوت را در وظایف در دامنه شکست می دهد. تنظیم کامل ساند خطی را در دامنه شکست می دهد اما می تواند انتقال صفر-شوت را آسیب ببرد. سه رژیم با سه تعادل.
سیگلپ 2: NaFlex و ویژگی های کثیف
سیگلپ 2 (2025) اضافه می کند:
- NaFlex: یک مدل با نسبت های مختلف و قطعنامه های متغیر کار می کند.
- ویژگی های کثافت بهتر برای تقسیم بندی و تخمین عمق، هدف استفاده به عنوان یک ستون فقرات منجمد در VLMs.
- چند زبانی: آموزش در بیش از 100 زبان که CLIP فقط به زبان انگلیسی بود.
- در مقیاس پارام 1B که CLIP در 400M به اوج رسيد
در VLM های باز 2026، SigLIP 2 SO400m/14 برج دید پیش فرض است. CLIP همچنان پیش فرض برای بازیافت متن تصویر خالص باقی می ماند که در آن توزیع آموزش خاص LAION-2B با الگوی جستجو شما مطابقت دارد.
ALIGN، BASIC، OpenCLIP، EVA-CLIP
ALIGN (گوگل، 2021): همان ایده مانند CLIP، 1.8B مقیاس جفت، 90% شور. مقیاس های داده های شور ثابت شده. OpenCLIP (LAION): باز کردن باز سازی CLIP در LAION-400M / 2B، مقیاس های متعدد، نقطه باز کردن. EVA-CLIP: از مدل سازی تصویر ماسک شده آغاز می کند؛ ستون فقرات قوی برای VLMs. BASIC: CLIP + ALIGN هیبریدی گوگل. همه خانواده مشابه، داده های مختلف و تنظیم.
سقف صفر شات
مدل های کلاس CLIP حدود 76% ImageNet صفر-shot (CLIP-G، OpenCLIP-G) را پوشش می دهند. فراتر از آن نیاز به داده های بسیار بزرگتر (SigLIP 2 80٪ +) یا تغییرات معماری (سرهای تحت نظارت، پارامترهای بیشتر) دارد. معیار اشباع کننده است؛ ارزش واقعی فضای گنجانده ای است که VLM های زیر جریان مصرف می کنند.
ازش استفاده کن
code/main.pyابزار:
- یک کدگر دوگانه بازی (ميزه های تصویری مبتنی بر هش، ویژگی های متن) تا بتوانید شکل InfoNCE را بدون numpy مشاهده کنید.
- InfoNCE در پایتون خالص (ثبات عددی از طریق log-sum-exp) از دست می رود.
- برای مقایسه، ضایعات جفت سیگمائید
- یک روش طبقه بندی صفر: شباهت کوسین را با مجموعه ای از پیام های متن محاسبه کنید، argmax برای پیش بینی.
و به منحنی خسارت نگاه کن اعداد مطلق بازی هستند شکل آن با چیزی که یک مربی واقعی CLIP می فرستد مطابقت دارد
-باده
این درس به ما کمک می کندoutputs/skill-clip-zero-shot.md. با توجه به مجموعه ای از تصاویر (به وسیله مسیر) و یک لیست از کلاس های هدف، آن را ایجاد پیام های متن با قالب CLIP، هر دو طرف را با یک نقطه کنترل مشخص (به عنوان مثال، openai/clip-vit-large-patch14), و پیش بینی های برتر 1 / برتر 5 با نمره های مشابهی را باز می گرداند. مهارت از ادعاهای مربوط به کلاس هایی که در لیست فوری نیستند، انکار می کند.
تمرینات
- InfoNCE را برای یک دسته از 4 جفت با دست اجرا کنید. ماتریس شباهت 4x4 را بسازید، softmax را اجرا کنید، قطب قطبی را انتخاب کنید، انتروپی متقاطع را محاسبه کنید. پیاده سازی پایتون خود را با این محاسبه دستی تأیید کنید.
- سیگلپ از پارامتر تعصب استفاده می کند
bعلاوه بر درجه حرارت:S'[i,j] = S[i,j]/tau + b. نقشش چيهbبازی زمانی که دسته دارای عدم تعادل کلاس بزرگی است (بسیاری از منفی ها بیشتر از مثبت ها در هر ردیف) ؟
- یک دسته بندی صفر شات برای گربه ها در مقابل سگ ها بسازید. دو قالب سریع را امتحان کنید:
a photo of a {class}وa picture of a {class}. دقت را بر اساس 100 تصویر تست اندازه گیری کنید . آیا مجموعه قالب ها تک ضرب می کند؟
- هزینه ارتباطات softmax InfoNCE vs sigmoid را برای یک 512-GPU در دسته 32k محاسبه کنید. کدام مقیاس به عنوان O(N) ، که به عنوان O(N ^ 2)؟ بخش SigLIP را یاد بگیرید.
- مقاله قوانین مقیاس بندی OpenCLIP را بخوانید (arXiv:2212.07143, Cherti et al.). نتیجه گیری آنها برای مقیاس بندی داده ها را از اعداد بازنشسته کنید: در اندازه مدل ثابت، رابطه ی لوج-لینیر بین دقت صفر شوت ImageNet و اندازه داده های آموزش چیست؟
اصطلاحات کلیدی
| Term | What people say | What it actually means |
|---|---|---|
| InfoNCE | "Contrastive loss" | Cross-entropy over a batch's similarity matrix; each item's positive is its paired item, negatives are everything else |
| Sigmoid loss | "SigLIP loss" | Per-pair binary cross-entropy; no softmax, no all-gather, scales cheaply in distributed training |
| Temperature | "tau" | Scalar that scales logits before softmax/sigmoid; controls sharpness of the distribution |
| Zero-shot | "no-finetune classification" | Use text prompts to construct class embeddings and classify by cosine similarity; no training on target classes |
| Prompt template | "a photo of a ..." | Text scaffold around a class name; affects zero-shot accuracy by 1-5 points |
| Dual encoder | "Two-tower" | One image encoder + one text encoder, outputs in shared D-dim space |
| Hard negative | "Tough distractor" | A negative similar enough to the positive that the model has to work to separate them |
| Linear probe | "Frozen + one layer" | Train only a linear classifier on top of frozen features; measures feature quality |
| NaFlex | "Native flexible resolution" | SigLIP 2 capability to ingest images at any aspect ratio and resolution without resizing |
| Temperature scaling | "log-parametrized tau" | CLIP parametrizes log(1/tau) so gradients behave; clips to prevent collapse to near-zero tau |
خواندن بیشتر
- Radford et al. — Learning Transferable Visual Models From Natural Language Supervision (arXiv:2103.00020) کاغذ CLIP
- Zhai et al. — Sigmoid Loss for Language Image Pre-Training (arXiv:2303.15343) سیگلپ
- Tschannen et al. — SigLIP 2 (arXiv:2502.14786) چند زبانه + NaFlex
- Jia et al. — ALIGN (arXiv:2102.05918) مقیاس با داده های وب سر و صدا.
- Cherti et al. — Reproducible scaling laws for contrastive language-image learning (arXiv:2212.07143)قوانین مقیاس بندی OpenCLIP
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.