از Pista Academy حمایت کنید
خلاصه آموزشی
مرور سریع مفاهیم اصلی پیش از تماشای کامل یا برای جمعبندی بعد از آموزش.
در این جلسه، مدرس به بررسی مفاهیم اورفیتینگ و کراسولیدیشن در یادگیری عمیق پرداخته و توضیح میدهد که چگونه مدلها میتوانند به خوبی دادههای آموزشی را یاد بگیرند اما عملکرد ضعیفی در دادههای جدید داشته باشند. همچنین، به تقسیم دادهها به سه بخش آموزش، ولیدیشن و تست پرداخته شده است تا عملکرد مدل به طور دقیق ارزیابی شود. روشهای مختلف ارزیابی مدل در مسائل رگرسیون نیز معرفی شدهاند و اهمیت استفاده صحیح از دیتای تست برای جلوگیری از یادگیری ناخواسته توضیح داده شده است.
نکات کلیدی
اورفیتینگ به این وضعیت اشاره دارد که مدل به خوبی دادههای آموزشی را یاد میگیرد اما عملکرد ضعیفی در دادههای جدید دارد.
کراسولیدیشن روشی است که دادهها را به بخشهای مختلف تقسیم میکند تا عملکرد مدل بر روی دادههای جدید بهتر ارزیابی شود.
دادهها به سه بخش آموزش، ولیدیشن و تست تقسیم میشوند. ولیدیشن برای ارزیابی مدل در طی فرآیند آموزش استفاده میشود و تست برای ارزیابی نهایی مدل.
روشهای مختلف ارزیابی مدل در مسائل رگرسیون مانند ام اس ای، ام ای، ام اس ای جذر و آر ام اس ای معرفی شدهاند.
پرسشهای رایج
پاسخ کوتاه و مستقیم به پرسشهایی که معمولاً هنگام یادگیری این موضوع مطرح میشوند.
اورفیتینگ به این وضعیت اشاره دارد که مدل به خوبی دادههای آموزشی را یاد میگیرد اما عملکرد ضعیفی در دادههای جدید دارد.
کراسولیدیشن روشی است که دادهها را به بخشهای مختلف تقسیم میکند تا عملکرد مدل بر روی دادههای جدید بهتر ارزیابی شود.
دادهها به سه بخش آموزش، ولیدیشن و تست تقسیم میشوند.
آخرین بهروزرسانی محتوای متنی:
در این دوره جامع، وارد دنیای Deep Learning (یادگیری عمیق) میشویم و مفاهیم اصلی، الگوریتمها و تکنیکهای مورد استفاده در ساخت مدلهای هوش مصنوعی را از پایه یاد میگیریم. این دوره برای افرادی طراحی شده که میخواهند درک عمیقی از شبکههای عصبی، معماریهای مدرن یادگیری عمیق و نحوه پیادهسازی مدلهای هوش مصنوعی با Python و PyTorch داشته باشند. در طول این دوره ابتدا با مفاهیم پایه Deep Learning آشنا میشویم و سپس قدمبهقدم به سمت ساخت و آموزش مدلهای واقعی حرکت میکنیم. در این دوره یاد میگیرید: 🔹 مفاهیم پایه یادگیری عمیق و نحوه عملکرد شبکههای عصبی 🔹 کار با Python، NumPy و PyTorch برای توسعه مدلهای Deep Learning 🔹 ساخت و آموزش Artificial Neural Networks (ANNs) 🔹 مفهوم Gradient Descent و نحوه بهینهسازی مدلها 🔹 جلوگیری از Overfitting با روشهایی مانند Regularization و Cross Validation 🔹 انتخاب Activation Function، Optimizer و Hyperparameterها 🔹 ساخت Feed Forward Neural Networks 🔹 ارزیابی عملکرد مدلهای یادگیری ماشین 🔹 کار با پروژههای عملی Deep Learning 🔹 آشنایی با Autoencoderها 🔹 اجرای مدلهای Deep Learning روی GPU 🔹 طراحی و پیادهسازی Convolutional Neural Networks (CNNs) 🔹 پروژههای مرتبط با تصاویر و Computer Vision 🔹 Transfer Learning و استفاده از مدلهای از پیش آموزشدیده 🔹 Neural Style Transfer 🔹 Generative Adversarial Networks (GANs) 🔹 Recurrent Neural Networks (RNNs) و مدلهای GRU/LSTM 🔹 مباحث اخلاقی و آینده Deep Learning همچنین در بخشهای ابتدایی دوره، مباحث ضروری Python شامل: ✅ ساختار دادهها در Python ✅ Indexing و Slicing ✅ Functions ✅ Flow Control ✅ کار با Text و Plotها بررسی میشود تا بتوانید بدون نیاز به پیشنیازهای پیچیده وارد دنیای Deep Learning شوید. این دوره مناسب چه کسانی است؟ این دوره برای: 🎯 دانشجویان و علاقهمندان هوش مصنوعی 🎯 برنامهنویسانی که میخواهند وارد حوزه Machine Learning و Deep Learning شوند 🎯 Data Scientistها و تحلیلگرانی که میخواهند مهارتهای خود را ارتقا دهند 🎯 افرادی که قصد ساخت پروژههای واقعی AI دارند مناسب است. پیشنیازهای دوره برای شروع این دوره بهتر است با موارد زیر آشنایی اولیه داشته باشید: ✔ مفاهیم پایه برنامهنویسی ✔ آشنایی مقدماتی با Python ✔ آشنایی اولیه با ریاضیات پایه اما تمام مباحث مورد نیاز در طول دوره مرور و توضیح داده خواهد شد. اگر به دنبال یادگیری Deep Learning به صورت اصولی و پروژهمحور هستید، این دوره میتواند مسیر شما را برای ورود به دنیای هوش مصنوعی هموار کند. 📌 برای مشاهده تمام جلسات این دوره، کانال Pista Academy را دنبال کنید. 🌐 وبسایت: https://pistaacademy.ir
اوریتینگ زمانی اتفاق میفته که مدل
دادههای ترین رو بیشتر بیش از حد یاد
گرفته
و حتی نویز و جزئیات غیر ضروری اونا روم
حفظ کرده.
در نتیجه توی ترین عملکرد خیلی خوبی داره اما وقتی ازش امتحان میگیریم عملکرد خوبی
نداره.
یعنی مدل روی دادههایی که قبلاً دیده خیلی خوب کار میکنه اما رو دادههای جدید
عملکرد ضعیفی داره.
میگه فرض کنید میخوایم یه مدلی بسازیم که
بر اساس ساعات مطالعه بیاد نمره امتحانو
پیشبینی کنه.
یه مدل ساده ممکنه یه رابطه شبیهو یاد بگیره که هرچی داره ساعت مطالعه بیشتر
میشه نمره رفته بالاتر
و این مدل احتمالاً رو داده جدیدم خوب عمل
میکنه
اما اگه یه مدل بسیار پیچیده بسازیم ممکن است دقیقاً از میار تکتک نقاط ترنینگ
عبور کند حتی نوسانات تصافی داده رو نیز
حفظ کنه
پس یه جاها های امکان داره خیلی بیش از
اندازه دیگه طرف مدلمون به قول گفتنی بره
یاد بگیره
ما س تاصل داریم اورفیتینگ آندرفیت گود
فیت
آندر فیتینگ یعنی چی یعنی مدل بیش از حد
ساده است
گود فیلد اینه که پترن اصلیو یاد گرفته یعنی تو هم توی ترین هم توی تست اکیوره
خوبی داره و اختلافشونم زیاد نیست.
اورفید اونیه که دیتای ترینو خیلی خوب یاد
گرفته اما رو دیتای تست عملکرد خیلی بدتری
داره و اختلاف هست بین این دو تا.
مثلاً فرض کنید ما میخوایم یه دونه مدلی رو درست بکنیم که بر اساس مثلاً یه سری
تصویر تشخیص بده کدوم گربهست کدوم سگه
۵۰۰ تا عکس گربه داریم ۵۰۰ تا عکس سگ
داریم
مثلاً مدل به جای یادگیری ویژگیهای واقعی حیواناتست مثلاً به جای اینکه یاد بگیره
قیافه گربه چهجوریه قیافه سگ چهجوریه
اندامشون فیزیکشونه اینا رو به جایی اینا
رو یاد بگیره مثلاً بره بگه که من تو این
۵۰۰ تا عکس گربه دیدم اونایی که
بکگراندشون سبزه معمولاً گربهست آخه
بکگراند سبز چه ربطی به گربه بودن داره
این میشه من یکی از مثالای در حقیقت اینکه
خیلی دیگه وارد جزئیات شده
یا مثلاً سگا اونایین که مثلاً بکگراند
آبی دارن حالا تو این دیتای مام اینجوری
بوده ولی لزوماً معنیش این نیست که تو
دیتاهای دیگه هم اینجوری باشه
مثلاً یه تصویر جدید بهش بدیم که یه گربه باشه تو بکگراند آبی اینو به ما استک
تشخیص میده
پس اورفید چرا اتفاق میفته مدل بیش از حد
پیچیده باشه دیتای ترنمون کم باشه
نویز زیاد باشه
اپوک هر دوریه که یک بار مدل مثلاً رو
دیتای ترین میزنه اون خیلی زیاد باشه
پارامترامون زیاد باشه رگولاریزیشن نشده
باشه و دیتاستمون تنوع نداشته باشه
اصطلاح بهش میگن اینبالانس باشه دیتا
مثال تعداد اپوک فض مدل ۲۰۰۰ اپوک آموزش
بدیم یعنی ۲۰۰۰ بار دیتا رو بهش بدیم کل
دیتا رو
چه اتفاقی افتاده ما توی دور دهم
لاس ترینمون شده نیم ولیدیشن لاسمونم شده
۵۲ میایم تعداد اپوکها رو بیشتر میکنیم یه
ذره بیشتر باز بهش ده تا رو میدیم که آید
بگیره تو اپک ۱۰۰
لاسمون کمتر شده از نیم شده دودهم ولیدیشن
لاسمونم شده ۲۵ سالم این خوبه لاسو
تونستیم کم کنیم
اما مثلاً میایم ۴۰۰ تا پک دیگه میریم جلو
میشه ۵۰۰ تا روی داتای ترند لاستمون شده
۳۰م
اما رو ولیدیشن شده چهاردهم یعنی چی؟ یعنی
تو ترن داره خیلی بهتر عمل میکنه نسبت به
ولیدیشن. این یعنی اورفیت شده.
یعنی لاسمون توی ولیدیشن کم شده یهو رفته بالا ولی تو ترین همینجوری داره کم میشه.
آیا اورفیتینگ همیشه بده؟
میگه اورفیتینگ شدید مشکلسازه اما وجود مقدار کمی اختلاف بین ترین و ولیدیشن
کاملاً طبیعیه. یعنی خیلیهم دیگه وسواس
نداشته باشید که این د تا حتماً از عین هم
باشه در حد چند درصد ایرادی نداره
اما کلاس ولیدیشن چیه؟ کلاس ولیدیشن روشی برای اهزیابی بهتر
عملکرد مدل روی دادههاییست که در ترینینگ
استفاده نشده.
ما معمولاً بچهها توی مدلسازی حالا
دوستانی که ماشینگ آشنا باشن دادهمونو
میان دو قسمت ترند و تست تقسیم میکنیم.
معمولاً میان ۸۰ یا ۷۰ داده رو میبرن
برای آموزش ۲۰ یا ۳۰و برای امتحان.
چرا این کارو میکنیم؟ چون اگه قرار باشه
مدل ما رو دیتایی که آموزش دیده ازش
امتحان بگیریم خب همه رو بلده دیگه درست
جواب میده پس باید اینا رو جدا بکنیم از
همدیگه
این مثال داره میزنه یه روش دیگه داره بهش میگن کی فور کراس
ولیدیشن
میگه فرض کن
میاد دیتا ست رو به ۵ قسمت مختلف تقسیم
میکنم.
بار اول میگن که
این بشه تست این بشه ترین. بار دوم میگن
این بشه تست یک و سه و چ پ بشه ترین و این
کارو ۵ بار انجام میدم.
برای هر کدوم یه اکیورسی حساب میکنم. اکیورسی نهایی میشه میانگین همش. یعنی شما
از کل دیتا هم برای تست استفاده کردید هم
برای آموزش اینم یه روش دیگهست
چرا این کارو میکنم برای اینکه اثر شانس رو توی دیتا کمتر
بکنم کیفورد اثر شانس رو از بین میبره
جنرالیزیشن یعنی توانایی مدل برای عملکرد خوب رو دادههایی که قبلاً ندیده این
دقیقاً مهمترین هدف ماشین لرنینگه
مثلاً فرض کنید یه مدل طراحی کردید که
ایمیلا اسپامو تشخیص بده ۱۰۰۰ تا ایمیل
بهش دادید برای ترند
روی ترند با دقت ۹۹ عمل میکنه ولی روی
ایمیلای جدیدی که بهش میدید دقتش مید رو
۷۰ نگاه کن اختلاف خیلیه
این مدل جنرالیزیشن خوبی نداره این اوریت
شده
اما اینکه توی ترند و تست اعداد نزدیک هم
باشه اکیوریسی معنیش اینه که جنریالریزیشن
خوبی داره
دقیقاً این مثال یه دانشآموزه مثلاً
برای اینکه بگم اورفیت یعنی چی و
جنرالیزیشن یعنی چی مثلاً این دانشآموز رو
فرض کنید ۱۰۰ تا نمونه سؤال بهش دادید این
به جای اینکه بره این ۱۰ تا نمونه سؤالو
مفهومی بفهمه سؤال و جواب بخونه درسو
بفهمه مثلاً ۱۰۰ تا رو حفظ میکنه طبیعتاً
از این ۱۰۰ تا اگه ازش امتحان بگیریم ۱۰۰
میشه چون حفظ کرده اما وقتی سؤال جدید
بدیم یه کوچولو چالشی باشه نمیتونه درست
جواب بده این یعنی اورفیت شده اما اگه نه
مفهوم سؤالو بفهمه و سؤلای جدید رو هم
بتونه خوب جواب بده یعنی جنریزیشن خوبی
داره
هرچقدر دیتا بیشتر باشه جنریالیزیشن بهتره
رگولاریزیشن داشته باشیم بهتره
بعد دیگه
دیتا رو خوب تقسیم کرده باشیم برای ترنت تستم اثر داره
ما کراس ولیدیشن بچهها کتابخونه داریم توی سایکت لرن نیاز نیست دستی انجام بدیم
ولی خب اینجا مثلاً اومده با یه کد پایتون
اینو دستی انجام داده
که اصلاً نیاز نیست اینا رو بچهها انجام بدید چون ما براش کتابخونه داریم توی
ساکید لن برای کراسایزش ما کتابخونه داریم
بهش میگن ترنتس اسپلیت
اینو ایمپورت میکنید از ساکلم بعد میاد
میگید که ترنتس اسپلیت دیتای ایک ویر بهش
میدید ایک فیچرامونه ایر تارگتمونه تست
سایزون مشخص میکنید یه رندم سیتم
میذارید رندم استیت بعد خودش میاد اینو
تبدیل میکنه به ایکس ترن ایکس تست ایر
ترن ایر تست
خودش این کارو انجام میده
یه پارامترم اینجا اضافه کرده. این چیکار میکنه؟
آها اگر این کارو بکنیم نسبت کلاسها در ترن
تست تقریباً یکسانه.
یعنی اگه مثلاً یکی از کلاسی ما تعدادش
بیشتر از اون یکی باشه بهتره که شما این
پارامترو اضافه کنید که به نسبت مساوی
بیاد توی دیتای ترن و ترش از هر دو تاش
بذاره چون اگه این کارو نکنه امکان داره
هر این ۹۰۰ تا رو ببره توی ترن این ۱۰۰ تا
سمپر کلاس یکو ببره تو تست بدبخت توی ترن
اصلاً کلاس یکو ندیده باشه یا خیلی کمتر
ببینه
یه ذره آب بخورم
اینم کیفولده که راجع بهش بالا صحبت کردیم. اینم براش یه کتابخونه آماده داریم
توی ساکت ل میتونید ازش استفاده کرد.
حالا اینو برای دوره ماشین لیرینگ بیشتر.
بعد میان روش لوپ میزنن. برای هر کدوم از اون در حقیقت فولدا یه بار دیتا رو مدل
میدم و تست میگیرم.
یکی دیگه داریم به نام استرت فیت کیفولد
برای حفظ توضیح کلاسست یعنی تو همون
تیکه تیکه کردنا میاد کلاس رو هم تعدادشو
حفظ میکنه تو هر کدوم
توی پروژههای پایتورچ معمولاً از دیتا لودر استفاده میکنن حالا اینم اذیتشه
خب
یه مثالی داره میزنه. بیایم اول یه دیتا
ستو بسازیم. خب
بعد میاد چیکار میکنه؟
تقسیم میکنه دیتا ست رو با
ترین ۸۰ تستم ۲۰
با رندم اسپلیت دیتا ستو میده.
بعد اینو تبدیل میکنه به دو قسمت تست و
ترن. بعد میاد با یه م دیتا لودر میسازه
اینجوری
خب اینم که اوکی
من اینو حالا بعداً مثالشو خواهم زد براتون بچهها
الان تئوریشو بریم بعد میایم یه مثال واقعی میزنیم و توی عملیات با همدیگه
میبینیم همه اینا
میگه تو پروژههای واقعی معمولاً فقط ترن و تست کافی نیست یک سومی هم داریم به نام
ولیدیشن دف خب
[صدای خرناس]
دیتای ترن برای آموزش استفاده میشه
و این دیتای ترنو مدل بارها و بارها میبینه و یاد میگیره پترنا رو
از ولیدیشن برای تصمیمگیری در رابط مدل
استفاده میشه مثلاً انتخاب لرنینگ ریت
تعداد لایهها تعداد هیدن یونیتها بچ
سایزمون رگولاریزیشن الی استاپینگ
اما ویتها مستقیم با ولیدیشن ست آموزش
داده نمیشه یعنی ویتو میبرن توی تستا یعنی
از دیتای تستی که ویتا در میاد وزنا در
میاد یعنی دیتای تستو میدن از مدل یه تست
میگیرن اگه اختلافشو مقدار واقعی مقایسه
میکنن اختلاف زیاد باشه میرن ویت رو عوض
میکنن
اینم یه تقسیم بندی ۷۰ ترن ۱۵ ولیدیشن ۱۵ تست
اگه تعداد سمپلامون خیلی زیاد باشه در حد میلیون باشه نیاز نیست ۱۵ ۱۵ بگیرید.
حالا تفاوت ولیدیشن و تست چیه؟ شما ولیدیشن رو میاید روی مدلای مختلفتون
انجام میدید. هر کدومش که مثلاً دقت
بالاتری داشت میرید تستو رو اون انجام
میدید. یه مرحله قبل از در حقیقت تست
نهاییه. مثل همون که شما مثلاً یه تعداد
ورزشکار داشته باشید قبل از اینکه
بفرستینش مسابقات المپیک یه مسابقات داخلی
برگزار کنید ببینید کدومشون بهتره یه
همچین چیزی تصور کنید
خب یعنی یکی از چیزایی که هست اینه که بچهها داده تستو شما نباید زیاد ازش
استفاده بکنید
و سعی بکنید دق اون تستاتون رو روی رو
دیتای دیگه انجام بدید که میشه همون
ولیدیشن
خیلی باید حواسمون باشه که دیتای تست وارد دیتای ترینمون نشه و در حقیقت اونجا
ناخواسته باعث میشیم که مدلمون دیتا
تستمونو یاد بگیره و دیگه اون تست به درد
نمیخوره.
توی مسائل رگشن جاهایی که قراره یک مقداری پیشبینی بشه. کلاسی وجود نداره که بگه
مثلاً این حالت اون حالت یک مقدار قر
پیشبینی بشه. ما اونجا برای ارزیابی
مدلمون متدهای دیگهای داریم به مثل امی
اینا مخفف چیزای مختلفه مثلاً ام میشه مین
ابسولوت ارور ام اس سی میشه می اسکور ارور
بعد آر ام اسی میشه
آرش یادم رفت چی بود
اینجام ننوشته جذرشو میگیره همون ام اس
ایه ولی جذرشو گرفته
و آخریشم چی بود روش آخری آ د هم که یه
روش دیگهست
من اینا رو دارم خیلی سریع رد میکنم که بعداً میرسیم به اینا که مثال میخوایم
بزنیم همه اینا رو استفاده کنیم.
آ این یه نکته خیلی مهمه. روش کیفول بچهها یادتونه چیکار میکرد؟ میومد
مثلاً یه بار یه تیکه دیتا رو استفاده
میکرد برای ترند بعد یه تیکه برای تست
بعد اینو تو مرحله بعدی میومد یه تیکه
دیگه رو استفاده میکرد برای تست یه تیکه
دیگه برای تره شما وقتی مثلاً میگم ۵ بار
بخواید این کارو روی دیتای خیلی بزرگ
انجام بدید خیلی هزینه بر خواهد بود چون
زمان زیاد و ریسورس خیلی زیادی میبره
برای همین کیفوردو معمولاً رو دیتا ستهای
کوچیکتر استفاده میکنن که ففرآیندش خیلی
زمان نبره آره
بعد دیگه خب من یه نمای کلی از این دوره از این
ماژول بهتون بدم ما زمانی که میخوایم
مدلمونو آموزش بدیم یک دیتایی طبیعتاً
داریم میایم یه قسمتی از اون دیتا رو برای
آموزش استفاده میکنیم که قسمت بزرگی از
اون دیتاونه مثلاً حدوداً ۷۰ تا ۸۰
یه درصدی رو نگه میداریم برای ولیدیشن
یعنی مدل که آموزش دید با اون دیتای
ولیدیشن ازش یه امتحان اولیه میگیریم.
اگر امتحان اولیه رو خوب پاس کرد اونوقت
میریم سراغ دیتای تست و تست نهایی رو ازش
میگیریم. اگر تو دیتای تستم جواب مثبت
بود که میتونیم استفاده بکنیم برای محصول
نهایی.
خب بریم سراغ فصل بعدیمون. اونم بذاریم جلسه بعدی. بریم بیایم جلسه بعدی. بریم
سراغ فصل بعدی فعلاً خداحافظ
روشهای مختلف ارزیابی مدل در مسائل رگرسیون مانند ام اس ای، ام ای، ام اس ای جذر و آر ام اس ای معرفی شدهاند.