آموزشترنسفورمرها

درس ۵۲ از ۶۲، هوش مصنوعی، حدود ۳۶ دقیقه خواندن

ترنسفورمر بینایی (ViT)

جواب کوتاه

ترنسفورمر بینایی، یا ViT، کوتاه‌شده‌ی Vision Transformer، یعنی همون ترنسفورمر متن، که عکس رو مثل یه جمله می‌خونه. عکس به تکه‌های مربعی کوچیک، مثلا ۱۶ در ۱۶ پیکسل، بریده می‌شه؛ هر تکه به یه ردیف عدد صاف می‌شه و با یه ضرب ماتریسی به یه بردار تبدیل می‌شه، مثل جاسازی یه کلمه. یه بردار جای هر تکه بهش اضافه می‌شه، یه تکه‌ی خاص به اسم تکه‌ی دسته هم اول صف می‌ره، و همه با هم از لایه‌های ترنسفورمر رد می‌شن. چون فرض‌های پیش‌ساخته‌ی شبکه‌های پیچشی رو نداره، با داده‌ی کم ضعیف‌تره، ولی با داده‌ی زیاد بهتر می‌شه، و امروز چشم خیلی از مدل‌های چندحالته‌ست.

یعنی چی

یه پازل رو در نظر بگیرید. عکس رو تیکه‌تیکه می‌کنیم، هر تیکه رو مثل یه کلمه می‌دیم به یه ترنسفورمر، و پشت هر تیکه یه شماره می‌نویسیم که بدونه جاش کجای عکس بوده. ترنسفورمر بعد، مثل یه جمله، می‌فهمه این تیکه‌ها با هم چی می‌گن؛ مثلا این عکس یه گربه‌ست.

ترنسفورمر بینایی، یا ViT، کوتاه‌شده‌ی Vision Transformer، یعنی «ترنسفورمر بینایی»، دقیقا همینه. Vision یعنی بینایی. سال ۲۰۲۰ یه پژوهش با اسم «یه عکس ارزش ۱۶ در ۱۶ کلمه رو داره» نشون داد که همون ترنسفورمری که برای متن ساخته شده بود، تقریبا بی هیچ تغییری، می‌تونه عکس ببینه؛ به شرطی که عکس رو درست به «کلمه» تبدیل کنیم.

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

چرا پیکسل به پیکسل نه

اولین فکری که به ذهن می‌رسه اینه که هر پیکسل رو یه کلمه بگیریم. ولی یادتونه هزینه‌ی توجه با مربع تعداد تکه‌ها بالا می‌ره. یه عکس کوچیک ۲۲۴ در ۲۲۴ پیکسل، ۵۰ هزار و ۱۷۶ پیکسل داره:

اگه هر پیکسل یه تکه باشه، توجه باید برای حدود ۲٫۵ میلیارد جفت امتیاز حساب کنه، اون هم توی هر لایه و هر سر. این خیلی زیاده. ولی اگه تکه‌های ۱۶ در ۱۶ بگیریم، فقط ۱۹۶ تکه داریم، و حدود ۳۸ هزار جفت. حدود ۶۵ هزار برابر کمتر. تازه یه پیکسل تنها، که فقط سه عدد رنگه، معنی زیادی نداره، ولی یه تکه‌ی ۱۶ در ۱۶ می‌تونه یه گوشه‌ی چشم یا یه تیکه از لبه‌ی یه میز باشه.

پازل

پس عکس رو مثل یه پازل به تکه‌های مربعی هم‌اندازه می‌بریم. با عکس ۲۲۴ و تکه‌ی ۱۶، توی هر ردیف ۲۲۴ تقسیم بر ۱۶، یعنی ۱۴ تکه داریم، و ۱۴ ردیف؛ روی هم ۱۴ ضرب در ۱۴، یعنی ۱۹۶ تکه:

بعد این تکه‌ها رو مثل خوندن یه کتاب، ردیف به ردیف، پشت هم می‌چینیم؛ یه صف ۱۹۶ تایی. حالا عکس شده یه جمله‌ی ۱۹۶ کلمه‌ای. تکه‌ها هم‌پوشانی ندارن؛ هر پیکسل دقیقا توی یه تکه‌ست. اگه اندازه‌ی عکس بر اندازه‌ی تکه بخش‌پذیر نباشه، معمولا عکس رو اول کمی کوچیک یا بزرگ یا بریده می‌کنن تا بخش‌پذیر بشه.

صاف کردن و طرح

هر تکه، ۱۶ در ۱۶ پیکسله و هر پیکسل سه عدد رنگ داره؛ قرمز، سبز و آبی. پس یه تکه، ۱۶ ضرب در ۱۶ ضرب در ۳، یعنی ۷۶۸ عدده. این‌ها رو پشت سر هم توی یه ردیف می‌چینیم؛ به این کار صاف کردن می‌گن:

بعد این ردیف ۷۶۸ تایی رو در یه ماتریس یادگرفته‌شده ضرب می‌کنیم تا بشه یه بردار به اندازه‌ای که مدل باهاش کار می‌کنه، مثلا ۷۶۸ یا ۱۰۲۴. به این طرح خطی یا Linear Projection می‌گن. این دقیقا همون نقشی رو داره که جاسازی کلمه توی مدل‌های متنی داره؛ با این فرق که این‌جا جدول کلمه نداریم، چون تعداد تکه‌های ممکن بی‌نهایته، پس به‌جای نگاه کردن توی جدول، ضرب می‌کنیم.

یه نکته‌ی جالب؛ این ضرب، از نظر حساب، دقیقا مثل یه لایه‌ی پیچشیه که پنجره‌ش ۱۶ در ۱۶ و گامش هم ۱۶ تاست. برای همین خیلی از پیاده‌سازی‌ها همین‌طوری، با یه لایه‌ی پیچشی، تکه‌ها رو می‌سازن. یعنی ترنسفورمر بینایی، اولش یه پیچش خیلی ساده داره، و بعد همه‌چیز توجهه.

تکه‌ی دسته

حالا ۱۹۶ بردار داریم. ولی آخر کار، برای دسته‌بندی، یه جواب برای کل عکس می‌خوایم، نه ۱۹۶ تا. یه راه اینه که یه تکه‌ی اضافه، که مال هیچ جای عکس نیست، اول صف بذاریم. بهش تکه‌ی دسته یا CLS، کوتاه‌شده‌ی Classification، یعنی «دسته‌بندی»، می‌گن. مقدار اولش یه بردار یادگرفته‌شده‌ست که برای همه‌ی عکس‌ها یکیه.

این تکه، توی هر لایه، مثل بقیه به همه‌ی تکه‌ها توجه می‌کنه و کم‌کم خلاصه‌ی کل عکس رو جمع می‌کنه. آخر کار، فقط خروجی همین تکه به یه لایه‌ی کوچیک داده می‌شه که می‌گه عکس مال کدوم دسته‌ست. این فکر از مدل‌های متنی اومد که همین کار رو برای دسته‌بندی جمله می‌کردن. یه راه دیگه، که بعدا رایج‌تر هم شد، اینه که تکه‌ی دسته نداشته باشیم و آخر کار، میانگین همه‌ی ۱۹۶ خروجی رو بگیریم؛ هر دو نزدیک به هم کار می‌کنن.

جای تکه‌ها

توجه، خودش ترتیب رو نمی‌فهمه؛ اگه تکه‌ها رو جابه‌جا کنیم، فقط جای خروجی‌ها جابه‌جا می‌شه. برای همین، مثل رمزگذاری جای کلمه‌ها توی متن، به هر تکه یه بردار جای مخصوص اضافه می‌شه. توی پژوهش ۲۰۲۰، این برداره یادگرفته‌شده بودن، یکی برای هر شماره، از صفر تا ۱۹۶:

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

یه گیر کوچیک هم هست. بردارها برای ۱۹۶ جا یاد گرفته شدن. اگه بعدا عکس بزرگ‌تر بدیم، مثلا ۳۸۴ پیکسل، که می‌شه ۲۴ در ۲۴ تکه، جاهای تازه بردار ندارن. راه رایج اینه که جدول ۱۴ در ۱۴ بردارها رو، مثل یه عکس کوچیک، با درون‌یابی به ۲۴ در ۲۴ بزرگ کنن؛ همون کاری که برای بزرگ کردن یه عکس معمولی می‌کنیم.

رمزگذار و سر

از این به بعد، همه‌چیز همون ترنسفورمر متنه. صف ۱۹۷ تایی، یعنی ۱۹۶ تکه و یه تکه‌ی دسته، از چند بلوک پشت هم رد می‌شه؛ هر بلوک توجه چندسر، شبکه‌ی پیش‌خور، نرمال‌سازی و میون‌بر. چون برای دسته‌بندی عکس آینده‌ای وجود نداره، ماسک نداریم؛ هر تکه به همه‌ی تکه‌ها، چه قبل چه بعد، نگاه می‌کنه. به این، ترنسفورمر فقط‌رمزگذار می‌گن.

اندازه‌های رایج توی پژوهش اول سه تا بود؛ کوچیک با ۱۲ لایه و بردار ۷۶۸ و حدود ۸۶ میلیون پارامتر، بزرگ با ۲۴ لایه و بردار ۱۰۲۴ و حدود ۳۰۷ میلیون، و خیلی بزرگ با ۳۲ لایه و حدود ۶۳۲ میلیون. آخر کار، یه سر کوچیک، معمولا فقط یه لایه، خروجی تکه‌ی دسته رو به امتیاز هر دسته تبدیل می‌کنه. برای کارهای دیگه، مثل پیدا کردن شیء، این سر عوض می‌شه، ولی بدنه همونه.

دورگه

پژوهش ۲۰۲۰ یه نسخه‌ی دورگه هم امتحان کرد. به‌جای بریدن خود عکس، اول عکس از چند لایه‌ی یه شبکه‌ی پیچشی رد می‌شه، و بعد نقشه‌ی ویژگی‌ای که بیرون میاد، به تکه‌ها بریده می‌شه. یعنی کارهای محلی ریز، مثل پیدا کردن لبه‌ها، رو شبکه‌ی پیچشی می‌کنه، و رابطه‌های بزرگ‌تر رو ترنسفورمر.

نتیجه این بود که با حساب کم، دورگه کمی بهتر بود، چون فرض‌های پیش‌ساخته کمک می‌کرد. ولی با بزرگ شدن مدل و حساب بیشتر، فرقش از بین رفت، و ترنسفورمر خالص همون‌قدر خوب شد. با این حال، خیلی از مدل‌های بعدی، مثلا برای پیدا کردن شیء، هنوز یه شروع کوچیک پیچشی دارن، چون ارزون و پایداره.

اندازه‌ی تکه

اندازه‌ی تکه یه بده‌بستون مهمه. تکه‌ی کوچیک‌تر یعنی جزئیات بیشتر، ولی تکه‌های بیشتر. با تکه‌ی ۸ به جای ۱۶، عکس ۲۲۴ می‌شه ۲۸ در ۲۸، یعنی ۷۸۴ تکه؛ چهار برابر تکه، و چون توجه مربعیه، ۱۶ برابر جفت. با تکه‌ی ۳۲، فقط ۴۹ تکه داریم و حساب خیلی ارزونه، ولی هر تکه اون‌قدر بزرگه که جزئیات کوچیک توش گم می‌شن.

پژوهش‌ها نشون دادن تکه‌ی کوچیک‌تر، با حساب بیشتر، معمولا دقت بهتری می‌ده. برای همین اسم مدل‌ها معمولا اندازه‌ی تکه رو هم داره، مثلا «بزرگ با تکه‌ی ۱۶» یا «کوچیک با تکه‌ی ۸». برای کارهایی که جزئیات ریز مهمه، مثل خوندن متن توی عکس یا عکس‌های پزشکی، تکه‌ی کوچیک‌تر یا وضوح بالاتر لازمه، که هر دو تعداد تکه رو زیاد می‌کنن.

فرض‌های پیش‌ساخته

شبکه‌ی پیچشی از روز اول دو تا فرض درباره‌ی عکس داره. یک، محلی بودن؛ هر لایه فقط یه پنجره‌ی کوچیک، مثلا ۳ در ۳، رو نگاه می‌کنه، چون پیکسل‌های نزدیک به هم ربط دارن. دو، جابه‌جایی؛ یه فیلتر، همه‌جای عکس یکیه، پس گربه هر جای عکس باشه، همون‌طوری دیده می‌شه:

به این فرض‌ها سوگیری استقرایی یا Inductive Bias می‌گن؛ یعنی چیزهایی که مدل پیش از دیدن داده «فرض» می‌کنه. ترنسفورمر بینایی تقریبا هیچ‌کدومشون رو نداره؛ از لایه‌ی اول، هر تکه می‌تونه به هر تکه‌ی دیگه نگاه کنه، و این‌که تکه‌های نزدیک مهم‌ترن رو باید خودش از داده یاد بگیره. این هم خوبیه هم بدی. خوبیه چون محدود نیست و می‌تونه رابطه‌های دور رو زود ببینه. بدیه چون چیزی رو که شبکه‌ی پیچشی مجانی داره، باید با داده یاد بگیره.

داده‌ی زیاد می‌خواد

نتیجه‌ی همین نداشتن فرض‌ها توی پژوهش ۲۰۲۰ دیده شد. وقتی ترنسفورمر بینایی فقط روی یه مجموعه‌ی عمومی حدود ۱٫۳ میلیون عکسی آموزش دید، از شبکه‌های پیچشی هم‌اندازه کمی بدتر بود. ولی وقتی اول روی مجموعه‌های خیلی بزرگ‌تر، یکی ۱۴ میلیون عکس و یکی حدود ۳۰۰ میلیون عکس، پیش‌آموزش دید و بعد روی همون ۱٫۳ میلیون تنظیم شد، از بهترین شبکه‌های پیچشی اون زمان بهتر شد، و با حساب کمتر.

یعنی وقتی داده کمه، فرض‌های پیش‌ساخته کمک می‌کنن، چون مدل لازم نیست همه‌چیز رو از صفر یاد بگیره. وقتی داده خیلی زیاده، همون فرض‌ها جلوی مدل رو می‌گیرن، و مدلی که آزادتره، الگوهای بهتری پیدا می‌کنه. مثل دانش‌آموزی که با یه قاعده‌ی حفظی زود شروع می‌کنه، در برابر دانش‌آموزی که کندتر شروع می‌کنه ولی با تمرین زیاد، خودش قاعده‌های بهتری کشف می‌کنه.

با داده‌ی کم

همه که ۳۰۰ میلیون عکس ندارن. یه پژوهش ۲۰۲۱ نشون داد ترنسفورمر بینایی رو می‌شه فقط با همون ۱٫۳ میلیون عکس هم خوب آموزش داد، با دو ترفند. اولی، افزایش داده‌ی خیلی زیاد؛ هر عکس هر بار با برش، چرخش، تغییر رنگ، ترکیب دو عکس با هم و پوشوندن تیکه‌هایی ازش دیده می‌شه، پس مدل عملا عکس‌های خیلی بیشتری می‌بینه.

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

چی می‌بینه

پژوهش ۲۰۲۰ یه چیز جالب دیگه هم اندازه گرفت؛ هر سر توجه، به‌طور میانگین، چقدر دور رو نگاه می‌کنه. توی لایه‌های اول، بعضی سرها فقط به همسایه‌ها نگاه می‌کردن، شبیه پنجره‌ی کوچیک شبکه‌ی پیچشی، و بعضی سرها از همون اول به کل عکس. با رفتن به لایه‌های بالاتر، تقریبا همه‌ی سرها به کل عکس نگاه می‌کردن.

یعنی مدل خودش یاد گرفت هم کار محلی کنه و هم سراسری، و از کجا شروع کنه. شبکه‌ی پیچشی برای دیدن کل عکس باید صبر کنه تا لایه‌های زیادی رد بشن، ولی ترنسفورمر بینایی، اگه لازم باشه، از لایه‌ی اول می‌تونه. نقشه‌ی توجه تکه‌ی دسته هم معمولا روی بخش‌هایی از عکس متمرکز می‌شه که برای دسته‌بندی مهمن؛ مثلا سر و گوش گربه، نه دیوار پشتش.

سلسله‌مراتب و پنجره‌ها

ترنسفورمر بینایی ساده، از اول تا آخر، همون ۱۹۶ تکه رو نگه می‌داره. ولی خیلی از کارهای بینایی، مثل پیدا کردن شیء‌های کوچیک و بزرگ با هم، به چند اندازه نیاز دارن؛ جزئیات ریز توی لایه‌های پایین، و شکل‌های کلی توی بالا. شبکه‌های پیچشی این رو با کوچیک کردن تدریجی نقشه‌ها دارن.

یه پژوهش ۲۰۲۱ همین رو به ترنسفورمر آورد. از تکه‌های کوچیک، مثلا ۴ در ۴، شروع کرد، و هر چند لایه، هر چهار تکه‌ی کنار هم رو یکی کرد؛ پس تعداد تکه‌ها کم و بردارها پرمعناتر می‌شدن. برای این‌که تکه‌های زیاد اولیه حساب مربعی گرون نسازن، توجه فقط درون پنجره‌های کوچیک حساب می‌شد، و لایه‌ی بعد پنجره‌ها نیم‌پنجره جابه‌جا می‌شدن تا اطلاعات از مرزها رد بشه. این مدل برای کارهای بینایی پیچیده خیلی پرکاربرد شد.

یادگیری بی برچسب

برچسب زدن میلیون‌ها عکس گرونه. یه راه اینه که مدل از خود عکس‌ها، بی برچسب، یاد بگیره. یه پژوهش ۲۰۲۱ فکری شبیه پوشوندن کلمه‌ها توی متن رو به عکس آورد؛ ۷۵ درصد تکه‌ها رو تصادفی پنهان می‌کنه و از مدل می‌خواد بقیه‌ی عکس رو بسازه:

۷۵ درصد خیلی بیشتر از متنه، که معمولا حدود ۱۵ درصد پوشونده می‌شه. دلیلش اینه که عکس پر از تکرار و اضافه‌ست؛ اگه کم بپوشونیم، مدل با کپی کردن از همسایه‌ها جواب رو پیدا می‌کنه و چیزی یاد نمی‌گیره. یه ترفند هوشمندانه هم داشت؛ رمزگذار فقط ۲۵ درصد تکه‌های دیده‌شده رو پردازش می‌کرد، پس آموزش حدود سه برابر یا بیشتر تندتر شد.

یه پژوهش دیگه‌ی همون سال یه راه دیگه رفت؛ دو نسخه‌ی متفاوت از یه عکس، مثلا دو برش، به دو مدل داده می‌شد، و یکی یاد می‌گرفت خروجیش شبیه اون یکی بشه. نتیجه‌ی جالبش این بود که نقشه‌ی توجه تکه‌ی دسته، بی این‌که کسی بهش یاد داده باشه، شیء اصلی عکس رو از پس‌زمینه جدا می‌کرد.

تکه‌های ثبت

سال ۲۰۲۳ پژوهشگرها یه چیز عجیب توی نقشه‌های توجه مدل‌های بزرگ دیدن؛ چند تکه، معمولا توی پس‌زمینه‌ی ساده مثل آسمون یا دیوار، بردارهای خیلی بزرگی داشتن و توجه زیادی می‌گرفتن، در حالی که اون‌جا چیز مهمی نبود. فهمیدن مدل از این تکه‌های کم‌اهمیت به‌عنوان یه دفترچه‌ی یادداشت استفاده می‌کنه و اطلاعات کلی عکس رو اون‌جا نگه می‌داره.

راه حلشون ساده بود؛ چند تکه‌ی اضافه، که مال هیچ جای عکس نیستن، به صف اضافه کردن، که بهشون تکه‌ی ثبت یا Register می‌گن. مدل از این‌ها برای یادداشت استفاده کرد، تکه‌های پس‌زمینه تمیز شدن، و نقشه‌های توجه خیلی خواناتر شدن. خیلی شبیه همون لنگر توجه توی مدل‌های متنیه؛ مدل یه جای خالی لازم داره تا اضافه‌هاش رو بریزه.

وضوح و نسبت‌های متفاوت

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

یه پژوهش ۲۰۲۳ یه قدم جلوتر رفت؛ چند عکس با اندازه‌ها و نسبت‌های مختلف رو، هر کدوم با تعداد تکه‌ی خودش، پشت سر هم توی یه صف بسته‌بندی کرد، و با ماسک جلوی این رو گرفت که تکه‌های یه عکس به عکس دیگه نگاه کنن. این‌طوری هیچ عکسی کش نمیاد، و جای خالی هم هدر نمی‌ره. این فکر برای مدل‌های چندحالته، که عکس‌های هر اندازه‌ای می‌گیرن، خیلی مهم شد.

ویدیو

ویدیو، همون‌طور که توی درس ویدیو می‌بینیم، چند عکسه که پشت هم میان. اگه هر فریم رو جدا تکه کنیم، یه ویدیوی ۳۲ فریمی با عکس‌های ۲۲۴، می‌شه ۳۲ ضرب در ۱۹۶، یعنی ۶۲۷۲ تکه؛ و توجه کامل روش نزدیک ۴۰ میلیون جفت. سال ۲۰۲۱ دو پژوهش راه‌هایی برای کم کردن این پیشنهاد دادن.

اولی، تکه‌های سه‌بعدی؛ به‌جای مربع ۱۶ در ۱۶ از یه فریم، یه مکعب ۱۶ در ۱۶ از دو فریم پشت هم بریده می‌شه، پس تعداد تکه‌ها نصف می‌شه. دومی، جدا کردن توجه؛ هر تکه یه بار فقط به تکه‌های همون جا توی فریم‌های دیگه نگاه می‌کنه، یعنی در زمان، و یه بار فقط به تکه‌های همون فریم، یعنی در مکان. همون فکر توجه پراکنده‌ی درس قبلی؛ دو قدم ارزون به‌جای یه قدم گرون، و باز هم همه به همه می‌رسن.

در برابر شبکه‌ی پیچشی امروز

بعد از این‌که ترنسفورمر بینایی برنده شد، یه پژوهش ۲۰۲۲ یه سوال جالب پرسید؛ برتری از خود توجه بود، یا از چیزهای دیگه‌ای که همراهش اومد، مثل روش آموزش مدرن، افزایش داده‌ی زیاد، نرمال‌سازی لایه و پنجره‌های بزرگ‌تر؟ یه شبکه‌ی پیچشی معمولی رو برداشتن و قدم به قدم این درس‌ها رو بهش دادن.

نتیجه این شد که شبکه‌ی پیچشی نوسازی‌شده، با همون اندازه و حساب، هم‌سطح ترنسفورمرهای بینایی شد. درسش اینه که بخشی از برتری ترنسفورمر بینایی، از دستور آموزش و جزئیات طراحی بود، نه فقط از توجه. امروز انتخاب بین این دو بیشتر به کار بستگی داره؛ ترنسفورمر برای مدل‌های خیلی بزرگ و کار با متن کنار عکس، و پیچشی برای دستگاه‌های کوچیک و کارهایی که تاخیر کم مهمه.

راه به کار بردن

اگه بخواید برای کار خودتون، مثلا تشخیص بیماری برگ گیاه از روی عکس، از ترنسفورمر بینایی استفاده کنید، تقریبا هیچ‌وقت از صفر آموزش نمی‌دید. یک، یه مدل پیش‌آموزش‌دیده روی عکس‌های زیاد برمی‌دارید. دو، سر آخرش رو، که برای دسته‌های قدیمی بود، با یه سر تازه برای دسته‌های خودتون عوض می‌کنید. سه، با عکس‌های خودتون آموزش می‌دید.

دو راه برای قدم سه هست. یکی کاوش خطی، که بدنه ثابت می‌مونه و فقط سر آخر آموزش می‌بینه؛ خیلی ارزون و با داده‌ی کم هم خوبه. دیگری تنظیم دقیق کامل، که همه‌ی وزن‌ها کمی عوض می‌شن؛ معمولا دقیق‌تره ولی داده و حساب بیشتری می‌خواد. یه ترفند رایج اینه که تنظیم دقیق رو با وضوح بالاتر از پیش‌آموزش انجام بدن، که با درون‌یابی بردارهای جا ممکن می‌شه و معمولا دقت رو بالا می‌بره.

یه راه سوم هم هست که حتی آموزش نمی‌خواد. اگه رمزگذار با پیوند متن و تصویر آموزش دیده باشه، بردار عکس رو با بردار چند جمله مثل «عکس یه برگ سالم» و «عکس یه برگ بیمار» مقایسه می‌کنید، و نزدیک‌ترین جمله جوابه. بهش دسته‌بندی بی نمونه می‌گن؛ دقتش از تنظیم دقیق کمتره، ولی برای شروع سریع عالیه.

کجاها به کار می‌ره

دسته‌بندی فقط شروع کار بود. یه پژوهش ۲۰۲۰ تشخیص شیء رو هم با ترنسفورمر انجام داد؛ چند بردار یادگرفته‌شده به اسم پرسش شیء، هر کدوم به کل عکس توجه می‌کنن و هر کدوم یه شیء و جعبه‌ی دورش رو پیدا می‌کنن، بی ترفندهای پیچیده‌ی قبلی. برای بخش‌بندی، یعنی تعیین این‌که هر پیکسل مال کدوم شیئه، هم مدل‌های ترنسفورمری رایج شدن.

ولی شاید مهم‌ترین کاربرد امروزش، چشم مدل‌های چندحالته‌ست. یه رمزگذار ترنسفورمر بینایی، عکس رو به یه سری بردار تبدیل می‌کنه، و این بردارها، بعد از یه لایه‌ی کوچیک، مثل کلمه‌ها به مدل زبانی داده می‌شن. خیلی از این رمزگذارها با پیوند متن و تصویر آموزش دیدن؛ یاد گرفتن عکس و توضیحش رو کنار هم بذارن. توی ساخت تصویر هم، همین بدنه به کار می‌ره، فقط برعکس.

از کجا اومد

پیش از ۲۰۲۰ هم تلاش‌هایی برای توجه توی عکس بود؛ مثلا توجه فقط درون همسایگی‌های کوچیک، یا توجه یه بار روی سطر و یه بار روی ستون. یه پژوهش ۲۰۱۹ هم تکه‌های خیلی کوچیک ۲ در ۲ رو امتحان کرده بود. ولی این‌ها یا پیچیده بودن یا روی سخت‌افزار کند. پژوهش ۲۰۲۰ نشون داد ساده‌ترین راه، یعنی تکه‌های بزرگ و ترنسفورمر استاندارد، با داده‌ی کافی، از همه بهتره.

بعد همه‌چیز سریع رفت. ۲۰۲۱ آموزش با داده‌ی کم، سلسله‌مراتب و پنجره‌ها، و یادگیری بی برچسب اومد. ۲۰۲۲ و ۲۰۲۳ مدل‌ها تا ۲۲ میلیارد پارامتر بزرگ شدن، تکه‌های ثبت و بسته‌بندی عکس‌ها اومد، و ترنسفورمر بینایی چشم مدل‌های چندحالته شد. امروز شبکه‌های پیچشی هنوز هستن، به‌خصوص روی گوشی و دستگاه‌های کوچیک، ولی بیشتر مدل‌های بزرگ بینایی ترنسفورمری‌ان.

اشتباه‌های رایج

خیلی‌ها فکر می‌کنن ترنسفورمر بینایی پیکسل به پیکسل نگاه می‌کنه؛ نه، تکه به تکه، و یه تکه‌ی ۱۶ در ۱۶ برای مدل یه «کلمه»‌ست. یکی دیگه اینه که فکر کنن همیشه از شبکه‌ی پیچشی بهتره؛ با داده‌ی کم و بی ترفند، معمولا بدتره، و برای دستگاه‌های کوچیک، شبکه‌ی پیچشی هنوز انتخاب خوبیه.

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

تمرین

این چهار تا رو اول خودتون حساب کنید. یک، عکس ۳۸۴ در ۳۸۴ با تکه‌ی ۱۶؛ چند تکه؟ دو، یه تکه‌ی ۱۴ در ۱۴ رنگی، صاف‌شده، چند عدده؟ سه، اگه عکس ۲۲۴ رو با تکه‌ی ۳۲ ببریم، چند تکه داریم و جفت‌های توجه نسبت به تکه‌ی ۱۶ چند برابر کمتر می‌شه؟ چهار، با تکه‌ی دسته، صف عکس ۲۲۴ با تکه‌ی ۱۶ چند تاییه؟

جواب‌ها. اولی، ۳۸۴ تقسیم بر ۱۶ می‌شه ۲۴، و ۲۴ ضرب در ۲۴ یعنی ۵۷۶ تکه. دومی، ۱۴ ضرب در ۱۴ ضرب در ۳، یعنی ۵۸۸ عدد. سومی، ۷ در ۷، یعنی ۴۹ تکه؛ چهار برابر تکه‌ی کمتر، پس ۱۶ برابر جفت کمتر. چهارمی، ۱۹۶ به‌علاوه‌ی یک، یعنی ۱۹۷.

جمع‌بندی. آنچه از این درس با خودتان می‌برید.

  • عکس به تکه‌های مربعی بریده می‌شه.
  • هر تکه صاف می‌شه و مثل یه کلمه وارد می‌شه.
  • جای هر تکه با یه بردار جای یادگرفته‌شده.
  • تکه‌ی دسته، خلاصه‌ی کل عکس رو جمع می‌کنه.
  • داده‌ی زیاد، یا ترفندهای آموزش، لازم داره.
  • امروز چشم مدل‌های چندحالته‌ست.

خودتون رو بسنجید

۱۵ پرسش، هر بار تازه از میان ۳۰ پرسش این درس. آخرش فقط کارنامه رو می‌بینید: چند تا درست، چند تا نادرست.

خودتون رو بسنجید

۱۵ پرسش

  • هر بار پرسش‌ها و ترتیب گزینه‌ها عوض می‌شه.
  • تا آخر نمی‌گیم کدوم جواب درست بوده؛ می‌تونید برگردید و جوابتون رو عوض کنید.
  • آخرش کارنامه می‌گیرید: چند تا درست، چند تا نادرست.
  • اگه وسطش بستید، دوباره که باز کنید از همون‌جا ادامه می‌دید.

فصل‌های این درس

درس بعد