Telegram Web Link
چاله‌ای به نام model drift!

اگه تجربه دیپلوی مدل‌های یادگیری ماشین در پروداکشن رو داشته باشید حتما به این موضوع برخوردید که مدل‌تون بعد از مدتی ممکنه جواب‌های خوبی تولید نکنه.  یکی از علل رایج همچین اتفاقی، رخداد model drift هست که به انواع مختلف می‌تونه رخ بده.  model drift می‌تونه ناشی از data drift یا concept drift باشه.  خود data drift هم می‌تونه براساس دریفت در فیچرها و یا دریفت در لیبل رخ بده. تصور کنید می‌خواید مدل پیش‌بینی قیمت خانه رو آموزش بدید و بعد از  کرونا تقاضای خانه‌های بزرگ در بازار بیشتر شده و به همین دلیل تعداد خانه‌های کوچک در بازار بیشتر میشه و خانه‌های بزرگ کمتر. در این حالت توزیع فیچر سایز خانه عوض‌شده و منجر به data drift شده. یا در سناریوی دیگه‌ای به‌دلیل وقوع موج گرانی قیمت‌ کل خانه‌ها دچار تغییر شده باشه که در این‌جا هم data drift از نوع تغییر متغیر هدف رو داریم.
در حالت concept drift هم نه توزیع فیچرها تغییر می‌کنه و نه توزیع متغیر هدف بلکه تابع نگاشت‌کننده فیچرها به لیبل تغییر می‌کنه. تصور کنید که در مساله پیش‌بینی قیمت خانه نه فیچرها تغییر کرده باشند و نه توزیع لیبل‌ها بلکه افراد به دلیل تغییرات شرایط جامعه خانه‌های ویلایی رو بیشتر از خانه‌های آپارتمانی ترجیح بدند. در این حالت قیمت خانه‌های ویلایی به طور مضاعفی بالا میره‌ و مدلی که قبلا آموزش دیده باشه در این شرایط نمی‌تونه پیش‌بینی خوبی حداقل درباره خانه‌های ویلایی داشته باشه.
اما چاره چیه؟! در وهله اول مانیتور، مانیتور، مانیتور! یکی از اصلی‌ترین قسمت‌های دیپلوی مدل در پروداکشن، مانیتور کردن عملکرد اون به صورت دوره‌ای هست. با این روش اولین سوالی که به‌وجود میاد اینه که چه‌طور می‌تونیم یه آلارم model drift رو به موقع ارسال کنیم؟ طبیعتا نیاز داریم علاوه بر اینکه با چشم نمودارها رو کنترل می‌کنیم به صورت سیستمی هم آلارم‌ داشته باشیم. روش‌های مختلفی برای این کار وجود داره مانند استفاده از تست‌های آماری برای مقایسه توزیع فیچرهای دیتای ترین و دیتای پروداکشن. یکی از راه‌حل‌های هوشمندانه هم آموزش یک مدل دسته‌بند (مانند مدل random forest) بر روی دیتای ترین و تست به صورت همزمان هست به این صورت که به کل دیتای ترین لیبل ۱ و به کل دیتای تست لیبل صفر بزنیم. اگه مدل ما بتونه با دقت خوبی این دو تا دیتا رو از هم تفکیک کنه ینی به احتمال زیاد data drift رخ داده و چنانچه از مدل‌های درختی استفاده کرده باشید با مفهوم feature importance می‌تونید حتی متغیر دریفت کرده رو هم شناسایی کنید. (برای استفاده از این مفهوم یه بار دیگه این پست رو نگاه بندازید)
و در آخر، علل مختلفی برای وقوع model drift وجود داره که از مهمترین‌هاشون تاثیرات فصلی و مقطعی روی داده، معرفی مفاهیم  یا محصولات و یا سرویس‌های جدید به بازار هدف و یا تغییر کیفیت داده است. مهمترین راهکار هم برای رفع model drift اینه که فرآیند retrain برای مدل‌تون داشته باشید و هیچ وقت به اینکه یه مدل با کیفیت رو روی دیتای ترین آموزش دادید و روی دیتای تست نتیجه خوب گرفتید هم بسنده نکنید.

منابع:
A survey on concept drift adaptation
Design Machine Learning Systems

#handsOn

@nlp_stuff
پیکره متنی ناب

پیکره متنی «ناب» دیتای plain فارسیه که حدود ۱۳۰ گیگه و شامل ۲۵۰ میلیون پاراگراف و ۱۵ میلیارد کلمه‌ست که به تازگی منتشر شده. دوست‌داران زبان فارسی می‌تونند برای آموزش مدل زبانی ازش استفاده کنند و مدل‌هایی رو آماده کنند که ملت هم ازش استفاده کنند.

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

لینک مقاله:
https://arxiv.org/abs/2208.13486

لینک هاگینگ‌فیس:
https://huggingface.co/datasets/SLPL/naab
https://huggingface.co/datasets/SLPL/naab-raw

#dataset

@nlp_stuff
مدل ACT-1، ترنسفورمر در نقش اتوپایلوت

از سال 2017 که ترنسفورمر معرفی شد تا به امروز این معماری در دامین‌ها و مسائل مختلفی به کار گرفته شد، از متن و تصویر و صوت گرفته تا حتی یادگیری تقویتی. و البته هر چه قدر هم که جلوتر میریم از این مدل در جنبه‌های کاربردی و صنعتی بیشتر استفاده میشه. حالا اومدند و مدلی به نام Action Transformer یا ACT-1 توسعه دادند که قادره که با ورودی گرفتن یک کامند در قالب زبان طبیعی با استفاده از ابزارهای نرم‌افزاری کار خواسته شده رو انجام بده. مثلا شما بهش میگی یک یخچال با بودجه هزار دلار برای من پیدا کن و ACT-1 با سرچ در فروشگاه‌های اینترنتی پیدا میکنه و بعد شما میخوای ازش که خب حالا با طرف مقابل یک قرار برای فردا تنظیم کن و ACT-1 صفحه چت رو باز میکنه و یک متن برای قرار می‌فرسته. جزییات بیشتر در مورد این مدل رو می‌تونید در توییتی که گذاشته و همچنین لینک خود سایتش بخونید. این محصول هنوز به صورت عمومی منتشر نشده، اگر خواهانش هستید میتونید در لیست انتظارش ثبت نام کنید.

لینک توییت:
twitter.com/AdeptAILabs/status/1570144499187453952
لینک سایت:
www.adept.ai/act
لینک لیست انتظار:
adept.ai/alpha

#tweet

@nlp_stuff
رستگاری تنسورها با einops

آیا در کد زدن در یادگیری عمیق تنبلید؟ آیا در استفاده از متدهایی مثل reshape و transpose و repeat و reduce گرگیجه میگیرید؟ آیا کدهای یادگیری عمیقی‌تان بعد از نوشتن غیرقابل فهم می‌شوند؟ ما به شما کتابخانه einops را پیشنهاد می‌کنیم!
ماجرای این کتابخونه از نمادگذاری انیشتین آغاز میشه. انیشتین در سال ۱۹۱۶ این نمادگذاری رو برای راحت‌تر نشون دادن محاسبات تنسوری معرفی کرد و از اونجا که واقعا نسبت به فرمول‌نویسی‌های قدیم سهولت و فهم بیشتری داشت، این نمادگذاری رایج شد. حالا با الهام‌گیری از همین نمادگذاری، کتابخونه einops برای سهولت در نوشتن عملیات‌های تنسوری ارائه شده. حالا با یک مثال کوتاه خودتون ببنید که چطوری با einops میشه کد خط اول ذیل رو خیلی راحت تر و قابل خوندن تر به صورت کد خط دوم نوشت.
y = x.transpose(0, 2, 3, 1)
y = einops.rearrange(x, 'b c h w -> b h w c')
این کد اومده تنسوری که ابعادش b c h w بوده (مثل بچ b از تصویرها که c کانال دارند و ابعاد هر تصویر هم h و w هستند) رو به b h w c تغییر داده، این کد رو اگه با پایتورچ خالص بخواهید بنویسید، اون کد خیلی زشت و ناخوانا میشه چون توش ابعاد رو با صفر و یک و ... باید مشخص کنید که اولا هم ریسک باگ زدن رو بالا میبره و بعدا که میخواید کدتون رو بخونید به توبه میفتید)
به طور خیلی اجمالی، کتابخونه einops سه متد پایه rearrange و repeat و reduce داره که باهاش میشه عملیات‌های تنسوری مختلف رو در جنبه‌های تغییر و تکرار و خرد‌کردن ابعاد انجام داد. این کتابخونه رو از دست ندید اگر اهل خوندن کد هم باشید می‌بینید که بسیاری از دولوپرهای مطرح دیپ لرنینگی از این کتابخونه برای کدهاشون استفاده میکنند. نکته آخر هم این که این کتابخونه برای فریمورک‌های مختلف نظیر پایتورچ و تنسورفلو و نامپای و جکس قابل استفاده است.
برای آشنایی بیشتر با einops میتونید لینک‌های زیر رو بببنید:

لینک رپوی einops:
https://github.com/arogozhnikov/einops
لینک‌های مفید برای آشنایی با einops:
https://cgarciae.github.io/einops/
https://openreview.net/pdf?id=oapKSVM2bcj

پ.ن.: هر چه قدر شما بیشتر شیر کردید انرژی بیشتری برای ادامه و درست‌کردن پست‌های بهتر می‌گیریم. مرسی که تا همینجا هم خیلی بهمون لطف داشتید.


#tool

@nlp_stuff
وضعیت هوش مصنوعی در ۲۰۲۲

گزارش StateofAI چند روز پیش برای ۲۰۲۲ منتشر شد. قبلا در این پست www.tg-me.com/nlp_stuff/259 گزارش ۲۰۲۱ اش رو بررسی کرده بودیم. امسال هم این گزارش در چهار بخش آکادمیک، صنعت، سیاست و ایمن هوش مصنوعی رو بررسی کردند و در نهایت هم پیش‌بینی از رخداد‌های سال آینده دادند. چند نکته به نظرمون جالب اومدند که گفتیم با شما هم به اشتراک بگذاریم:
- اول از همه این که هوش مصنوعی در ۲۰۲۲ تونست در کاربردهای علمی مختلف از طراحی انزیم بازیافت پلاستک گرفته تا اثبات قضایای علوم پایه با موفقیت به کار گرفته بشه. این نشون دهنده اینه که پتانسیل زیادی در انواع رشته‌های دیگه برای استفاده از هوش مصنوعی وجود داره.
- با گذشت ۵ سال از انتشار مقاله ترنسفورمر، این مدل همچنان آخرین آپدیت معماری هوش مصنوعی محسوب میشه. افزونه‌های بسیاری بر ترنسفورمر در این پنج سال مطرح شده اند و مخصوصا سعی کرده‌اند پیچیدگی مرتبه دو اش نسبت به ورودی رو کاهش بدن اما در نهایت برد همچنان با ترنسفورمر خالیه.
- استفاده از مدل‌های زبانی در زمینه های دیگه مثل حل مسائل ریاضی یا دسترسی دادن مدل‌های زبانی به استفاده از اینترنت (www.tg-me.com/nlp_stuff/260) یا حتی کمک به ربات‌ها، همچنان مورد توجه جامعه هوش مصنوعی هست.
- قطعا امسال سال مدل‌های diffusion بود. سال گذشته این موقع این مدل‌ها تونسته بودند GANها رو تنها در چند بنچمارک شکست بدن. اما در کمتر از یک سال اکنون هایپ‌ترین مساله حوزه هوش مصنوعی هستند و تو کاربر‌دهای مختلف نظیر تولید تصویر و فیلم و صوت و حتی مولکول ازشون استفاده میشه. مخصوصا در زمینه تولید تصویر، امسال مدل‌های زیادی در این باره مثل Dall-E2 و Imagen و Glide منتشر شدند و امسال سال باز شدن قفل مساله تولید تصویر بود. این رشد منجر به تولد آزمایشگاه‌های جدید تخصصی برای این مساله نظیر Midjouney و StableDiffusion شد(www.tg-me.com/nlp_stuff/300). رقابت بر سر مدل‌های تولیدکننده فیلم هم ظاهرا تازه شروع شده.
- ترنسفورمر‌ها هم در یادگیری تقویتی و هم در حوزه‌های مدل‌های مولتی مودال (مثل مدل گاتو) به کار گرفته شدند. به نظر این روند به این سمت میره که در نهایت یک مدل ترنسفورمری بزرگ برای انجام هر کاری رو در آینده خواهیم دید.
- تسک NeRF از نوزده مقاله در سال ۲۰۱۹ به بالای هزار مقاله در سال ۲۰۲۲ رسیده (www.tg-me.com/nlp_stuff/225) که در نوع خودش جالب محسوب میشه.
- اکثر مقاله‌های چینی بر روی حوزه‌های نظارتی و مراقبتی مثل تشخیص شی و چهره و مسیریابی اشیا متمرکز شده ‌اند. در حالی که تمرکز جامعه هوش مصنوعی آمریکا بر روی مسائل متنی و صوتی هست. همچنین به صورت کلی تعداد مقالات آمریکایی‌ها بیشتره ولی سرعت رشد تعداد مقالات چینی‌ها بالاست. البته اگر مقالات چینی زبان رو هم به این مقایسه اضافه کنیم چینی ها حدود ۵ برابر آمریکایی‌ها مقاله دارند :)
- همچنان مونوپلی عرصه GPU دست Nvidia است. به طوری که میزان سود سالانه nvidia بیشتر از میزان ارزش‌گذاری سه استارتاپ بزرگ در این زمینه است.
- امسال بسیاری از افراد هسته‌های فنی شرکت‌های بزرگ نظیر گوگل و متا و اوپن‌ای‌آی این شرکت‌ها رو ترک کردن و به سراغ استارتاپ‌های خودشون در زمینه هوش رفتند. برای مثال آقای Vaswani نویسنده مقاله ترنسفورمر که به adept پیوسته (اینجا یک محصول این شرکت رو معرفی کرده بودیم www.tg-me.com/nlp_stuff/303)
- هوش مصنوعی هم از مشکلات اقتصادی امسال دنیا بی آسیب نموند و میزان سرمایه‌گذاری در استارتاپ‌های هوش مصنوعی نسبت به سال پیش ۳۶ درصد کاهش رو تجربه کرد. میزان این رقم کاهش برای همه استارتاپ‌ها ۲۴ درصد بوده.
- آمریکا همچنان بیشترین استارتاپ‌های هوش مصنوعی یونیکورن رو داره (استارتاپ‌هایی با بیش از یک میلیارد دلار ارزش) این رقم برای امریکا و چین و انگلیس به ترتیب ۲۹۲ و ۶۹ و ۲۴ هست. نکته جالب توجه قرار گیری اسرائیلی‌ها در رده چهارم لیست با ۱۴ یونیکورن و ۵۳ میلیارد دلار ارزشه در حالی که جمعیتش به ده میلیون هم نمیرسه. wordtune یکی از نمونه استارتاپ‌های مشهور اسراییلی هست.
- در حوزه آموزش مدل‌های بزرگ، آکادمی در رقابت با صنعت رقابت رو وا داده و نرخ مشارکت آکادمی از شصت درصد در سال ۲۰۱۰ به حدود صفر درصد در اکنون رسیده! و به صورت کلی پژوهش از انحصار آکادمی دراومده و یک جوری حالت غیرمتمرکز پیدا کرده.
- شرکت‌های حوزه دفاعی در حال به کار بستن هوش مصنوعی در محصولات و تجهیزات خودشون هستند. این علاقه یک‌طرفه نیست و شرکت های بزرگی نظیر آمازون و مایکروسافت و گوگل هم در تلاش برای عادی سازی استفاده از هوش مصنوعی در صنایع دفاعی هستند.
در نهایت هم چند تا پیش‌بینی برای سال آینده داشتند که جالب‌ترین‌هاشون یک مدل ۱۰ میلیارد پارامتر مولتی‌مودال-یادگیری تقویتی از دیپ‌مایند و ظهور ابزار‌های مولد صوتی است.
این گزارش خوب رو از دست ندید.

لینک گزارش:
Stateof.ai

#read
@nlp_stuff
ورکشاپی برای تفسیرپذیری مدل‌ها

قبلا چندین بار در مدح تفسیرپذیری مدل‌ها و لزوم استفاده از این مفهوم، به‌خصوص در بیزنس و جایی که علت تصمیم‌گیری مهمه صحبت کرده بودیم (https://www.tg-me.com/nlp_stuff/177). تفسیرپذیری مدل‌ها، هم می‌تونه به اعتماد بیشتر به مدل‌ها کمک کنه و هم از طرفی در برخی سناریوها به دیباگ‌کردن مدل کمک می‌کنه. حالا یک ورکشاپی رو دانشگاه استنفورد داره برگزار می‌کنه که قراره به صورت متمرکز بر روی مبحث تفسیرپذیری مدل‌ها کار بکنه. این ورکشاپ ۵ قسمت داره که در قسمت اول به معرفی کلی می‌پردازه و انگیزه‌های پرداختن به تفسیرپذیری رو توضیح میده. در بخش دوم توضیح میده که یک مدل تفسیرپذیری چیه. در بخش سوم روش‌های تفسیرپذیری رو توضیح میده و در بخش چهارم هم روش‌های ارزیابی تفسیرپذیری مدل رو توضیح میده. در نهایت هم به آینده این بحث می‌پردازه. اگه خاطرتون باشه در گزارش کلی مرور بر هوش‌مصنوعی سال ۲۰۲۱ (https://www.tg-me.com/nlp_stuff/259) گفته بودیم که یکی از مباحث داغ در اون زمان تفسیرپذیری بوده. حالا به نظر این مبحث به خصوص برای مسایلی که مدل‌ها در دنیای آکادمیک به دقت و کیفیت خیلی بالایی رسیدند، هنوز هم جای کار داره و حالا وقتشه که یه کم پا رو ترمز بذاریم و ببینیم اصلا چرا دارند خوب کار می‌کنند.

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

لینک ورکشاپ:
https://www.youtube.com/watch?v=_DYQdP_F-LA&list=PLoROMvodv4rPh6wa6PGcHH6vMG9sEIPxL&index=1

لینک اسلایدها:
https://docs.google.com/presentation/d/1khY_li29A5aUo_cEVRsvO8pcRn7Xp9Bi/edit#slide=id.p4

#course
#coach

@nlp_stuff
سلطان PaLI به دنیای تصویر-متن سلام می‌کند!

بارها گفتیم که دوره یکه‌تازی مدل‌های multimodal شروع شده. این اواخر نیز ظهور مدل‌هایی مانند Stable Diffusion توجه همه رو به این حوزه دوباره جلب کرد. حالا گوگل با فهم درست شرایط حساس کنونی، یک مدل general purpose برای این حوزه ارایه داده که باهاش تقریبا هر تسک تصویر-متن‌ی رو می‌تونید انجام بدید و حتی به این بسنده نکرده و مدل رو به صورت multilingual آموزش داده (که فارسی هم ساپورت می‌کنه). معماری مدل خیلی ساده است و در شکل هم می‌تونید ببینید که یک vision transformer داره که طبیعتا کار فهم تصویر رو انجام می‌ده و برای فهم متن هم از مدل T5 استفاده می‌کنه که همون‌طور که می‌دونید مدل زبانی هست که تمامی مسایل حوزه پردازش زبان رو به صورت text-to-text مدل می‌کنه و عملا قابلیت general purpose بودن PaLI رو فراهم می‌کنه. این مدل هم مانند مدل‌های خفن اخیر یه کامیون پارامتر داره که حدود ۱۷ میلیارده که از این مقدار حدود ۴ میلیارد سهم مدل فهم تصویر و ۱۳ میلیارد سهم مدل فهم زبانی هستش! همچنین برای خلق این همه جلال، دست به جمع‌آوری یک دیتاست بسیار عظیم زدند که اسمش رو WebLI گذاشتند و حدود ۱۰ میلیارد زوج تصویر-متن به زبان‌های مختلف داره (حقیقتا با این همه تلاش و توسعه کلا مفهوم میلیارد رو به سخره گرفتند). نکته قابل توجه اینه که این مدل در برخی از بنچمارک‌های حوزه تصویر-متن مانند COCO-captions، TextCaps و VQAv2 تونسته رکورد بزنه و مدل‌های دیگه رو شکست بده. البته اگه نمی‌تونید مدل ۱۷ میلیارد پارامتری‌ش رو لود کنید نگران نباشید چون نسخه‌های کوچک‌تر هم بیرون دادند که حدود ۳ میلیارد پارامتر داره و با توجه به شرایط فعلی باز هم نمی‌تونید اون مدل رو لود کنید :)) پس فقط نگاه کنید و لذت ببرید.

لینک بلاگ:
https://ai.googleblog.com/2022/09/pali-scaling-language-image-learning-in.html

#read
#blog

@nlp_stuff
اورفیت‌کردن در حکمرانی

موضوع علم یادگیری ماشین، تعمیم (Generalization) است. به خاطر همین هدف قرار گرفتن تعمیم، مفاهیم یادگیری ماشین می‌توانند شهودی برای همه قضایای دیگر از جمله اقتصاد و سیاست و حکمرانی قرار گیرند. یکی از پایه‌ای ترین این مفاهیم، بیش‌برازش یا overfiting است. همانطور که می‌دانید ما وقتی می خواهیم یک مدل را به منظور رسیدن به یک هدف آموزش دهیم، از ‌آنجایی که ممکن است این هدف به صورت مستقیم قابل دسترسی نباشد، مدل را بر روی یک proxy به امید رسیدن به آن هدف آموزش می‌دهیم. مثلا ما می‌خواهیم یک مدل دسته‌بندی تصاویر سگ‌ها و گربه‌ها را با هدف بیشتر کردن دقت آن آموزش دهیم، اما از آن جا که معیار دقت قابل بهینه‌سازی نیست و همچنین نمی‌توانیم تمام سگ و گربه‌های دنیا را تصویربرداری کنیم، ما مدل را بر روی تابع هزینه کراس انتروپی و البته بر روی مجموعه محدودی از دادگان آموزش می‌دهیم. حال در فرآیند آموزش ممکن است پس از مدتی میزان عملکرد ما بر روی این پراکسی بهبود یابد اما فاصله ما از هدف اصلی بیشتر و بیشتر شود.

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

حال آقای Dickstein پژوهشگر Google Brain، در بلاگی با تناظر اورفیت و قانون گودهارت پا را فراتر گذاشته و صورت قوی‌تری از قانون گودهارت را ارائه کرده است: "وقتی یک شاخص اندازه‌گیری به یک هدف تبدیل می‌شود، وقتی بیش از حد در آن کارآمد می شویم، هدف اصلی که به دنبال آن بودیم بدتر می شود" برای مثال ممکن است هدف، پیداکردن حکمرانانی با بیشترین میزان مقبولیت و انتفاع در میان مردم باشد و شاخص این کار را آرای مردمی قرار دهیم. حال اگر فقط بر این شاخص تکیه کنیم، ممکن است تنها افراد صاحب سرمایه و رسانه‌ به قدرت برسند که قابلیت دستکاری افکار عمومی را دارند و در نهایت منجر به ظهور الیگارشی شوند. و یا این که هدف ما داشتن جامعه آگاه و متفکر باشد و برای رسیدن به این هدف شاخص آزادی تبادل اطلاعات را قرار دهیم، در صورت تکیه بر تنها این شاخص در نهایت ممکن است با پدیده‌های حباب فیلتر و رواج تئوری‌های توطئه و شبه علم مواجه شویم. Dickstein در این بلاگ این قبیل‌ مثال‌ها را به خوبی توضیح داده و سپس سعی می‌کند تا با بررسی راهکار‌های حل اورفیت تناظری از آن‌ها را برای حل مشکلات دیگر مطرح شده ارائه کند. از جمله این راهکار‌ها می‌توان به اضافه کردن هزینه منظم‌سازی (regularization)، تزریق نویز به سیستم، توقف زودهنگام و محدودکردن ظرفیت مدل یا بیشترکردن ظرفیت آن (پی‌نوشت را ببینید!) را ارائه داد. برای مثال برای حل مشکل حباب فیلتر که در آن فرد دچار انزوای فکری می‌شود و الگوریتم‌های توصیه‌گر فقط محدوده علاقه او را به او نشان می‌دهند، می‌توانیم هر از گاهی با نویز عمل کنیم و او را از حباب‌هایی که به لحاظ فرهنگی و ایدئولوژیک با سلیقه و ذائقهٔ او همخوانی دارند خارج کنیم. خواندن این بلاگ (که مورد تایید آقامون کارپثی هم هست) را به همه شما توصیه می‌کنیم.

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

لینک بلاگ:
https://sohl-dickstein.github.io/2022/11/06/strong-Goodhart.html

#read
#blog

@nlp_stuff
ما به تو مدیونیم آقای SE!

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

در این مقاله توضیح داده شده که فرآیند ایجاد دیتاست، یک فرآیند ۵ مرحله‌ای و چرخه‌ای است که تصویر اون رو می‌تونید در پایین ببینید. این ۵ مرحله عبارتند از: بررسی نیازمندی‌ها، طراحی، اجرا، تست و نگهداری که این ۵ مرحله نیز تداعی کننده متدولوژی‌های مشهور در دنیای مهندسی نرم افزار هستند. نکته قابل توجه، تاکید گوگل بر تولید artifact در هر مرحله است. به این معنا که در هر مرحله باید داکیومنتی آماده بشه که به عنوان خروجی اون مرحله محسوب میشه و برای اون نیز تمپلیت‌هایی در انتهای مقاله آورده شده که کار رو روی زمین بیارند. توضیحات هر یک از این ۵ مرحله در یک جدول و در انتهای این پست در تصاویر آورده شده (ورق بزنید). یکی از مهم‌ترین مراحل، مرحله تسته که به دو صورت تست پذیرش (برای اطمینان از تطابق با نیازمندی‌ها) و تست‌های خصمانه مطرح میشه و برای پیاده‌سازی هم همان متد‌های معروف unit testing در مهندسی نرم‌افزار می‌تونه مورد استفاده قرار بگیره. مثلا فرض کنید چنانچه دیتاست از داخل یک سازمان جمع‌آوری میشه تست‌هایی طراحی بشه که از عدم افشای اطلاعات محرمانه شرکا اطمینان حاصل بشه. در ادامه هم برخی درس‌هایی که از حوزه مهندسی نرم‌افزار گرفتیم رو برای جمع‌آوری دیتاست هم اعمال می‌کنه. مثلا:

- به دیتاست به چشم یه گناهکار نگاه کنید مگر اینکه خلافش ثابت بشه (در واقع همیشه شکاک باشید که یه جای کار می‌لنگه و بابتش تست کیس‌های مناسب طراحی کنید)
- پیش‌فرض‌هایی که باهاش به سراغ جمع‌آوری دیتاست رفتید رو گردآوری کنید و کنترل ورژن انجام بدید (در داکیومنت خروجی مرحله آنالیز نیازمندی‌ها و یا طراحی می‌تونه دیده بشه)
- حتما در مسیر توسعه دیتاست، peer review داشته باشید که از نون شب واجب‌تره
- برای بررسی توزیع پارامتر‌های دیتاست از ابزارهای مصورسازی استفاده کنید. (یکی از سکشن‌های تمپلیت مربوط به خروجی فاز آنالیز نیازمندی‌ها که در انتهای مقاله اومده، distributional requirements هست که در اون توزیع لازم برای برخی پارامتر‌ها توضیح داده میشه. مثلا ممکنه دیتاست باید طوری جمع‌آوری بشه که فلان پارامتر توزیع نرمال داشته باشه و این واقعیت باید در داکیومنت فاز آنالیز نیازمندی‌ها دیده بشه)
- حتما نواقص و محدودیت‌های دیتاست‌تون رو بدونید و یادداشت کنید به جای اینکه روی سرش قسم بخورید

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

پ.ن: به عنوان مثال، دیتاست معروف peyma که در حوزه NER فارسی مطرحه یه ایراد بزرگ داره و اون هم اینکه تمام named entityها که در دیتاست تست هستند، در دیتاست ترین نیز موجودند و هیچ named entityای وجود نداره که مدل، اون رو در فاز ترینینگ ندیده باشه! در حالیکه مثلا با ایجاد یک سناریوی یونیت تست میشد جلوی این رو گرفت. البته ما این مشکل رو در دیتاست خودمون (https://www.tg-me.com/nlp_stuff/250) حلش کردیم ولی دیتاست ما هم قطعا مشکلاتی داره که شما می‌تونید حلش کنید.

لینک مقاله:
https://arxiv.org/abs/2010.13561

#read
#paper

@nlp_stuff
بحر در کوزه این بار با HF!

احتمالا تا حالا شده که در مسیر تسک‌های NLP به دیوار سخت و خشن یک دیتاست بزرگ برخورده باشید (مثلا یک دیتاست در اندازه چند ده گیگابایت که شاید حتی جایی برای ذخیره‌سازیش در دیسک نداشته باشید چه برسه به رم). در این حالته که دست‌ها رو به نشانه تسلیم بالا می‌برید. اما هاگینگ‌فیس در کتابخانه Datasets🤗 این مشکل رو حل کرده. در واقع با دو قابلیت memory mapping و streaming که این کتابخانه فراهم کرده بر محدودیت رم و دیسک غلبه می‌کنید. قابلیت memory mapping (که به صورت پیش‌فرض فعاله) به این اشاره داره که با لودکردن هر دیتاستی توسط Datasets🤗 این کتابخانه یه سری cache file از دیتاست می‌سازه که بر روی دیسک ذخیره شدند و عینا همون محتویات دیتاست لود‌شده در RAM هستند. پس یه جور آیینه تمام‌نمای RAM محسوب می‌شه و از این جا به بعد دیگه این کتابخانه یه اشاره‌گر به اول این فایل باز می‌کنه و دیتا به صورت batch داخل رم لود میشه. طبیعتا آموزش مدل از اینجا به بعد I/O bounded خواهد بود اما نگران اون قسمتش هم نباشید چون فرمتی که برای کار با این فایل‌ها استفاده می‌کنه Apache Arrow هست که یه فرمت بهینه‌شده است. از طرفی برای اینکه نعمت رو بر ما تکمیل کرده باشه و حتی نگران کمبود دیسک هم نباشیم قابلیت streaming رو تعریف کرده که ینی می‌تونید از هاب دیتاست هاگینگ‌فیس، دیتاست رو به صورت batch و on the fly دانلود کنید و پردازش انجام بدید (که به صورت پیش‌فرض فعال نیست و باید streaming=True باشه). البته با استفاده از این قابلیت امکان random access به دیتاها رو از دست می‌دید (مثلا نمی‌تونید دستور dataset[2335] رو ران کنید چون آبجکتی که می‌سازه حالت iterable داره و شبیه generatorهای پایتونیه) ولی با دستور next و iterate کردن بر روی دیتاست، دقیقا سمپل‌های یک دیتاست استریم‌نشده رو می‌گیرید. پس دیگه بهونه بسه و پاشید کار با دیتاست‌های بزرگ رو شروع کنید.

پ.ن: در تصاویر یه سری نمونه کد‌هایی آوردیم که از فصل ۱۰ کتاب گران‌سنگ NLP with Transformers گرفته شده که اثری جاوید از هاگینگ‌فیسه.

#handsOn

@nlp_stuff
اعتدال پیشه کن حتی در آموزش تخاصمی مدل!

محققان نشون دادند که adversarial training به عنوان مؤثرترین راهبرد دفاعی در برابر حملات adversarial examples است که قبلا در موردش در حوزه تصویر در این پست (https://www.tg-me.com/nlp_stuff/297) صحبت کرده بودیم. به صورت ساده یک حمله موفق زمانی اتفاق می‌افته که ما بتونیم یکی از کلمات جمله ورودی رو با مترادفش جابجا کنیم (معنای جمله تغییر نکنه!) به نحوی که خروجی مدل تغییر کنه. در این حالت ما موفق شدیم یک حمله synonym attack به مدل بزنیم و در اصطلاح اون رو گول زدیم.
حالا برای اینکه ازین نوع اتفاقات کمتر بیافته باید مدل رو با روش آموزش خصمانه یا همون adversarial training مستحکم کرد. همونطور که گفتیم آموزش خصمانه توسط adversarial examples انجام میشه که در این مقاله اون‌ها رو به دو دسته کلی تقسیم کردند:

۱- مثال‌های متخاصم سنتی (Traditional adversarial examples یا Fickle adversarial examples): به روشی گفته میشه که با یک تغییر کوچک در ورودی (جوری که معنا عوض نشود) سعی در گیج کردن مدل به نحوی داره که پیش‌بینی مدل متفاوت از قبل بشه. مثلا استفاده از incessant بجای continued در جمله
Employers have continued to operate motor vehicles, and that's all that matters.

۲- مثال‌های متخاصم متضاد (Obstinate adversarial examples): برعکس نوع قبلی در این روش یک ورودی به نحوی عوض میشه که پیش‌بینی مدل رو حفظ می‌کنه اما معنای واقعی ورودی رو متحول میکنه. مثال: استفاده از employees بجای employers در همان جمله بالا.


حالا این مقاله داره خودش رو میکشه که بگه بابا اگه فقط از مثال‌های نوع اول استفاده کنید ممکنه مدلتون آسیب‌پذیر بشه! دلیلش هم اینه که در متن، مثال‌های نوع اول معمولاً با محدودیت تشابه کسینوس ایجاد میشن تا نمایش‌های اصلی و جمله تغییر کرده (perturbed sentence) رو به نزدیک بودن در فضای embedding تشویق کنند. در حالی که، این روش اندازه‌گیری شباهت، ممکنه معنای واقعی رو حفظ نکنه و مدل، نمایش‌های ضعیفی رو در طول آموزش خصمانه یاد بگیره! به زبان دیگه اگه مدل با مثال‌های مترادف و سنتی به گونه ای آموزش داده بشه که در برابر تغییر محدود ε (مثلا کلمات مترادف) مقاوم باشه، ممکنه نسبت به تغییرات کوچک در مثال‌های دیگه (مثلا کلمات متضاد که اصلا معنی رو به کل عوض میکنه)، بسیار بی‌تفاوت بشه!

در ادامه، نویسندگان یک روش مستحکم جدید ارائه میدهند به اسم Balanced Adversarial Training (BAT) که از هر دو نوع مثال‌ها در آموزش خصمانه مدل استفاده میشه. ایده، استفاده از contrastive learning هست بطوری که فاصله بین جفت های مثبت (مترادف‌ها) رو به حداقل برسونیم و فاصله بین جفت های منفی (متضادها) رو به حداکثر برسونیم. مقاله دو ورژن از روش پیشنهادیش به نام‌های BAT-Pairwise و BAT-Triplet داره. در BAT-Pairwise سعی میکنه فاصله بین جفت‌های مثبت و منفی رو مستقل از جمله ورودی بهینه بکنه ولی توی BAT-Triplet یک رویکرد مثلثی داره که از ورودی به عنوان لنگر مثلث استفاده میشه. در واقع در ورژن دوم سعی بر این هست که فاصله بین جفت‌های مثبت و ورودی اصلی کوچکتر از فاصله جفت‌های منفی و ورودی اصلی باشه (با یک حداقل مارجین m).

در ضمن نویسنده مقاله تاکیید داره که این یک trade-off هست و باید اعتدال در استفاده از هر دو نوع مثال‌ها حفظ بشه تا مدل در عین‌حالی که نسبت به مترادف‌ها خروجیش عوض نمیشه در برابر متضاد‌ها یا چیزایی که معنی رو عوض می‌کنند هرچند کوچک هشیار باشه!

در انتها گفته ما مدل‌های BERT و RoBERTa رو روی ۲ تسک مختلف با آموزش SAFER برای ۱۵ ایپاک آموزش میدیم. سپس نرخ موفقیت حمله (ASR) رو برای حملات مترادف (fickleness) و متضاد (obstinacy) در هر دوره آموزشی اندازه میگیریم که نتایجشون نشون میده نرخ موفقیت حملات، کمتر از روش‌های سنتیه.

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

لینک مقاله:
https://arxiv.org/abs/2210.11498

#read
#paper

@nlp_stuff
قطار self-supervised به ایستگاه tabular data رسید!

قطعا در مدح self-supervied  learning زیاد شنیدید و در این پست (https://www.tg-me.com/nlp_stuff/298) هم روش‌هاش در NLP رو مرور کردیم. یکی از محدودیت‌های اصلی self-supervised learning اینه که خیلی وابسته به دامین و مودالیتیه. مثلا روش‌های حوزه تصویر به سختی برای حوزه متن قابل انجامه. حالا مردانی مرد از google research به پا خاسته‌اند و سعی کردند روشی عمومی برای self supervised learning ارایه کنند که حتی بر روی tabular data هم بتونه جواب بده. معماری کلی این روش رو در تصویر زیر می‌تونید ببینید. مانند همه روش‌های SSL که در NLP بررسی کردیم، طبیعتا اینجا هم فاز pre-training و fine-tuning داریم که اساسا وجود همین پارادایم هم باعث میشه در محیط‌هایی که داده لیبل‌دار کمتری وجود داره بهتر عمل بکنه. ایده اصلی در فاز pre-training هست که از denoising auto encoderها الهام گرفته شده. در این روش به ازای یه batch از داده ترین به صورت رندم یک زیرمجموعه‌ای از فیچرها انتخاب میشه و این فیچرها رو corrupt می‌کنند. روش corruption هم به این صورته که به صورت رندم با همون فیچرها از سمپل‌های دیگه جایگزین میشه. حالا همون‌طور که در قسمت بالای تصویر می‌بینید دیتای سالم و دیتای corruptشده به ‌طور همزمان (تعریف همزمان اینه که دو تا شبکه داریم که full parameter sharing انجام دادند) به یک شبکه انکودر f داده می‌شه که داده رو به فضای بزرگتری می‌برند و سپس به یک شبکه g داده می‌شه که داده رو به فضای کوچکی میبره و بعد با استفاده از InfoNCE که یه loss function مشهور در عرصه SSL هست تفاوت خروجی شبکه به ازای دیتای corruptشده و دیتای سالم به دست میاد و کار ترینینگ انجام میشه (InfoNCE عملا شبیه یه categorical cross entropy عمل می‌کنه که به ازای نمونه‌های شبیه به هم مقدار کمی خروجی می‌ده و به ازای نمونه‌های negative که دور از هم هستند هم مقدار زیادی رو خروجی میده).
در فاز fine tuning عملا شبکه g  کنار گذاشته میشه و یک classifier head بر روی شبکه f گذاشته میشه و کل شبکه fine tune میشه.
برای تست این روش هم از دیتاست OpenML-CC18 استفاده شده که ۷۲ تسک دسته‌بندی داره و چون این مساله برای tabular data بوده ۳ تا از دیتاست‌هاش رو (CIFAR , MNIST, Fashion MNIST) کنار گذاشتند و عملا بر روی ۶۹ دیتاست تست گرفتند که روی برخی حتی با داده کمتر، بهبود هم داشته. مقاله خیلی جمع و جور و به زبان ساده و با جزییات تکنیکال نوشته شده و توصیه می‌کنیم حتما بخونید.

لینک مقاله:
https://arxiv.org/abs/2106.15147

لینک گیت‌هاب:
https://github.com/clabrugere/pytorch-scarf

#read
#paper

@nlp_stuff
در مورد chatGPT، مکانیزم RLHF و راهی که با InstructGPT طی شد

احتمالا این سوال که چطوری chatGPT بوجود اومده ذهن شما رو درگیر کرده باشه. قبل از پرداختن به این سوال باید اول پرسید Open-AI دقیقا با چه نیازی به GPT-3 راضی نشد و به chatGPT رسید؟

پاسخ اینه که در واقع GPT-3 از روی Text موجود در اینترنت آموزش دیده بود. برای ساخت معماری این شبکه از Decoder استفاده کردند؛ پس تسک اینه که وقتی یه جمله بهش میدی کلمات بعدی رو حدس بزنه. اما با این ساختار آموزشی و این نوع دیتا هیچ تضمینی وجود نداشت که اون جملاتی که در ادامه Predict می‌کنه لزوما دارای حقیقت باشه یا جملات سمی و توهمی یا حتی توهین آمیز نباشه. این اولین نیاز بود. نیاز دوم این بود که بتونه دستور و خواسته‌ای که یوزر از طریق ورودی میده رو متوجه بشه و چیزی رو که یوزر میخواد رو تولید کنه. یعنی ساختار آموزش بجای «بقیه‌اش رو تو بگو» به ساختار ارباب رعیتی «این کاری که میگم رو بکن» تبدیل بشه. برای این دو نیاز open-AI مدل خفنی رو توسعه داد و اسمش رو گذاشت: «InstructGPT».

برخلاف تصور، chatGPT مستقیم از روی GPT-3 ایجاد نشده. بلکه از نظر open-AI راه chatGPT از fine-tune کردن InstructGPT می‌گذشته. که با اصلاح ساختار آموزش و ارایه یک روش آموزشی خیلی خفن InstructGPT رو توسعه دادند. و بعد از این مدل به chatGPT رسیدند. جالب اینجاست که اصل زیبایی‌های خلقت توی InstructGPT جمع شده. و از InstructGPT تا chatGPT خیلی مسایل فنی خاصی رخ نداده.

برای ساخت InstructGPT اول اومدن در کمال ناباوری GPT-3 رو تبدیل به تسک Supervised کردند. تمام Promptهایی که ملت روی GPT-3 داشتند رو به یه سری انسان دادند و ازشون خواستن پاسخش رو بنویسند (دیوونه خونه ست). و بعد از روی این سوال و جواب، یه مدل توسعه دادند. ماجرا از اینجا تازه شروع میشه. در ادامه فرایند از یه مکانیزمی استفاده کردند که اسمش رو open-AI گذاشته RLHF. یا همون Reinforcement Learning Human Feedback.

فرایند RLHF به این صورته:

- اول به ازای هر Prompt، از مدل‌های Base-Line چندین خروجی می‌گیریم و خروجی‌ها رو به انسان می‌دیم تا برامون از بهترین تا بدترین جواب Sort کنه. (در اینجا مدل‌های Base-Line شامل GPT-3 می‌شه و اون مدل Supervised). و بعد از طریق این دیتای باارزش (ترتیب بندیِ نتایج مدل‌ها بر اساس ترجیح انسان)، یک Reward Model توسعه می‌دیم. در واقع اینجا با این مدل داریم اون Functionی رو مدل می کنیم که معمولا یا Rule Based بود یا انسان.

- در مرحله بعد مدل GPT-3 رو تبدیل به یک مدل RL می‌کنیم. و به ازای هر Prompt در دیتابیس ازش خروجی می گیریم. خروجی رو میدیم به Reward Model و از Reward محاسبه شده برای آپدیت Policyهای مدل استفاده می کنیم.

بنظرم تو این روش کار یدی و کار علمی-مهندسی در یک تعادل جذابی قرار داره. از یه طرف تبدیل کردن یه مدل زبانی به یک مدل RL بنظر خفن میاد و احتمالا بیشتر در آینده شاهدش باشیم. از طرفی، جایی که تصور نمی شد انسان حضور داشته باشه، از انسان استفاده شد. و در آخر هم با Reward Model زیبایی رو بر ما تمام کردند و در جایی که حضور انسان یا Rules پذیرفته شده بود اثبات کردند میشه مدلی ساخت که ترجیحات انسان ها رو مدل کرد و خلاصه که با RLHF نمایش زیبایی از تعامل انسان و ماشین رقم زدند.

برای مطالعه عمیق تر:
https://openai.com/blog/instruction-following/

https://openai.com/blog/deep-reinforcement-learning-from-human-preferences/

https://arxiv.org/abs/2203.02155


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

#read
#paper

@nlp_stuff
عمرتان زیادی کرده که دکترا بخوانید؟

این
هفته آقای لکان (یکی از سه‌ خدای دیپ‌لرنینگ) توییتی زده و به مورد Aditya Ramesh اشاره کرد. فردی که لیسانسش رو از دانشگاه NYU گرفته و قصد داشت تا وارد دوره دکتری شود اما با یک کارآموزی در OpenAI مسیرش تغییر کرده و در آن جا مانده و در نهایت با مدرک لیسانس تبدیل به نویسنده اصلی مقاله مدل معروف Dall-E می‌شود.

آقای بهنام نیشابور محقق گوگل هم توییت لکان را کوت کرده و نکات ریزتری برای تایید "نباید برای یادگیری ماشین دکترا خواند" به آن اضافه کرده است. نکته اصلی که تحصیلات تکمیلی برای زمینه‌ای مثل ML آورریتد است. چرا؟ چون که یک نفر بدون هیچ گونه پیش زمینه خاصی می‌تواند به این فیلد وارد شده و با اندکی وقت گذاشتن، حتی می‌تواند به راحتی در کنفرانس‌های مطرح دنیا مقاله‌ای چاپ کند. منابع آموزشی ML روز به روز گسترده‌تر و در دسترس‌تر می‌شوند و واقعا لازم نیست کسی برای وارد شدن به وادی پژوهشگری یادگیری ماشین بیاید و ۵ الی ۶ سال از عمرش را در ارشد یا دکتری هدر دهد. (و خودمانیم، رشته‌‌هایی مثل فیزیک را با ML مقایسه کنید. طرف در فیزیک تا بخواهد به جایی برسید باید مو سفید کند اما امروزه از صفر تا صد ماشین لرنینگ را با این تئوری‌های آبکی که دارد می‌توان در کمتر از دو سال طی نمود)

نکته‌ دیگری که آقای نیشابور اشاره کرده است این است که تعداد موقعیت‌های دکترای یادگیری ماشین روز به روز بیشتر می‌‌شود اما از آن طرف تعداد شغل‌هایی که به مدرک دکتری یادگیری ماشین نیاز دارد در آینده روز به روز کمتر می‌شود. در واقع با داشتن دکتری شما over-qualified می‌شوید و از طرف دیگر هم مگر آکادمی چه قدر موقعیت شغلی می‌تواند داشته باشد؟ در مقابل، صنعت اما بیش از ML Researcher به ML Engineer‌ها نیازمند است. کسی که بتواند چیزی را واقعا بسازد. دوره دکتری باعث دوری نسبی از شما صنعت و مهارت‌های آن خواهد شد. آقای نیشابور در انتها به نتایج تحقیقی اشاره کرده که در آن گفته شده درصد زیادی از دانشجویان تحصیلات تکمیلی دچار افسردگی و اضطراب شدید هستند.

نکته دیگری که ما به صحبت‌های بالا اضافه می‌توانیم بکنیم این است که جایگاه متفاوت یادگیری ماشین و به طور عام هوش مصنوعی نسبت به سایر علوم را باید در نظر گرفت. هوش مصنوعی در مدت ۷۰ سال اخیری که از خدا عمر گرفته است، همچنان حوزه یکپارچه‌ای نبوده است. هر از چند گاهی ایده‌ای آمده است و با هوش مصنوعی وارد بهاری شده و در نهایت در زمستانی دفن شده است. گاهی منطق‌دان‌ها به آن وارد شده‌اند و با دیدشان روش‌های سیستم‌های خبره و منطق را برای هوش مصنوعی توسعه داده‌اند. گاهی برقی‌ها وارد شده‌اند و مفاهیم سیگنالی را در حوزه هوش مصنوعی غالب کرده‌اند و این اواخر هم ریاضی‌دان‌ها و آماردان‌ها وارد شده و پارادایم یادگیری ماشین را پادشاه هوش مصنوعی کرده‌اند. از حدود ۲۰۱۲ به این ور هم شبکه‌های دیپ (شاید مدیون پیشرفت‌‌های سخت‌افزاری) فرمان بازی را به دست گرفته و بهاری‌ترین دوران هوش مصنوعی را رقم زده‌اند. اما واقعیت این است که یادگیری عمیق نیز اکنون احتمالا وارد پاییز خود شده است (در این مورد در آینده احتمالا صحبت می‌کنیم). مسیر تحقیقاتی هوش مصنوعی و یادگیری ماشین احتمال دارد به زودی دوباره وارد زمستان سخت شده و تمامی سرمایه‌گذاری‌های تحقیقاتی بسوزند. البته که بحث دنیای صنعت فرق می‌کند و همین الان بسیاری راه‌حل‌های یافت شده در دنیای آکادمی آماده هستند تا به دنیای صنعت و کاربرد اعمال شوند. در همین راستا شاید پیشنهاد ML Engineer شدن به جای ML Researcher شدن پیشنهاد عافیت داری برای دین و دنیا باشد. برای حسن ختام به قول سعدی:
کرامت جوانمردی و نان‌دهی است
مقالات بیهوده طبل تهی است

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

لینک توییت لکان:
https://twitter.com/ylecun/status/1605450677806895104

لینک توییت نیشابور:
https://twitter.com/bneyshabur/status/1605677285255675904

#tweet
#read

@nlp_stuff
یادگیری قلق‌های ریسرچ هوش با کورس CS197 هاروارد

عموما اگر هم صنعت و هم آکادمی را تجربه کرده باشید این تفاوت را مشاهده کرده‌اید که به نظر فضای صنعت فضای سرراست‌تری است و روند آغاز تا انجام یک تسک یا پروژه بسیار شفاف‌تر و آشناتر است تا روند اجرای یک پژوهش در آکادمی. به علاوه در فضای صنعت نیروها به علت پیش‌زمینه مهندسی که دارند آشنا به رعایت یکسری قواعد و الگووار‌ه‌هایی هستند، حال آن که این قواعد و الگوها در سمت ریسرچ به صورت مدونی وجود ندارد. حال آقای Rajpurkar استادیار دانشگاه هاروارد آمده و یک کتاب الکترونیکی از درسی که تحت عنوان "تجربیات پژوهشی هوش مصنوعی"در هاروارد ارائه کرده، منتشر کرده است. در این کتاب راجع به مباحثی همچون استفاده درست و موثر از python و pytorch و lightning و HF و streamlite و vscode و git و ... توضیحات خوبی داده شده است. اما این کل ماجرا نیست، بلکه کتاب در ادامه صحبت کرده که چگونه می‌توان به صورت سیستماتیک مقالات را خواند، ایده‌های جدید زد، یک مقاله را ساختاربندی و منتشر کرد و اسلایدهای باکیفیتی ساخت. اما باز هم این تمام ماجرا نیست و راجپورکار برایمان راجع به نحوه مدیریت زمان و انرژی‌مان و همچنین نحوه مدیریت تعاملاتمان با استاد راهنما و یا سایر اعضای تیم نیز توضیح داده است. این منبع عالی را از دست نباید داد.

لینک کتاب:
https://docs.google.com/document/d/1uvAbEhbgS_M-uDMTzmOWRlYxqCkogKRXdbKYYT98ooc


#link
#coach
#course

@nlp_stuff
دورزدن تحریم Open-AI با نامبرلند

در چند هفته‌ای که گذشت فضای شبکه‌های مجازی پر شد از چت‌هایی که ملت با chat-gpt داشتند. با این که chat-gpt فعلا رایگانه اما دوستمون open-ai اجازه ساختن اکانت با شماره ایران رو نمیده و شما برای ساخت اکانت نیاز به شماره خارجی دارید. خوشبختانه سایت نامبرلند هم اومده و سرویس شماره مجازی یکبار مصرف رو برای open-ai اضافه کرده. میتونید تو نامبرلند شماره مجازی open-ai رو بخرید (ارزونترینش مال اندونزیه با ۶۵۰۰ فعلا) و بعد با همین شماره تو سایت open-ai ثبت نام کنید و با chat-gpt معاشرت کنید بعدش. البته به علت بار سنگینی که روی chat-gpt اومده تو چند وقت اخیر هر از گاهی میگه الان تحت فشارم بعدا بیاید سراغم. فقط حواستون باشه از سایت open-ai بعد ثبت نام لاگ اوت نکنید و ترجیحا هم با vpn بازش کنید (ما امتحان نکردیم ولی عقل سلیم همچین چیزی میگه )

اگر هم حال و حوصله پول دادن رو ندارید می‌تونید با youchat که رایگانه معاشرت کنید. شبیه chat-gpt هست و ارزش امتحان کردن رو داره.

پی‌نوشت: این پست رپرتاژ و تبلیغی نیست. منتها این قدر سوال پرسیده‌ شد که شما چطور به chat-gpt دسترسی دارید، گفتیم نحوه دسترسی رو به اشتراک بگذاریم.

آدرس نامبرلند:
numberland.ir
آدرس youChat:
https://you.com/search?q=who+are+you&tbm=youchat

@nlp_stuff
حس پیاده‌سازی GPT را ندارید؟ حق دارید، آموزش ندیده‌اید.

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

آقامون آندره کارپثی از غولهای هوش مصنوعی، پس از جدایی از تسلا، در ایام فراغت خودش زده تو کار آموزش. از اونجایی که در چند وقت اخیر هم ترند ChatGPT در میون طیف وسیعتری از مردم (و نه صرفا هوش‌مصنوعی‌کارا) داغ شده ایشون ویدئویی دو ساعته ضبط کرده و در اون به آموختن پیاده‌سازی مدل GPT (البته از سایز کوچیکش در حدی که قابل آموزش‌دادن روی کولب باشه) و آموزشش روی دیتاست نوشته‌های شکسپیر پرداخته. این ویدیو بسیار ارزشمنده و کارپثی از ب بسم الله که توکنایزیشن باشه تا اجزای معماری ترنسفورمر رو جز به جز با زبان شیوا و بیان جزییات لازم و حکمت وجودیشون توضیح داده و همزمان پیاده‌سازی هم می‌کنه و تازه در انتها هم گریزی به ChatGPT زده و در مورد اون هم صحبت کرده. دیدن این ویدیو رو حتما در اولویت‌هاتون قرار بدین و قطعا از صرف زمان برای اون ضرر نخواهید کرد.

در ضمن اقای کارپثی قبل از این هم یک سری ویدیو تحت عنوان Neural Networks: Zero to Hero تدارک دیده و در اون به توضیح و پیاده‌سازی چیزای پایه‌‌ای‌تر مثل توابع فعالسازی و BackPropagation پرداخته و این ویدیو ساخت GPT اش هم به جزیی از همین پلی لیسته. حالا که تا اینجا اومدید این پلی‌لیست نابش رو هم از دست ندید.

ویدیو ساختن GPT از صفر با کارپثی:
https://www.youtube.com/watch?v=kCc8FmEb1nY

پلی‌لیست Neural Networks: Zero to Hero از کارپثی:
https://www.youtube.com/playlist?list=PLAqhIrjkxbuWI23v9cThsA9GvCAUhRvKZ


#coach
#watch

@nlp_stuff
مرا به بک‌اند چه حاجت که مست روی تو باشم

تا حالا بحث داغ این بود که در آینده نزدیک می‌شه برنامه‌نویس‌ها رو دور ریخت و جاشون از هوش مصنوعی برای تولید کد استفاده کرد و ظهور ابزارهایی مثل copilot و gpt هم این اتفاق رو ممکن نشون می‌دادند. اما حالا این ایده یک لول جلوتر رفته، به این صورت که آقا اصلا چه نیازی به backend داریم بیاید جاش از مدل‌های زبانی استفاده کنیم. در همین راستا یک عده اومدن در هکاتون Scale AI در این هفته ایده زدن و یک اپ ساده todo رو بدون پیاده‌سازی api‌های بک‌اندی‌اش و در واقع با جایگزین کردن GPT به جای بک‌اند پیاده‌سازی کردند و اتفاقا برنده جایزه اول این هکاتون هم شدند. در واقع مدل‌زبانی GPT در این پروژه به طور کامل جایگزین قسمت بک‌اند ماجرا شده و هم قسمت منطق و هم قسمت داده رو تونسته حل کنه و تازه هیچ‌گونه training ای هم در کار نبوده. به صورت جزیی‌تر اگر بخوایم توضیح بدیم ابتدا به GPT گفتند که مثلا This is a todo list app و بعد هم یک تیکه json رو به عنوان وضعیت دیتابیس به GPT ورودی دادند تا بفهمه که قالب دیتا چه شکلیه. در مرحله بعدی هر وقت نیاز به یک API Call بوده وضعیت فعلی و همچنین درخواست کاربر رو به GPT دادند و پاسخ GPT رو گرفتند. خوبی این اتفاق اینه که GPT که در حکم بک‌اند قرار گرفته هم در نحوه ذخیره‌سازی داده و هم انجام اعمال منطقی بسیار منعطفه و می‌تونه طیف گسترده‌ای از api call هایی که حتی بهشون فکر نشده رو هم انجام بده.

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

لینک رپو:
https://github.com/TheAppleTucker/backend-GPT

لینک توییت توضیحات:
https://twitter.com/DYtweetshere/status/1617471632909676544

#link

@nlp_stuff
مسابقه‌ی رتبه‌بندی نتایج جستجوی ترب

این روزها یک مسابقه‌ی درست و درمون رو شرکت ترب داره برگزار می‌کنه: «بهبود رنکینگ جستجو در ترب با استفاده از دیتای جستجوی کاربرها». اصطلاحا به این مسئله learning to rank گفته میشه. در این مسئله، اطلاعات سرچ کاربرها شامل عبارت جست و جو شده، نتایج نشان داده شده به اون‌ها، کلیک کاربرها و همچنین نام و قیمت محصولات به شما داده شده و از شما خواسته شده که در ازای یک عبارت جست و جو و تعدادی محصول کاندید، رتبه‌بندی بهینه رو پیشنهاد بدید. بنابراین علاوه بر مسئله learning to rank با روش‌های مختلف استخراج ویژگی‌های متنی از محصولات سرو کار دارید.

شروع مسابقه از ۱۵ بهمن اتفاق افتاده و تا ۱۵ اسفند برای ثبت‌نام وقت دارید. یه سری جایزه‌ی تپل هم گذاشتند. پس توصیه می‌کنیم این مسابقه رو شرکت کنید و خودتون رو به چالش بکشید!

لینک ثبت نام و توضیحات رویداد:
https://tdc.torob.com

پ.ن. اگر رویداد جون‌دار دیتایی مثل همین رویداد دارید، ندا بدید که روی کانال بگذاریم تا ملت بهره ببرند.

#other

@nlp_stuff
همه ممکن است نشت کنند!

یکی از مهمترین بخش‌های پایپ‌لاین دیتا، نحوه صحیح تقسیم‌بندی دیتا به داده‌ی train و test است. نکات زیادی داره که مهمتریناش اینه که نباید نشتی داشته باشید؛ یعنی از داده‌ی آموزش نباید توی داده‌ی ولیدیشن و تست داشته باشید وگرنه می‌بینید متریکتون به شکل غیرواقعی خوب میشه. باز یکی دیگه از نکاتش اینه که قرار نیست توزیع داده آموزش و تست تفاوت زیادی کنند وگرنه می‌بینید که روی داده تست نتایجتون خیلی ضعیف میشه. یا اینکه قرار نیست هر جور که دوست دارید دادتون رو تقسیم کنید و گاهی مثلا اگر مساله با سری زمانی در ارتباطه، لازمه روی خط زمانی تقسیم کنید و گاهی لازمه شافل کنید و رندوم تقسیم کنید. نکات بیشتر و دقیق‌تری رو در فصل یک و دو کتاب hands on ml میتونید پیدا کنید.

شاید با خودتون فکر کنید خب اینکه خیلی راحته؛ ولی اینطور نیست. استاد پوروطنِ ما همیشه این مثل معروف رو می‌گفت که: شیطان در جزئیاته.
سال ۲۰۱۷ اندرو انگِ گولاخ و شرکا یک مقاله با عنوان CheXNet: Radiologist-Level Pneumonia Detection on Chest X-Rays with Deep Learning دادند (تریلی اسم مقاله رو نمی‌کشه). اونجا یه مدل CNNای ارائه دادند و روی صد هزار تا تصویر رادیولوژی از ۳۰ هزار تا بیمار آموزش دادند تا بتونند بیماری ذات الریه رو تشخیص بدن (اولا عظمت دیتا رو داشته باشید. ثانیا دقت کردید که چند تا تصویر برای یک بیمار وجود داشته). بعد اومدند این دیتا رو ۸۰ به ۲۰ بین آموزش و تست به صورت رندوم تقسیم کردند. چشمتون مشکل رو دید؟ اگر شما بیاید دیتا رو به صورت رندوم تقسیم کنید تصاویر یک بیمار می‌تونه توی هر دو تا داده‌ی ترین و تست باشه و مدل می‌تونه از فیچرهای مربوط به بیمار کلی استفاده کنه؛ حتی اگر این فیچرها مستقیما مربوط به خود بیماری ذات الریه نباشه. مثلا یک زخمی از عمل رو توی یه عکس آموزش میبینه و یاد میگیره این مربوط به کلاس اوله. بعد دیگه هر جا عین همون زخم رو ببینه زرتی میگه کلاس اوله و دیگه فکر نمیکنه. یعنی یه میان‌بر پیدا کرد. بعد از  ۱۱ روز فهمیدند مشکل داره و اومدند این رو درست کردند و دوباره مقاله رو منتشر کردند. در عکس دوم ضمیمه‌شده به پست می‌تونید ببینید که جمله‌ی there was 𝗻𝗼 𝗽𝗮𝘁𝗶𝗲𝗻𝘁 𝗼𝘃𝗲𝗿𝗹𝗮𝗽 between the sets رو در تصویر راست (نسخه اصلاح شده) نسبت به تصویر چپ (نسخه اولیه) اضافه کردند و نحوه تقسیم رو تغییر دادند.

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

لینک مقاله نسخه اول:
https://arxiv.org/abs/1711.05225v1

لینک مقاله نسخه اصلاح شده:
https://arxiv.org/abs/1711.05225

لینک توئیت توضیح این داستان:
https://twitter.com/svpino/status/1592140348905517056

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

#tweet
#handson

@nlp_stuff
2025/07/04 14:07:19
Back to Top
HTML Embed Code: