# پارت 1 : مهم ترین اصطلاحات و قست هایی که در معماری Transformer استفاده شده است را می آموزیم ( مرحله قبل از شیرجه در عمق )
"چه چیزی واقعی است؟ چگونه واقعی را تعریف میکنید؟ اگر درباره آنچه که میتوانید احساس کنید، بو کنید، مزه ببرید و ببینید صحبت میکنید، آنگاه واقعیت فقط سیگنالهای الکتریکی است که توسط مغز شما تفسیر میشوند."
فیلم ماتریکس(1991)
مقدمه
# پارت 1 : مهم ترین اصطلاحات و قست هایی که در معماری Transformer استفاده شده است را می آموزیم ( مرحله قبل از شیرجه در عمق )
# پارت 2 : معماری ترنسفورمرها را به صورت جز به جز و قسمت به قسمت کامل باز می کنیم با مثال و کد
این مقاله در دو پارت آماده شده است. هر آنچه را که در مورد ،Transformers وجود دارد خواهیم آموخت. اولین تصوری که بعد از آشنایی بیشتر من با Transformers در ذهن من ایجاد شد فیلم ماتریکس بود. زمانیکه نئو مهارت های لازم برای مبارزه را فرا می گرفت باید می توانست مهارت های رزمی ومبارزه ای را در کمترین زمان ممکن و به بهترین صورت ممکن بیاموزد اما چگونه ؟ در زمان محدود امکان پذیر نبود. پس راهکار چه بود ؟ برای یادگیری هر چیزی قرصی وجود داشت و کافی بود آن مهارت را آپلود کنند که نئو با خوردن آن می توانست مثلا مهارت های رزمی را یاد بگیرد. بعد در محیطی(مثل محیط های شبیه سازی برای آموزش ربات ها) با استادش آن را تمرین کند. تقریبا ایده Transformers ها هم همین است. چیزی که آموخته شده و وجود دارد ( قرص ها ) را می خواهیم برای تسک دیگری استفاده کنیم. برای یادگیری آن فقط کافیست " قرص را بخوریم " . به جای اینکه برای تسک جدید دوباره چرخ را اختراع کنیممی خواهیم دانش اختراع چرخ را به تسک مورد نظر انتقال بدیم و با آن بتوانیم چرخ را بهبود دهیم . با من در این سفر هیجان انگیز همراه باشید. راجع به تاریخچه به وجود آمدن آن و کاربرد های آن. معماری Transformers همچنین می خواهیم به حالت مقایسه ای به آن بپردازیم که آیا واقعا این رویکرد درست است و خیلی از مشکلات را حل می کند؟ چه تفاوت های عمیقی با LSTM ها دارد؟ اما Transformers ها از کجا آمده اند ؟ ایده اولیه به چه صورت بود ؟ آیا فقط برای ترجمه کاربرد دارد ؟ برای تولید متن از آن استفاده می شود ؟ از چه مکانیسمی استفاده شده است؟ مشکلات LSTM با مکانیزم Attention حل شده؟ آیا فقط برای متن مناسبه ؟
در پارت 2 همین مقاله هم به صورت کامل و قسمت به قسمت تمام معماری Transformer را خواهیم آموخت و بسیار به عمق خواهیم رفت. با من در این سفر هیجان انگیز همراه باشید!
خوب به این تصویر نگاه کنید این تصویر معماری اصلی Transformer در مقاله اصلی آن است. دوباره و دوباره و دوباره به آن نگاه کنید! در این پارت و پارت بعدی می خواهیم قسمت به قسمت و جز به جز آن را کامل بررسی کنیم. من روزهاست هر روز چند دقیقه به آن توجه میکنم. دوباره می گویم به آن توجهکنید . توجه . توجه . توجه ....
مدلهای Seq-to-Seq ابتدا در سالهای ابتدایی قرن 21 مطرح شدند، اما با پیشرفت تکنولوژی و عمق شبکههای عصبی، به خصوص با افزایش استفاده از شبکههای بازگشتی (RNN) و LSTM، کارایی و کاربرد آنها مخصوصا برای وظایف ترجمه ماشینی و پردازش زبانی بهبود یافت و به عنوان روشی موثر در NLP شناخته شدند. مهم ترین مشکل این روش مشکل محو شدن گرادیان است چون از RNN یا LSTMاستفاده می شود. در واقع، Transformer نیز از یک معماری Seq-to-Seq برای وظایف مختلف استفاده میکند، اما با اصلاحات و بهبودهای بسیاری که عملکرد و کارایی آن را بهبود میبخشد. در نتیجه کاربرد های مدلهای Seq-to-Seq کاهش یافته است. مدلهای Transformer، به خصوص با مکانیزم Attention خود، نقایص موجود در Seq-to-Seq را برطرف کردهاند و عملکرد بهتری در وظایف پردازش زبانی ارائه میدهند. به همین دلیل، امروزه کاربردهای مدلهای Seq-to-Seq در مقایسه با مدلهای Transformer کاهش یافته است و بیشتر در پژوهشهای تاریخی مورد استفاده قرار میگیرند. در قسمت بعد با ماشین زمان به تاریخچه Transformer می رویم!
در هوش مصنوعی با شنیدن Transformers یا Attention اولین چیزی که به ذهن ما خطور میکند مقاله معروف “Attentionis all you need” است که در سال 2017 منتشر شد و انقلاب و جهشی بزرگ در AI به وجود آورد. می خواهیم به عمق برویم و ببینیم که ایده Attention اولین بار چه زمانی مطرح شد ؟ یکی از اولین مقالاتی که مکانیزم Attention را برای اولین بار به طور جامع و کامل در حوزه ترجمه ماشینی معرفی کرده است مقاله
تفاوتی که این مقاله با "Attention is All You Need" دارد این است که در هر مرحله از ترجمه، شبکه عصبی به توجه به مکانهای مختلف در جمله مبدا میپردازد و بر اساس آن، کلمات متناظر در جمله مقصد را انتخاب میکند. اما در مقاله سال 2017 مکانیزم Attention به طور کامل به عنوان جایگزینی برای لایههای بازگشتی معمولی(مدلهایی که از معماریهایی مانند LSTM (Long Short-Term Memory) و GRU (Gated Recurrent Unit) استفاده میکنند که از یک ساختار بازگشتی برای پردازش دادههای توالی استفاده میکنند.) مورد استفاده قرار گرفته است. یعنی شبکه Transformer تماماً بر اساس مکانیزم Attention ساخته شده است، بدون نیاز به لایههای بازگشتی. علاوه بر این، از self-attention نیز استفاده شده است که به شبکه اجازه میدهد تا به روابط بین کلمات در جمله بپردازد و بهترین ترجمهها را تولید کند.
در سال 2015 مقاله دیگری که توسط Dzmitry Bahdanau، Kyunghyun Cho و Yoshua Bengio در سال 2015 منتشر شده است.
در این مقاله از مکانیزم توجه را برای بهبود ترجمه ماشینی استفاده میکنند، یک نوع خاص از Attention را که به عنوان "توجه نظارت شده" (Supervised Attention) شناخته میشود، معرفی میکنند که به شبکه اجازه میدهد تا در هنگام آموزش با توجه به ورودیها و خروجیهای مربوط به ترجمه، به طور خاص به نقاط مهم تر در جمله مبدا توجه کند. این نوع از توجه به شبکه اجازه میدهد تا به دقت بیشتری در انتخاب کلمات متناظر در جمله مقصد بپردازد.
بالاخره درسال 2017 مقاله ای تحت عنوان " Attentionis all you need" منتشر شد
به جرات می توان گفت سرآغاز انقلاب هوش مصنوعی بعد از این مقاله آغاز شد و هنوز بعد از سالها همه مردم به آن اشاره می کنند. بعد از این مقاله مقالات زیادی در این مورد منتشر شده و روش هایی برای پیاده سازی Transformer ها در تسک های مختلف وجود دارد. حتی از این نوع معماری برای بینایی ماشین هم استفاده میشود احتمالا در آینده نزدیک راجع به این موضوع هم خواهم نوشت. در قسمت های بعد به صورت کامل مهم ترین مسائل و مکانیزم هایی که در معماری Transformer و در مقاله Attentionis all you need تشریح شده است بررسی خواهیم کرد.
در این قسمت می خواهیم ببینیم که کلا Attention چی هست و انواع مختلف Attention چی هست و همچنین اونها رو با هم مقایسه کنیم تا تفاوت های اون ها بهتر و بهتر متوجه بشم.
از اسم اون کاملا واضح میشه فهمید که چیست. Attention! چه زمانی رخ میده ؟ وقتی قراره روی نکات خاص تر بیشتر تمرکز کنیم می گیم که به اون توجه کردیم. این مفهوم که تقریبا برای اولین بار برای پردازش زبان طبیعی استفاده شد. برای رفع مشکلات ترجمه کلمه به کلمه (Seq- to - seq) خیلی مناسبه چرا که Seq - to - Seq در خیلی از موارد باعث اشتباه در ترجمه میشه. در واقع کاری که Attention انجام میده اینه که وزن های اهمیت ( مهمترین وزنها ) داده های ورودی رو که میتونن تاثیر زیادی در تولید خروجی مناسب داشته باشند براساس ارتباط آنها با تسک مورد نظر اختصاص میده. البته Attention نه فقط روی دادههای ورودی بلکه می تواند بر روی سایر عناصری که در فرآیند پردازش مدل استفاده میشوند، مانند وزنهای مدل، بردارهای حالت پنهان و غیره نیز تأثیر بگذارد. حالا میخوایم ببینیم چه انواع مختلفی از Attention وجود داره با من همراه باشید!
توجه به خود Self-Attention یا درون توجه، یک مکانیسم توجهی است که در معماریهای مختلف یادگیری عمیق، به ویژه در مدلهای Transformer ، به کار میرود. در این مکانیزم، مدل به جای توجه به دنبالههای ورودی دیگر یا روشهای مختلف، به بخشهای مختلف دنباله ورودی خود توجه میکند. در واقع، Self-Attention به مدل اجازه میدهد که موقعیتهای مختلف دنباله ورودی را با یکدیگر مرتبط کند و از این اطلاعات برای محاسبه نمایشی از دنباله بهرهبرداری کند. این نوع توجه به مدل اجازه میدهد که وابستگیهای دوربرد و اطلاعات زمینهای را در نمایش خروجیهای خود لحاظ کند. این مفهوم به وابستگیها و ارتباطاتی اشاره دارد که بین اجزای مختلف یک دنباله یا توالی ورودی و خروجی وجود دارد، اما این ارتباطات بیشتر از یک توکن به توکن نیستند و میتوانند به صورت غیرمستقیم از فاصلههای دورتر نیز نمایش داده شوند. به طور مثال، در یک متن یک کلمه در ابتدای جمله باشد و کلمه وابسته آن در انتهای جمله. این نوع وابستگیهای دوربرد در فرآیند Self-Attention در مدلهای Transformer وجود دارد و به مدل اجازه میدهند که ارتباطات دورتری را در نمایش خروجیهای خود در نظر بگیرد و از اطلاعات زمینهای بیشتری استفاده کند. در بخش های بعد در قسمت معماری Transformer ها بیشتر به آن خواهیم پرداخت.
مکانیسم soft attention ، به هر عنصر ورودی یک وزن که معمولاً از یک تابع softmax بدست آمده اختصاص داده میشود که نشان دهنده اهمیت آن عنصر است. این وزنها تعیین می کنند که در زمان پردازش و تصمیمگیری، کدام عناصر ورودی بیشترین توجه را برای تولید خروجی باید داشته باشند. مزیت اصلی soft attention این است که با استفاده از تکنیکهایی مبتنی بر گرادیان به مدلها امکان میدهد تا، بدون تعیین تعداد مشخصی از این عناصر به چندینعنصر ورودی به طور همزمان توجه کنند، در نتیجه میتوانند به طور موثرتر و سریعتر بهینهسازی شوند. به عبارت دیگر، از روشهای بهینهسازی استفاده میشود که با استفاده از گرادیانها (مشتقات جزئی) این فرایندها را سادهتر و بهبود یافته میکنند. این باعث می شود برای دادههای ورودی که طول و اندازه متغیری دارند، مانند ترجمه ماشینی، پرسش و پاسخ ماشینی، تشخیص اشیاء در تصاویر و غیره، بسیار مفید است. برای مثال، در ترجمه ماشینی، مکانیسم soft attention میتواند هنگام ترجمه جمله، به هر کلمه در جمله مبدا با توجه به اهمیت آن در تولید کلمه مقابل در جمله مقصد توجه بیشتریداشته باشد.
توجه نرم Soft Attention معمولاً در مدلهای مبتنی بر RNN، مانند مدلهای مترجم یا شبکههای بازگشتی، استفاده میشود. تفاوت اصلی بین Self-Attention و Soft Attention در نحوه محاسبه وزنهای توجه. در Self-Attention، هر عنصر با همه عناصر دیگرهمبستگی دارد و وزنهای توجه به طور مستقیم از ویژگیهای ورودی استخراج میشود. اما در Soft Attention، وزنهای توجه از طریق یک مدل یادگیری ماشینی، مانند یک شبکه عصبی، محاسبه میشوند که بر اساس ویژگیهای ورودی و وضعیت فعلی مدل تعیین میشوند. نمیتواند به طور قطع گفت که کدام Attention مناسب تر است چرا که انتخاب هر کدام مطابق با تسکی است که انجام می دهیم.
در hard attention مدل معمولاً با انتخاب یک زیرمجموعه از ویژگیهای ورودی برای توجه روی یک بخش خاص از دادههای ورودی تمرکز میکند،. برعکس soft attention که وزنهای پیوسته را به تمامی عناصر ورودی اختصاص میدهد، hard attention وزن های گسسته را برای تمرکز انجام میدهد. این بدان معناست که مدل در هر مرحله، تنها یک یا چند عنصررا برای تمرکز انتخاب میکند، که منجر به یک مکانیسم توجه ساده تر و انتخابی میشود. با این حال، آموزش مدلهایی که از hard attention استفاده میکنند ممکن است چالشبرانگیز باشد. مکانیسم hard attention عملیات غیر قابل تفاوت را به مدل اضافه میکند، آن را مشتق ناپذار می کند. و بدون مشتق پذیری، الگوریتمهای استاندارد یادگیری ماشین مثل backpropagation نمی توانند برای بهینهسازی مدلهای با hard attention استفاده شوند. برای آموزش این مدلها، از تکنیکهای خاصی مانند Reinforcement Learnin که از پاداشها و تنبیهات برای هدایت مدل به سمت انتخابهای درست یا Discrete Optimization Techniques که از الگوریتمهای جستجوی گسسته برای یافتن بهترین مجموعه از عناصر یا Derivative Approximation که از تکنیکهای مختلفی برای تخمین تقریبی مشتق عملیات غیرقابل تمایز استفاده می شوند تا امکان استفاده از روشهای استاندارد backpropagation فراهم شود. از جمله کاربرد های hard attention در زیرنویس تصویر است، باعث تمرکز ویژه بر مناطق خاصی از تصویر که بهترین انتخاب برای نوشتن زیرنویس تصویر می شود.
مکانیسمهای Global Attention در حالتی که وزنهای Attention بر روی تمام عناصر توالی ورودی تمرکز دارند، که باعث می شود مدل از تمام اطلاعات موجود در دنباله ورودی بهرهبرداری کند. در این رویکرد، مدل یک بردار زمینه یا context vector را با محاسبه یک وزن مجموعی برای تمام عناصر ورودی ایجاد میکند. این وزنها معمولاً توسط امتیازات توجه، که به عنوان احتمالات توجه برای هر عنصر محاسبه میشوند، تعیین میشوند. مکانیسم Global Attention به طور گسترده در مدلهای Sequence-to-Sequence استفاده میشود، به ویژه در مواردی مانند ترجمه ماشینی، که مدل باید به تمام کلمات در جمله ورودی Attention کند تا ترجمه منسجمی ایجاد کند. یکی از مزایای اصلی این رویکرد این است که به مدل امکان میدهد تا از وابستگیهای دوربرد و اطلاعات زمینهای در تصمیمگیریها و تولید خروجی استفاده کند. به این ترتیب، مدل قادر است تا ساختارهای پیچیدهتر را در دادهها شناسایی و درک کند، که میتواند به بهبود عملکرد و کیفیت خروجیهای مدل کمک کند.
توجه محلی (Local Attention) نوعی مکانیزم Attention است که در شبکههای عصبی، به خصوص در وظایفی مانند NLP و Computer Vision استفاده میشود. مکانیسمهای local attention هنگام محاسبه وزنهای توجه بر روی یک ناحیه کوچکتر از توالی ورودی تمرکز میکنند. بر خلاف Global Attention ، مدل یاد می گیرد که یک منطقه یا پنجره خاص را در اطراف موقعیت فعلی انتخاب کند و وزن توجه را فقط در آن منطقه محاسبه کند. این می تواند در موقعیت هایی که اطلاعات مربوطه در یک زمینه خاص و محلی قرار دارند، مفید باشد، مانند هنگام پردازش داده های سری زمانی یا متن با ویژگی های محلی قوی. local attention همچنین می تواند از نظر محاسباتی کارآمدتر از Global Attention باشد، زیرا تعداد محاسبات توجه مورد نیاز را کاهش می دهد و آن را برای برنامه هایی با توالی ورودی بزرگ یا منابع محاسباتی محدود مناسب می کند.
نسخه ارتقاء یافته از مکانیزم Self-Attention(SA) است. به جای تمرکز به یک نقطه خاص به مدل اجازه میدهد تا به صورت همزمان به چندین جنبه مختلف یا نقاط مختلف در دنباله ورودی توجه کند. اصلیترین تفاوت بین SA و MHSA این است که SA یک مجموعه وزن توجه را محاسبه میکند، در حالی که MHSA چندین مجموعه وزن توجه را محاسبه میکند که سپس ترکیب میشوند تا خروجی نهایی شکل بگیرد. این ویژگی باعث می شود که MHSA به روابط پیچیدهتر بین عناصر ورودی بپردازد. MHSA میتواند به راحتی از SA موازیسازی وهزینه محاسباتی SA را کاهش دهد، زیرا هر Head Attention میتواند به صورت مستقل یک زیرمجموعه از عناصر ورودی وزنهای توجه را محاسبه کند.
همچنین در Transformer بلوک دیگری از Attention به نام Multi-Head Self-Attention Masked وجود دارد که برای وظایف توالی به توالی مانند ترجمه ماشینی و خلاصه سازی متن استفاده می شود. در Masked Multi-Head Self-Attention (MHSA)، هدف اصلی این است که در هر مرحله از پردازش، مدل با استفاده از یک ماسک مخصوصی فقط به اطلاعات موجود در قسمتهای قبلی دنباله دسترسی داشته باشد و اطلاعات قسمتهای بعدی دنباله را مشاهده نکند. به این ترتیب، مدل مجبور میشود اطلاعات را به ترتیب پردازش کند. به عبارت دیگر، مواردی از دنباله که هنوز توسط مدل پردازش نشدهاند، به طور موقت مخفی میشوند تا مدل نتواند به آنها دسترسی داشته باشد. سپس به تدریج و با توجه به اطلاعات تا آن لحظه ، وزنهای توجه را محاسبه کند.
یکی دیگر از اجزای کلیدی Transformer که در لایههای Self-Attention به کار میرود. این نوع توجه برای برقراری ارتباطات میان تمامتوکنهای ورودی یک دنباله در یک لایه از معماری Transformer استفاده میشود. در معماری Transformer، K، Q و V مخفف Key (کلید)، Query (پرس و جو) و Value (مقدار) هستند. این سه ماتریس نقش مهمی در مکانیزم Self-Attention و Multi-Head Attention ایفا میکنند که برای مدلسازی روابط بین کلمات در جمله استفاده میشوند. در واقع برای محاسبه وزنهر کلمه در جمله با توجه به کلمه ورودی (Query) استفاده میشوند.
ماتریس کلید (K) میزان مرتبط بودن هر کلمه با کلمه ورودی (Query) Q را محاسبه می کند. K اطلاعات مربوط به متن ورودی را نشان میدهد. هر کلمه در جمله یک بردار Key (کلید) دارد. ماتریس Query (Q) برای میزان مرتبط بودن هر کلمه با کلمهای که میخواهیم بر روی آن تمرکز کنیم (Context) را محاسبه می کند. Q اطلاعات مربوط به کلمه ورودی را نشان میدهد. هر کلمه در جمله یک بردار Query (پرس و جو) دارد. ماتریس Value (V) اطلاعات مربوط به هر کلمه در جمله را نشان میدهد. V اطلاعات معنایی هر کلمه را نشان میدهد. هر کلمه در جمله یک بردار Value (مقدار) دارد.
در این مرحله، برای هر توکن ورودی، یک dot product (ضرب داخلی دو بردار) با همه توکنهای دیگر محاسبه میشود. محاسبه مقیاس دهی محصول داخلی به معنای ضرب داخلی بین دو بردار Embedding توکنها است. ابتدا برای هر زوج توکن ( توکن مبدأ و توکن مقصد )، بردار Embedding آنها را با هم ضرب میکنیم. سپس از مقدار حاصل ضرب داخلی برای نشان دادن اهمیت و وابستگی بین دو توکن استفاده میشود. نتیجه آن یک ماتریس از مقادیر محصول داخلی برای هر زوج توکن که بیانگر ارتباط و وابستگی بین توکنهای مختلف در دنباله و برای محاسبه امتیازهای توجه وزندار در مرحلههای بعدی از الگوریتم Attentionاستفاده میشوند. این محصول داخلی بیانگر ارتباط و وابستگی بین توکنها است و برای هر زوج توکن (K و Q) محاسبه میشود.
ساده تر اینکه فرض کنید ما یک جمله به عنوان ورودی داریم که چندین کلمه دارد، و میخواهیم برای هر کلمه در این جمله، میزان اهمیت و وابستگی آن به کلمات دیگر را محاسبه کنیم. حالا، فرض کنید ما دو کلمه "سگ" و "پسر" داریم که در جمله آمدهاند. اگر ما امتیاز توجه را برای هر زوج کلمه در جمله محاسبه نکنیم و تنها به کل جمله توجه کنیم، ممکن است معنای این کلمات به هم بریزد. به عنوان مثال، اگر در جمله "سگ با پسر میدوید" باشیم، ما باید بفهمیم که "سگ" به "پسر" مرتبط است، اما اگر تنها به کل جمله توجه کنیم، ممکن است وابستگی بین این دو کلمه را از دست بدهیم.
مقیاس داخلی محاسبه شده برای هر توکن که بر یک مقدار نرمالسازی تقسیم میشود. این مقدار نرمالسازی معمولاً معادل طول بردار توکن است. یا می توانیم بگوییم معادل جذر مربعات مجذور طول بردارهای نمایش توکنها است. وقتی ما برای هر توکن در دنباله، مقیاس داخلی را محاسبه میکنیم، ما عملاً این مقادیر را توسط یک مقدار نرمالسازی به یک مقدار استانداردمیرسانیم تا بتوانیم آنها را با یک مقیاس مشخص و قابل قبول مقایسه کنیم. برای این کار از توابع Softmax استفاده میکنیم. تابع Softmax عملکردی است که مقادیر ورودی را به فضای احتمال تبدیل میکند، به گونهای که مقادیر بزرگتر بیشترین احتمال را دارند و مقادیر کوچکتر به طور متناسب با مقادیر بزرگتر احتمالات کمتری را دارند. که این امر به بهبود پایداری و کارایی الگوریتم کمک میکند.
در این مرحله ، ما با استفاده از مقادیر محاسبه شده از مرحله قبلی(ضرب داخلی توکنها)، وزنهایی را برای هر توکن محاسبه میکنیم که بیانگر اهمیت هر توکن نسبت به سایر توکنها در دنباله است. برای این کار، از یک ماتریس وزنی با ابعادی مناسب برای محاسبه استفاده میکنیم. ابعاد این ماتریس وزنی به اندازه تعداد توکنها در ورودی و خروجی Transformer است.
به طور خلاصه، این ماتریس وزنی، یک نگاشت خطی است که برای هر توکن ورودی به یک وزن مناسب تبدیل میشود. این وزن معمولاً از -۱ تا ۱ متغیر است و نشان میدهد که هر توکن نسبت به سایر توکنها چقدر اهمیت دارد. این وزنها سپس با استفاده از مقادیر مقیاسدهی شده داخلی توکنها (که نشان دهنده ارتباط وابستگی توکنها با یکدیگر است)، برای هر توکن محاسبه میشوند.
در این مرحله، وزنهای محاسبه شده در مراحل قبلی با مقادیر نمایش توکنها ضرب میشوند تا مقدار نهایی برای هر توکن به دست آید. این مقدار نهایی نشاندهنده اهمیت هر توکن نسبت به دیگران است و در مدلهای Transformer برای محاسبه وزنهای توجه استفاده میشود.
در این مرحله، با استفاده از امتیازهای نهایی Attention، یک میانگین وزن دار از مقدارهای نمایش توکنها محاسبه میشود. این میانگینوزندار، با توجه به اهمیت هر توکن، محاسبه میشود و در فرایند انتقال اطلاعات میان توکنها نقش دارد. در این مرحله، ابتدا با استفاده از امتیازهای نهایی Attention که به هر توکن تخصیص داده شده است (که این امتیازها بر اساس محاسبات قبلی مانند محاسبه مقیاس داخلی و وزندهی صورت گرفتهاند)، وزنی برای هر توکن محاسبه میشود که نشان دهنده اهمیت آن توکن نسبت به سایر توکنهاست.
توجه Scaled Dot-Product به عنوان یکی از انواع توجه در ترنسفورمر، اطلاعات موقعیتی و وابستگیهای بین توکنها را در یک دنباله درک میکند و از این اطلاعات برای تولید خروجی موثر استفاده میکند.
در معماری Transformer ها Residual Connections را تقریبا در تمام لایه ها میبینیم اما چرا از آن استفاده می کنیم. یک دلیل مهم کاهش Vanishing Gradient Problem اما چرا مهم است ؟ در شبکههای عمیق، یکی از مشکلاتی که ممکن است بروز کند، VGP است زیرا هر چه بیشتر به عمق میرویم، Gradient ممکن است به حدی کوچک و تقریبا نزدیک به صفر شود که عملا دیگر گرادیانی وجود ندارد. برای اینکه این مشکل را به حداقل برسانیم از Residual Connections استفاده می کنیم. ایده استفاده از Residual Connections در Transformer از معماری شبکههای RezNet الهام گرفته شده است. به ازای هر لایه Self-Attention و لایه Feed-Forward Neural Network اعمال میشوند. این اتصالات به شبکهها کمک میکنند تا اطلاعات اولیه و ورودیهای خام در طول مسیر شبکه حفظ کنند و از این طریق، گرادیانها به سرعت به لایههای ابتدایی بازگردند و VGP کاهش یابد.
این اتصالات باعث Knowledge Preservation هم می شوند. در واقع این اتصالات کمک میکنند تا اطلاعات ویژگیهای اصلی و مهم ورودی (ویژگیهایی که در لایههای ابتدایی استخراج میشوند)، در طول مسیر شبکه حفظ شود و در لایههای عمیقتر نیز در دسترس باقی بماند. در نتیجه شبکه سریع تر یاد میگیرد که چگونه این اطلاعات را بهتر پردازش کند که سرعت train کردن مدل را افزایش می دهد. همچنین، تعداد پارامترهای لایهها را کاهش می دهد، زیرا لایههای اضافی با نیمههای خروجی اضافی نیاز نیست که ذخیره شوند.
فرض کنید یک شبکه Transformer بدون Residual Connections باشد. در این صورت، اطلاعات بین لایههای مختلف به طور مستقیم منتقل نمیشود و هر لایه باید اطلاعات را از اول دریافت و پردازش کند. این موجب افزایش تعداد مراحل مورد نیاز برای آموزش میشود و افزایش زمان و هزینه محاسباتی میشود. همچنین، احتمال گم شدن گرادیانها نیز بالا میرود که ممکن است منجر به عملکرد نامناسب شبکه شود. اما با استفاده از Residual Connections ، این مشکلات میتوانند به حداقل برسد و عملکرد شبکه بهبود یابد.
تعبیر موقعیت (Position Embedding) یک عنصر حیاتی در معماری Transformer ست. این تکنیک اطلاعات موقعیتی را به ویژگیهای ورودی اضافه می کند و باعث می شود که مدل رابطه و همبستگی بین توکنها در یک دنباله را درک کند. به عبارت دیگر، با Position Embedding ، مدل می فهمد که هر توکن کجای دنباله و چه توالیای دارند در نتیجه مدل می تواند فرآیند پردازش دنباله، روابط زمانی و مکانی بین توکنها را درک کند. اما چطور عمل می کنه ؟ به این صورت است که ابتدا توکنهای ورودی با استفاده از یک لایه Embedding به یک فضای برداری تبدیل میشوند. سپس Position Embedding به لایه Embedding اضافه میشود تا یک Embedding ترکیبی ایجاد شود. سپس Embedding ترکیبی از طریق Encoder Transformer عبور میکند که شامل مکانیزمهای Self-Attention و FFNNs است.
عملکرد position embedding در Encoder و Decoder در معماری Transformer کاملاً یکسان نیست و تفاوتهای مهمی دارد. در Encoder وظیفه نشان دادن موقعیت نسبی هر توکن در دنباله را دارد. با توجه به این که Encoder فقط ورودی را دریافت میکند و نیازی به تولید خروجی با توجه به موقعیت نسبی ندارد، استفاده از تعبیر موقعیت نسبی کفایت میکند. اما در Decoder، علاوه بر نیاز به درک موقعیت نسبی توکنها، نیاز به تولید خروجی با توجه به موقعیت نسبی داریم. بنابراین، position embedding در اینجا نقش دوگانهای دارد. از یک سو برای نشان دادن موقعیت نسبی توکنها در ورودی و از سوی دیگر برای تولید خروجی با توجه به موقعیت نسبی آنها در خروجی. به طور کلی، عملکرد position embedding در Encoder و Decoderاشتراکاتی دارند، اما با توجه به وظایف مختلف آنها، تفاوتهای مهمی نیز وجود دارد که باید مورد توجه قرار گیرد.
تمام انواع Position Embedding که بیان خواهد شد در معماریهای مبتنی بر Transformer استفاده میشوند، اما همه آنها در هر مدل Transformer استفاده نمیشوند. در زیر آنها را بررسی و موقعیت هایی که از آنها استفاده می شود را خواهیم آموخت.
این نوع تعبیر از یک بردار ثابت برای نمایش هر موقعیت در دنباله استفاده میکند. این بردارها معمولاً در زمان pre-trained یاد گرفته میشوند و بین همه دنبالهها به اشتراک گذاشته میشوند. در مقاله اصلی Transformer از آن استفاده شده است و هنوز هم در بسیاری از مدلهای مبتنی بر ترنسفورمر از جمله ورژنهای مختلف BERT به طور گسترده استفاده میشود.
این نوع تعبیر یک بردار منحصر به فرد برای هر موقعیت در دنباله در زمان آموزش یادگرفته میشود. این به مدل اجازه میدهد که به طولها و ساختارهای خاص دنبالهها سازگار شود. تعبیر موقعیت قابل یادگیری در برخی از مدلها مانند Transformer-XL که برای مسائل پردازش زبان طراحی شده است استفاده میشود که برای هر موقعیت در دنباله یک تعبیر موقعیت منحصر به فرد یاد میگیرد.
این نوع تعبیر موقعیت رابطه موقعیتی توکنها را نمایش میدهد، نه موقعیت مطلق آنها. در برخی از مدلها مانند Transformer-XL و Reformerاستفاده میشود. مدل Reformer به منظور بهبود کارایی مدلهای Transformer در مقیاس بزرگ و کاربردهایی مانند ترجمه ماشینی، تولید متن، تشخیص احساسات و سایر وظایف پردازش زبان مورد استفاده قرار میگیرد. این مدل به خاطر قابلیت اجرای موازی و بهینهسازی منابع محاسباتی، برای پروژههایی که نیاز به پردازش متن در مقیاس بزرگ دارند، مناسب است.
برخی مدلها نیز از ترکیب این انواع استفاده میکنند، مانند استفاده از تعبیر موقعیت ثابت برای دنبالههای کوتاه و تعبیر موقعیت قابل یادگیری برای دنبالههای بلند. البته بعضی مدلها از روشهای جایگزین برای ادغام اطلاعات موقعیتی استفاده میکنند. در مقاله اصلی Transformer از کدگذاری موقعیت سینوسی استفاده شده است و از یک تابع سینوسی برای کدگذاری موقعیت هر توکن استفاده میکند. در برخی دیگر از هم از یک روش کدگذاری چرخشی برای کدگذاری موقعیت هر توکن استفاده میکند. انتخاب روش تعبیر موقعیت بستگی به وظیفه خاص و طراحی مدل دارد.
در پارت 1 مهم ترین اصطلاحاتی که در Transformer استفاده می شوند و کاربرد دارند رو با هم بررسی کردیم و یاد گرفتیم بعضی از آنها ترکیب نسخه های قبلی از خودشان هستند. بعضی دیگر جدید هستند اما یاد گرفتن در مورد آنها قبل از بررسی کامل معماری Transformer خیلی مفید است چرا که در پارت 2 که بخواهیم Encoder و Decoder رو بررسی کنیم و وقتی به این اصطلاحات مواجه شویم به راحتی می توانیم آنها را بیاموزیم. در واقع Transformer ترکیبی بسیار زیبا از بسیاری از روش های قبل از خودش برای انجام تسک هایی است که احتمالا خیلی ها تصور نمی کردند که به این زودی ها قابل حل باشد. ممنون که در این پارت با من همراه بودید. پارت 2 بزودی منتشر خواهد شد. لطفا نظرات خودتون رو با من به اشتراک بگذارید که بتوانیم بیشتر با هم بیاموزیم. سپاس
ممنون از شما که در این سفر به دنیای Deeps با من همراه بودید.
لینک پارت 1 به انگلیسی در Medium
# پارت 1 : مهم ترین اصطلاحات و قست هایی که در معماری Transformer استفاده شده است را می آموزیم ( مرحله قبل از شیرجه در عمق )
# پارت 2 : معماری ترنسفورمرها را به صورت جز به جز و قسمت به قسمت کامل باز می کنیم با مثال و کد
لطفا اگر مایل بودید مقاله دیگر من " اربابان حلقه ! انگشترهای قدرت همان pre-trained model ها در هوش مصنوعی هستند! " رو در ویرگول ببینید .
بهترین جی پی تی های سفارشی GPT Store کداماند و چطور ساخته میشوند؟
امیدوارم از مطالب لذت برده باشید .