یادگیری عمیق 1
به قسمت 1 از آموزش جامع در یادگیری عمیق خوش آمدید. این آموزش یا راهنما بیشتر برای افراد مبتدی است و سعی شده تا حد ممکن بر موضوعات تعریف و تاکید شود. از آنجا که یادگیری عمیق یک موضوع بسیار بزرگ است، کل آموزش به چند بخش تقسیم شده است. حتما در صورت مفید بودن این قسمت، قسمت های دیگر را مطالعه کنید.
محتویات
- مقدمه
- یادگیری عمیق چیست؟
- چرا یادگیری عمیق؟
- چه مقدار از داده ها بزرگ است؟
- زمینه هایی که در آن یادگیری عمیق استفاده می شود
- تفاوت یادگیری عمیق و یادگیری ماشینی
- وارد کردن کتاب خانه های لازم
- بررسی کلی
- پس نمایی استدلالی (Logistic Regression)
- گراف محاسباتی (Computational graph)
- پارامترهای اولیه سازی (Initializing parameters)
- پیش انتشار (Forward Propagation)
- بهینه سازی با نزول گرادیان (Optimizing with Gradient Descent)
- پس نمایی استدلالی با استفاده از Sklearn (Logistic Regression with Sklearn)
مقدمه
یادگیری عمیق چیست؟
- یادگیری عمیق زیرشاخه ای از یادگیری ماشینی است که از نورون های بیولوژیکی مغز الهام گرفته شده و آن را به شبکه های عصبی مصنوعی با یادگیری بازنمایی ترجمه میکنند.
چرا یادگیری عمیق؟
- وقتی حجم داده ها افزایش می یابد، تکنیک های یادگیری ماشینی، مهم نیست که چقدر بهینه شده اند، شروع به نا کارآمدی از نظر عملکرد و دقت میکنند، در حالی که یادگیری عمیق در چنین مواردی بسیار بهتر عمل میکند.
چه مقدار از داده، بزرگ است؟
- نمی توان آستانه ای را برای بزرگ نامیدن داده ها تعیین کرد، اما به طور شهودی فرض کنید یک میلیون نمونه ممکن است برای گفتن “بزرگ است” کافی باشد.
زمینه هایی که از DL استفاده می شود
- طبقه بندی تصویر، تشخیص گفتار، NLP (پردازش زبان طبیعی)، سیستم های توصیه و غیره.
تفاوت بین یادگیری عمیق و یادگیری ماشینی
- یادگیری عمیق زیر مجموعه ای از یادگیری ماشینی است.
- در یادگیری ماشینی ویژگی ها به صورت دستی ارائه می شوند.
- در حالی که یادگیری عمیق ویژگی ها را مستقیما از داده ها یاد می گیرد.
منبع تصویر: Kaggle
ما از مجموعه داده ارقام زبان اشاره که در Kaggle موجود است استفاده خواهیم کرد. حالا بیایید شروع کنیم.
وارد کردن کتاب خانه های مورد نیاز
مروری بر داده ها
- 2062 تصویر رقمی زبان اشاره در این مجموعه داده وجود دارد.
- از آنجایی که 10 رقم از 0 تا 9 وجود دارد، 10 تصویر رقمی زبان اشاره منحصر به فرد وجود دارد.
- در ابتدا، ما فقط از 0 و 1 استفاده می کنیم (برای ساده نگه داشتن آموز برای زبان آموزان)
- در داده ها علامت عقربه برای 0 بین شاخص های 204 و 408 قرار دارد. 205 نمونه برای 0 وجود دارد.
- همچنین علامت عقربه برای 1 بین شاخص های 822 و 1027 است. تعداد 206 نمونه می باشد.
- بنابراین ما از 205 نمونه از هر کلاس استفاده خواهیم کرد (توجه: در واقع 205 نمونه برای یک مدل یادگیری عمیق بسیار کمتر است، اما از آن جایی که این یک آموزش است، می توانیم آن را نادیده بگیریم).
اکنون آرایه های X و Y خود را آماده می کنیم که X آرایه تصویر (ویژگی ها) و Y آرایه برچسب (0 و1) ما می باشد.
برای ایجاد آرایه X، ما ابتدا بخش هایی از 0 ها و 1 ها از تصاویر علامت اشاره دست از مجموعه داده را برش داده و به آرایه X الحاق می کنیم. سپس کاری مشابه با آرایه Y انجام می دهیم، اما به جای آن از برچسب ها استفاده میکنیم.
- بنابراین می بینیم که شکل آرایه X (410, 64, 64) می باشد.
- 410 به معنی 205 تصویر از 0 و 205 تصویر از 1 است.
- 64 به معنی این است که اندازه تصویر ما 64 x 64 پیکسل است.
- شکل Y (410.1) است؛ بنابراین 410 1 ها و 0 ها.
- حال X وY را به مجموعه های آموزش (یا سلسله) (train) و آزمایش (test) تقسیم می کنیم.
- آموزش = 75%، آموزش = 15%
- random_state =: هنگام تصادفی سازی از یک دانه خاص استفاده می کند، بنابراین اگر سلول چندین بار اجرا شود، عدد تصادفی تولید شده هر بار تغییر نمی کند. هر بار همان آزمون و توضیع سلسله ایجاد می شود.
ما یک آرایه ورودی سه بعدی داریم، بنابراین باید آن را به دو بعدی مسطح کنیم تا به اولین مدل یادگیری عمیق ما وارد شود. از آن جایی که Y از قبل دو بعدی است، آن را همان طور که هست رها می کنیم.
اکنون ما مجموعا 348 تصویر داریم که هر کدام دارای 4096 پیکسل در آرایه آموزشی X داریم. و 62 تصویر با همان تراکم پیکسلی 4096 در آرایه آزمایشی داریم. حالا آرایه ها را جا بجا می کنیم. این فقط یک انتخاب شخصی است و در کد های بعدی خواهید دید که چرا این کار را انجام می دهیم.
بنابراین اکنون کار آماده سازی داده های مورد نیاز خود را به پایان رسانده ایم. بدین گونه:
اکنون با یکی از مدل های اساسی Dl به نام پس نمایی استدلالی یا Logistic Regression آشنا خواهیم شد.
پس نمایی استدلالی (Logistic Regression)
هنگام صحبت کردن در مورد طبقه بندی دودویی یا باینری، اولین مدلی که به ذهن می رسد رگرسیون لجستیک است. اما یکی ممکن است متعجب شود که استفاده از رگرسیون لجستیک در یادگیری عمیق است چیست؟ پاسخ ساده است از آن جایی که رگرسیون لجستیک یک شبکه عصبی ساده است؛ اصطلاحات شبکه عصبی و یادگیری عمیق مرتبط هستند و با هم می آیند. برای درک رگرسیون لجستیک، ابتدا باید در مورد گراف های محاسباتی یاد بگیریم.
گراف های محاسباتی
گراف های محاسباتی را می توان به عنوان یک راه تصویری برای نشان دادن عبارات ریاضی در نظر گرفت. این را با یک مثال توضیح می دهیم. فرض کنید یک عبارت ریاضی ساده داریم؛ مانند:
c = ( a2 + b2 ) ½
نمودار محاسباتی آن تصویر زیر خواهد بود:
حال نمودار محاسباتی رگرسیون لجستیک را مشاهده می کنیم:
منبع تصویر: مجموعه داده Kaggle
- وزن و سو گیری پارامتر های مدل نامیده می شوند.
- وزن ها ضرایب هر پیکسل را نشان می دهند.
- سو گیری وقفه منحنی است که با ترسیم پارامتر ها در برابر برچسب ها ایجاد می شود.
- Z = (px1*wx1) + (px2*wx2) + …. +(px4096*wx4096)
- y_head = sigmoid_funtion(Z)
- کاری که تابع سیگموئید انجام می دهد اساسا مقدار Z را بین 0 و 1 مقیاس می دهد، بنابراین به یک احتمال تبدیل می شود.
چرا از تابع سیگموئید استفاده کنیم؟
- یک نتیجه احتمالی به ما می دهد.
- از آن جایی که یک مشتق است، می توانیم از آن در الگوریتم نزول گرادیان استفاده کنیم.
حال هر یک از اجزای نمودار محاسباتی فوق را به تفصیل بررسی می کنیم.
مقدار دهی اولیه پارامتر ها
منبع تصویر: Microsoft Docs
هر پیکسل وزن خاص خود را دارد. اما سوال این است که وزن اولیه آنها چه خواهد بود؟ تکنیک های متعددی برای انجام این کار وجود دارد که در قسمت 2 این مقاله پوشش داده شده است اما در حال حاضر ، ما می توانیم آنها را با استفاده از هر مقدار تصادفی اولیه مقدار دهی می کنیم. بر فرض 0.01.
شکل آرایه وزن ها (4096,1) خواهد بود، از آنجا که در مجموع 4096 پیکسل در هر تصویر وجود دارد، و اجازه دهید سوگیری اولیه 0 باشد.
پیش انتشار (Forward Propagation)
به تمام مراحل از پیکسل ها تا تابع هزینه، پیش انتشار گفته می شود.
برای محاسبه Z از فرمول Z = (w.T)x + b استفاده می کنیم؛ که در آن x آرایه پیکسل، وزن w، و b سوگیری است. پس از محاسبه Z ما آن را به تابع سیگموئید که آن را به y_head (احتمال) باز می گرداند وارد می کنیم. پس از آن تابع loss(error) (اتلاف، ضرر) را محاسبه می کنیم.
تابع هزینه جمع تمام زیان ها است و مدل را برای پیش بینی های اشتباه مجازات می کند. بدین گونه مدل ما پارامتر ها را یاد می گیرد.
عبارت ریاضی برای تابع از دست دادن(log) عبارت است از:
همان طور که قبلا اشاره شده، آنچه تابع از دست دادن اساسا انجام می دهد مجازات برای پیش بینی های اشتباه است. این کد برای پیش انتشار می باشد:
بهینه سازی با نزول گرادیان
منبع تصویر: Coursera
هدف ما یافتن مقادیری برای پارامتر هایمان است که تابع ضرر در آن حداقل است. معادله برای نزول گرادیان:
که در آن “w” وزن یا پارامتر رانشان می دهد. حرف یونانی آلفا “stepsize” نامیده می شود. آلفا اندازه تکرار هایی را که هنگام پایین رفتن از شیب برای یافتن حداقل های محلی یا موضعی انجام می دهیم را نشان می دهد. بقیه آن ها مشتق تابع ضرر است که به عنوان گرادیان نیز شناخته می شود. الگوریتم برای نزول گرادیان ساده است:
- ابتدا یک نقطه داده تصادفی در نمودار خود می گیریم و شیب آن را پیدا می کنیم.
- سپس جهت کاهش تابع، کاهش ارزش را پیدا می کنیم.
- وزن ها را با استفاده از فرمول بالا به روز کنید. (به این روش پس انتشار نیز می گویند)
- نقطه بعدی را با اندازه گام α انتخاب کنید.
- تکرار کنید.
حالا پارامتر های یادگیری را به روز می کنیم:
تا این مرحله، ما پارامتر های خود را یاد گرفتیم. يعني ما داريم داده ها را جا ميديم. در مرحله پیش بینی، ما یک x_test ورودی داریم و
با استفاده از آن، ما پیش بینی های پیشین را انجام می دهیم.
حال ما پیش بینی هایمان را انجام می دهیم. همه چيز را کنار هم می گذاريم:
بنابراین همان طور که می بینید، حتی اساسی ترین مدل یادگیری عمیق کاملا سخت است. یاد گیری این آسان نیست، و افراد مبتدی ممکن است هنگام آموزش این موضوع به صورت فشرده احساس سردرگمی کنند، اما موضوع این است که ما حتی هنوز به یادگیری عمیق نزدیک نشده ایم، این آموزش ها مانند سطح آن است. مطالب بیشتری در این مورد وجود دارد که در قسمت دوم این مقاله آموزش داده خواهد شد.
از آنجا که ما منطق پشت رگرسیون لجستیک را آموخته ایم، می توانیم از کتابخانه ای به نام SKlearn استفاده کنیم که در حال حاضر بسیاری از مدل ها و الگوریتم های ساخته شده را در خود دارد، بنابراین لازم نیست همه چیز را از ابتدا شروع کنید.
رگرسیون لجستیک با استفاده از SKlearn
در این بخش مطلب زیادی توضیح داده زیرا تقریبا تمام منطق و شهود پشت رگرسیون لجستیک را می دانید. اگر علاقه مند به مطالعه در مورد کتابخانه Sklearn هستید، می توانید اسناد رسمی را در اینجا بخوانید.
این کد در زیر آمده است، و من مطمئنا از دیدن اینکه چقدر تلاش کمی نیاز دارد، شگفت زده خواهید شد:
بله! این تمام چیزی است که نیاز دارید، فقط 1 خط کد!
دیدگاهتان را بنویسید