یک توضیح کاملاً غیرتخصصی از اینکه مدلهای زبان بزرگ (LLMs) واقعاً چگونگی عملکرد هوش مصنوعی میکنند.
در حال یادگیری درباره هوش مصنوعی
در این روزها، اطرفم پر شده از بحثهایی در مورد هوش مصنوعی. مطمئنا شما هم به همین توضیحات برخوردهاید. بحثهای بیپایان در مورد پیامدهای آن، سوالات اخلاقی که به وجود میآورد، مزایا و معایب. اما کمتر کدامیک از بحثهای دوستان غیرتخصصی من هرگز به این موضوع نمیپردازد که این همه چیز در واقع چگونه عمل میکند.
این به خاطر است که از زاویه دور، مفاهیم به نظر میرسند ترسناک. ایدهٔ درک اینکه چگونه مدلهای زبان بزرگ (LLMs) عمل میکنند، به نظر ناپذیر میآید. اما این چنین نیست. هر کسی میتواند آن را درک کند. و این به این دلیل است که اصل اساسی که امروزه سرعت رشد هوش مصنوعی را تعیین میکند، به نسبت ساده است.
پس با من کمتر از دو هزار کلمه صبر کنید و من تلاش خواهم کرد – بدون یک واژه فنی یا معادله ریاضی – توضیح دهم که مدلهای زبان بزرگ (LLMs) واقعا چگونه عمل میکنند.
فهرست مطلب
تصور کنید: شما در حال پختن شام هستید، اما به یک غذای جانبی دیگر برای سرو کردن نیاز دارید. غذایی که در حال آماده کردن آن هنوز کمی از میزان کافی برای تامین اشباع نیازهای شما کم مانده است. بنابراین، ما به یک عنصر دیگر برای افزودن به غذا نیاز داریم.
اما این کار گفتنش آسانتر از انجامش است. آنچه ما انتخاب میکنیم باید با غذا همخوانی داشته باشد. اگر غذا خوراکی باشد، غذای جانبی ما هم باید همین طعم باشد. اگر از قبل سالادی داشته باشد، نباید دوباره یک سالاد دیگر بسازیم. اگر غذا بسیار سنگین با نشاسته باشد، شاید بخواهیم یک سبزی سرخ شده اضافه کنیم.
آیا خوب نمیشد یک برنامه داشتیم که به شما فقط بگوید چه چیزی بپزید؟ و نه به صورت تصادفی. شما آنچه را که در حال آماده کردن هستید وارد میکنید، و برنامه به شما بهترین غذای جانبی را برای اضافه کردن میگوید. این برنامه باید برای هر نوع غذا، با هر ترکیبی از غذاها و طعمها کار کند، بدون توجه به اینکه برای چه تعدادی از افراد، چهل نفر یا چهار نفر، در حال پختن هستید.
اول، قراره به برنامه یاد بدیم چگونه به هر وعده غذایی به یک شیوهای که یک کامپیوتر میتواند درک کند نگاه کند. در نهایت، کامپیوترها (هوش مصنوعی) زبانهای چشمی ندارند. آنها باید قادر باشند یک مفهومی که برای آنها درک حسی وجود ندارد (غذا) را به عنوان نوعی داده که هر چیزی که ممکن است تأثیرگذار باشد را دربرگیرد، کدگذاری کنند.
دوم، قراره به برنامه یاد بدیم چگونه راهی برای ایجاد هر ترکیبی از غذاهای موجود را یاد بگیرد. این تنها قرار نیست که به یاد بیاورد چه چیزهایی را قبلاً دیده است. به خاطر داشته باشید که این برنامه باید برای هر ترکیبی از غذاها کار کند، حتی اگر تا به حال آنها را با هم دیده نکرده باشد. بنابراین، ما نه تنها قرار نیستیم سیستم را برنامهریزی کنیم. ما قصد داریم به آن چیزی یاد بدهیم.
مرحله یک: مدلسازی وعدههای غذایی
پس، مرحله یک. ما باید کامپیوتر را یاد بدهیم چگونه به وعدههای غذایی به عنوان داده نگاه کند. ما این کار را با اینکه به آن چیزهایی درباره غذا نمیگوییم (مانند طعم آن یا اینکه با چه چیزهای دیگری هماهنگ است) انجام نمیدهیم. این نوع یادگیری ماشینی قدیمی است. خیلی محدود کننده؛ خطاپذیری زیاد. به جای اینکه فقط به آن دادههای زیادی درباره اینکه افراد در گذشته چه نوع غذاهایی را با یکدیگر هماهنگ کردهاند، میدهیم.
بیایید دو نوع غذا را در نظر بگیریم: بگوییم، سالاد سزار و سالاد کاپرزه. ما به عنوان انسانها میدانیم که این دو غذا مشابه هستند. هر دو ایتالیایی هستند، هر دو سالاد هستند، هر دو حاوی سبزیجات و پنیر هستند… اما برای یک ماشین برای یاد بگیرد که چقدر این دو غذا مشابه هستند، نیازی به دانستن هیچکدام از این موارد ندارد.
احتمالا با جستجو در کوهی از دادههایمان، هر زمان که سالاد سزار را ببینیم، احتمالا آن را با سایر غذاهای ایتالیایی همراه میبینیم. و همچنین احتمالا هنگام دیدن آن، سایر سالادها را در وعده غذایی نخواهیم دید. جالب است که همین موارد میتواند برای سالاد کاپرزه نیز صدق کند. اینها معمولا با سایر سالادها ظاهر نمیشوند، اما با غذاهای ایتالیایی همراه میشوند.
از آنجایی که این دو غذا اغلب همراه با یکسان دیگر غذاها هستند، میتوانیم آنها را به عنوان مشابه دستهبندی کنیم. آنها به یکدیگر در الگوهای مشابه غذایی یافت میشوند. میتوانید بگویید «یک غذا توسط همان چیزی که با آن همراه است، مشخص میشود.»
و این قضیه اصلاً احساسی نیست. توجه کنید که ما به دنبال هیچ وعده غذایی که سالاد سزار و سالاد کاپرزه همزمان ظاهر شوند، نگرفتیم. آنها هرگز نیاز به همزمان ظاهر شدن ندارند تا ما غذاها را مشابه دانسته باشیم. آنها فقط باید در میان همان غذاهای دیگر پیدا شوند تا برای ما مشخص شود که افراد به طور کلی آنها را قابل تعویض و بنابراین بسیار مشابه میپندارند.
یک راه دیگر برای تفکر درباره آنچه تازه انجام دادیم، این است. تصور کنید میخواستیم تمام غذاها را در این نمودار قرار دهیم:
و برای شروع، تمام غذاهای ممکنی که در دادههایمان پیدا کردیم را گرفتیم و آنها را به صورت تصادفی روی نمودار قرار دادیم:
حالا هر زمان که در دادههایمان دو غذا پیدا کردیم که همزمان با سایر غذاها ظاهر میشوند، میتوانیم آنها را به هم نزدیکتر بیاوریم. هرچه سوشیهای مختلفی را که معمولاً با همان سوپ میسو جفت میشوند ببینیم، سوشیها را به سمت یکدیگر حرکت میدهیم. همچنین هرچه پیتزا و اسپاگتی هر دو همراه با نان سیر ظاهر میشوند، اجازه میدهیم که به یکدیگر بیایند:
و بعد از انجام این کار چندین بار (و منظورم واقعاً چندین بار)، یک چیز جادویی اتفاق میافتد. غذاهایی که قابل تعویض هستند، به شدت به یکدیگر نزدیک میشوند. غذاهایی که به نوعی قابل تعویض هستند (مثلاً تاکو و بوریتو) به نزدیکی یکدیگر ظاهر میشوند. و غذاهایی که به ندرت یا هیچ وقت قابل تعویض نیستند (مثلاً برگر و سوشی) دور از یکدیگر قرار میگیرند.
حالا در عمل، دو بُعد کافی نیست. هر سبک غذایی و وعدههای مختلف نیاز دارد که به اندازه کافی فاصله داشته باشد، که به این معناست که راه واقعی برای تصویر کردن این، در یک نمودار متشکل از محورهای بیشتر (صدها، شاید هزاران) است. این غیرقابل تصور است، اما مفهوم زیرین همان است. ما تمام غذاهایمان را پخش میکنیم و هنگامی که با غذاهای مشابه همزمان میشوند، آنها را به یکدیگر نزدیکتر میکنیم.
به عنوان یک اختصار، من به این نمودار چندمحوری بزرگ را “فضای وعده غذایی” خواهم اشاره کرد. هر غذای ممکن در فضای وعده غذایی وجود دارد و در مختصات نزدیک به آن غذاهایی که قابل تعویض است قرار دارد و دور از آنهایی که خیلی متفاوت هستند.
یک گام به عقب برویم و ببینیم چقدر جذاب است. ما توانستیم به سادگی یک مدل بسیار دقیق از انواع غذا ایجاد کنیم که غذاهای مشابه در یک گروه قرار گرفته و آنهای متفاوت دور از هم قرار گرفتهاند. و این کار را بدون در نظر گرفتن هیچ چیزی در مورد طعم غذاها یا مواد تشکیل دهنده آنها انجام دادیم.
علاوه بر این، به دلیل آموزش دادن این مدل با دادههای زیاد، میتوانیم چیز دیگری انجام دهیم. میتوانیم حسابهای غذایی انجام دهیم.
حسابهای غذایی؟ “پسر، تو دیوونهای!”
مطمئناً، من دیوونه نیستم. شما باید به حرف من اعتماد کنید، اما به نظر میآید که قرارگیری غذاها در فضای وعده غذایی ما تصادفی نیست. در واقع، نه تنها غذاهای مشابه نزدیک یکدیگر هستند، بلکه رابطه میان غذاها منطقی است. غذاهای حاوی نان همگی در یک صفحه با هم قرار دارند. غذاهای شور در یک خط مشترک قرار دارند. چیزهای متفاوتی که طعم شکلات و شکلات را قابل درک کردهاند، دارای یک نوع پیوند ریاضی هستند.
و این اجازه میدهد که ما به واقعیت چنین چیزهایی انجام دهیم: اگر من مختارات بریتو را از مختارات تورتیا کم کنم، در نقطهای نزدیک به مختارات بول قرار میگیرم. اگر من مختارات چیکن نودل سوپ را از مختارات نودل کم کنم و مختارات برنج را اضافه کنم، در نقطهای نزدیک به مختارات چیکن رایس سوپ قرار میگیرم.
حسابهای غذایی! ?
آموخته مهم: قرارگیری وعدههای غذایی در فضای وعده غذایی دیگر تصادفی نیست. در واقع، الگوهای ریاضی مخفی زیرین وجود دارند که به معنایی منطقی، هر غذا نسبت به هر غذای دیگر در یک مکان منطقی قرار دارد.
مرحله دوم: پیدا کردن الگوها
خوب، عالی، پس ما فضای وعده غذایی را ایجاد کردیم و به هر نوع غذایی یک نوع مختار دادیم که نسبت به هر غذای دیگر منطقی است. حالا چه؟
خب، بیایید مدل خود را دوباره آموزش دهیم. اما این بار تمام وعدههای غذایی را به آن میدهیم — در مورد هر وعده که تا به حال دیدهایم — و از آن میخواهیم الگوها را پیدا کند. به خصوص میخواهیم برنامه مان را آموزش دهیم که به این سوال پاسخ دهد: اگر یک وعده غذایی A، B و C را شامل شود، احتمالاً چه نوع غذایی D را تشکیل میدهد؟
و برای این کار، همه ما باید بپرسیم، برای هر وعده که آموزش میدهیم: این در فضای وعده غذایی چه شکلی دارد؟ به عنوان مثال، فرض کنید ما بسیاری از وعدههای غذایی را میبینیم که غذاها را در این چهار حوزه از نمودار به اشتراک میگذارند:
حالا میتوانیم عمومیسازی کنیم و تنها در مورد مختارات در فضای وعده غذایی فکر کنیم، بدون اینکه به ما غذاهایی حتی آموزش داده شوند که این الگو را در ابتدا تشخیص دهیم. میتوانیم به این نتیجه برسیم که اگر یک وعده غذایی از قبل دارای غذاهای در این سه ناحیه باشد، بهترین جزء چهارم در همان ناحیه آخر پیدا خواهد شد:
به خاطر داشته باشید که “یک غذا توسط همان چیزی که با آن همراه است، مشخص میشود.” و از آنجا که مدل ما آموزش داده شده برای در نظر گرفتن انواع غذاها و روابط بین غذاها بود، به جای آن که به آنچه غذاهای خاص حاوی هستند و چگونه طعم میآیند، میتواند هر سناریو و هر ترکیب طعمی را بگیرد و بهترین غذا را برای افزودن به وعده غذایی پیدا کند. با داشتن چندین منطقه غذایی، فقط نیاز به یافتن محل متداولترین بخش برای دیگر وعده غذا دارد…
که ما را به هدف اصلیامان، حالا کامل شده، باز میگرداند. میخواستیم یک اپلیکیشن بسازیم که به طور قابل اعتماد به ما بگوید کدام غذاها با انتخابی دیگر بهترین ترکیب را میدهند. و ما دقیقاً همین کار را کردیم.
واژهها به جای دستورپختها
پس این همه با مدلهای زبان بزرگ (هوش مصنوعی) چه اشتراکی دارد؟
فقط مفهوم وعدهها را با جملات جایگزین کنید. و مفهوم غذاها در آن وعدهها را با واژگان جایگزین کنید. این جایگزینی ساده، با همان چارچوب و رویکرد، اساساً شما را به ابزارهای هوش مصنوعی مبتنی بر متن که همه با آن آشنا هستیم، میرساند.
مرحله اول: آموزش یک مدل برای درک روابط بین واژهها بر اساس اینکه چقدر اغلب در زمینههای مشابه ظاهر میشوند. “یک واژه توسط همان چیزی که با آن همراه است، مشخص میشود.” به آن تعداد زیادی از دادههای نوشته شده توسط انسان بدهید (و وقتی از “تعداد زیادی” حرف میزنم، به اصطلاح کل اینترنت را منظور دارم) و اجازه دهید مختارات واژهها را به درستی در اطراف حرکت دهد.
خروجی دیگر دیگر meal-space نامیده نمیشود. به آن فضای برداری میگویند. اما اصول همان است. سیستم از معنای واژهها آگاهی ندارد (درست مانند اینکه از طعم یک غذا آگاهی نداشت)، فقط درک میکند که چگونه این واژه به هر واژه دیگری در فضای برداری مرتبط است.
مرحله دوم: پیدا کردن الگوها. اگر یک جمله شامل واژههای A، B و C باشد، احتمالاً چه واژهای بعدی ظاهر میشود؟ اگر X و Y را داشته باشد، در کدام ناحیه از فضای برداری باید برای چیزی که بعداً میآید، جستجو کند؟
در مورد مدلهای زبان بزرگ (هوش مصنوعی)، در واقع همه آنها زیر پوست به چیزی معروف به “پیشبینی واژه بعدی” (درست همانند انجام پیشبینی “غذای بعدی” در مثال اولیه ما) میپردازند. به عنوان مثال، فرض کنید یک مدل زبان بزرگ (هوش مصنوعی) را با عبارت “Tell me you love me.” شروع کنید. این مدل از تمام الگوهای پیدا کردن خود استفاده میکند تا یک سوال را پاسخ دهد: کدام واژه احتمالاً بعد از این دنباله واژهها ظاهر میشود؟ یا به عبارت دیگر: با توجه به مختارات فضای برداری واژگان در آن جمله، الگوهای چه موارد دیگری را دیدهام تا بفهمم کجا میتوانم واژه بعدی را پیدا کنم؟
پاسخی که مدل زبان بزرگ (هوش مصنوعی) خواهد یافت، “I” خواهد بود. و پس از تعیین این موضوع، “I” را به انتهای درخواست اولیه شما میچسباند و کل آن را به خودش بازمیگرداند. حالا، واژهای که بعد از “Tell me you love me. I” احتمالاً ظاهر میشود چیست؟ البته “love” است! آن را به آن بچسبانید، کل چیز را بگیرید و باز به داخل بفرستید. چه چیزی احتمالاً بعد از آن میآید: “Tell me you love me. I love”؟…
ایده را میفهمید.
جمعبندی
البته، یکمی نکته پنهان دیگر هم وجود دارد. ریاضیات خاص و محاسبات پیچیده ایجاد شده است. اما اصول واقعاً با افراز و نشیب در مثال برنامهریزی وعده غذایی متفاوت نیستند.
برای من، این موضوع نوری به علت جذابیت پدیده هوش مصنوعی است که در حال تجربه آن هستیم، میاندازد. با توجه به اینکه چقدر این فناوری تحولآفرین است، در واقع اصلاً زیاد پیچیده نیست. چند مفهوم ریاضی ساده، یک دادهآموزی فراوان، کمی نمک و فلفل، و شما در اصل یک ماشین فکری ساختهاید.