در پست قبلی، ما شبکه های عصبی را معرفی کردیم و نشان دادیم که چگونه می توانیم از آنها برای تقریب هر تابعی استفاده کنیم.
اکنون ما آنها را به زبان مدل که شامل برازش این نوع تابع است، اعمال می کنیم.
با توجه به متنی مانند این، می خواهیم آخرین کلمه (یعنی red) را پیش بینی کنیم که در آن از نوعی شبکه عصبی استفاده خواهیم کرد.
ابتدا باید کلمات خود را به عدد تبدیل کنیم تا شبکه عصبی آنها را درک کند.
ما فقط می توانیم هر کلمه را بر اساس حروف الفبا شماره گذاری کنیم، اما مترادف هایی مانند apex و zenith اعداد بسیار متفاوتی خواهند داشت.
بهتر است کلمات مشابه از نظر معنایی مانند این را به اعداد یا بردارها نگاشت کنیم، به روش های مشابهی که این کار را انجام می دهند، تعبیه سازی کلمه (Word Embedding) گفته می شود (به عنوان مثال: Word2Vec، GloVe) و به راحتی به صورت آنلاین در دسترس هستند.
خب، اکنون ما آماده طراحی شبکه عصبی زبان بزرگ خودمان هستیم، شاید چیزی شبیه به این:
و میتوانیم حتی لایههای نورونها و وزنهای بیشتری اضافه کنیم تا ظرفیت را افزایش دهیم، اما هنوز خیلی خوب کار نمیکند! چون مسئله خیلی سخت است و ما باید کمی بیشتر به شبکه کمک کنیم.
بیایید به مثال مورد علاقه خود برگردیم، فرض کنید من کلمه آخر را حذف کردم:
می توانیم فرض کنیم که آن را فقط با این چهار کلمه می شود انجام داد:
نوعی مو (hair) که با تخت (bed) هم قافیه است. این یک بینش کلیدی است که فقط باید به زیر مجموعه ای از کلمات توجه کنیم.
حال ممکن است از خودمان بپرسیم: چه می شود اگر بتوانیم یک شبکه عصبی را برای حل این مشکل "توجه" آموزش دهیم؟
در این مطلب ما این کار را با یک شبکه توجه (Attention) انجام خواهیم داد که کلمات ورودی را می گیرد و وزن توجه را بین صفر و یک خروجی می دهد.
ما این وزن ها را در خود کلمات ضرب می کنیم و نتایج را وارد شبکه پیش بینی کلمه بعدی می کنیم.
پس چگونه شبکه "توجه" را آموزش دهیم؟
میتوانیم افرادی را استخدام کنیم تا قافیهها و تداعیهای کلمات دیگر را در بسیاری از متنها پیشنهاد کنند و از آن به عنوان دادههای آموزشی استفاده کنند، اما به نظر دردسر میآید و معلوم میشود که راه بسیار بهتری وجود دارد!
بیایید هر دوی این شبکه ها را با هم آموزش دهیم.
در اینجا شبکه پیش بینی (Predict) به شبکه توجه (Attention) می گوید که چه چیزی باید یاد بگیرد تا بتواند کلمات بعدی را بهتر پیش بینی کند؟
مثلاً بگوییم شبکه Brown (رنگ قهوهای) را به جای Red Brown (رنگ آجری) پیشبینی میکند ولی با bed هم قافیه نیست، بنابراین الگوریتم انتشار معکوس ممکن است سعی کند توجه به bed را افزایش دهد و وزنهایی را که منجر به انتخاب Brown میشود کاهش دهد.
این شبکه خیلی خوب کار می کند و این شبکه ترکیبی "ترانسفورماتور" نامیده می شود و در حالی که معماری کامل آن بسیار پیچیده است، شما را با اصول اولیه آشنا خواهم کرد.
اجرای شبکه "توجه" کمی با آنچه که توضیح دادم متفاوت خواهد بود.
با کلمه still (هنوز) شروع کنیم. شبکه تخمین می زند که هر کلمه دیگر چقدر به still مرتبط است و این "امتیازات توجه" را بین 0 تا 1 رمزگذاری می کند.
سپس مجموع وزنی این کلمات را می گیریم و آن را به عنوان بردار ساختار C رمزگذاری می کنیم.
کلمات دیگر نیز به همین ترتیب پردازش می شوند.
به عنوان مثال کلمه “changed” دارای الگوی متفاوتی از وابستگی است که منجر به بردار ساختار خاص خود می شود.
در نهایت شبکه "توجه" برای هر کلمه یک بردار ساختار تولید می کند.
سپس این بردارهای ساختار به همراه کلمات اصلی وارد شبکه "پیش بینی" می شوند.
حال چگونه از این برای تولید متن استفاده کنیم؟
بیایید کلمه ای را برای شروع جمله خود انتخاب کنیم و آن را از طریق شبکه ای که حرف "a" را به عنوان کلمه بعدی پیش بینی می کند تغذیه کنیم!
در واقع ما چندین پیشنهاد با احتمالات مختلف دریافت خواهیم کرد و می توانیم به طور تصادفی یکی از بهترین ها را انتخاب کنیم:
فرض کنید ما "a" را انتخاب کردیم، اکنون کلمه "a" را به عنوان ورودی بعدی خود اضافه می کنیم و آن را از طریق شبکه تغذیه می کنیم تا کلمه سوم lot و غیره ایجاد شود.
حال بیاییم کمی سختتر کنیم:
مثال: شانزدهمین رئیس جمهور آبراهام لینکلن بود.
بنابراین کلمه بعدی باید آبراهام باشد.
ولی ما فقط در مورد الگوهای "توجه کلمات" صحبت کردیم! شبکه چگونه درباره رؤسای جمهور میداند؟ اگر بتوانیم به سوالاتی از این دست پاسخ دهیم، باید تمام حقایق ممکن را به یاد داشته باشیم که برای انجام این کار بسیار مهم است و باید به شبکه خود ظرفیت بسیار بیشتری اختصاص دهیم:
ما می توانیم این کار را با انباشت بسیاری از لایه های "توجه و پیش بینی" انجام دهیم. GPT-3 حاوی 96 لایه از این موارد است. GPT-3 یک مدل محبوب از OpenAI است و مدل Palm از Google نیز تعداد مشابهی دارد.
این مدل ها صدها میلیارد پارامتر دارند. و این ظرفیت کافی برای انجام کارهای بسیار فوق العاده و چشمگیر است.
انباشته کردن این مدلهای توجه امکان استدلال سطح بالاتر را فراهم میکند، در حالی که لایههای پایینتر بر روابط و نحو (Syntax) تمرکز میکنند، لایههای بالاتر میتوانند روابط پیچیدهتری را رمزگذاری کنند که همان معناشناسی (Semantics) هستند.
بسیارخب، ما آماده ایم تا شبکه خود را آموزش دهیم!
در ابتدا ما به مقداری متن برای آموزش نیاز داریم (یعنی اساساً همه متن ها را !). مدل های زبان بزرگ امروزی بیشتر کتاب های اینترنتی و در دسترس عموم را خوانده اند. که این حدود نیم تریلیون کلمه است.
احتمالاً حدس میزنید که آموزش مدلهای زبان بزرگ زمان زیادی می گیرد. درست حدس می زنید :)
آموزش GPT-3 بر روی یک GPU یا کامپیوتر 355 سال طول می کشد، اما ترانسفورماتورها طوری طراحی شده اند که موازی پذیری بالایی داشته باشند، بنابراین می توانید در عرض یک ماه با چند هزار GPU این کار را انجام دهید.
بیایید با چندتا «پرسش و پاسخ» شروع کنیم. متن آبی را به عنوان ورودی مشخص کردم و بیشتر این حقایق را به درستی دریافت کرد.
فاکتورگیری این عدد بسیار بزرگ با مشکل مواجه شد و رقم درآمد سرانه کمی پایین بود (مقادیر قرمز رنگ).
در نوشتن شعر نیز بسیار خوب عمل می کند. این دستوری است که من دادم:
و این هم نتایج GPT-3 هست:
از نظر فنی کاملاً هایکو نیست ولی قابل قبول هست.
حتی می توانید از آن بخواهید که زبان ها را ترجمه کند.
نمیدانم چند مورد از اینها درست هستند، اما به نظر بسیار نزدیک هستند چون این مدلهای زبان کاملاً ایده آل نیستند!
این مدل زبان ها اغلب با روابط پایه ریاضی و فضایی (سه بعدی) سروکار دارند.
زبانهای مدلی همچنین ممکن است از سوگیری و کلیشهسازی رنج ببرند، بنابراین هنوز کارهای تحقیقاتی مهمی در این زمینه باقی مانده است.
اما اگر به ایدههای آشپزی نیاز دارید، مدلهای زبان بزرگ میتوانند در اینجا به شما کمک کنند، من از GPT-3 خواستم دستور پخت جدیدی ایجاد کند که احتمالاً قبلاً در اینترنت وجود ندارد!
من دوست داشتم که دو نوع مختلف پودر کاکائو شکلاتی و چیپس شکلات را نشان دهد که به روش های مختلف در دستور غذا گنجانده شده اند.
و همچنین می دانستم که گواکامولی از آووکادو ساخته شده است:
این شبکه عصبی را که ما آموزش داده شده را به خاطر بسپارید!
درنهایت، GPT-3 کد هم توانست بنویسد!
من فقط شبکه ای را که می خواستم توضیح دادم و عملکردی را که می خواستم به زبان انگلیسی قرار دهم و GPT-3 برنامه را به طور خودکار تولید کرد.
چند بار اول که آن را از طریق GPT-3 اجرا کردم، کد یک باگ داشت، اما بار سوم کد پایتونی را تولید کرد که کاملاً بینظیر بود.
و البته می توانیم آهنگ های جدیدی به سبک Tangled Up in Blue بسازیم.
امیدوارم از این مطلب نیز در مدل های زبان بزرگ لذت برده باشید :)