جستجو برای:
  • فروشگاه
  • وبلاگ
  • آموزش‌های رایگان
    • آموزش پایتون رایگان
    • آموزش یادگیری ماشین رایگان
    • آموزش یادگیری عمیق رایگان
    • آموزش pytorch رایگان
    • آموزش گوگل کولب
    • آموزش رایگان matplotlib
    • آموزش متلب رایگان
    • دوره‌های خارجی
  • نقشه راه AI
  • کلاس خصوصی
  • همکاری با ما💚
  • حساب کاربری
  • اساتید
  • درباره ما
     
    • 0902-546-9248
    • howsam.mail@gmail.com
    آکادمی هوش مصنوعی هوسم
    • فروشگاه
    • وبلاگ
    • آموزش‌های رایگان
      • آموزش پایتون
      • آموزش یادگیری ماشین رایگان
      • آموزش یادگیری عمیق
      • آموزش pytorch
      • آموزش گوگل کولب
      • آموزش رایگان matplotlib
      • آموزش متلب
      • دوره‌های خارجی
    • نقشه راه AI
    • کلاس خصوصی
    • درباره ما
      • اساتید
      • پشتیبانی
      • هوسم در اینستا و تلگرام
        • اینستاگرام هوسم (howsam_org@)
        • تلگرام هوسم (howsam_org@)
        • تلگرام پایتورچ (pytorch_howsam@)
    • همکاری با ما💚
    0

    ورود و ثبت نام

    بلاگ

    آکادمی هوش مصنوعی هوسم وبلاگ یادگیری عمیق شبکه ترنسفورمر

    شبکه ترنسفورمر

    2024/08/10
    ارسال شده توسط سید سجاد اشرفی
    یادگیری عمیق
    5.31k بازدید

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

    فهرست مطالب نمایش
    1. شبکه عصبی ترنسفورمر چیست؟
    2. مختصری بر تاریخچه شبکه عصبی ترنسفورمر
    2.1. گرد و خاک به‌پاکردن شبکه ترنسفورمر
    3. سناریوی دسته بندی متن به دو کلاس مثبت و منفی
    4. پیش پردازش و آماده سازی متن
    4.1. امبدینگ (Embedding)
    5. ترجمه ماشینی در پردازش زبان طبیعی
    6. شبکه ترنسفورمر Transformer
    7. لایه انکدر در شبکه ترنسفورمر
    7.1. ماژول Multi-Head Attention در شبکه ترنسفورمر
    7.2. زیرماژول Scaled Dot-Product Attnetion
    7.3. ماژول Feed Forward در شبکه Transformer
    7.4. جمع‌بندی لایه انکدر در شبکه ترنسفورمر

    شبکه عصبی ترنسفورمر چیست؟

    شبکه عصبی ترنسفورمر (Transformer) یک معماری مدرن در یادگیری عمیق است که برای پردازش داده‌های دنباله‌ای (مانند متن یا سری زمانی) طراحی شده است. این شبکه از مکانیزم توجه (Attention) استفاده می‌کند تا بتواند ارتباط بلندمدت میان اعضای یک دنباله را به صورت مستقیم و موازی مدلسازی کند.
    این معماری ابتدا در حوزه پردازش زبان طبیعی (NLP) برای ترجمه ماشینی معرفی شد، اما امروزه در حوزه‌های مختلفی مانند خلاصه‌سازی متن، مدل‌سازی زبان، بینایی کامپیوتر، پردازش صوت و غیره به‌کار گرفته می‌شود.

    مختصری بر تاریخچه شبکه عصبی ترنسفورمر

    در سال 2017 مقاله‌ای با نام Attention is All You Need توسط گوگل منتشر شد. بله، این مقاله‌ای بود که در آن شبکه ترنسفورمر پیشنهاد شده بود. این شبکه برای اولین بار برای تسک ترجمه ماشینی یا Machine Translation ساخته شده بود. حرف حسابش چیست ؟

    خانم‌ها و آقایان، بیایید شبکه‌های بازگشتی پرزحمت را کنار بگذاریم!

    عجب! یعنی LSTM و سایر دار و دسته‌اش پر؟! بله، پر! حالا کسانی که آموزش شبکه LSTM ما را خوانده‌اند، می‌گویند: “یعنی این همه گیت گیت کردی و مخ ما رو خوردی، الان میخوای بگی که اون رو بذاریم کنار؟!” خب LSTM و سایر شبکه‌های بازگشتی همچنان کاربرد دارند. اما در تسک‌های بزرگ و سنگین، شبکه ترنسفورمر جایگزین شبکه LSTM شده است.

    تا پیش از این، محققان گوگل کارهایی در زمینه استفاده از شبکه LSTM برای ترجمه ماشینی داشتند. اما زدند زیر میز و شبکه جدیدی را پیشنهاد کردند. البته، این زیر میز زدن، ناگهانی نبود! بلکه، آرام آرام پیشنهادهایی در راستای بهتر کردن شبکه LSTM، مانند شبکه LSTM با مکانیزم اتنشن ارائه شده بود که نهایتا شبکه ترنسفورمر متولد شد. انتشار این مقاله یک انقلاب بزرگ را در حوزه پردازش زبان طبیعی (NLP) رقم زد که به بهار NLP هم معروف است.

    طی یک روند بسیار جالب و خواندنی، شبکه ترنسفورمر ساخته شد. [منبع]

    گرد و خاک به‌پاکردن شبکه ترنسفورمر

    پس از این مقاله، افراد مختلف از آن گفتند، نوشتند، مقاله منتشر کردند، کتابخانه ساختند و … بیایید باهم چند نمونه از کارهای کلیدی بر پایه شبکه ترنسفورمر را مرور کنیم:

    • مجموعه هاگینگ فیس (Hugging Face) از همان زمان تولد ترنسفورمر بود که شروع کرد و یک پیاده‌سازی تروتمیز از شبکه ترنسفورمر در پایتورچ ارائه کرد. حالا دیگر هاگینگ فیس برای خودش شرکت هیولایی شده است.
    • شبکه BERT بازهم توسط گوگل پیشنهاد شد که نحوه استفاده از شبکه ترنسفورمر در سایر تسک‌ها مانند مدل‌سازی زبان، دسته‌بندی متن، پرسش و پاسخ و غیره را ارائه کرده بود. همچنین، بحث پری‌ترین و فاین تیون کردن در ترنسفورمر هم مطرح شده بود. گفتیم که اولین بار ترنسفورمر برای ترجمه ماشینی ارائه شده بود.
    • شبکه‌های GPT از شرکت OpenAI مطرح شد. همان‌هایی که باعث شدند ChatGPT جان ساخته شود. 🤗
    • شبکه ViT توسط گوگل برای حوزه بینایی کامپیوتر مطرح شد. شبکه‌ای که باعث ورود ترنسفورمرها به دنیای بینایی کامپیوتر شد. یعنی شبکه کانولوشنی هم پَر؟! 😬 نه!

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

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

    سناریوی دسته بندی متن به دو کلاس مثبت و منفی

    فرض کنید، ما دیتاستی به نام IMDB داریم که شامل مجموعه‌ای از کامنت کاربران سایت IMDB هست. می‌خواهیم این کامنت‌ها را به دو کلاس مثبت و منفی دسته‌بندی کنیم. کاربری که کامنت خوب و رضایت از فیلم/سریال گذاشته، باید به عنوان کامنت/کلاس مثبت شناخته شود. کامنت منفی هم که مشخص هست. در شکل زیر، نمونه‌هایی از دیتاست IMDB را مشاهده می‌کنید؛ ستون اول، کامنت کاربر و ستون دوم هم تارگت (Positive/Negative) هست. این دیتاست 49582 نمونه ندارد. عجب! داشتم بعد مدتی این نوشته رو مرور می‌کردم، به این جمله خندیدم: این دیتاست 49582 نمونه ندارد. 🤣 خوبه صد بار متن رو می‌خونما…

    دیتاست IMDB (متن‌ها طولانی بود و در جدول به‌صورت خلاصه نشان دادیم)

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

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

    پیش پردازش و آماده سازی متن

    رسیدیم به اینجا که متن ورودی را باید به اعداد تبدیل کنیم. حالا چگونه؟ یک ایده رایج این هست که بیاییم ابتدا جمله را به یکسری کلمه تبدیل کنیم. سپس، برای هر کلمه یک بردار ویژگی عددی بسازیم. همان‌طور که گفتم، ابتدا باید تک تک جملات به لیستی از کلمات تبدیل شوند. به این کار توکنایزیشن (Tokenization) گفته می‌شود. واقعیت این هست که جمله به لیستی از توکن‌ها تبدیل می‌شود، نه کلمات! اما فعلا خودتان را درگیر جزییات کار نکنید. فعلا فکر کنید، توکن‌ها تقریبا معادل با همان کلمه‌ها هستند. در شکل زیر نتیجه توکنایزیشن را برای یک نمونه می‌بینید:

    توکنایزیشن در nlp
    تمرین آیا با پایتون می‌توانید جمله بالا را به لیست بالا تبدیل کنید؟ یک خط کد نیاز دارد!

    بعد از توکنایز، باید عمل بردارسازی (Vectorization) انجام دهیم! این عمل، یعنی هر کلمه/توکن به یک بردار معنی‌دار تبدیل شود. خوشبختانه، امروزه یکسری مدل آماده داریم که به راحتی قابل دانلود و استفاده هستند. مثلا، GloVe که از ما یک کلمه/توکن می‌گیرد و در خروجی یک بردار به طول مشخص می‌دهد. مثلا، وقتی توکن‌های نمونه بالا را به GloVe می‌دهیم، برای هرکدام یک بردار عددی به طول 50 می‌دهد. ببینید:

    وکتوریزیشن در nlp

    پس من یک جمله به طول 20 را تبدیل به 20 بردار به طول 50 کردم. کلا یک جمله به طول L را می‌توان به یک تنسور به ابعاد LxF تبدیل کرد. L به همان طول جمله (تعداد توکن‌ها) و F هم به طول بردار ویژگی اشاره دارد. حالا باید این بردار ورودی را باید در اختیار شبکه ترنسفورمر قرار دهیم.

    البته، در ترنسفورمر از لایه امبدینگ (Embedding) برای وکتوریزیشن استفاده می‌شود. در ادامه، درباره لایه امبدینگ بیشتر توضیح می‌دهم…

    امبدینگ (Embedding)

    لایه امبدینگ در ترنسفورمر یک جدول وزنی (Weight Matrix) است که هر توکن ورودی را به یک بردار ویژگی عددی با طول ثابت تبدیل می‌کند. منظور از جدول وزنی چیست؟ به شکل زیر نگاه کنید؛ ماتریس زیر به ابعاد Nwxd همان لایه امبدینگ است. پس، لایه امبدینگ چیزی نیست جز یک ماتریس دوبعدی! تعداد سطرهای این ماتریس، معادل با تعداد توکن‌های یکتا در دیتاست آموزش هست. مثلا، در دیتاست آموزش 10 هزار توکن یکتا داریم. ساده‌تر بگویم، 10 هزار کلمه یکتا در زبان انگلیسی! تعداد ستون‌ها هم معادل با سایز بردار ویژگی برای هر توکن هست. مثلا، در GloVe برداری به طول 50 برای هر توکن داشتیم. حالا، برای کلمه ‘the’ به سطر معادل با کلمه ‘the’ در ماتریس امبدینگ مراجعه می‌کنیم و بردار متناظر با آن سطر برمی‌داریم و تمام!

    لایه امبدینگ (Embedding)
    لایه امبدینگ (Embedding)

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

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

    • داده‌های متنی توکنایز شوند.
    • هر توکن تبدیل به یک بردار شود. در اینجا از لایه امبدینگ!

    قبل از اینکه معماری شبکه ترنسفورمر را توضیح دهم، باید کمی از تسک ترجمه ماشینی بگویم. چون، قبلا گفتم که اولین بار شبکه ترنسفورمر برای ترجمه ماشینی ارائه شد.

    ترجمه ماشینی در پردازش زبان طبیعی

    ترجمه ماشینی یا Machine Translation یعنی متنی از زبان A به زبان B ترجمه یا تبدیل شود. برای این کار معمولا از ساختار انکدر-دیکدر استفاده می‌کنند. ساختاری که در آن، یک شبکه به عنوان انکدر وظیفه انکد کردن یا استخراج ویژگی از زبان مبدا (A) را برعهده دارد. سپس، شبکه دیکدر، ویژگی‌های استخراجی انکدر را به زبان مقصد (B) تبدیل می‌کند. ساختار کلی انکدر-دیکدر با تمرکز بر شبکه‌های بازگشتی در شکل زیر نشان داده شده است.

    ساختار Encoder-Decoder با شبکه بازگشتی
    ساختار انکدر-دیکدر با شبکه بازگشتی برای ترجمه ماشینی

    در شکل بالا، x-ها همان بردارهای توکن زبان A و y-ها هم بردارهای توکن زبان B هستند. ممکن هست، بگویید، چرا شبکه بازگشتی؟ نکته اینجاست که شبکه ترنسفورمر مبتنی بر همین ساختار انکدر-دیکدر کار ترجمه را انجام می‌دهد. با این تفاوت که در اینجا صرفا یک لایه انکدر و دیکدر داریم. اما در شبکه ترنسفورمر تعدادی زیادی لایه انکدر و دیکدر داریم. در ادامه، بیشتر در مورد این مطلب صحبت می‌کنم…

    بالاخره بعد از کلی مقدمه‌چینی، رسیدیم به اصل مطلب، شبکه ترنسفورمر…

    شبکه ترنسفورمر Transformer

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

    نکته جالب اینجاست که خروجی بخش انکدر که ویژگی غنی و ارزشمند است، به تک تک لایه‌های دیکدر وارد می‌شود. چطوری؟ حالا فعلا جزئیات رو بگذار کنار و به کلیات توجه کن.

    در شبکه‌های بازگشتی بخش انکدر و دیکدر کاملا یکی هستند. اما در شبکه ترنسفورمر، لایه انکدر و دیکدر یکی نیستند و باهم تفاوت‌هایی دارند. بنابراین، باید هرکدام به‌صورت جداگانه بررسی شوند.

    البته، نکته خوشحال‌کننده اینجاست که ساختار انکدر-دیکدر برای مساله‌های دنباله به دنباله یا Sequence to Sequence (مثلا ترجمه ماشینی) کاربرد دارد. برای مسائلی مثل دسته‌بندی، رگرسیون و مدل‌سازی زبان تنها یک بخش انکدر یا دیکدر کافی است و به هردو نیازی نیست. من هم اینجا می‌خواهم با سناریوی دسته‌بندی جلو بروم. پس فعلا فقط بخش انکدر را به شما توضیح بدهم. بعدا، خودتان می‌توانید با دوره یادگیری عمیق هوسم یا به هر شکل دیگری بخش دیکدر را هم یاد بگیرید. برویم سراغ تشریح لایه انکدر در ترنسفورمر…

    لایه انکدر در شبکه ترنسفورمر

    همان‌طور که در شکل بالا نشان داده شد، بخش انکدر از تعدادی لایه انکدر تشکیل شده است. این لایه‌ها باهم فرقی ندارند و صرفا به‌صورت متوالی قرار گرفته‌اند. چرا؟ اگر با سایر شبکه‌های عصبی آشنا باشید، انتظار دارم جوابش را بدانید. ما در همه شبکه‌ها مثل شبکه MLP یا CNN یکسری لایه روی هم قرار می‌دادیم که ظرفیت یادگیری شبکه بالاتر رود و ویژگی‌های ارزشمندتری استخراج کند. اینجا هم طبیعتا همین قاعده برقرار هست. حالا بیایید بزنیم به دل این لایه‌های انکدر…

    در دل یک لایه انکدر ترنسفورمر دو ماژول اصلی قرار گرفته است:

    • ماژول Multi-Head Attention
    • ماژول Feed Forward
    لایه Encoder در شبکه ترنسفورمر
    نمایی از بخش‌های اصلی لایه انکدر: ماژول Multi-Head Attention و Feed Forward

    ماژول Feed Forward بسیار ساده هست و همان MLP است. اما ماژول Multi-Head Attention مهم هست و پیچیدگی‌هایی دارد. هرچه هست، زیر سر همین ماژول Multi-head Attention هست! اصلا برگردیم به ابتدای این پست! اسم مقاله شبکه ترنسفورمر چه بود؟ Attention is All You Need. می‌گوید اتنشن همه آن چیزی است که نیاز دارید. خب، تا همین جا فهمیدیم که قلب تپنده این شبکه Multi-head Attention هست. اتفاقا این ماژول در سمت دیکدر هم وجود دارد!

    فان اسم مقاله چه بود؟ Attention is All You Need. علاوه‌بر محتوای علمی این مقاله، عنوان این مقاله هم جریان‌ساز بود! بعد این مقاله، کلکسیونی از مقالات علمی منتشر شد که اسم‌شان به شکل زیر بود. دیگه واقعا جا داشت که بگوییم چه خبرتونه، چه خبرتونه؟! (لطفا با لحن دکتر بخونید!)

     is All You Need …

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

    • بردارهای X وارد ماژول Multi-Head Attention می‌شوند.
    • سپس، خروجی Multi-Head Attention بدست می‌آید.
    • خروجی‌های Multi-Head Attention وارد ماژول Feed Forward می‌شوند.
    • درنهایت، خروجی Feed Forward با نماد Z بدست می‌آید.
    جزئیات لایه انکدر برای یک نمونه داده

    نکته به شکل بالا نگاه کنید؛ ما سه ورودی X1 X2 X3 داریم. تعداد خروجی هر ماژول به همان تعداد ورودی هست. یعنی درنهایت، سه خروجی Z1 Z2 Z3 داریم. 

    در ادامه می‌خواهم درباره Multi-head Attention و Feed Forward صحبت کنم. طبیعتا عمده صحبت ما معطوف به Multi-Head Attention خواهد بود.

    ماژول Multi-Head Attention در شبکه ترنسفورمر

    قبل از هرچیزی بگویم که از ساختار ماژول Multi-Head Attention نترسید! 😅 شاید ظاهرش سخت به نظر برسد، اما ته دلش چیزی نیست! ساختار این ماژول را در شکل زیر آورده‌ام.

    ماژول Multi-Head Attention

    به شکل بالا دقت کنید؛ یک‌سری بلوک وجود دارد که به‌صورت موازی با هم قرار گرفته‌اند. دو بلوک Concat و Linear (همان لایه فولی کانکتد) هم در آخر کار قرار گرفته‌اند که فقط یک عدد از آنها داریم. کاملا واضح هست که بلوک Concat ورودی‌های موازی و متعدد را به‌هم الحاق می‌کند. فعلا بیایید Concat و Linear آخر را کنار بگذاریم. برویم سراغ بلوک‌های موازی…

    این موازی بودن بلوک‌ها به همان عبارت Multi-Head اشاره دارد. یعنی ما چند Head یا سر داریم که به‌صورت موازی باهم قرار گرفته‌اند. از قرار معلوم همه شبیه هم هستند، پس فعلا می‌توانیم تعداد Head یا h را برابر با 1 درنظر بگیریم که شکل بالا به‌صورت زیر ساده شود. حالا بهتر می‌توانیم بلوک‌های مختلف این ماژول را ببینیم.

    ماژول Multi-Head Attention با h=1

    نکته به این قسمت از شبکه ترنسفورمر که در شکل بالا نشان داده شده، ماژول Self-attention هم گفته می‌شود. بعد از پایان این وبلاگ، حتما این عبارت را گوگل کنید.

    نکته جالب اینجاست که ورودی x در شکل بالا، به سه لایه Linear یا همان لایه فولی کانکتد مجزا می‌رود. سپس، سه خروجی V Q K ساخته می‌شود. این سه حرف نماینده سه کلمه معروف Value Query Key هستند. شاید قبلا جایی شنیده باشید. اگر هم نشنیده‌اید که هیچ، مهم نیست… حالا سه تنسور V Q K وارد ماژولی به‌نام Scaled Dot-Product Attnetion می‌شوند. برویم ببینیم در این زیرماژول چه خبر است…

    زیرماژول Scaled Dot-Product Attnetion

    همان‌طور که تا اینجا گفتیم، این زیرماژول در دل Multi-Head Attention قرار دارد. اما می‌خواهیم ببینیم چه بلایی سر سه ورودی V Q K می‌آورد؟ چیزی که از شکل مشخص است این هست که سه ورودی V Q K دریافت می‌کند و یک خروجی Z می‌دهد. بلوک دیاگرام زیرماژول Scaled Dot-Product Attnetion را در شکل زیر نشان داده‌ام. چیزی نیست جز ضرب ماتریسی و یکمی هم فلفل و نمک! عجب! این همه راه ما را کشانده و هی بلوک‌های تودرتو را پشت سر گذاشته‌ایم تا به عملگر ضرب ماتریسی برسیم؟ بله! و چقدر این ضرب ماتریسی در یادگیری ماشین و یادگیری عمیق اهمیت دارد…

    زیرماژول Scaled Dot-Product Attnetion

    کل بلوک دیاگرام بالا معادل با فرمول زیر است:

    نکته بعد از ضرب QKT باید scale که همان رایکال مخرج است را انجام دهیم. اتفاقا به همین خاطر هست که در نام این زیرماژول کلمه Scaled داریم. متغیر dK هم به طول بردار K اشاره می‌کند. همان F! چرا K؟ فرقی نمی‌کند. K و Q باهم برابرند. شاید در یادگیری ماشین دیده باشید؛ این مقیاس نقش Temperature را برای سافت‌مکس دارد. می‌تواند رفتار Softmax را به Argmax نزدیک کند یا از آن فاصله بگیرد و نسخه Soft ارائه دهد. 

    نکته ما می‌دانیم خروجی سافت‌مکس اعداد نرمالیزه‌شده بین 0 و 1 است. در واقع، ما از طریق K و Q یکسری Score یا وزن می‌سازیم و بردارهای موجود در V را وزن‌دهی می‌کنیم.

    بسیارخب، برگردیم به همان Multi-Head Attention… در همین بخش گفتیم که ما از همین Slef-Attention یکی نداریم، بلکه چندتا داریم که موازی باهم قرار گرفته‌اند. بیایید این بار h را برابر با 3 درنظر بگیریم؛ در شکل زیر، این ماژول‌های موازی را کنار هم نشان داده‌ام. اصل کلام این هست که ورودی LxF از بُعد F باید به 3 تکه تقسیم (Split) شود و بَعد هر تکه وارد یکی از این سه ماژول شود.

    تکه کردن ورودی و اعمال به Self-attentionهای مختلف

    درنهایت، وقتی سه خروجی را بدست آوردیم، با همان Concat اینها رو دوباره از بعد F به هم می‌چسبانیم و تحویل لایه Linear می‌دهیم. تماممم!

    به قول ژوله: “چقدر سخت بود، چقدر تلخ بود!” خسته شدم! 😫 وقتی از این کار آموزش دادن خسته میشم، عمیقا به بازنشستگی فکر می‌کنم! چند سال دیگه می‌تونم آموزش بدم؟! نمی‌دانم! واقعا نمی‌دانم! 

    سلام مجدد، من برگشتم که داستان را ادامه دهم خسته هم نیستم! 🙂

    اگر خاطرتان باشد، لایه انکدر ترنسفورمر شامل دو ماژول Multi-Head Attention و Feed Forward بود. گفتیم که ماژول Multi-Head Attention قلب تپنده شبکه ترنسفورمر هست. درمورد این ماژول با جزئیات توضیح دادیم و تمام شد. حالا برویم سراغ Feed Forward…

    ماژول Feed Forward در شبکه Transformer

    این ماژول چیزی نیست جز، دو لایه فولی کانکتد (Linear) و بس! شکل زیر را نگاه کنید؛ همه چیز گویاست:

    ماژول Feed Forward در بخش انکدر شبکه Transformer
    ماژول Feed Forward در بخش انکدر شبکه Transformer

    این ماژول، ورودی LxF را دریافت می‌کند و خروجی LxF می‌دهد. بنابراین، سایز ورودی و خروجی دقیقا برابر است. در بلوک اولی نوشته شده: 4XLinear؛ یعنی، تعداد نورون‌های این لایه چهاربرابر ورودی است. بنابراین، اگر ورودی LxF هست، تعداد نورون‌های این لایه برابر با 4F است. طبیعتا ما با L که کاری نداریم، چون L معادل با تعداد توکن‌هاست و ما صرفا با روی فیچرها یا همان F کار می‌کنیم. در ماژول قبلی Multi-Head Attention هم دیدید که F را تکه پاره می‌کردیم و …

    پس، سایز خروجی لایه اول چه می‌شود؟ بله، Lx4F. حالا ورودی را به لایه دوم (Linear) می‌دهیم. تعداد نورون‌های این لایه برابر با F هست. یعنی، در این لایه می‌خواهیم ابعاد بردار ویژگی را از 4F به F کاهش دهیم. همین! پس، سایز خروجی لایه دوم چه می‌شود؟ LxF و تمام!

    نکته عدد 4 در لایه اول همیشگی نیست. قابل تغییر هست. مثلا پایتورچ این قابلیت را به ما می‌دهد که این عدد را تغییر دهیم.

    نکته همین دو لایه این ماژول کلی پارامتر تولید می‌کند! بیایید یک مثال عددی را باهم مرور کنیم؛ فرض کنید، ورودی این ماژول 20×512 باشد. یعنی L برابر با 20 و F هم 512. تعداد وزن‌های لایه اول: 512×2048 و تعداد وزن‌های لایه دوم: 2048×512. نتیجه اینکه: 2 میلیون پارامتر برای دو لایه خواهیم داشت!

    چرا اصلا چنین ماژولی گذاشتند؟ مریض بودند که یک بار بردار ویژگی F را به 4F رساندند و دوباره به F برگرداندند؟ اگر جوابش را نمی‌دانید، باید روی مباحث پایه، یعنی شبکه عصبی MLP بیشتر کار کنید. حالا، اگر جوابش را می‌دانید، لطفا کامنت کنید که نظرتان را بدانیم.

    جمع‌بندی لایه انکدر در شبکه ترنسفورمر

    برای جمع‌بندی، شکل زیر را آوردم و نمی‌خواهم توضیح اضافه‌ای بدهم. واضح است؟!

    لایه انکدر در ترنسفورمر همراه با ماژول و زیرماژول‌ها
    لایه انکدر در ترنسفورمر همراه با ماژول و زیرماژول‌ها

    ما درمورد بخش دیکدر صحبت نکردیم. به نظرم، برای شروع آشنایی با ترنسفورمر به بخش دیکدر نیازی نیست. سعی کنید، همین بخش را به خوبی یاد بگیرید و بعد به سراغ بخش دیکدر بروید. اتفاقا درصد بالایی از بخش دیکدر مشابه با همین انکدر هست.

    بسیارخب، به پایان آموزش شبکه ترنسفورمر رسیدیم. آمار و ارقام تولید محتوا می‌گوید که درصد کمی از افراد یک نوشته را تا آخر می‌خوانند، یک ویدئو را تا آخر می‌بیند، یک پادکست را تا آخر گوش می‌دهند و … خب، مشاهده این آمارها برای یک تولیدکننده محتوا ناراحت‌کننده هست! شاید گاهی اوقات ترجیح دهد که آمارها را نبیند تا انگیزه‌اش کم نشود! به‌هرحال، امیدوارم این آموزش مفید باشد. 

    اشتراک گذاری:

    مطالب زیر را حتما مطالعه کنید

    یادگیری انتقالی
    یادگیری انتقالی یا Transfer Learning به معنای استفاده از یک مدل از پیش آموزش‌دیده در...
    شبکه VGG
    شبکه VGG یکی از معماری‌های موفق و معروف در حوزه یادگیری عمیق است که در...
    مهندسی پرامپت
    امروزه، با ظهور ChatGPT و سایر ابزارهای هوش مصنوعی، طیف گسترده‌ای از افراد، از کاربران...
    مدل nanoGPT
    در سال ۲۰۱۹، OpenAI مدل GPT-2 را معرفی کرد. OpenAI، برخلاف مدل‌های بعدی (GPT-3 و...
    شگفت‌انگیزترین ایده هوش مصنوعی از نظر Andrej Karpathy
    هوش مصنوعی به سرعت در حال پیشرفت هست. به‌گونه‌ای که باید زمان و انرژی زیادی...
    شبکه ویژن ترنسفورمر
    شبکه ویژن ترنسفورمر (Vision Transformer) یا ViT یک شبکه عصبی مبتنی بر مدل ترنسفورمر هست...

    41 دیدگاه

    به گفتگوی ما بپیوندید و دیدگاه خود را با ما در میان بگذارید.

    • reza گفت:
      2025/01/25 در 12:39 ب.ظ

      Perfect❤️

      پاسخ
      • هوسم گفت:
        2025/01/26 در 10:12 ق.ظ

        🙏🌺

        پاسخ
    • el.hosseini.ai گفت:
      2024/12/11 در 12:51 ب.ظ

      مثل همیشه عالی، راون، جذاب واسه ادامه مطالعه…
      ممنون و خداقوت

      پاسخ
      • هوسم گفت:
        2024/12/11 در 6:25 ب.ظ

        ممنون 😊🙏

        پاسخ
    • رمضانی گفت:
      2024/11/30 در 7:48 ب.ظ

      سلام بسیار عالی بود مرسی از توضیحاتتون

      پاسخ
      • هوسم گفت:
        2024/12/01 در 10:57 ق.ظ

        سلام
        ممنون 🌹🙏

        پاسخ
    • سید گفت:
      2024/11/22 در 6:01 ب.ظ

      ممنونم. تا آخر خوندم)

      پاسخ
      • هوسم گفت:
        2024/11/23 در 11:25 ق.ظ

        عالی 😊⭐

        پاسخ
    • نیما آقاجان زاده گفت:
      2024/10/20 در 7:04 ب.ظ

      ممنون واقعا زحمت کشیدید هر چند یه کم سریع خوندم متوجه نشدم 🙂

      پاسخ
      • هوسم گفت:
        2024/10/21 در 11:13 ق.ظ

        یه کوچولو پیچیده هست. نیاز به چند بار مطالعه و مرور داره.

        پاسخ
    • omid گفت:
      2024/08/04 در 1:25 ق.ظ

      ممنون خیلی مقاله خوبی بود.
      سپاس از شما

      پاسخ
      • هوسم گفت:
        2024/08/05 در 10:02 ق.ظ

        ممنون 🌹🙏
        موفق باشید

        پاسخ
      • فروغ گفت:
        2025/04/20 در 6:11 ب.ظ

        خیلی خوب بود ممنون

        پاسخ
    • فاطمه گفت:
      2024/07/30 در 4:03 ب.ظ

      واقعاااااااااااااااااااااااااااا مرسی و خدا قوت. کلی عشق کردم. بیصبرانه منتظر هرگونه محتوای تولید شده از هوسم هستم 🙂

      پاسخ
      • هوسم گفت:
        2024/07/31 در 10:21 ق.ظ

        ممنون 😊🙏🌹

        پاسخ
    • سنا ه. گفت:
      2024/06/23 در 10:06 ق.ظ

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

      پاسخ
      • هوسم گفت:
        2024/06/23 در 10:28 ق.ظ

        سلام
        خیلی خوشحالیم که آموزش شبکه ترنسفورمر مورد توجه و رضایت شما قرار گرفته. این پیام پر از انرژی و حس خوب، باعث دلگرمی و افتخار ماست. از اینکه زمان گذاشتید و این پیام رو نوشتید، بسیار ممنونیم.
        با آرزوی بهترین‌ها برای شما و سپاس مجدد بابت حمایتتون 😊🙏🌹

        پاسخ
    • sadegh گفت:
      2024/06/17 در 12:58 ب.ظ

      حاجی هوسم عید قربان یه عید به ما بده … یه تخفیف خوشگل بزار دوره یادگیری عمیق رو تهیه کنیم

      پاسخ
      • هوسم گفت:
        2024/06/17 در 8:49 ب.ظ

        سلام 🙂
        به زودی تخفیف تابستونی خواهیم داشت. احتمالا هفته دوم تیر…

        پاسخ
    • مرتضی گفت:
      2024/06/01 در 8:24 ق.ظ

      توضیحاتتان همیشه عالی بوده و من همیشه که به دنبال فهم یک مطلب هستم اول سراغ توضیحات خوب شما می روم تا به صورت ساده و کلی مطلب را درک کنم .

      پاسخ
      • هوسم گفت:
        2024/06/01 در 9:34 ق.ظ

        باعث خوشحالی هست که مطالب هوسم برای شما مفید هست. ممنون 🙏🌺

        پاسخ
    • مهدی گفت:
      2024/05/19 در 3:35 ب.ظ

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

      پاسخ
      • هوسم گفت:
        2024/05/19 در 5:49 ب.ظ

        سلام مهدی عزیز،
        ممنون بابت این پیام پرانرژی و قشنگ 🙏🌹

        پاسخ
    • ronak گفت:
      2024/05/13 در 6:13 ب.ظ

      خیلی عالی بود .من بدنبال یادگیری با جزئیات بودم که علاوه بر این خیلی روان وقابل فهم بود.تمام مقالات سایت رو میخونم و تا اخر هم میخونم. عشق و علاقه شما به تدریس و زمانی که براش میگذارید توی تک تک واژه ها قابل لمس هست.بسیار متشکرم

      پاسخ
      • هوسم گفت:
        2024/05/14 در 9:48 ق.ظ

        خوندن پیامتون لذت‌بخش بود. ممنون 🙏🌹

        پاسخ
    • کبیر گفت:
      2024/05/09 در 11:07 ق.ظ

      خیلی روان و ساده مطالب رو میشکونی و به مخاطب انتقال میدی. عالی. دست گلتون درد نکنه.

      پاسخ
      • هوسم گفت:
        2024/05/11 در 12:16 ب.ظ

        سلام
        خوشحالیم که آموزش رو دوست داشتید. 😊
        ممنونیم بابت به اشتراک گذاشتن نظرتون. 🌹🙏

        پاسخ
    • حمیدرضا گفت:
      2024/05/05 در 8:00 ب.ظ

      فوق العاده عالیییی ❤️

      پاسخ
      • هوسم گفت:
        2024/05/05 در 10:25 ب.ظ

        سپاس 😊🌹

        پاسخ
    • عرفان گفت:
      2024/05/05 در 3:06 ب.ظ

      واقعا بررسی‌های موشکافانه‌ی دکتر اشرفی همراه با اشتیاق و تسلطی که به مباحث دارن، مفاهیم رو خیلی جذاب میکنه. و حس شوخ طبعی ایشون هم که حرف نداره

      پاسخ
      • هوسم گفت:
        2024/05/05 در 10:27 ب.ظ

        سلام عرفان عزیز 🌹
        از لطف و محبت شما ممنونیم 🙏😊

        پاسخ
    • sara گفت:
      2024/04/20 در 3:35 ق.ظ

      ممنون از آموزش بسیار عالی که ارائه کردید.

      پاسخ
      • هوسم گفت:
        2024/05/05 در 2:44 ب.ظ

        سپاس 🌹🙏

        پاسخ
    • mustafa.haqqi گفت:
      2024/03/21 در 2:24 ب.ظ

      عاالی بود. فوق العاده بود. خیلی ممنون.

      پاسخ
      • هوسم گفت:
        2024/05/05 در 2:43 ب.ظ

        سپاس 😊🌹

        پاسخ
    • میثم آزاد گفت:
      2024/02/24 در 3:15 ق.ظ

      سلام. من نزدیک 15 سال هست که تدریس می کنم. تو تدریس یکی از ادعاهایی که دارم اینه که میتونم خیلی خوب و ساده مطلب رو توضیح بدم. اما وقتی سایت شما رو دیدم، کم آوردم و دیدم ماشالله شما خیلی کارت درسته و عالی توضیح میدی.
      انشالله همیشه موفق باشی

      پاسخ
      • هوسم گفت:
        2024/02/24 در 8:07 ب.ظ

        سلام میثم عزیز،
        از خوندن پیام شما خوشحال شدیم و انرژی گرفتیم.
        موفق باشید.

        پاسخ
    • Saeed Karami گفت:
      2024/02/09 در 2:58 ب.ظ

      سلام
      مثل همه پست ها بسیار عالی و قابل فهم و در عین حال فنی توضیح می دهید. برعکس بسیاری از سایت ها که فقط یک کلیات می گویند.
      لطفا این پست رو کامل کنید
      با تشکر

      پاسخ
      • هوسم گفت:
        2024/02/24 در 8:08 ب.ظ

        سلام
        ممنون سعید عزیز،
        پست کم‌کم در حال تکمیل هست. چیزی تا تکمیل پست نمونده.

        پاسخ
      • علی گفت:
        2025/05/09 در 12:06 ب.ظ

        سلام و احترام
        صادقانه بگم خیلی بزرگوارید.این همه مطالب خوب با صبر و حوصله ایجاد شده و دراختیار گذاشتید.
        با احترام مجدد.

        پاسخ
        • هوسم گفت:
          2025/05/10 در 10:16 ق.ظ

          سلام
          باعث خوشحالی هست که آموزش رو دوست داشتید.
          موفق باشید 🌺

          پاسخ

    دیدگاهتان را بنویسید لغو پاسخ

    جستجو برای:
    فهرست مطالب دوره
    • معرفی دوره یادگیری عمیق رایگان
    • جلسه 00: یادگیری عمیق چیست
    • جلسه 01: ساختار نورون مصنوعی
    • جلسه 02: یادگیری نورون مصنوعی
    • جلسه 03: شبکه عصبی mlp
    • جلسه 04: دسته بندی با mlp و تنسورفلو
    • جلسه 05: رگرسیون با mlp و تنسورفلو
    • جلسه 06: شبکه عصبی کانولوشنی (CNN)
    • جلسه 07: شبکه عصبی بازگشتی (RNN)
    • جلسه 08: شبکه عصبی LSTM
    • جلسه 09: شبکه GRU
    • جلسه 10: شبکه ترنسفورمر
    • جلسه 11: شبکه ویژن ترنسفورمر
    • جلسه 12: شبکه عصبی GAN
    • جلسه 13: شبکه اتوانکدر
    دوره‌های جامع هوسم
    • پیاده‌سازی ChatGPT از صفر با پایتورچ
    • آموزش OpenCV: از پردازش تا بینایی
    • دیپ کاتالیست: دوره افزایش مهارت
    • پایتون برای هوش مصنوعی 🤖
    • یادگیری ماشین جامع: از مفاهیم تا پیاده‌سازی🔥
    • یادگیری عمیق جامع: از مفاهیم تا پیاده‌سازی
    • دوره متلب سوپراستارتر
    درباره هوسم

    آکادمی هوش مصنوعی هوسم با آموزش‌های تخصصی در حوزه هوش مصنوعی در خدمت شماست. روی کمک هوسم حساب کنید…

    • گیلان- شهرستان رودسر- شهرک انصاری- کوچه لاله 9
    • 09025469248
    • howsam.mail@gmail.com
    دسترسی سریع
    • صفحه اصلی
    • وبلاگ
    • حساب کاربری
    • سبد خرید
    شبکه‌های اجتماعی

     

    logo-samandehi
    تمامی حقوق برای آکادمی هوسم محفوظ است.
      کد تخفیف شما هست و فقط
      فرصت داری ازش استفاده کنی!
      کد تخفیف شما هست و فقط
      فرصت داری ازش استفاده کنی!
      کد تخفیف شما هست و فقط
      فرصت داری ازش استفاده کنی!
      کد تخفیف شما هست و فقط
      فرصت داری ازش استفاده کنی!
      کد تخفیف شما هست و فقط
      فرصت داری ازش استفاده کنی!

      ورود

      رمز عبور را فراموش کرده اید؟

      هنوز عضو نشده اید؟ عضویت در سایت