مکانیزم توجه (Attention Mechanism) در یادگیری عمیق: تمرکز هوشمند در شبکههای عصبی
مقدمه:
مکانیسم توجه (Attention) برای اولین بار در سال 2014 در حوزه بینایی ماشین مورد استفاده قرار گرفت. هدف از این رویکرد، درک این موضوع بود که یک شبکه عصبی در حین انجام پیشبینی به چه چیزی توجه میکند. این اقدام یکی از اولین مراحل برای فهم عمیقتر خروجیهای شبکههای عصبی کانولوشنی (CNN) بود. در سال 2015، مکانیسم توجه برای نخستین بار در پردازش زبان طبیعی (NLP) به کار گرفته شد. این پیشرفت باعث شد که مدلهای زبانی بتوانند به شکل مؤثرتری با متنها در تعامل باشند.
سرانجام، در سال 2017، این مکانیسم در شبکههای ترنسفورمر تحت تاثیر از مقاله Attention Is All You Need برای مدلسازی زبان به کار گرفته شد. از آن زمان، شبکههای ترنسفورمر به مراتب دقت پیشبینی بالاتری نسبت به شبکههای عصبی بازگشتی (RNN) پیدا کردند و به عنوان مدلهای پیشرفته در زمینههای مختلف پردازش زبان طبیعی شناخته شدند.
استفاده از مکانیسم توجه نه تنها به فهم بهتر فرآیند پیشبینی کمک کرد، بلکه انقلابی در طراحی و بهبود الگوریتمهای پردازش زبان طبیعی ایجاد نمود.
انگیزه معرفی شبکه Attention:
مدلهای Seq2Seq یکی از محبوبترین و مؤثرترین مدلها در زمینه پردازش زبان طبیعی و ترجمه ماشینی هستند. این مدلها به طور خاص برای تبدیل یک دنباله ورودی به یک دنباله خروجی طراحی شدهاند. به عنوان مثال، در ترجمه ماشینی، دنباله ورودی میتواند یک جمله به زبان مبدأ باشد و دنباله خروجی جمله معادل آن به زبان مقصد خواهد بود.
مدلهای Seq2Seq معمولاً از دو بخش تشکیل شدهاند: Encoder و Decoder.
Encoder (رمزگذار): این بخش وظیفه دریافت دنباله ورودی را دارد و آن را به یک بردار متراکم (context vector) تبدیل میکند. Encoder اطلاعات ورودی را پردازش کرده و تمامی ویژگیهای مهم را استخراج میکند.
Decoder (رمزگشا): این بخش پس از دریافت بردار متراکم (convex vector) که Encoder تولید کرده، اقدام به تولید دنباله خروجی میکند. Decoder به تدریج کلمات را تولید میکند و میتواند وضعیتهای قبلی را برای تصمیمگیری در مورد کلمه بعدی در نظر بگیرد. Encoder و Decoder هر دو شبکه های عصبی بازگشتی هستند، یعنی از واحدهای LSTM یا GRU که انواع RNN هستند، استفاده می کنند.
چالش 1: شبکههای بازگشتی (RNN) به طور سنتی برای پردازش توالیها مورد استفاده قرار میگرفتند، اما یک چالش اساسی در آنها وجود داشت: حفظ وابستگیهای طولانی مدت در دنبالهها. به زبان ساده، RNNها در به خاطر سپردن اطلاعات اولیه یک دنباله طولانی و استفاده از آنها در پیشبینی خروجی با مشکل مواجه میشدند. این مشکل به طور قابلتوجهی عملکرد و کیفیت خروجی RNN را در وظایفی که دنبالههای طولانی در آنها مورد استفاده قرار میگرفتند، تحت تاثیر قرار میداد. در واقع در یک encoder-decoder معمولی، فقط hidden state لایه آخر به عنوان context vector به decoder میرود که در صورت طولانی بودن دنبالهی ورودی منجر به خروجی با اطلاعات محدود خواهد شد. برای encoder فشرده کردن جمله دشوار است و برای decoder، اهمیت اطلاعات مختلف ممکن است هر مرحله متفاوت باشد.
اما با ظهور شبکههای ترانسفورمر، این مشکل حل شد! شبکههای ترانسفورمر از مکانیزم توجه (Attention) استفاده میکنند. توجه به شبکه اجازه میدهد تا ارتباطات بین هر قسمت از دنباله را شناسایی کند، به طوریکه وابستگیهای طولانی مدت دیگر مشکلی برای این مدلها نیستند. در واقع، در ترانسفورمرها، وابستگیهای طولانی مدت به همان اندازه که وابستگیهای کوتاه مدت در نظر گرفته میشوند، مهم و قابل توجه هستند.
چالش 2: RNN ها به علت پردازش sequential و دنبالهای ورودی ممکن است دچار مشکل vanishing gradient و یا exploding gradient شوند. اما بر خلاف RNNها، ترانسفورمرها کلیه توکنها در توالی ورودی را به طور همزمان (در حالت موازی) پردازش میکنند. این موازیسازی به گرادیانها اجازه میدهد تا با سهولت بیشتری در سراسر مدل حرکت کنند، که به کاهش مشکلات گفته شده کمک میکند.
چالش 3: RNNها به دلیل ساختار بازگشتی خود، قادر به ذخیرهسازی اطلاعات از عناصر قبلی برای هر عنصر در دنباله هستند. این ویژگی باعث میشود که RNNها به دادههای تاریخی وابسته باشند و به طور مكرر ورودیهای پیشین را پردازش کنند. این فرآیند، اگرچه از نظر نظری توانمندی بالایی ارائه میدهد، اما منجر به پیچیدگی بیشتری در مدل میشود، زیرا تعداد زیادی پارامتر بین حالات مختلف در ارتباط با هم است.
این پیچیدگی علاوه بر مشکلات vanishing و exploding در گرادیان، منجر به مشکل دیگری نیز میشود. به دلیل نیاز به پردازش عناصر دنباله به صورت ترتیبی و زمانبر بودن این کار، RNNها معمولاً به گامهای آموزشی بیشتری برای رسیدن به مینیمم محلی یا سراسری نیاز دارند. این بدین معناست که زمان آموزش تا حد زیادی افزایش مییابد و ممکن است هزینههای محاسباتی بیشتر شود.
برخلاف RNNها، ترانسفورمرها از مکانیزم توجه (Attention Mechanism) استفاده میکنند که به آنها این امکان را میدهد که به طور همزمان به تمامی عناصر دنباله توجه داشته باشند، در حالی که به طور هوشمندانه بر بخشهای مهمتر تمرکز میکنند. چالش4: RNNها به عنوان مدلهای دنبالهای عمل میکنند، بدین معنی که تمام محاسبات در شبکه به صورت متوالی انجام میشود و امکان موازیسازی وجود ندارد. در حالی که GPUها در انجام محاسبات موازی بسیار کارآمد هستند، ساختار RNNها مانع از استفاده کامل از این توانایی میشود.
عدم وجود بازگشت در شبکههای ترانسفورمر امکان محاسبات موازی را فراهم میکند. به این ترتیب، محاسبات میتوانند برای هر مرحله به طور موازی انجام شوند.
مکانیزم توجه Attention
مکانیزم توجه نوعی encoder-decoder در معماری شبکه عصبی است که به مدل اجازه میدهد در حین اجرای یک کار بر بخشهای خاصی از ورودی تمرکز کند. در واقع به طور پویا به عناصر مختلف ورودی، وزنهایی را اختصاص می دهد که نشان دهنده اهمیت یا ارتباط نسبی آنها با خروجی مورد نظر است. با در نظر گرفتن attention، مدل میتواند به طور گزینشی مرتبطترین اطلاعات را رسیدگی و پردازش کند و وابستگیها و روابط درون دادهها را درک کند. این مکانیسم به ویژه در کارهایی که شامل دادههای دنبالهای(sequential) و یا دادههای ساختارمند هستند، مانند پردازش زبان طبیعی یا بینایی ماشین، ارزشمند است، زیرا مدل را قادر میسازد تا به طور مؤثر وابستگیهای دوربرد را مدیریت کند و با توجه به ویژگیها و محتوای مهم، عملکرد را بهبود بخشد.
یک مکانیزم توجه بخشی از یک شبکه عصبی است. در هر گام از عملیات decoder، توسط مکانیزم توجه تصمیم گرفته میشود که کدام بخش از اطلاعات منبع بیشتر توجه شود که متناسب با خروجی فعلی باشد. در چنین شرایطی نیاز نیست که encoder تمام داده ورودی را در قالب یک بردار فشرده دربیاورد بلکه برای هر یک از توکنهای ورودی نمایهای ایجاد میکند. یعنی hidden state همه مراحل encoder (به جای تنها حفظ hidden state آخرین مرحله) حفظ میشود و در اختیار decoder قرار میگیرد.
حال باید ببینیم decoder چگونه با استفاده از hidden state بخشهای مختلف ورودی میتواند در هنگام تولید خروجی بر بخشهای مرتبطتری از ورودی توجه داشته باشد.
در مکانیزم توجه، سه عنصر کلیدی وجود دارد:
Query, Key, Value => Q, K, V
Q )Query) نمایانگر کلمهای است که در حال پردازش است یا نیاز به توجه دارد.
K )Key) نشاندهنده ویژگیهای تمام کلمات جمله ورودی است.
V )Value) مقادیر واقعی مربوط به کلمات ورودی است که در نهایت ترکیبی از آنها به خروجی تبدیل میشود.
حال بیایید این مکانیزم را با مثالی ساده و در ترجمه جمله "I saw cat sat on mat" به فارسی توضیح دهیم.
جمله انگلیسی: "I saw cat sat on mat."
ترجمه فارسی: "من دیدم گربه روی پادری نشسته بود."
در اینجا: هر کلمه از جمله انگلیسی به یک بردار تبدیل میشود که ویژگیهای آن را نشان میدهد.
فرض کنیم کلمه saw در حال پردازش است(یعنی در جایگاه Q قرار دارد). میخواهیم توجه کنیم که کدام کلمات دیگر در جمله برای ترجمه این کلمه مهم هستند.
K برای هر کلمه از جمله محاسبه میشود و نشاندهنده میزان ارتباط آن کلمه با Q (اینجا "saw") است. یعنی به ازای هر کلمه ورودی ما یک بردار K خواهیم داشت.
سپس، Q با تمام Kها مقایسه میشود تا مشخص شود کدام کلمات باید بیشتر توجه (وزن) داده شوند.
V این بردارها نیز مانند K نمایندهی هر کلمهی منبع هستند و به تعداد ورودی ها موجود میباشند، اما از لحاظ معنایی ارزش محتوای آن کلمه را نگه میدارند. به عنوان مثال، بردار مقدار "mat" اطلاعاتی در مورد معنای کلمه "mat" دارد.
برای درک بهتر تاثیر مکانیزم توجه به مثال زیر توجه کنید:
فرض کنید از مدل میخواهیم جملهی 'مریم معلم ریاضی حمید است، او آموزگار با تجربهای است' را به انگلیسی ترجمه کند. هنگامی که به ترجمه "او" میرسد ممکن است به اشتباه حمید را فاعل در نظر بگیرد و he ترجمه کند که اشتباه است. کار مکانیزم توجه این است که هنگام ترجمه "او" به عنوان Query ، میزان تاثیر مریم به عنوان معلم را بیشتر ببیند تا ترجمه صحیح انجام شود.
شرح معماری مکانیزم Attention:
معماری کلی مکانیزم Attention به شکل زیر است:
بردارهای Q، K و V در ابتدا به صورت مستقیم از ورودی استخراج میشوند، اما این بردارها ممکن است به شکلهایی نباشند که برای عملیات توجه مناسب باشند. لایهی خطی به مدل اجازه میدهد که ابعاد این بردارها را تغییر دهد تا در فضایی مناسب برای توجه قرار گیرند. این تغییر ابعاد به مدل امکان میدهد که اطلاعات پیچیدهتر و غیرخطیتر را از ورودی استخراج کند.
به بیان ساده، لایهی خطی به عنوان یک نگاشت خطی عمل میکند که ابعاد بردارها را تنظیم میکند و مدل را انعطافپذیرتر میسازد تا بتواند انواع مختلفی از روابط بین کلمات را درک کند. سپس ضرب داخلی بین بردار بدست آمده از لایه خطی Qو K محاسبه میشود. این ضرب داخلی در واقع میزان شباهت(کسینوسی) Qبه Kها را محاسبه میکند و از این طریق متوجه میشود چه K ای بیشتر با Q مرتبط است. پس از مقیاس شدن حاصل ضرب داخلی از یک تابع softmax عبور میکند.
پس از محاسبه ضرب داخلی بین پرسش (Q) و کلید (K)، مقادیر حاصل میتوانند منفی یا بزرگ باشند. تابع Softmax این مقادیر را به یک توزیع احتمال تبدیل میکند که مجموعشان برابر با ۱ میشود. این کار باعث میشود که مدل بتواند به راحتی تصمیم بگیرد که کدام ورودیها باید بیشتر مورد توجه قرار گیرند. ورودیهایی که دارای مقادیر بالاتری هستند (توجه بیشتر) و ورودیهایی که دارای مقادیر پایینتری هستند (توجه کمتر) به وضوح تفکیک میشوند.
بعد از اعمال تابع Softmax روی نتایج ضرب داخلی (matmul) بین ماتریس پرسش (Q) و ماتریس کلید (K)، ما به مرحله بعدی میرویم که در آن نتایج بهدستآمده از Softmax با ماتریس ارزش (V) ضرب داخلی میشود. مرحله ضرب داخلی با ماتریس ارزش (V) بعد از Softmax به این دلیل ضروری است که باعث تخصیص وزن به مقادیر و تولید خروجی نهایی میشود که اطلاعات مهم را با لحاظ کردن توجه نسبت به ورودیها تجمیع میکند.
سپس مقیاس بندی نتیجه از طریق جذر ابعاد بردارهای Key انجام میشود. این مقیاسبندی کمک میکند تا ضربهای داخلی بیش از حد بزرگ نشوند، که ممکن است منجر به ناپایداری در طول آموزش مدل شود. فرمول محاسبه Attention به شکل زیر است:
پس از اعمال عملیات توجه و استفاده از بردارهای Q، K و V، یک لایهی خطی (W) به کار گرفته میشود تا خروجی نهایی را تولید کند. این فرآیند به مدل کمک میکند که خروجی توجه را به شکل مناسبتر و بهینهتری برای مراحل بعدی مدل تبدیل کند.
Output=Attention(Q,K,V)W
نتیجهگیری:
در این بخش با دلایل و چالشهایی که انگیزهی معرفی مکانیزم Attention شدند و همچنین رویکرد این مکانیزم جهت برطرفسازی چالشها آشنا شدیم و شرحی بر معماری مکانیزم توجه و نحوه کارکرد آن ارائه شد. این مکانیزم پایه و اساس Transformer میباشد که در بخشهای بعد به شرح دقیقتری از آن خواهیم پرداخت.