آموزش یادگیری ماشین - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

آموزش یادگیری ماشین

+8 امتیاز

قصد داریم در این پست مباحثی از هوش مصنوعی را مطرح کنیم که از جمله آنها یادگیری ماشین

(machine learning) و داده کاوی (data mining) می باشد که از جمله کاربرد این علوم در فیلید های

هوش مصنوعی ، پردازش تصویر ، پردازش اشیاء 3 بعدی ،پردازش صوت و داده کاوی در پایگاه داده و غیره می باشد.

در ابتدا مباحث تئوریک را مطرح می کنیم و سپس مثال های عملی را نیز بیان می کنیم.

Machine Learning چیست؟

دو تعریف برای یادگیری ماشین ارائه شده است. Arthur Samuel آن را بدین صورت توصیف می­کند:

  • زمینه­ای از مطالعه که به کامپیوترها  توانایی یاد گرفتن می­دهد، بدون این که صریحا پروگرم شوند. این تعریفی قدیمی و غیر رسمی است.
  • Tom Mitchell یک تعریف مدرن­تر ارائه می­دهد: یک برنامه کامپیوتری از تجربه[1] E با توجه به دسته­هایی از وظایف[2]  T  و معیار عملکرد[3] P یاد می­گیرد، اگر عملکرد آن که با P اندازه گرفته می­شود، در وظایف موجود در T ، با تجربه Eبهبود یابد.

 

مثال: بازی کردن چکرز(جنگ نادر)

E : تجربه­ی بازی کردن چکرز به دفعات زیاد

T: عمل بازی کردن چکرز

P: احتمال این که پروگرم بازی بعدی را خواهد برد

یادگیری با نظارت (supervised learning):

در یادگیری با نظارت، ما یک مجموعه داده در اختیار داریم و با دانستن این مساله که رابطه­ای بین ورودی و خروجی وجود دارد، تقریبا می­دانیم خروجی صحیح به چه شکل است. 

مسائل یادگیری با نظارت به دو دسته تقسیم می­شوند: رگرسیون[1] و دسته­بندی[2]. در یک مساله رگرسیون، ما در تلاشیم نتایج را در یک خروجی پیوسته[3] پیش­بینی کنیم؛ به این معنا که ما سعی می­کنیم متغیرهای ورودی را به تابعی پیوسته نگاشت کنیم. در یک مساله دسته­بندی، به جای این کار، در تلاشیم نتایج را در یک خروجی گسسته[4] پیش­بینی کنیم. به عبارت دیگر، در تلاشیم متغیرهای ورودی را به دسته­های گسسته نگاشت کنیم.

مثال: با در اختیار داشتن داده­هایی درباره اندازه خانه­ها در تجارت معاملات زمین، تلاش می­کنیم قیمت خانه­ها را پیش­بینی کنیم. قیمت به عنوان تابعی از اندازه، یک خروجی پیوسته است. بنابراین این مساله، یک مساله رگرسیون است.

ما می­توانیم مساله مزبور را با تبدیل کردن خروجی به این که خانه به قیمتی بالاتر یا پایین­تر از قیمت موردنظر فروخته می­شود، به یک مساله دسته­بندی تغییر دهیم. در مساله­ی اخیر، خانه­ها بر مبنای قیمت به دو دسته­ی گسسته دسته­بندی می­شوند.


[1] regression

[2] classification

[3] continuous

[4] discrete

[1] experience

[2] tasks

[3] performance measure

 

 

 

سوال شده آذر 4, 1392  بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
دوباره تگ گذاری شد بهمن 22, 1392 بوسیله ی BlueBlade

7 پاسخ

+7 امتیاز
 
بهترین پاسخ

یادگیری بدون نظارت (unsupervised learning):

یادگیری بدون نظارت، به ما اجازه می­دهد با مسائلی برخورد کنیم که درباره شکل نتایج آن­ها اطلاعات کمی داریم یا کاملا بی اطلاع هستیم. به این ترتیب ما می­توانیم در جایی که لزوما اثر متغیرها را نمی دانیم، ساختاری از داده استنتاج کنیم.

ما می­توانیم این ساختار را با خوشه­بندی[1] داده بر مبنای روابط میان متغیرها در داده استنتاج کنیم.

در یادگیری بدون نظارت، بازخوردی (فیدبکی) بر اساس نتایج پیش­بینی وجود ندارد. یعنی معلمی برای تصحیح کردن شما وجود ندارد. این تنها درباره خوشه­بندی نیست. برای مثال، حافظه انجمنی[2] نیز بر اساس یادگیری بدون نظارت است.

مثال: خوشه­بندی: مجموعه­ای از 1000 مقاله از نشریه US Economy را در نظر بگیرید و روشی برای گروه­بندی خودکار آن­ها پیدا کنید که آن­ها را به گروه­هایی  متشکل از تعداد کمی مقاله تقسیم کند که با متغیرهای متفاوتی نظیر تکرار کلمات،طول جملات، شماره صفحه و ... نسبتا شبیهند یا به هم مربوطند.

انجمنی[3]: فرض کنید یک پزشک در طی سال­ها تجربه، در ذهنش ارتباطی بین ویژگی­های بیماران و بیماری­ای که بدان مبتلا هستند، شکل می­دهد. اگر بیمار جدیدی مراجعه کند، بر اساس ویژگی­های این بیمار نظیر علائم،پیشینه­ پزشکی خانواده، مشخصه­های فیزیکی، دورنمای روحی و غیره پزشک بیماری یا بیماری های ممکن را بر مبنای آن­چه قبلا در بیماران مشابه دیده است، به نشانه­ها مربوط می­سازد. این امر مشابه استدلال مبتنی بر قانون مانند سیستم­های خبره[4] نیست. در این مورد ما ترجیح می­دهیم یک تابع نگاشت از ویژگی­های بیمار به بیماری­ها تخمین بزنیم.




[1] clustering

[2] associative memory

[3] associative

[4] expert systems

 
پاسخ داده شده آذر 4, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
انتخاب شد دی 2, 1392 بوسیله ی BlueBlade
در این مورد برای شبکه عصبی بیشتر توضیح بدید یا اگه منبع فارسی یا انگلیسی هست معرفی کنید؟
اگه ممکن هست یک مثال عملی تر مثلا توی پیاده سازی شبکه عصبی بزنید البته ساده باشه.
ممنون
+7 امتیاز

رگرسیون خطی با یک متغیر

نمایش مدل:

به یاد بیاورید که در مسائل رگرسیون، ما متغیرهای ورودی را می­گیریم و تلاش می­کنیم خروجی را بر یک تابع نتیجه موردنظر پیوسته نگاشت کنیم. رگرسیون خطی با یک متغیر، هم چنین تحت عنوان رگرسیون خطی تک متغیری[1] شناخته می­شود.

رگرسیون خطی تک متغیری زمانی استفاده می­شود که می­خواهید یک مقدار خروجی منفرد[2] را از یک مقدار ورودی منفرد[3] پیش بینی کنید.  در چنین شرایطی، یادگیری با نظارت را انجام می­دهیم؛ این بدین معناست که تقریبا از این که اثر و علت ورودی/ خروجی چه خواهد بود، ایده ای داریم.

تابع فرض (Hypothesis Function):

تابع فرض ما فرم کلی زیر را دارد:

برای به دست آوردن خروجی­مان یعنی y، به  hθ  مقادیری برای 0θ و 1θ می­دهیم. به عبارت دیگر، ما در تلاشیم یک تابع به نام  hθ ایجاد کنیم که قادر است به گونه­ای قابل اعتماد داده ورودی ما (یعنی xها ) را به داده خروجی (yها) نگاشت کند.

مثال:

y(خروجی)

x(ورودی)

4

0

7

1

7

2

8

3

 

 


حال می­توانیم یک حدس تصادفی درباره­ی تابع hθ بزنیم: 2=0θ و 2=1θ. به این ترتیب تابع فرض به این صورت خواهد بود:

بنابراین برای ورودی 1 مطابق با فرض ما، y عدد 4 خواهد بود . که به اندازه 3 از هدف موردنظر دور است.

تابع هزینه (cost function):

می­توان دقت تابع فرض را با استفاده از یک تابع هزینه اندازه­گیری کرد. این تابع  میانگین(در واقع یک نوع خیالی از یک میانگین) همه نتایج  فرض با ورودی­های x  را در مقایسه با خروجی­های y  حقیقی محاسبه می­کند.


[1] univariate

[2] single output

[3] single input

 

پاسخ داده شده آذر 5, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
ویرایش شده آذر 7, 1392 بوسیله ی مصطفی ساتکی
+7 امتیاز

 

برای مجزا کردن، این فرمول در واقع  که در آن  میانگین مربعات  یا اختلاف بین مقدار پیش­بینی­شده و مقدار حقیقی است. این تابع، تابع مربعات خطا یا خطای مربع میانگین [1] خوانده می­شود.

حال ما قادریم به طور مطمئن دقت تابع پیش­بینی­کننده­مان را در برابر نتایج درستی که داریم، اندازه بگیریم. به این ترتیب می­توانیم نتایج جدیدی پیش­بینی کنیم.

نزول گرادیان (Gradient Descent):

تا به این­جا، ما تابع فرضمان را داریم و روشی برای اندازه گرفتن این که این تابع چه قدر دقیق است. حال آن­چه نیاز داریم روشی است تا تابع فرضمان را به طور خودکار بهبود ببخشیم. در این هنگام gradient descent به کار می­رود.

تصور کنید که ما تابع فرضمان را بر مبنای زمینه­هایش یعنی 0θ و 1θ رسم می­کنیم (در واقع ما داریم تابع هزینه را برای ترکیبات پارامترها رسم می­کنیم). این امر ممکن است منجر به نوعی سردرگمی شود. ما داریم به یک سطح بالاتر از چکیدگی[2] حرکت می­کنیم. ما خود x و y را رسم نمی­کنیم بلکه حدس­های تابع فرضمان را رسم می­کنیم.

ما 0θ را روی محور x و 1θ را روی محور z و تابع هزینه را روی محور عمودی y نمایش می­دهیم. نقاط روی گراف، نتیجه تابع هزینه با استفاده از فرضمان با آن پارمترهای تتای خاص خواهد بود.

می­دانیم زمانی موفق شده­ایم که تابع هزینه­مان در منتها الیه پایینی دره­های گراف واقع بوده و نتیجه صفر (یا نزدیک به صفر) باشد. 

روشی که با آن این کار را انجام می­دهیم،مشتق گرفتن از تابع هزینه ( تانژانت خط مماس بر یک تابع) است. شیب تانژانت، مشتق در آن نقطه است و این شیب به ما جهتی می­دهد که به سمت آن حرکت کنیم. ما آن مشتق را با یک مقدار ثابت که آلفا خوانده می­شود، کند می­کنیم[3].

معادله­ی نزول گرادیان بدین صورت است:

تا زمان همگرایی تکرار می­شود:

برای j=0 و j=1 .

به طور حسی معادله فوق را می­توان این­چنین نیز تصور کرد:

تا زمان همگرایی تکرار می­شود:

        


[1] Mean squared error

[2] abstraction

[3] steps down

 

پاسخ داده شده آذر 5, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
ویرایش شده آذر 7, 1392 بوسیله ی مصطفی ساتکی
+5 امتیاز

گرادیان برای رگرسیون خطی:

وقتی به طور خاص نزول گرادیان برای مورد رگرسیون خطی به کار می­رود،  یک شکل جدید از معادله­ی نزول گرادیان منتج می­شود. ما می­توانیم تابع هزینه  و تابع فرض حقیقی­مان را جایگزین کنیم و معادله را به این شکل اصلاح کنیم: 

تا زمان همگرایی تکرار شود:

 

 

که m اندازه مجموعه­ی آموزشی است، 0θ یک ثابت است که با 1θ در یک زمان تغییر خواهد کرد و x(i) و y(i) مقادیر مجموعه آموزشی داده شده (داده) می­باشند.

توجه کنید که ما دو مورد را برای jθ از هم جدا کرده­ایم و برای 1θ به خاطر مشتق، x(i) را در انتها  ضرب می­کنیم.

خلاصه این که اگر ما با حدسی برای تابع فرض شروع کنیم و سپس مکررا معادلات نزول گرادیان را به کار ببریم، فرضمان دقیق و دقیقتر خواهد شد.

در ادامه: به جای استفاده کردن از رگرسیون خطی روی فقط یک متغیر ورودی، ما مفاهیم ذکرشده را تعمیم و بسط خواهیم داد؛ آن چنان که بتوانیم داده­ای با چندین متغیر ورودی را پیش­بینی کنیم. هم­چنین مقادیر 0θ و 1θ را به طور دقیق، بدون نیاز به یک تابع تکرارشونده مانند نزول گرادیان به دست خواهیم آورد.

پاسخ داده شده آذر 7, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
+5 امتیاز

مروری بر جبر خطی

ماتریسها و بردارها:

ماتریسها آرایه های دو بعدی هستند:

image

ماتریس بالا چهار ردیف و سه ستون دارد؛ بنابراین یک ماتریس 4x3 است.

یک بردار یک ماتریس با یک ستون و تعدادی ردیف است:

image

بنابراین بردارها زیرمجموعه ای از ماتریس ها هستند. بردار بالا یک ماتریس 4x1 است.

نشانه گذاری و ضوابط:

  • Aijبه عنصر ردیف iام  و ستون jام از ماتریس A اشاره می­کند.
  • برداری با n ردیف، یک بردار n بعدی خوانده می­شود.
  • Viبه عنصر ردیف iام بردار اشاره می­کند.
  • ماتریس­ها معمولا با حروف بزرگ نمایش داده می شوند در حالی که بردارها را با حروف کوچک نشان می دهیم.
  •  Scalar به متغیرهایی اطلاق می شود که برداری یا ماتریسی نیستند یا به عبارت دقیق تر تک مقداری هستند.
  • []به مجموعه عددهای حقیقی اسکالر اشاره می کند.
  • n[] به مجموعه ای از بردارهای n بعدی از اعداد حقیقی اشاره می کند.

ضرب عددی و جمع:

جمع و تفریق مبتنی بر عنصر[1] هستند، بنابراین شما به سادگی عناصر مرتبط را اضافه و کم می کنید:

image

برای جمع کردن یا کم کردن دو ماتریس، ابعاد آنها باید یکسان باشد.

در ضرب عددی(اسکالر)، هر عنصر با مقدار اسکالر ضرب می شود:

image


[1] Element-wise

 

 

پاسخ داده شده آذر 9, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
ویرایش شده آذر 9, 1392 بوسیله ی مصطفی ساتکی
+5 امتیاز

ضرب ماتریس-بردار:

ستون بردار بر هر ردیف ماتریس نگاشت می شود؛ یعنی عناصر نظیر به نظیر ضرب شده و نتیجه این ضربها جمع می شود.

image

 

نتیجه یک بردار است. بردار باید دومین عامل ضرب باشد. تعداد ردیف های بردار باید با تعداد ستون های ماتریس مساوی باشد.

یک ماتریس m x n که ضرب می شود با یک بردار m x 1 منجر می شود به یک بردار n x 1.

ضرب ماتریس-ماتریس:

دو ماتریس را با شکستن ضرب به چندین ضرب برداری و متصل کردن نتیجه ضرب می کنیم:

image

یک ماتریس m x n که در یک ماتریس n x o ضرب می شود، یک ماتریس m x o را نتیجه می دهد. در مثال بالا، یک ماتریس 3 x 2 با یک ماتریس 2x2 ضرب شده است که به عنوان نتیجه یک ماتریس 3x2به دست می دهد.

برای ضرب کردن دو ماتریس، تعداد ستون های ماتریس اول باید برابر با تعداد ردیف های ماتریس دوم باشد.

ویژگی های ضرب ماتریسی:

  • جا به جایی پذیر نیست:

image

  •  شرکت پذیر است:

image

 

وقتی ماتریس همانی[2] با ماتریسی دیگر با ابعاد یکسان ضرب می شود، نتیجه برابر ماتریس اولیه خواهد بود. این امر درست مانند ضرب کردن اعداد در یک است. درایه های قطری ماتریس همانی، یک و سایر درایه ها، صفر است.

وقتی ماتریس همانی بعد از یک ماتریس ضرب می شود، ابعاد ماتریس مربعی همانی، باید با ستون های ماتریس دیگر منطبق باشد. وقتی ماتریس همانی را قبل از ماتریس دیگری ضرب می کنیم، ابعاد ماتریس مربع همانی باید با ردیف های ماتریس دیگر مطابقت داشته باشد.

معکوس و ترانهاده:

معکوس ماتریس A با شان داده می شود. ضرب کردن یک ماتریس در معکوسش ماتریس همانی را به دست می دهد.

یک ماتریس غیر مربعی ماتریس معکوس ندارد. ما می توانیم معکوس ماتریس ها را در octave با تابع pinv(A) محاسبه کنیم.

ترانهاده یک ماتریس مانند یک بار چرخاندن ماتریس در جهت عقربه های ساعت و سپس پشت و رو کردن آن است:


 

[2] identity matrix

پاسخ داده شده آذر 9, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
ویرایش شده آذر 9, 1392 بوسیله ی مصطفی ساتکی
+4 امتیاز
 

image

به عبارت دیگر:

image


 

پاسخ داده شده آذر 9, 1392 بوسیله ی مصطفی ساتکی (امتیاز 21,998)   24 34 75
ویرایش شده آذر 9, 1392 بوسیله ی مصطفی ساتکی
...