بسم الله
سلام و خداقوت✌
امروز هم میریم سراغ قسمت دوم از دوره یادگیری عمیق که توسط دکتر سروش حیدری پهلویان تو کانال یوتیوبشون تدریس شده.
گفتنی که تو این قسمت از کد زدن خبری نیست و به توضیحاتی راجب شبکه ی عصبی که جلسه پیش ساختیم و روش کار اون بسنده شده
✅✅✅اینکه اول میخواین فیلم رو ببینید بعد از اینجا بیاین مرور کنید یا اول این محتوا رو بخونید تا ذهنتون آماده بشه هم دست خودتونه
🔶قسمت دوم، 14 دقیقه🔶
ما در شبکه عصبی که در جلسه قبل ساختیم (مدل آب و هوا) اومدیم خودمون وزن رو تعیین کردیم که کمی کار ضایعی هست.🙂
فرض کنیم به مدت یک هفته دمای هوا رو صبح اندازه گرفته و ظهر هم آفتابی بودن یا نبودن هوا رو یادداشت می کنیم؛ حالا با اطلاعات به دست اومده و شبکه عصبی(NN) که ساختیم میایم ببینیم که آیا نتایج رو درست پیش بینی میکنه یا نه. حالا میام مقدار وزن رو با توجه به نتایج به دست اومده تعییر میدیم تا پیش بینی به واقعیت شبیه تر باشه.
به این پروسه که با تغییر وزن پیش بینی (Prediction) مناسبی به دست بیاد به اصطلاح میگن Training
به دادههایی که ازشون استفاده کردیم که ببینیم مدلمون خوب کار میکنه یا نه Training set یا Training data set میگیم.
خب روند کار تو یه شبکه عصبی اینطوریه که ما یک مقدار اتفاقی به وزن می دهیم و با استفاده از اون پیش بینی ها رو حساب میکنیم بعد میریم قابلیت مدل مون رو بررسی میکنیم که چقدر پیشبینیهای درستی انجام داده و بعد مقدار وزن رو تغییر میدیم تا جایی که به قابلیت پیشبینی مدنظرمان برسیم، به انجام متوالی این کار میگن Training loop .
توی این پروسه مقدار وزن به صورت اتفاقی کم و زیاد نمی کنیم (توضیح بیشتر جلسات بعد) اما برای آشنایی اینطوری بگیم، هردفعه که حلقه اجرا میشه میایم ببینیم Loss کم شده یا زیاد اگه کم شده بود به وزن میگین با همین فرمون کارت رو ادامه بده (یعنی اگه مقدار وزن رو کم می کردیم بازم به کمک کردن ادامه میدیم اگه مقدار وزن رو زیاد می کردیم به زیاد کردن ادامه میدیم)؛ اگر هم دیدیم مقدار Loss زیاد میشه میگیم تو دفعه بعدی که حلقه اجرا میشه برعکس عمل کن (یعنی اگه وزن را کم می کردیم این بار زیادش میکنیم و اگه زیادش می کردیم این بار کمش میکنیم.
ما میتونیم به جای یک ورودی چند تا ورودی داشته باشیم که هر کدوم هم در یک وزن ضرب میشن.
y = x1.w1 + x2.w2 + x3.w3
در عمل توی NNها یک مقداری هم به جمع حاصل از ورودی ها اضافه میکنیم که بهش میگیم بایاس(Bias) یا بایاستِرم(Bias term)؛ تا بتونیم خروجی مدل رو مستقل از ورودی ها تغییر بدیم و مدل ما انعطافپذیرتر باشه.
y = x1.w1 + x2.w2 + x3.w3 + b
وقتی مدل ما اینطوری تعریف شد به وزن ها و بایاسترمها مجموعا میگیم پارامتر(Parameters)، که در چرخه یادگیری هی در حال به روزرسانی هستند و به همین خاطر میتونیم بهشون بگیم Learnable Parameters .
سلولهای مغز هم کارکردشان شبیه همین هاست اما با وجود این شباهت،جوری که اطلاعات در مغز پردازش میشه و یادگیری در شبکه های عصبی،ربط زیادی به هم نداره و این فقط یک شباهت ظاهری هست.
پس یادمون باشه ما اینجا کارای مغز رو شبیه سازی نمی کنیم.😊
میتونیم NN رو پیچیدهتر هم بکنیم و به جای اینکه ورودی ها و وزن را مستقیم به خروجی بدیم یک یا چند لایه پنهان بین ورودی و خروجی داشته باشیم؛ همچنین میتونیم چندتا خروجی هم داشته باشیم.
تعداد لایه های پنهان و سلول های هر لایه میتونه برای هر NN متفاوت باشه یعنی میتونیم بگیم هر شبکه عصبی برای خودش معماری خاص خودشو داره (Neural Network Architecture).
حالا در مورد عکس ها؛ یه عکس از یه ماتریس یا جدولی از تعداد زیادی عدد ساخته شده. اجتماع پیکسل ها در کنار هم عکس ها را به وجود میاره مثلا وقتی میگیم دوربین گوشی ۱۲ مگاپیکسله، یعنی اگه عکسی که میگره از ۱۲ میلیون پیکسل ساخته شده.
به ازای هر پیکسل هم یک عدد وجود داره، در عکس سیاه و سفید اگر پیکسل سیاه باشه صفر، و اگه سفید باشه ۲۵۵ و در کل ۲۵۶ حالت رنگ وجود داره به این عکسها میگن ۸ بیتی چون ۲۸ = ۲۵۶ .
در عکس رنگی هم شبیه همین با این تفاوت که هر عکس سه تا ماتریس داره یکی تو کانال قرمز یکی تو کانال سبز یکی تو کانال آبی. رنگ هر پیکسلی با توجه به اینکه تو این کانالها چه مقداری داره تعیین میشه؛ مثلاً تو یه عکس با پیکسل ۱۰×۱۰، ۳۰۰ تا عدد داریم (صدتا برا قرمز، صدتا سبز، صدتا آبی)
برای دادن این عکسا به NN یه روش اینکه از مثال بالا ۳۰۰ عدد را به عنوان ورودی بدیم به NN، ولی در عمل وقتی ورودی مدل ما عکس هستش NN ما یه نوع خاصی به نام Convolutional N N یا به اختصار CNN. که به ما اجازه میده عکس رو بدون تبدیل به یک لیست با همین شکل ماتریس اصلی وارد مدل کنیم.
اینم از جلسه امروز
انتقادی، پیشنهادی ویا خطای علمی نگارشی وجود داشت ممنون میشم مطلعم کنید🌹