مدلهای generative  و discriminative

مقدمه احتمال

 

وقتی می خوای احتمال یک پیشامد رو حساب کنی نیاز به یک مدل احتمالاتی داری. یک پیشامد یک زیرمجموعه از فضای نمونه هست. ما خیلی وقتها نمی تونیم بگیم نتیجه یک آزمایش چیست اما می تونیم مجموعه نتایج ممکن رو مشخص کنیم. به این مجموعه فضای نمونه (sample space) می گن.

 

مثلاً می خوای بدونی یک سکه رو پرتاب کنی احتمال شیر چقدره، اولاً فضای نمونه {شیر، خط} هست. پیشامد در اینجا زیرمجموعه {شیر} هست.  این احتمال بستگی داره که سکه سالم (منصف) هست یا نه وگرنه احتمال شیر لزوماً یک دوم نیست. یا در پرتاب تاس فضای نمونه اعداد 1 تا 6 است و احتمال زوج آمدن زیر مجموعه شامل 2، 4 و 6 است. یک مدل احتمالاتی به هر پیشامد یک احتمال نسبت می ده، ممکنه این احتمالات رو بشه با یک فرمول بیان کرد. خیلی وقتها به جای پیشامدها با متغیر تصادفی سرو کار درایم. متغیر تصادفی یعنی متغیری که شما مقدارش را به شکل قطعی نمی دونید. در واقع متغیر تصادفی وجود نداره، متغیر تصادفی یک نگاشت از یک پیشامد احتمالاتی به یک عدد حقیقی است. مثلاً برای پیشامد شیر می توانید عدد یک رو نسبت بدید. و احتمال x=1 یعنی اینکه شیر بیاد رو محاسبه کنید.

 

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

 

تخمین مدل احتمالاتی

به هر حال برای محسابه احتمال نیاز به یک مدل احتمالاتی داریم، اما ما همیشه این مدل و پارامترهاش رو نداریم. بعضی وقتها از روی یک نمونه (sample) از مقادیر یک متغیر تصادفی سعی می کنیم این مدل رو بسازیم یا تخمین بزنیم. مثلاً شما قد که متغیری تصادفی است رو برای 100 نفر اندازه گرفتید و از روی این صد عدد می خواهید یک تابع چگالی (معمولاً نرمال) بسازید. برای اینکا ر متوسط و انحراف معیار مقادیر اندازه گیری شده را استفاده می کنید و طبق روش درستنمایی بیشینه (maximum likelihood) به عنوان پارامترهای مدل استفاده می کنید.. این یک تخمین از تابع چکالی واقعی است که ما شاید تا زمانی که دقیقاً همه جمعیت رو اندازه نگیریم هیچ وقت تابع چگالی واقعی رو ندونیم. در واقع این یک مدل هست. در واقع تابع چگالی واقعی مدلی حقیقی است که شما فرض می کنید این قدها رو تولید کرده و شما سعی دارید تخمینش بزنید.

 

طبقه بندی با مدل احتمالاتی

وقتی که این تابع چگالی رو داشتید می تونید احتمال رو برای خیلی از موارد دیگه حساب کنید. اگر قصد شما طبقه بندی باشه، شما می تونید یک مدل احتمالاتی برای زنها و یک مدل احتمالاتی (همان تابع چگالی) برای مردها تخمین بزنید. بعد اگر قد یک شخص جدید رو اندازه گرفتید و قصد داشتید از روی اون جنسیتش رو پیشبینی کنید، می تونید احتمالش رو با توجه به هر کدام از این مدلها بدست بیارید. در اینجا به جای احتمال از کلمه likelihood (درستنمایی) هم استفاده می شه، و دنبال مدلی باشید که likelihood بیشتری داره که این نمونه (قد) رو تولید کنه و اون مدل نشاندهنده کلاس (در اینجا جنسیت) شخص هست. 

 

روش مولد generative

این روش یک روش generative (مولد) طبقه بندی است که شما سعی می کنید یک سری مدل احتمالاتی که می تونند مشاهده شما رو تولید کنند (کلمه تولید کلیدی است) را تخمین بزنید. در واقع پشت سر این مقدار یک مدل احتمالاتی وجود داره که ما دقیقاً نمی دونیم چیه. در واقع قد در اینجا توسط این مدل احتمالاتی تولید شده است و یا قد زنها و مردها توسط مدلهای احتمالاتی مختلف تولید می شوند. هر کدوم از این مدلها دارای پارامترهای خودشون هستند (متوسط قد و انحراف معیار). البته شاید مثالهای بهتری باشد که این تولید شدن از روی یک مدل احتمالاتی را بهتر نشان دهد. هرچند در واقع هر متغیر تصادفی از روی یک مدل احتملاتی تولید می شود.

 

روش discriminative (تمیز دهنده)

روش دیگر و معمول طبقه بندی روش تمیز دهنده است. در روش discriminative (تمیز دهنده) شما سعی نمی کنید که مدل احتملاتی که این مشاهدات رو تولید کرده را تخمین بزنید تنها دنبال یک تابع هستید که بتواند تمایز کلاسها را برای شما مشخص کند مثلاً  قد شخص رو بدید و برای کلاس زن و کلاس مرد دو عدد مجزا تولید کنه جوری که شما از این عدد (عددی که بزرگتر است) کلاس را پیش بینی کنید. 

 

داده های آموزشی

هر دو این مدلها نیاز به داده های آموزشی برای تخمین مدل (روش مولد) و یا ساخت تابع و پارامترهای تابع (روش تمیز دهنده) دارند. داده های آموزشی در هر دو روش یکی است. یعنی شما مثلاً قد صد نفر را که مثلاً  50 نفر زن و 50 نفر مرد هستند و مرد و زن کاملاً مشخص هست را برای آموزش استفاده می کنید. البته این نمونه شما باید نماینده جمعیتی باشد که شما قصد دارید بر رو ی آن پیش بینی کنید باشد. مثلا اگر نسبت زنها به مردها 40 به 60 هست باید این نسبتها را رعایت کنید و همینطور باید از افراد مختلف جامعه نمونه گیری کنید. پس از این، روش مولد سعی میکنه یک تابع چگالی پیدا کنه که متغیر تصادفی قد توسط اون تولید شده باشد. برای این کار ابتدا احتمال هر کدام از جنسیت ها را برآورد می کند که در این مثال 50، 50 است. بعد دو تابع چگالی برای مشاهد قدهای مختلف در هر جنسیت را برآورد می کند. با ضرب این دو طبق قانون بیز می توان احتمال جنسیت به شرط قد را بدست آورد. 

 

P(y|x) متانسب است با P(y)P(x|y) 

 

اگر به این فرمول به شکل تابع تمیز دهند نگاه کنید، روش بالا هم به نوعی تمیز دهنده است. هرچند روش تمیز دهنده معمولاً سعی می کند مستقیماً احتمال جنسیت به شرط قد را به دست آورد و برای این کار لزوماً نیازی به تولید چگالی احتمال برای مشاهده (قد) ندارد. یعنی سعی می کند یک رابطه میان جنسیت و قد بسازد مثلاً y=w1*x+w2 و سعی می کند پارامترهای w1 و w2 را بیابد، در این جا y جنسیت و x قد هست.  این یک تابع تمیز دهنده است.. البته برخی مواقع هم یک مدل احمالاتی شرطی قد به شرط جنسیت را تخمین می زند P(y|x).   اما فرقش با قبلی این است که این احتمال کلاس به شرط مشاهده هست و نه مشاهده به شرط کلاس.

 

فرق میان روشهای مولد و تمیز دهنده

یک فرق اساسی بین این دو روش اینه که مدل مولد می تونه برای شما نمونه های مشابه آنچه دیده شده تولید کنه. مثلاً با پارامترهایی که تخمین زده شده می تونه یک قد جدید (مثلا 165 را برای یک زن و یا 180 را برای یک مرد تولید کنه.... روش تمیز دهنده هیچ دیدی در این رابطه نداره مثلاً اگر از روش تمیز دهنده بخواهید یک قد مرد جدید تولید کنه ممکنه 300 یا 400 تولید کنه... روش تمیز دهنده تنها یاد گرفته که هر کسی که قدش بالای 168 بود با احتمال بیشتری مرد هست و هرکسی که کمتر از اون باشه با احتمال بیشتری زن هست اما هیچ دید دیگری نداره و برای یک زن ممکنه قد 40 رو تولید کنه... اما روش مولد از متوسط و انحراف معیار هر کدوم از این مشاهدات (قد) باخبر هست و می دونه که متوسط قد زنها مثلا 160 و مردها 170 هست. البته این مقادیر را از روی نمونه های آموزشی تخمین زده.


هنر دست کشیدن

واقعاً اینکه بفهمی کی بس و باید ول کنی خیلی مهمه... تعهد به این اصل خیلی مهمه... باید در هر شرایطی و مهم نیست طرف کی باشه و چی بگه بتونی بگی که دیگه بسه و من امروز دیگه بیشتر نمی تونم براش وقت بزارم..... این یک اصل مهم هست

تعادل

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

چک یادگیری

قرار شد که با شوق و انگیزه و هدف یادگیری درس بخونیم... پس میشه دائم سوال کرد آیا دارم چیز جدیدی یاد میگیرم. آیا دارم یادگیریم رو کامل میکنم. 

نوشتن برای تخلیه

شاید یک فایده نوشتن در کورا بحث تخلیه روانی و با هدف تخلیه روانی باشه... چرا ملاحظه کنم؟ می خوام تخلیه روانی کنم و بگم زر نزنید... دیگه بقیش مهم نیست.

سیاه و سفید

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

تفکر رباتی

امروز گفتم که من حتی معنی دوستی و هدف از دوستی رو نمی دونستم و برام سوال بود... این یعنی یک نوع تفکر رباتی ... یعنی همون مباحث یادگیری ماشین... در یادگیری ماشین سعی می کنیم یک عامل هوشمند (چیزی مثل انسان) بسازیم که قادر رفتاری رو در جهت رسیدن به پاداشی از خودش بروز بده... رفتار این ربات تابع تابع هدف هست... حالا این سوال پیش میاد که آیا دوستی برای یک ربات معنی داره؟ آیا دو ربات با هم دوست می شن؟ اگر جزیی از تابع هدفشون نباشه شاید این کار رو نکنند....

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

یادگیری تدریجی است

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

از طرفی اگر برای یادگیری تدریجی انرژی نگذارید نباید انتظار داشته باشید یک شبه همه چیز رو کامل یاد گرفته باشید

شروع و مقدمه

تازه این چیزهایی که به عنوان درس یا جای دیگه می خونی باید شروع کنجکاوی تو برای یادگیری بیشتر باشه.. باید زود تمومشون کنی و بری سروقت کتابها، ویدئوها و مسائلی که از این مفاهیم استفاده کردند تا یادگیریت رو کامل کنی

وقت

وقتی که الان تلف می کنی بعداً باعث ایجاد فشار بهت می شه... قبلاً هم فکر کنم این رو تجربه کردی که هر لحظه که اومدی وقتت رو هدر بدی و گفتی کارم رو بعداً انجام می دم بعداً یک کاری دیگه پیش آمد

ادامه داستان

باید خوندنت مثل خوندن داستان باشه... جوری که وقتی برمی گردی با خودت بگی ببینم ادامه داستان چی می شه... 

راهش انگیزه یادگیری است

ببین امتحان ممتاحن و درس و مرس رو هم ول کنی باید با کنجکاوی بری دنبالش ... تنها اینجوری بازدهیت زیاد می شه... همین راهش اینه

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

انسانند

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

مدلسازی

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

علم انسان شناسی

واقعاً سر درآوردن از این حسهای آدمی و نظم بخشیدن به اونها هم علمیه به خودش

بالغ

افکار رکتر، صریحتر و بالغتر... قبول برخی واقعیات صریح بودن با خودت و دیگران و حتی نیازهای جسمی و روحیت و البته تفکیک مسائل و بالغ بودن... افکار بچگانه و دست و پاگیر رو کنار گذاشتن و حس و مسئولیت مردونه داشتن... مدیریت کردن زمان، مدیریت کردن کارها، .... داشتن تحمل، ....  مسئول بودن خودش حسی مردونگی است... عذر نیاوردن و متعهد بودن... در هر شرایطی... و در کنارش حفظ وقار و سنگینی

لذت یادگیری

ببین اینجا که هستم بخشی از زندگی من هست... فرض کن تو به هوش مصنوعی کنجکاوی، به کدوم قسمتهاش کنجکاوی؟ فرض کن تو به یادگیری ماشین و یا کاربردش در پردازش زبان کنجکاوی... به کدوم قسمتش کنجکاوی؟ اینکه چه جوری یک کامپیوتر می تونه یک جمله رو بفهمه؟ جمله چه چیز به همراه داره؟ جملات معمولاً یک سری اطلاعات رو همراه خودشون دارن... اینکه کامپیوتر چه جوری این اطلاعات رو استخراج می کنه؟ چه جوری می فهمدشون؟ چه جوری اسناد رو طبقه بندی می کنه؟ طبقه بندی شاید خیلی هیجان انگیز نباشه... هر چند مثلاً اینکه چه جوری اسناد مرتبط بازیابی می شن می تونه ایده های جالت و مفیدی بهت بده...

به هر حال از چی خوشت میاد؟ اومدی چی یاد بگیری؟ چه کنجکاوی داری؟ اینکه چه جوری شبکه های عصبی می تونن توی مسائل پردازش زبان استفاده بشن؟ شاید بد نباشه چون این شبکه ها به شکل مرموزی کار خیلی از هیوریستیک هار انجام می دن... 

این رو گفتم چون اگر انگیزه ای داشته باشی هم بهتر از این فرصت استفاده کردی، هم تزت انجام می شه، هم یک چیز جالب یاد می گیری... و یک برنامه و خط برای مطالعت می ده... اگر مطالعه از روی کنجکاوی باشه خیلی می تونه موثر باشه...

فهم عبارات و اصطلاحات

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

  • قانون بیز
  • احتمال شرطی
  • مدل generative (زایا)
  • likelihood
  • tf/idf
  • ....

وقتی معنی درست کلمات بیاد دستت، حالا می شه جملات و متونی که شامل این کلمات هست رو بهتر فهمید.... معمولاً درک ما به تدریج از این مفاهیم کاملتر و دقیق تر می شه... باید اونقدر ساده بشن که هر جا هر کاربردی داشتن راحت بتونی ربطش بدی... باید حتی بتونن ابزاری برای استدلال، تعمیم و خلق ایده جدید باشن. مثل دایره لغات... 

جزء یا کل

میشه یک مسئله رو با جزئیات دونست و یا با کلیات. اتفاقا هر دو لازم هستند مخصوصا کلیات چون نگهداری کلیات و بسط و استنتاج از روی کلیات آسونتر هست. و در موقع نیاز میشه از کلیات یا همون انتزاعات به جزئیات رسید. چیزی که مهم است اين است که از روی جزئیات کلیات غلطی رو برداشت نکنیم. يعنی ساده‌سازی مسئله خوبه اما نباید موجب برداشت اشتباه بشه. میشه هدف یک سری فرمول را به شکل کلی حتی با حذف برخی قسمتها متوجه شد و محدود کرد و بعد پله ای به سراغ اهداف جزئی تر رفت اما فقط نباید بد برداشت کرد. 

تفکیک مسائل

یکی از مشکلاتی که باعث میشه گیج بشیم و یا دچار احساسات متضاد بشیم اینه که مسائل رو تفکیک نمی‌کنیم. حوزه و تعریفشان رو مشخص نمی‌کنیم و در چارچوب خودشون نتیجه‌گیری نمیکنیم 

بهره‌وری در یادگیری

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

نمره و این چیزا رو فراموش کن 

یاد بگیر 

خلاصه کن و ابهامات ذهنیت رو برطرف کن

مردی

اما اینکه به فردی کمکی کرده باشم که شرایط خاصی داره... اینکه فقط به فکر سو استفاده نبودم ... باز هم یه حس مردی بهم می ده... و این هم لازمه مردیست

داشتن داستان و خاطره

کل چیزی که توی کلام اون فرد بود و متحولش کرده بود... این بود که در سن بیست یا سی سالگی چقدر قصه داره به بقیه بگه... چقدر خاطره داره که تعریف کنه؟... و گفت باید ترسها رو کنار بگذارم تا بعداً حرفی و قصه ای برای تعریف داشته باشم.... 

این چیزی بود که خود من هم قبلاً بهش رسیده بودم و این جا یکباره دیگه یادآوریش می کنم...

برای خودت

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

تو یک ایرانی هستی، زبانت فارسیه و طبیعتاً با یک شعر و آهنگ فارسی متاثر می شی و لذت می بری... اینکه حالا چارتا خارجی خوب یا بد بگن اصلاً مهم نیست.... جامعه تو از فیلمهای هندی خوشش نمیاد و اونرو زیاد باب طبع و شرایطش نمی دونه... چکار داری که چقدر فیلمهای هندی در افغانستان و پاکستان فروش داره... هر ملتی و هر شخصی باید فکر کنه خودش از چی خوشش می یاد و برای خودش کار کنه، برنامه بسازه، موقعیت درست کنه... در جمع خودش بگه و بخنده... بقیه هم دارن همین کار می کنن... و وقتی به فکر خودت و ملتت بودی خواه ناخواه مورد احترام و تحسین بقیه هم قرار خواهی گرفت

در لحظه

شاید یکی از مهمترین دستاوردهای عملی همین فکر و عمل در لحظه است... یعنی مهم نیست چی باشه بسپرش به لحظه.... درسته شاید یک استراتژی کلی باید توی ذهنت باشه ولی واقعا اینقدر فکر کردن و خوب و بد کردن نداره ... باید با لحظه جلو بری در لحظه حرف بزنی... بسپرش به لحظه ... این می تونه یک ایده خوب که بهره وری بالایی داره و سرعت خوبی داره و راحته برای رفتار تو در آینده و همیشه باشه... توی لحظه....

مواجهه

می خواستی چکار کنی؟ بیشتر پیداش کنی؟ بیشتر باهاش حرف بزنی؟ اون هم بلاخره یه جوری وقت و زندگیش رو می گذروند، چه در خواب چه پای حرف و .... 

غیر از اینکه مس مس می کردی انگار هزارسال هر کسی هست... حالا کوش؟ کجا رفت؟ پس فرقی نگذار! هیچی رو نمی شه پیشبینی کرد.... 

اما قضیه من مواجهه بود... اولی گام آشنایی، حاضر بودن و مواجهه با افراد است که تو الکی این رو برای خودت سخت کردی... گفتم اصلاً سختش نکن، فرار و مخفی کاری نباشه، بذار عادی همه چی پیش بره و اگر وقتش شد سلامی و صحبتی... این سلام و صحبت رو اینقدر بزرگ نکن؟ ندیدی آدمهایی که اتفاقاً توی این اولین گام سلام و صحبت چقدر راحت و سریع هستند؟؟ همینطور باید باشی