مشکلات رگرسیون هر زمان که بخواهیم یک مقدار عددی را پیش بینی کنیم ، ظاهر می شود. مثالهای متداول شامل پیش بینی قیمت (خانه ها ، سهام و غیره) ، پیش بینی مدت اقامت (برای بیماران در بیمارستان) ، پیش بینی تقاضا (برای فروش خرده فروشی) ، در میان تعداد بی شماری است. هر مشکل پیش بینی یک مشکل رگرسیون کلاسیک نیست. بعداً ، ما مشکلات طبقه بندی را معرفی خواهیم کرد ، جایی که هدف پیش بینی عضویت در بین مجموعه ها است.
به عنوان نمونه در حال اجرا ، فرض کنید که ما می خواهیم قیمت خانه ها (به دلار) را بر اساس مساحت آنها (در فوت مربع) و سن (در سالها) تخمین بزنیم. برای تهیه الگویی برای پیش بینی قیمت خانه ، باید داده های متشکل از فروش از جمله قیمت فروش ، منطقه و سن برای هر خانه را بدست آوریم. در اصطلاحات یادگیری ماشین ، مجموعه داده ها به یک مجموعه داده آموزش یا مجموعه آموزش گفته می شود و هر ردیف (حاوی داده های مربوط به یک فروش) به عنوان مثال (یا نقطه داده ، نمونه ، نمونه) نامیده می شود. چیزی که ما در تلاش برای پیش بینی (قیمت) هستیم ، برچسب (یا هدف) نامیده می شود. متغیرها (سن و مساحت) که پیش بینی ها بر اساس آن بنا شده است ، ویژگی ها (یا متغیرهای متغیر) نامیده می شوند.
%منگوله درون خطی وارد كردن ریاضی وارد كردن زمان وارد كردن اعماق as np وارد كردن مشعل از جانب D2L وارد كردن مشعل as D2L
%منگوله درون خطی وارد كردن ریاضی وارد كردن زمان از جانب mxnet وارد كردن np از جانب D2L وارد كردن mxnet as D2L
%منگوله درون خطی وارد كردن ریاضی وارد كردن زمان از جانب جنجال وارد كردن اعماق as JNP از جانب D2L وارد كردن جنجال as D2L
No GPU/TPU پیدا کردن, سقوط بازگشت to CPU. (تنظیم tf_cpp_min_log_level=0 وت مجدداً برای بیشتر اطلاعات.)
%منگوله درون خطی وارد كردن ریاضی وارد كردن زمان وارد كردن اعماق as np وارد كردن تانسور پر as tf از جانب D2L وارد كردن تانسور پر as D2L
3. 1. 1. اصول اولیه
رگرسیون خطی ممکن است ساده ترین و محبوب ترین در بین ابزارهای استاندارد برای مقابله با مشکلات رگرسیون باشد. قدمت آن به طلوع قرن نوزدهم (گاوس ، 1809 ، افسانه ، 1805) ، رگرسیون خطی از چند فرض ساده جریان می یابد. اول ، فرض می کنیم که رابطه بین ویژگی ها ( mathbf ) و هدف (y ) تقریباً خطی است ، یعنی اینکه میانگین مشروط (e [y mid x = mathbf] ) قابل بیان است. مبلغ وزنی از ویژگی ها ( Mathbf ). این تنظیم اجازه می دهد تا مقدار هدف هنوز هم به دلیل سر و صدای مشاهده ، از مقدار مورد انتظار خود منحرف شود. در مرحله بعد ، ما می توانیم این فرض را تحمیل کنیم که هرگونه سر و صدایی به خوبی رفتار می شود ، پس از توزیع گاوسی. به طور معمول ، ما از (n ) برای مشخص کردن تعداد نمونه ها در مجموعه داده خود استفاده خواهیم کرد. ما برای شمارش نمونه ها و اهداف و اشتراک ها برای فهرست بندی مختصات از نسخه های فوق العاده استفاده می کنیم. به طور دقیق تر ، ( Mathbf^) نمونه (i ) -th را نشان می دهد و (x_j^) مختصات (j ) را نشان می دهد.
3. 1. 1. 1. مدل¶
در قلب هر راه حل مدلی است که توضیح می دهد که چگونه می توان ویژگی ها را به برآورد هدف تبدیل کرد. فرض خطی به این معنی است که ارزش مورد انتظار هدف (قیمت) را می توان به عنوان مبلغ وزنی از ویژگی ها (منطقه و سن) بیان کرد:
(3. 1. 1) ¶ [ mathrm = w_<mathrm> cdot mathrm + w_<mathrm> cdot mathrm + b. ]
اینجا (w_<mathrm>) و (w_<mathrm>) وزنه ها نامیده می شوند ، و (b ) به عنوان تعصب (یا جبران یا رهگیری) خوانده می شود. وزن ها تأثیر هر ویژگی را در پیش بینی ما تعیین می کند. تعصب مقدار برآورد را هنگامی که همه ویژگی ها صفر هستند تعیین می کند. حتی اگر ما هرگز خانه های تازه ساخته شده با مساحت دقیقاً صفر را نبینیم ، ما هنوز به تعصب احتیاج داریم زیرا این امکان را به ما می دهد تا تمام عملکردهای خطی ویژگی های خود را بیان کنیم (در مقابل محدود کردن ما به خطوطی که از منشأ عبور می کنند). به طور دقیق ، (3. 1. 1) یک تحول وابسته به ویژگی های ورودی است که با یک تغییر خطی از ویژگی ها از طریق مبلغ وزنی ، همراه با ترجمه از طریق تعصب اضافه می شود. با توجه به یک مجموعه داده ، هدف ما انتخاب وزنه ها ( mathbf ) و تعصب (b ) است که ، به طور متوسط ، پیش بینی های مدل ما را متناسب با قیمت های واقعی مشاهده شده در داده ها تا حد امکان قرار می دهد.
در رشته هایی که معمول است فقط با چند ویژگی روی مجموعه داده ها تمرکز کنید ، صریح بیان مدل های طولانی ، مانند (3. 1. 1) ، رایج است. در یادگیری ماشین ، ما معمولاً با مجموعه داده های با ابعاد بالا کار می کنیم ، جایی که استفاده از نماد جبر خطی جمع و جور راحت تر است. هنگامی که ورودی های ما از ویژگی های (d ) تشکیل شده است ، می توانیم هر یک از شاخص ها (بین (1 ) و (d )) را اختصاص دهیم و پیش بینی خود را بیان کنیم ( hat ) (به طور کلی نماد "کلاه"یک تخمین را نشان می دهد)
(3. 1. 2) ¶ [ hat = w_1 x_1 +.+ w_d x_d + b. ]
جمع آوری تمام ویژگی ها در یک بردار ( mathbf in mathbb^d ) و تمام وزن ها در یک بردار ( mathbf in mathbb^d ) ، می توانیم مدل خود را به طور فشرده از طریق محصول نقطه بین بیان کنیم (( Mathbf ) و ( Mathbf ):
(3. 1. 3) ¶ [ hat = mathbf^ top mathbf + b. ]
در (3. 1. 3) ، بردار ( Mathbf ) با ویژگی های یک مثال واحد مطابقت دارد. ما اغلب به راحتی می توانیم به ویژگی های کل مجموعه داده های ما از نمونه های (n ) از طریق ماتریس طراحی ( Mathbf in Mathbb^) مراجعه کنیم. در اینجا ، ( Mathbf ) برای هر نمونه و یک ستون برای هر ویژگی حاوی یک ردیف است. برای مجموعه ای از ویژگی ها ( Mathbf ) ، پیش بینی ها ( hat<mathbf> in Mathbb^n ) را می توان از طریق محصول ماتریس بردار بیان کرد:
(3. 1. 4) ¶ [<hat<mathbf>>= Mathbf Mathbf + B ، ]
جایی که پخش (بخش 2. 1. 4) در طول جمع بندی اعمال می شود. با توجه به ویژگی های یک مجموعه داده آموزشی ( Mathbf ) و برچسب های مربوطه (شناخته شده) ( mathbf ) ، هدف از رگرسیون خطی یافتن بردار وزن ( mathbf ) و اصطلاح تعصب (b ) با توجه به ویژگی های یک مثال داده جدید که از همان توزیع ( Mathbf ) نمونه برداری شده است ، برچسب مثال جدید (در انتظار) با کمترین خطا پیش بینی می شود.
حتی اگر ما اعتقاد داشته باشیم که بهترین مدل برای پیش بینی (y ) با داده شده ( mathbf ) خطی است ، ما انتظار نداریم یک مجموعه داده در دنیای واقعی از نمونه های (n ) پیدا کنیم که در آن (y^)دقیقاً برابر ( Mathbf^ top Mathbf^+b ) برای همه (1 leq i leq n ). به عنوان مثال ، هر ابزاری که برای مشاهده ویژگی ها استفاده می کنیم ( Mathbf ) و برچسب ها ( Mathbf ) ممکن است مقدار کمی از خطای اندازه گیری متحمل شوند. بنابراین ، حتی وقتی اطمینان داریم که رابطه اساسی خطی است ، ما یک اصطلاح سر و صدا را برای پاسخ به این خطاها درج خواهیم کرد.
قبل از اینکه بتوانیم به جستجوی بهترین پارامترها (یا پارامترهای مدل) ( Mathbf ) و (b ) برویم ، به دو چیز دیگر نیاز خواهیم داشت: (i) یک اندازه گیری کیفیت برای برخی از مدل های معین. و (ب) روشی برای به روزرسانی مدل برای بهبود کیفیت آن.
3. 1. 1. 2. عملکرد از دست دادن
به طور طبیعی ، متناسب با مدل ما با داده ها مستلزم این است که ما در مورد برخی از تناسب اندام (یا ، به طور معادل ، ناآرامی) توافق کنیم. توابع از دست دادن فاصله بین مقادیر واقعی و پیش بینی شده هدف را تعیین می کند. این ضرر معمولاً یک عدد غیر منفی خواهد بود که در آن مقادیر کوچکتر بهتر و پیش بینی های کامل از دست دادن 0. برای مشکلات رگرسیون ، متداول ترین عملکرد از دست دادن خطای مربع است. هنگامی که پیش بینی ما برای یک مثال (i ) ( hat^) است و برچسب واقعی مربوطه (y^) است ، خطای مربع توسط:
(3. 1. 5) ¶ [l^( Mathbf ، b) = frac سمت چپ ( hat^ - y^ راست)^2. ]
ثابت ( frac ) هیچ تفاوت واقعی ایجاد نمی کند اما ثابت می کند که از نظر قابل ملاحظه ای راحت است ، زیرا وقتی مشتق ضرر را می گیریم ، از بین می رود. از آنجا که مجموعه داده های آموزش به ما داده می شود و بنابراین از کنترل ما خارج می شود ، خطای تجربی تنها تابعی از پارامترهای مدل است. در زیر ، ما تناسب یک مدل رگرسیون خطی را در یک مشکل با ورودی های یک بعدی تجسم می کنیم (شکل 3. 1. 1).
شکل 3. 1. 1 متناسب با یک مدل رگرسیون خطی به داده های یک بعدی.¶
توجه داشته باشید که تفاوت های زیادی بین برآوردها ( hat^) و اهداف (y^) منجر به کمک های حتی بیشتر در از دست دادن می شود ، به دلیل شکل درجه دوم ضرر (این می تواند یک شمشیر دو لبه باشد. این مدل را ترغیب می کند تا از خطاهای بزرگ جلوگیری کند ، همچنین می تواند به حساسیت بیش از حد به داده های غیر عادی منجر شود). برای اندازه گیری کیفیت یک مدل در کل مجموعه داده های مثالهای (n ) ، ما به سادگی (یا معادل آن ، جمع بندی) ضررهای موجود در مجموعه آموزش را به طور متوسط (یا معادل آن) انجام می دهیم:
هنگام آموزش مدل ، می خواهیم پارامترهایی ( ( Mathbf^*، b^*)) پیدا کنیم که از دست دادن کل در تمام نمونه های آموزشی به حداقل می رسد:
(3. 1. 7) ¶ [ Mathbf^*، b^*= operatoame*_<mathbf, b> l ( Mathbf ، b). ]
3. 1. 1. 3. راه حل تحلیلی
بر خلاف بسیاری از مدلهایی که ما پوشش خواهیم داد ، رگرسیون خطی یک مشکل بهینه سازی شگفت آور آسان را به ما ارائه می دهد. به طور خاص ، ما می توانیم با استفاده از یک فرمول ساده به شرح زیر ، پارامترهای بهینه (همانطور که در داده های آموزش ارزیابی شده است) پیدا کنیم. ابتدا می توانیم با اضافه کردن یک ستون به ماتریس طراحی متشکل از همه موارد ، تعصب (b ) را در پارامتر ( mathbf ) قرار دهیم. سپس مشکل پیش بینی ما به حداقل رساندن ( | Mathbf - Mathbf Mathbf |^2 ) است. تا زمانی که ماتریس طراحی ( Mathbf ) دارای رتبه کامل باشد (هیچ ویژگی به طور خطی به دیگران وابسته نیست) ، پس فقط یک نقطه مهم در سطح از دست دادن وجود خواهد داشت و مطابق با حداقل ضرر در کل استدامنه. گرفتن مشتق ضرر با توجه به ( mathbf ) و تنظیم آن برابر با بازده صفر:
(3. 1. 8) ¶ [ شروع جزئی_<mathbf> | Mathbf - Mathbf Mathbf |^2 = 2 Mathbf^ top ( Mathbf Mathbf - Mathbf) = 0 Text Mathbf^ top mathbf = mathbf^ top mathbf mathbf.پایان]
حل برای ( Mathbf ) راه حل بهینه را برای مشکل بهینه سازی در اختیار ما قرار می دهد. توجه داشته باشید که این راه حل
.
فقط زمانی منحصر به فرد خواهد بود که ماتریس ( mathbf x^ top mathbf x ) غیرقابل برگشت باشد ، یعنی وقتی ستون های ماتریس طراحی بطور خطی مستقل هستند (Golub and Van Loan ، 1996).
در حالی که مشکلات ساده مانند رگرسیون خطی ممکن است راه حل های تحلیلی را بپذیرد ، شما نباید به چنین ثروت خوبی عادت کنید. اگرچه راه حل های تحلیلی امکان تجزیه و تحلیل ریاضی خوب را فراهم می کند ، اما نیاز به یک راه حل تحلیلی چنان محدود کننده است که تقریباً همه جنبه های هیجان انگیز یادگیری عمیق را حذف می کند.
3. 1. 1. 4. نزول شیب تصادفی Minibatch
خوشبختانه ، حتی در مواردی که ما نمی توانیم مدل ها را به صورت تحلیلی حل کنیم ، ما هنوز هم می توانیم مدل ها را به طور مؤثر در عمل آموزش دهیم. علاوه بر این ، برای بسیاری از کارها ، آن مدل های دشوار بهینه سازی به حدی بهتر می شوند که فهمیدن نحوه آموزش آنها به پایان می رسد که ارزش این مشکل را دارد.
تکنیک کلیدی برای بهینه سازی تقریباً هر مدل یادگیری عمیق ، و ما در طول این کتاب از آن استفاده خواهیم کرد ، متشکل از تکرار خطا با به روزرسانی پارامترها در جهت که به تدریج عملکرد ضرر را کاهش می دهد. این الگوریتم نزول شیب نامیده می شود.
ساده ترین کاربرد نزول شیب شامل گرفتن مشتق از عملکرد ضرر است که به طور متوسط ضررهای محاسبه شده در هر نمونه در مجموعه داده است. در عمل ، این می تواند بسیار کند باشد: ما باید قبل از انجام یک به روزرسانی واحد ، از کل مجموعه داده ها عبور کنیم ، حتی اگر مراحل به روزرسانی بسیار قدرتمند باشد (لیو و Nocedal ، 1989). حتی بدتر ، اگر در داده های آموزش افزونگی زیادی وجود داشته باشد ، فواید یک به روزرسانی کامل حتی پایین تر است.
نکته اصلی دیگر این است که فقط یک نمونه واحد را در یک زمان در نظر بگیرید و بر اساس یک مشاهده در یک زمان ، مراحل به روزرسانی را انجام دهید. الگوریتم حاصل ، نزول شیب تصادفی (SGD) می تواند یک استراتژی مؤثر باشد (Bottou ، 2010) ، حتی برای مجموعه داده های بزرگ. متأسفانه ، SGD دارای اشکالاتی است ، چه محاسباتی و چه آماری. یک مشکل از این واقعیت ناشی می شود که پردازنده ها بسیار سریعتر از آن هستند که تعداد آنها را از حافظه اصلی به حافظه نهان پردازنده منتقل می کنند. این به یک ترتیب از بزرگی برای انجام یک ضرب ماتریس بردار نسبت به تعداد مربوط به عملیات بردار بردار کارآمدتر است. این بدان معنی است که می تواند پردازش یک نمونه در یک زمان در مقایسه با یک دسته کامل ، یک نمونه را طولانی تر کند. مشکل دوم این است که برخی از لایه ها ، مانند عادی سازی دسته ای (که در بخش 8. 5 شرح داده می شود) ، فقط وقتی به بیش از یک مشاهده در یک زمان دسترسی داریم ، خوب کار می کنند.
راه حل برای هر دو مشکل ، انتخاب یک استراتژی میانی است: به جای اینکه یک دسته کامل یا فقط یک نمونه واحد را به طور همزمان انجام دهیم ، ما یک مینی بیت از مشاهدات را می گیریم (لی و همکاران ، 2014). انتخاب خاص اندازه مینی بوچ مذکور بستگی به عوامل زیادی دارد ، مانند میزان حافظه ، تعداد شتاب دهنده ها ، انتخاب لایه ها و اندازه کل مجموعه داده ها. با وجود همه اینها ، تعدادی بین 32 تا 256 ، ترجیحاً چند قدرت بزرگ (2 ) ، شروع خوبی است. این ما را به سمت نزول شیب تصادفی مینی بچ سوق می دهد.
در ابتدایی ترین شکل آن ، در هر تکرار (t ) ، ابتدا به طور تصادفی نمونه ای از یک مینی بوچ ( mathcal_t ) متشکل از یک عدد ثابت (| mathcal | ) نمونه های آموزش را نمونه می گیریم. سپس ما با توجه به پارامترهای مدل ، مشتق (شیب) متوسط ضرر را در مینی بوچ محاسبه می کنیم. سرانجام ، ما شیب را با یک مقدار مثبت کوچک از پیش تعیین شده ( eta ) ، به نام نرخ یادگیری ضرب می کنیم و اصطلاح حاصل را از مقادیر پارامتر فعلی تفریق می کنیم. ما می توانیم به روزرسانی را به شرح زیر بیان کنیم:
(3. 1. 10) ¶ [( Mathbf ، b) Leftarrow ( Mathbf ، b) - frac<|mathcal|> sum__t>جزئي_<(mathbf,b)>l^( Mathbf ، b). ]
به طور خلاصه ، SGD Minibatch به شرح زیر است: (i) مقادیر پارامترهای مدل را به طور معمول به طور تصادفی آغاز کنید.(ب) مینی بوچ های تصادفی را به طور تکراری از داده ها نمونه بگیرید و پارامترها را در جهت شیب منفی به روز کنید. برای تلفات درجه دوم و تحولات وابسته ، این یک گسترش با فرم بسته است:
از آنجا که ما یک minibatch ( Mathcal ) را انتخاب می کنیم ، باید با اندازه آن عادی شویم (| Mathcal | ). غالباً اندازه مینی بیت و نرخ یادگیری تعریف شده توسط کاربر است. چنین پارامترهای قابل تنظیم که در حلقه آموزش به روز نمی شوند ، HyperParameters نامیده می شوند. آنها را می توان به طور خودکار با تعدادی از تکنیک ها مانند بهینه سازی بیزی تنظیم کرد (Frazier ، 2018). در پایان ، کیفیت راه حل به طور معمول در یک مجموعه داده اعتبار سنجی جداگانه (یا مجموعه اعتبار سنجی) ارزیابی می شود.
پس از آموزش برای برخی از تعداد از پیش تعیین شده تکرارها (یا تا زمانی که معیار توقف دیگر برآورده نشود) ، ما پارامترهای مدل تخمین زده شده را ضبط می کنیم ، مشخص شده ( hat<mathbf>، کلاه ). توجه داشته باشید که حتی اگر عملکرد ما واقعاً خطی و پر سر و صدا باشد ، این پارامترها حداقل حداقل از دست دادن یا حتی قطعی نیستند. اگرچه این الگوریتم به آرامی به سمت مینیمایزرها همگرا می شود ، اما به طور معمول نمی تواند دقیقاً در تعداد محدودی از مراحل به آن برسد. علاوه بر این ، Minibatches ( Mathcal ) که برای به روزرسانی پارامترها استفاده می شود به طور تصادفی انتخاب می شوند. این امر جبرگرایی را می شکند.
رگرسیون خطی اتفاق می افتد که یک مشکل یادگیری با حداقل جهانی (هر زمان ( mathbf ) در رتبه کامل باشد ، یا به طور معادل ، هر زمان که ( mathbf^ top mathbf ) غیرقابل برگشت است). با این حال ، سطوح ضرر برای شبکه های عمیق حاوی نقاط زین و حداقل است. خوشبختانه ، ما به طور معمول به یافتن مجموعه دقیقی از پارامترها اهمیتی نمی دهیم بلکه صرفاً هر مجموعه ای از پارامترها که منجر به پیش بینی های دقیق (و در نتیجه کم شدن) می شود. در عمل ، پزشکان عمیق یادگیری به ندرت برای یافتن پارامترهایی که ضرر در مجموعه های آموزشی را به حداقل می رساند ، تلاش می کنند (Frankle and Carbin ، 2018 ، Izmailov et al. ، 2018). کار مهم تر یافتن پارامترهایی است که منجر به پیش بینی های دقیق در مورد داده های قبلاً دیده نشده ، چالشی به نام تعمیم می شود. ما در طول کتاب به این مباحث باز می گردیم.
3. 1. 1. 5. پیش بینی ها
با توجه به مدل ( کلاه<mathbf>^ top Mathbf + hat ) ، اکنون می توانیم برای مثال جدید پیش بینی کنیم ، به عنوان مثال ، قیمت فروش یک خانه قبلاً غیب را با توجه به مساحت خود (x_1 ) و سن (x_2 ) پیش بینی کنیم. پزشکان یادگیری عمیق به عنوان استنتاج فاز پیش بینی خواسته اند ، اما این یک استنباط نادرست است - استنباط به طور گسترده ای به هر نتیجه گیری بر اساس شواهد ، از جمله مقادیر پارامترها و برچسب احتمالی برای یک نمونه غیب اشاره دارد. در هر صورت ، در استنباط ادبیات آمار بیشتر به معنای استنباط پارامتر است و این اضافه بار اصطلاحات وقتی متخصصان یادگیری عمیق با آمارشناسان صحبت می کنند ، سردرگمی غیر ضروری را ایجاد می کند. در ادامه هر زمان ممکن به پیش بینی خواهیم رسید.
3. 1. 2. بردار برای سرعت
هنگام آموزش مدل های خود ، ما به طور معمول می خواهیم مینی بوچ های کامل نمونه ها را به طور همزمان پردازش کنیم. انجام این کار به طور کارآمد مستلزم آن است که ما محاسبات را برداشت کرده و به جای نوشتن حلقه های گران قیمت در پایتون ، از کتابخانه های جبر خطی سریع استفاده کنیم.
برای نشان دادن اینکه چرا این مسئله بسیار مهم است ، می توانیم دو روش برای افزودن بردارها را در نظر بگیریم. برای شروع ، ما دو بردار 10،000 بعدی که حاوی همه آن ها هستند ، فوری می کنیم. با یک روش ، ما با یک حلقه پایتون روی بردارها حلقه می کنیم. در روش دیگر ، ما به یک تماس واحد به + تکیه می کنیم.
n = 10000 a = مشعل.اونس(n) b = مشعل.اونس(n)
معاملات FX...
ما را در سایت معاملات FX دنبال می کنید
برچسب :
نویسنده : شهلا ریاحی
بازدید : <-PostHit->
تاريخ : پنجشنبه
26 مرداد
1402 ساعت: 18:54