از 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
و میتونه روی عملکرد و اون مرحله ترینگ
یک مدل خیلی اثر بزنه.
میگه وقتی یه دونه ای ان میسازیم به شبکه
عصبی میسازیم
شبکه قبل از ترینگ هنوز چیزی یاد نگرفته
بنابراین اون وزنهای اولیه رو از جایی
باید شروع بکنیم بالاخره بالاخره ما یه
مقداری به اون وزنا اولش بدیم دیگه
نمیتونیم همه رو صفر بذاریم
حالا سؤالی که این فصل میخوایم بهش جواب بدیم اینه که وزنها در ابتدای مرحله
آموزش چه مقادیری داشته باشن؟ ن
تا گردینت تو اکتیویشنها رفتار مناسبی
داشته باشن و مدل بتونه یاد بگیره.
امتزه باید بفهمیم که ماتریکس وزنها در یک لایه شبکههای اصلی
به چه صورته.
فرض کن یه شبکهای داریم که چار تا
فیچر به عنوان ورودی داره.
و یه لایه میانی داره که ۳ تا نورون داره
چار تا ورودیمونم ایک ۱ تا ایک۴ هستن
میایم پایین
و اینم س۳ تا نورونه
هر نورون باید به تمام چار تا ورودی وصل
باشه این آیتون دیگه ساختار شبیه مش داره
شبکه عصبی
نورون اول با یه وزنی به ورودی اول وصله
با یه وزن نیم به ورودی دوم و الی آخر به
اضافه یه بایاس
نور دوم و سوم و چهارمم همچنین
برای من ما چند تا در نهایت ویت داریم
اینجا تو همون ابتدای هم ۱۲ تا
میتونیم اینجوری بنویسیم ۱۲ تا رو این مال نورون اول ردیف اول ردیف دوم مال
نورون دوم و الی آخر یه سه در ۴ میشه
ماتریکس سه در بچهها
خب توی پایتونز اگه بنویسیم یه همچین چیزی شیپمون میشه چی؟ میشه دقیقاً همون سه در
چاره
[صدای سرفه][گلویش را صاف میکند] میگه توی این ترتیب وزنها در پایت یه همچین
چیزیه اولی میشه خروجی
دومی میشه ورودی
ا جایی دیدید به خاطر اینه
بایاسمونم که مشخصه دیگه ما ۳ تا بایاس داریم پس میشه ۳ تا
پس ۱۲ تا وزن به اضافه ۳ تا بایاس میشه ۱۵
تا ۱۵ تا پارامتر اولیه داریم که مدلمون
شروع به کار بکنه
یه مثال بزرگتر بزنیم فرض کنیم ۷۸۴ تا ورودی ۱۲۸ تا خروجی
در آن صورت وزنامون انقدر ۱۲۸م که بایاس
داریم
مجموعه میشه انقدر دیدید اصطلاحاً مثلاً
تو این اخبار ایآی مثلاً و میگن که یه مدل
هوش مصنوعی اومده با ۱ میلیارد پارامتر
اون منظورش همینه
حالا میرسیم به نکته جالب آیا مهمه که ویتها ابتدای امر چه مقداری
داشته باشن؟ قطعاً مهمه
مثلاً اگه ویتو صفر بذاریم چی میشه؟ اصلاً شبکه عصبی راه نمیفته همون ورودی
میاد میخورد به صفر در تموم میشه داستان
چرا اینرشیالیزیشن تصادفیه میگه برای اینکه نورونها از ابتدا کمی
متفاوت باشن
وزدهی رو یه جورایی به صورت تصادفی ما در
نظر میگیریم.
این تفا اولیه باعث سیمتری بریکینگ میشه. اون بالا وقتی همه صفر بود میشد چی؟
سیمتری پرابلم. این باعث میشد سیمتری از
بین بره.
یه دمو ساده با همدیگه ببینیم. یه کد ساده ترچو ایمپورت میکنیم. ان انم میاریم یه
لایه شارکار حسابی درست میکنیم. ۵ تا
ورودی داره ۳ تا خروجی
همون ابتداً بگیم وزنا رو به ما نشون بده
یه همچین چیزی احتمالاً ببینیم
که هر نورون میبینید وزنی مختلف داره
حالا این
در حقیقت چند تاست
۵ تا ورودی داریم ۳ تا لایه در شبکه داریم پس این میشه ۵ تا دونهست این ۵ تا وزنه که
وصل به ۵ تا ورودیه
میگه مهم اون مقدارده اولیه نیست مهم اینه که اون ابتدای ام وزنهایی که دارید میدید
نه خیلی بزرگ باشه نه خیلی کوچیک اینو
خیلی باید حواستون باشه میگه اگه وز ویتا
خیلی کوچیک باشه
در هر لایه داریم یه همچین چیزی پس ویت
بسیار کوچک اکتیویشنم ممکنست بسیار کوچک
بشه
همین اتفاق هنگام بک پروپگیشن برای گردینت نیز رخ میدد در نتیجه عملاً مراحل یادگیری
خیلی کند میشه
اگه ویتا بزرگ باشه [گلویش را صاف میکند]
اکتیویشن ممکنه که به سرعت بزرگ بشه در نتیجه ممکنه فراآیند ترینگ به مقادلی
مثل نال ولیو یا بینهایت برسه
پس نه باید خیلی ببریم بالا نه خیلی
بیاریم پایین.
خب بیایم پایین. پس اون اول کار باید چیکار بکنیم؟
میخوایم واریانس سیگنال در طول شبکه
تقریباً کنترل بشه. یعنی نه اکتیویشن به
سمت صفر بره نه اکتیویشن به سمت بینهایت
بره.
یه همچین چیزی. حالا خیلی وارد ریاضیاتش نمیخوایم بشیم بچهها.
اکتیو میگه برای همین ما اینشالیزشنی مثل خاویر احتمالاً و کیمینگ داریم.
بریم سراغ د تا مفهوم فن اوت و فن این. فرض کنید یه لایه داریم ۱۰۰ تا ورودی ۵۰
تا خروجی.
یعنی یه لایه داریم که شبکههای عصبی ۵۰
تا نورون داره ۱۰۰ تا ورودی داره بهش میاد
پس فن اینش میشه ۱۰۰ فن اوتش میشه ۵۰
فن این یعنی تعداد ورودیهای هر نورون فن
اوت یعنی تعداد خروجیهای لایه
میگه اون مقداردهی وزنها الان بر اساس این د تا پارامتر تعیین میشه
خب دو روش مهم برای وزده اولیه به شاکاس یکی
خوابیر یکی کیمینگ اگه درست تلفظ بکنیم
خوابیر چیکار میکنه
میگه خب بیشتر برای اکتیویشن هایی مانند
سیگموید و تن اچ استفاده میشه
ایده اصلی چیه
اسکل رو اسکل وزنها بر اساس فن این و فن اوت تا میشه
میگه در خاوی نرمال انحراف معیار تقریبا
متناسب است با این در نتیجه این
نه حالا کدوش که داره مینویسه حالا ما بریم بریم جلوتر یه پروژه که انجام بدیم
اینا رو با همدیگه میبینیم
توی یونیفرم وزنها از یک دیستریبیوشن یکنواخت انتخاب میشه
یعنی توضیح نرمال دارن از اون انتخاب میشه توی کیمینگ بیشتر برای این مدل اکتیویشن
استفاده میشه
به این صورت فرمولش
اینم اینم کدشه
میگه چرا آر ای ال یو آریلو چی بچهها یادتونه اگه زیر صفر بود میشد صفر بالای
صفر میشد خودش
میگه این اکتیویشن فانکشن تقریباً نصف
مقادیر ورودیشو صفر میکنه در نتیجه اکتی
وارینانس اکتیویشن تغییر میکنه
پس ما بسته به اینکه از چه اکتیویشنی میخوایم استفاده بکنیم میتونیم از یکی از
این د تا روش به به عنوان اینشالیزیشن
استفاده بکنید.
باز اینجا داره یه مثالی میزنه. کاری نداریم.
این میتونید مثلاً برای تمرین یه بار بیاد یه معماری یکسان رو یه بار با خوابیه
ببرید جلو یه بارم با کیمینگ ببینید که
جفتشونم مثلاً با اکتیویشن فانکشن آری ای
یو انتظار داریم که با این روش بهتر کار
بکنه.
اینجا داره راجع بهش صحبت میکنه که اگه شما وزنهای اولیه رو یکسان بدید چه
اتفاقی میفته؟
میگه در اون سال احتمالاً خروجی نورها
یکسان خواهد بود احتمالاً
میگه رندم بودن صرفاً کافی نیست نورونها باید اینیشیالیزیشنهای متفاوتی داشته
باشن این صرفی که فقط رندم باشن
خب رندم سیت چیه بچهها؟ احتمالاً توی ماشین لینینگم قطعاً دیدینش دیگه. رندم
سیتو وقتی شما ست میکنید یعنی اینکه
اعداد به صورت رندم انتخاب میشن ولی هر
بار که رام میکنید اعداد یکسانه.
یعنی مثلاً فرض کنید میره ۵۰ تا عدد رندم
میاره اما ۵۰ تا عددو هر دفعه که شما
دارید ران میکنید یکسان به شما میده. باز
رندمهها ولی مقادیرش یکسانه.
میگه گاهی دنبال این نیستیم که وزنهای یک شبکه آپدیت بشه. به این کار میگن فریز
کردن پارامترها.
فرض کنید مثلاً یه همچین شهرکار عصبی داریم ورودی د تا لایه لایه خروجی
میخوایم لایه یک ثابت بمونه حالا به هر
دلیلی
یه همچین کاری میکنیم بچهها
موقع برگشتن یعنی زمانی که این یه مرحله میره میخواد برگرده که ویتا رو آپدیت بکنه
وزنهای لایه یک رو دیگه آپدیت نمیکنه
اینجوری موقع بک پروپگیشن دیگه وزنا رو
آپدیت نمیکنه خب
حالا اصلاً چرا فریز میکنیم؟ مهمترین کاربردش میگه ترنسفر لرنینگه.
مثلاً یه مدل قبلاً روی میلیونها تصویر
آموزش دیده. نمیخوایم همه فیچرای یاد
گرفتهشو خراب کنیم.
پس میتونیم چیکار کنیم؟
اون لایههای قبلیشو دست نزنیم فریز کنیم.
فقط لایههای جدیدش رو در حقیقت ترن کنیم
یا حتی مثلاً میتونیم اون پارامترهایی که فقط دارن آموزش میبینن رو به اپتیمایزر
بدیم اونی که از قبآموزش دیدهها رو دست
نزنیم
بعداً میتونیم آن فلیزم البته بکنیم
بچهها
میگه توی فاین تیونیک این زیاد استفاده
میشه
هدف تغییر دادن ویت اصلاً چیه؟ اینه که شما هر بار که بک پروپگیشن انجام میدید
ویتو عوض میکنید لاسو حساب میکنید منجر
به این بشه که میزان لاسمون کمتر بشه.
اینجا داره همون چیزی که بهتون گفتمو توضیح میدم.
یه نکتهای میگه میگه لزوماً بچهها همیشه توی بک پروپگیشن ویتها آپدیت نمیشن امکان
اصلاً ویو تغییر نکنن
پس وزنها بچهها لزوماً همیشه قرار نیست
تو بک پروپکیشنا تغییر بکنن یه وقتا امکان
داره شدیداً تغییر بکنن یعنی هر حالتی
امکان داره داره این بستگی داره به حالا
پارامتر مختلفی
خب حالا سؤالی که پیش میاد اینه که آیا همیشه باید بریم دست به دامن این د تا متد
بشیم یعنی متد خاویر کیمینگ بشیم خاویار
خاویر
یا میتونیم خودمونم همینجوری یه وزنی
بدیم
یه چیزی داریم به نام دیفالت اینیشالیزیشن تو پایتوژ که خودش مثلاً میاد مقدار دهی
میکنه.
خب یعنی میگه لزوماً لازم نیست که شما به عنوان مثلاً تاسیکال بیاد همون اول برید
ویتار دستکاری کنید میتونید بسپورید به
خود پایتون.
میگه چه زمانی این روش خوبه؟ زمانی که
شبکه معمولیه
عمقمون خیلی زیاد نیست. ترنینگمون پایداره
لاسمون خوب داره کم میشه. گردینتم مشکل
نداره.
بهتر است ابتدا دیفالت رو بیس لاین قرار
دهید چه زمانی کاستوم اینیشالیزیشن مفیده
اگه شبکه خیلی عمیقه اکتیویشن خاصی دارید
گردینت وشین یا اکسپلورینگ دارید ترینینگ
حساسه و الی آخر اونوقت باید بره سراغ
اینیشرشالیزنشن سفارشی
میگه فرض کنید همه هیدن لایرها اکتیویشن فانکشن آر ای یو رو دارن اونوقت باید سراغ
حتماً کیمینگ برید مثلاً
میگه که بهتره که لایه خروجیمون اکتیویشن خروجیمون چون متفاوته اون ایونشالیزیشن رو
جداگونه مدیریت بکنید برا اون یعنی برا
اون یه حالت جدا در نظر بگیرید
اینم حالا باز یه مثالی اینجا میزنه حالا من کدشو تو تصویر نشون میدم اگه دوست
داشتید دقیقاً تست بکنید
ویدیو رو میتونید مثلاً پاز بکنید خودشو ببینید
البته چیز خاصی نیستا یعنی مثلاً اینجا اکتیویشن فانکشن اینو استفاده کرده اومد
از کیمینگ استفاده کردن
اینجا اومده سراغ یه روش دیگه
میگه برای لایههای میانی از کیمینگ استفاده کردم و لایه خروجی از خاویر
خب اینم حالا دیگه تموم اینم بحث این جلسه بچهها بریم بیایم ادامهشو جلسه بعدی صحبت
کنیم فعلاً خداحافظ
در شبکههای عمیق با اکتیویشن خاص یا مشکلات گردینت، اینیشالیزیشن سفارشی مفید است.