محمدرضا فریدونی
خواندن ۱۵ دقیقه·۱۸ ساعت پیش

از هوش مصنوعی به طبیعی

سلام. اول از همه بگم اگر عنوان پست براتون سوال شده منظورم فرآیند تدریس مفاهیم AI به دانشجویان درس هوش هست. در واقع این پست تجربه‌نگاری من از تدریس درس هوش مصنوعی در ترم پاییز ۱۴۰۳ به دانشجویان کارشناسی دانشکده‌ی مهندسی کامپیوتر دانشگاه صنعتی شریف هست. من از وقتی یادم میاد به تدریس علاقه‌ی زیادی داشتم. در کنار تجربه‌های تدریس مختلف، امسال دو تا تجربه‌ی فوق‌العاده مرتبط با این علاقه‌ام داشتم. یکیش همین تدریس درس هوش‌مصنوعی در مقطع کارشناسی در دانشکده‌ی مهندسی کامپیوتر دانشگاه صنعتی شریف بود.

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

در مورد تدریس

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

برای ترم پاییز ۱۴۰۳ آقای دکتر رهبان عزیز، مدیر گروه هوش‌مصنوعی دانشگاه شریف، پیشنهاد تدریس درس هوش‌مصنوعی رو مطرح کردن. به این ترتیب امکان یک تجربه‌ی جذاب برای من به وجود اومد. هم از این جهت که تدریس در شریف جذابیت‌های خاص خودش رو داره و هم اینکه در کلاس دانشجو‌هایی بودن که با من اختلاف سنی کمی داشتیم. از طرفی تدریس درسی مثل هوش مصنوعی که یکی از مهم‌ترین دروس کارشناسی مهندسی کامپیوتره فرصتی کم نظیر بود.

در مورد درس هوش

هوش مصنوعی برای تدریس و یادگیری درس پر چالشی هست. هر قسمت درس خودش یه درس مجزا در دانشگاه داره.

قسمت های ابتدایی درس تم طراحی الگوریتم داره. بعد وارد فضای بهینه سازی گسسته و پیوسته و مسائل بهینه سازی محدب میشه. یه ورودی به game theory داره و درخت مین مکس تدریس میشه. بعد هم که کلا پایه‌ی اصلی درس آمار و احتمالات و فرآیندهای تصادفی هست. شبکه های بیزین و مدل‌های مارکف و بحث‌های استنتاج دقیق و تقریبی و سمپلینگ و ... که مربوط به مدل‌های گرافیکی احتمالاتی میشن. در انتهای درس هم وارد ML و Deep Learning و RL میشیم که برای هر کدوم از اینا یک درس مجزا در دانشکده کامپیوتر وجود داره. حتی یه بخش‌هایی مثل تخمین ناییو بیز bag of word و مدل‌های مارکف و مکانیزم‌های دیکودینگ مثل beam search و ... هم پایه‌های NLP هستن و عجیب اینکه همه‌ی این محتوا تا حد بالایی در درس هوش تدریس میشن.

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

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

مرور خیلی مهمه

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

مرور جلسه‌ی قبل در ابتدای هر جلسه. به نظر من این مروره خیلی مهمه. خودم هر درسی رو خوب یاد گرفتم و بعدا هم یادم مونده و ازش استفاده کردم به خاطر این بوده که قبل هر جلسه میرفتم اسلایدای جلسه‌ی قبلش رو یه نگاهی مینداختم. خب واقعیت اینه که اکثر قریب به اتفاق دانشجوها این کار رو نمیکنن. من ابتدای هر جلسه حدود ۲۰ دقیقه به طور کامل مطالب جلسه‌ی قبل رو به صورت جزیی مرور می‌کردم که همراهی دانشجوها با کلاس رو خیلی بیشتر کرد و فیدبک‌هایی که ازشون گرفتم روی این مورد خیلی مثبت بود.

خلاصه جلسه

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

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

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

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

کل درس از مدیای اسلایدها به دانشجو منتقل میشه. خیلی مهمه اسلایدها کامل و جزیی‌نگر طراحی شده باشن. از طرفی گرافیک و فرم خوبی داشته باشن که برای دانشجو خسته‌کننده نباشه. خدا رو شکر برای درس هوش ریسورس‌های خوبی برای اسلاید ساختن هست. من صفحه‌ی ابتدایی هر اسلاید رفرنس گذاشتم و کامل گفتم از کجاها استفاده کردم (عمدتا از اسلاید‌های درس cs188 دانشگاه برکلی). گرافیک‌های خیلی زیادی در اسلایدها استفاده شده و تنوع و رنگ و شکل خوبی دارن.

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

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

برای تدریس خیلی از بخش‌های درس از دموهای مختلف، ویدیو‌های یوتیوب، بلاگ پست‌های اینتراکتیو و ... بهره بردم که مورد استقبال دانشجوها بود. به عنوان مثال برای مرور خیلی از قسمت ها از MLU یا کانال 3blue1brown استفاده کردم.

تاکید روی مباحث به‌روز

این ترم تلاش کردم دیپ لرنینگ و باقی مفاهیم به‌روز رو خیلی عمیق بگم. مفاهیم پایه‌ای مثل backpropagation رو در طول دو جلسه‌ی کامل با آرامش بسیار و تکرار خیلی از مفاهیم به روش‌های متفاوت تدریس کردم. حتی معماری‌هایی مثل auto encoder رو به طور اجمالی معرفی کردم تا ذهن‌شون به یک شبکه‌ی فولی کانکتد به عنوان شبکه‌ی دیپ محدود نشه و متوجه بشن با یک تابع Loss میشه به هر هدفی توی دیپ لرنینگ رسید. معماری شبکه‌های کانولوشنی (CNN) هم به طور کامل در یک جلسه تدریس کردم تا یه پوششی روی چند تا معماری داشته باشیم.

تدریس مباحث سخت

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

به عنوان مثال برای شروع مبحث بیزین نت، من یک جلسه‌ی کامل رو گذاشتم که بگم بیزین نت چی هست و representation و نحوه‌ی نمایشش چیه. همین! چون پنج جلسه‌ی بعدی درس روی همین پایه می‌چرخید و اگر یه نفر به خوبی درک می‌کرد که مثلا بیزین نت یک نمایش برای توزیع توأم تمام متغیر‌های تصادفی با درنظر گرفتن استقلال‌های شرطیه همه چی تموم بود.

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

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

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

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

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

یه دفعه هم یک نفری ایمیل زد که کوییز نگیرین این هفته من دارم خودم رو میرسونم و منم واقعا نگرفتم :))

خب همین اهمیت دادن هاست که کلاس رو مختص دانشجوهای درس می‌کنه و وقتی یکی با تموم تلاشش داره خودشو میرسونه باید بهش کمک کرد.

مثلا یک دفعه هم یکی از دانشجوها یه سوالی براش چالش داشت و تی‌ای ها هم خوب نتونسته بودن کمک کنن. خودم یک آنلاین میت گذاشتم و اون سوال رو توضیح دادم چون وظیفه‌ی خودم می‌دونستم.

کلاس اومدن همچنان مزیت داره

توی کلاس سعی می‌کردم اصل قبلی رو به خوبی رعایت کنم. از طرفی برای تدریس و نحوه‌ی بیان مطالب و چیدمان اونا وقت میذاشتم تا بتونم مفهومی‌تر درس بدم. معمولا توی کلاس هم از تخته استفاده می‌کردم و یا خلاصه‌ی جلسه‌ی قبل رو در صورت نیاز می‌نوشتم و یا اینکه قسمت‌های مهم درس رو به صورت عمیق اثبات می‌کردم. یکبار هم مثلا برای اینکه جذابیت کلاس بالاتر بره وقتی بچه‌ها به ML رسیدن و مفاهیم مارکف و beam search رو یاد گرفته بودن، یه توضیحی روی فرآیند دیکودینگ LLM ها و تولید جمله‌ی مدل‌هایی مثل chatgpt دادم که برای بچه‌های سر کلاس جالب بود. یک جلسه هم معماری CNN رو در کلاس گفتم تا با اینکه قصدی نداشتم در امتحان سوالی ازش بدم، اونایی که سر کلاس میان با دیپ لرنینگ و معماری‌هاش خیلی بیشتر آشنا بشن. البته هیچ اجبار و مزیت مستقیمی برای سر کلاس اومدن نذاشته بودم و هر دفعه که کوییز امتیازی داشتیم با اینکه نمره‌اش امتیازی بود، قبلش اطلاع می‌دادم تا هر کی می‌خواد بیاد اول کلاس کوییزش رو بده و بره.

عکس دسته‌جمعی با دانشجویان کلاس قبل از امتحان پایانترم
عکس دسته‌جمعی با دانشجویان کلاس قبل از امتحان پایانترم


ساختار لاجستیکی درس هوش

خیلی از درسای شریف به خصوص هوش یک ساختار از پیش تعیین شده و منظم از جهات لاجستیکی و مدیریت درسی داره. تیم تی‌ای گسترده با حدود ۴۰ تا ۵۰ تی‌ای از مقاطع مختلف، چندین sub head TA و یک هد تی‌ای اصلی این ساختار رو تشکیل می‌دن. هر کدوم از این افراد وظایف منسجم و مشخصی دارن. برای هر تسک یک یا چند نفر مسئول انجام دادن، یک یا چند نفر مسئول ریویو و معمولا یک نفر ناظر اصلی از هد تی‌ای ها هست. هر تسک از ابتدای ترم ددلاین داره و کلا برنامه‌ی درس خیلی منظم و با جزییات چیده میشه. اینکه هر جلسه چه مباحثی تدریس میشه و از چه رفرنسی هست در اختیار دانشجوها قرار می‌گیره. همچنین تمام نمرات دانشجویان برای تک تک سوالات تکالیف و ... در یک شیت قرار می‌گیره تا هر کسی اعتراضی به هر قسمتی داشت مطرح کنه و تیم تی‌ای رسیدگی کنه. راستی درس هوش هم سایت داره ولی با وجود تلگرام خیلی توجهی بهش نمی‌کنیم. اما از جهت داشتن یک ریسورس خوب از ترم‌های پیشین تدریس این درس، میتونید به این لینک مراجعه کنید.

باید حتما اشاره کنم که هد تی‌ای این ترم آرش ماری‌اوریاد بود که همه‌چی تمومه و کلیییی ازش تشکر می‌کنم چون بدون حضورش نمی‌تونستیم درس رو به این نحو ارائه کنیم.

کانال‌های ارتباطی

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

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

نمره‌دهی و امتحان‌ها

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

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

حرف پایانی

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

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

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

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

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

اگر نظری روی این مطلب داشتین یا پیشنهادی در تدریس دارین خیلی خوشحالم می‌کنین اگر نظرتون رو با من به اشتراک بذارین.

علاقمند به برنامه نویسی و علوم داده
شاید از این پست‌ها خوشتان بیاید