<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>نوشته های amir daaee</title><link>https://virgool.ir/feed/@amir.daaee</link><description>قراره بخشی از آینده رو من بسازم ? - مهندس مکانیک شریفم - متخصص ML و AI - دارم تلاش میکنم با هوش مصنوعی سرطان رو در انسان ها شکست بدم</description><language>fa</language><pubDate>2026-11-11 03:28:18</pubDate><image><url>https://files.virgool.ir/upload/users/15173/avatar/SipbdF.png</url><title>amir daaee</title><link>https://virgool.ir/@amir.daaee</link></image><item><title>یادگیری ماشین: Artificial Neural Network - قسمت دوم</title><link>https://virgool.ir/@amir.daaee/یادگیری-ماشین-artificial-neural-network-قسمت-دوم-q6enkxpidhs9</link><description> سلام. من امیر داعی هستم و با قسمت ششم از مجموعه هوش مصنوعی برای همه در خدمتتونم. تو قسمت قبل تا حد خوبی با کانسپت شبکه های عصبی آشنا شدیم. البته هنوز خیلی چیزا باید روشن بشه، مثلا چجوری با over-fit کنار بیایم، دیتا چجوری باید پیش پردازش بشن و ... ولی مهم تر از همه اینه که شبکه چجوری آموزش داده میشه!تو قسمت قبل گفتیم که پروسه یادگیری تو شبکه های عصبی در واقع پیدا کردن وزن های مناسب سیناپس هاست، جوری که خطای متناظر خروجی شبکه عصبی به ازای ورودی هامون کمترین مقدار بشه و با توجه به اینکه در اکثر شرایط تعداد وزن هامون خیلی بیشتر از data point های آموزشه پس یک جواب یکتا هم براشون نداریم (همون داستان over-fit و ...) و معادله ای که باید بهینه سازی (تا ازش وزن ها بدست بیان) بشه خیلی پیچیده اس، پس حل جبری و دقیق کلا دردسترس نیست. متد های بهینه سازی عددی اینجا به کار میان (مثل ژنتیک الگوریتم یا ژاکوب و ...) ولی از همه پر کاربرد تر متدیه به اسم Stochastic Gradient Descent یا به اختصار SGD. احتمالا همینجا برای حرفه ای ها سوال پیش بیاد که مثلا الگوریتم ژنتیک خیلی روش خوبیه و به جوابای نسبتا دقیقی میرسه در اکثر شرایط، پس چرا از SGD استفاده میشه. بله از ژنتیک هم گاها استفاده میشه (برای مثال متدی به نام NEAT برای بهینه سازی شبکه از همین الگوریتم استفاده میکنه) ولی به توجه به زیاد بودن تعداد وزن ها این الگوریتم ها خیلی خیلی خیلی طول میکشه که به جواب برسن و در عمل خیلی کاربردی نیستن.متد SGD به زبون ساده اول میاد بررسی میکنه هر کدوم از وزن ها در کدوم جهت تغییر کنن (زیاد یا کم شدن مقدارشون) موجب کم شدن خطای مدل میشن و هرکدوم رو در اون جهت به اندازه مشخصی (Learning Rate یا LR) تغییر میدن.اول از همه نیاز به یه مکانیزم (یا به اصطلاح دقیق تر تابع)ی داریم که بهمون مقدار خطا رو نشون بده. توابع خطا (Loss Function یا Fitness Function) های مختلفی برای ANN استفاده میشه ولی در اکثر قریب به اتفاق موارد از توابع زیر استفاده میشه:تابع Cross-entropy برای مسائل classification (قسمت قبل توضیح دادم که تعداد نورون ها و تابع فعالسازی لایه آخر چجوریه) کاربرد داره. اینکه این تابع دقیقا چجوری کار میکنه و چیکار میکنه باید وارد مباحث information theory بشیم که خیلی مفصله ولی برای بحثمون لازمه. سر همین توصیه میکنم مقاله ی واقعا ساده ای که لینکشو انتهای همین مطلب گذاشتم بخونید تا متوجه بشید?. به زبون ساده این تابع هرمقدار که احتمال کلاس واقعی و کلاس های دیگه توسط مدل ما به ترتیب کمتر و بیشتر پیشبینی بشه، مقدار خطا رو بیشتر میکنه:نمونه ای از تابع cross-entropy تابع Mean-Squared-Error یا به اختصار MSE که برای مسائل regression استفاده میشه و خطای خروجی مدل نسبت به مقدار واقعی (حاصل تفاضل این مقادیر) رو به توان ۲ میرسونه و برای تمام data-point ها میانگین اونا رو به عنوان مقدار خطا گزارش میکنه. هر مقدار هم که خطا بزرگ تر باشه به دلیل توان ۲ رسیدنشون،تاثیر بیشتری در خطای نهایی داره.ممکنه بسته به نوع مسئله از توابع دیگه ای استفاده بشه از جمله MAE ،hing و ... که در این مرحله صرفا پیچیدگی موضوع رو بیشتر میکنن پس فعلا باهاشون کاری نداریم. برای شروع پروسه آموزش با SGD اول مقدار همه وزن ها رو به صورت رندوم میذاریم (البته متد هایی امروزه استفاده میشه که ذاتا رندوم هستن ولی یه سری قواعدی دارن که یادگیری رو راحت تر و سریعتر میکنن مثل lecun یا glorot).حالا اینکه چجوری باید بفهمیم به ازای تغییر در چه جهتی روی وزن ها مقدار خطای مدل کمتر میشه، وارد مبحث جبر خطی میشه. گرادیان در واقع بیانگر مقدار تغییر تابع به ازای هرکدوم از ابعاد تابع هست و این گرادیان رو به ازای وزن ها به صورت عددی در پروسه یادگیری محاسبه میکنیم. جهتی که گرادیان بیشترین مقدار منفی رو داره، جهتی هست که تابع خطا رو به بیشترین مقدار کم میکنه. اینکه این گرادیان چجوری باید محاسبه بشه هم طولانیه و هم اینجا نمیشه راحت ریاضی نوشت (مثل لاتکس) و واقعا معذورم از توضیح ریاضیاتیش؛ ولی یه مقاله اینجا هست که میتونید خودتون بخونید (راحت توضیح داده)?.اون فلش ها بیانگر جهت منفی ترین گرادیان هستنحالا میدونیم تغییر هر وزن در کدوم جهت، چقد در مقدار خطا موثره و مقدار وزن ها رو به مقدار ثابتی به اسم LR که بالاتر گفتم تغییر میدیم و کل این پروسه رو اینقد تکرار میکنیم که تغییرات در وزن تاثیری در کاهش خطا نشون ندن یا گرادیان وزن ها غیر منفی بشه کلا.سوالی که پیش میاد اینه که ممکنه در local minima گیر کنیم. مثلا در شکل بالا هدف ایده آلمون رسیدن به اون نقطه طلاییه اس، ولی میبینید وقتی به اون نقاط سبز میرسیم رسما گرادیان صفر یا حداقل غیر منفی میشه و در هر جهتی حرکت کنیم دوباره برمیگردیم به همون نقاط سبز.اولا چون تعداد متغیر هامون خیلی بیشتره از تعداد data-point ها، پس رسیدن به اون نقطه طلاییه واقعا غیر ممکنه چون فضای بهینه سازیمون ابعادش خیلییی بالاس و خیلی هم local minima داره (که local minima هم میتونه تو over-fit خودشو نشون بده و هم کلا خطای دیتا آموزش هم اونقدری که میخوایم کم نشه)، ولی تلاش میکنیم که حداقل در local minimaیی گیر کنیم که مقدار خطاش زیاد نباشه و بتونه بخوبی هم تعمیم بده.چیکار کنیم که local minima کمتر توی حاصل مدلمون تاثیر بذاره؟ چجوری از over-fit جلوگیری کنیم؟ این دیگه باشه برای هفته آینده :) برای نوشتن بخش بعدی نیاز دارم  بدونم این مطلب چقدر برای مخاطبان قابل فهم  بوده و چه جاهایی گنگ بوده.  خوشحال میشم به من فیدبک بدید (اعم از خوب و  بد). آی دی تلگرام: @amir_daaee منتظر مطالب بعدی من باشید...قسمت پیشین: Artificial Neural Network - قسمت اول</description><category>amir daaee</category><author>amir daaee</author><pubDate>Fri, 21 Sep 2018 11:44:10 +0430</pubDate></item><item><title>Artificial Neural Network - قسمت اول</title><link>https://virgool.ir/dataio/یادگیری-ماشین-artificial-neural-network-قسمت-اول-ni4h6zqrhvjk</link><description> سلام. من امیر داعی هستم و با قسمت پنجم از مجموعه هوش مصنوعی برای همه در خدمتتونم.از این قسمت کم کم وارد بحث اصلیمون میشیم. شبکه های عصبی مصنوعی یا به اختصار ANN، در کلاسیک ترین مفهوم یکی از متد های supervised learning هستن؛ البته در کاربرد های پیشرفته تر برای مدلسازی و حل مسائل پیشرفته تری (مثل یادگیری تقویتی و مدل های generative) هم استفاده میشن که در آینده بهشون میپردازیم.همونجور که در قسمت های قبلی گفتم، مسائل supervised learning مسائلی هستن که ما برای هر data point یک label یا target value هم داریم و با دادن این data point ها به مدل و مقایسه خطای خروجی با مقداری که توقع داریم، مدل رو بهینه سازی میکنیم تا با کمترین خطا بتونه خروجی مدنظر ما رو بده. در حال حاضر قوی ترین متد supervised learning مخصوصا برای مسائلی با حجم زیاد دیتا و پیچیده با روابط غیرخطی میان متغیر ها ANN است که در بازدهی و قابلیت generalization با قاطعیت بقیه متد ها رو شکست داده.همچنین یه سری معماری خاص ANN هم طراحی شده که به طور ویژه برای داده هایی که محلیت مختصاتی (positional locality) مثل عکس یا محلیت زمانی مثل سری های زمانی دارن استفاده میشن و بازدهی خارق العاده ای روی این نوع مسائل دارن. همچین انعطاف پذیریی در متد های کلاسیک ML بسیار کم بوده و بازدهی کمی داشتند.البته متاسفانه هیچ چیز تو دنیا ایده آل مطلق نیست و ANN هم مشکلاتی داره:سختی آموزش دادن شبکه های عصبی: آموزش دادن شبکه های عصبی و بهینه سازی اون ها کار نسبتا سختی هست. مخصوصا متد های آموزش معمولی که برای این کار استفاده میشن با معضلی با عنوان vanishing gradient روبرو هستن که پروسه یادگیری رو خیلی زمان بر و کم بازده میکنه (مخصوصا با افزایش ظرفیت ANN). البته با متد های جدیدی که معرفی شده اند (هم تو معماری ANN و هم تو پروسه بهینه سازی) تا حد خوبی این مشکل قابل رفع است.ذات black-box: اینکه یه شبکه عصبی چجوری به یه نتیجه خاص میرسه یا یه ورودی رو در یک طبقه خاص قرار میده و ... فهمیدنش خیلی ممکن نیست. در واقع نمیتونیم بفهمیم چجوری کار میکنه، فقط میفهمیم کار میکنه و این میتونه تو بعضی شرایط معضل بزرگی باشه. البته تو بعضی از کاربرد های خاص، متد هایی ابداع شدن که تا حدی نشون میدن ANN بر اساس کدوم بخش از اطلاعات ورودی به نتیجه خاصی رسیده ولی هنوز غالبا مجبوریم به صورت black-box باهاشون برخورد کنیم.حالا شبکه های عصبی چجوری کار میکنن و چجوری اینقد خوبن؟شبکه عصبی از لایه هایی از نورون تشکیل شده که هر نورون توی لایه، بوسیله سیناپس به نورون های لایه بعد وصل میشه. در شکل زیر هر دایره یک نورون و هر خط یک سیناپس است:نمونه ای از شبکه های عصبی مصنوعی لایه های ANN به سه بخش hidden ,input و output تقسیم میشن. در نورون های لایه input ،مقادیر کمی feature های data-point ورودی قرار میگیره. برای مثال در مسئله ای فرضی مانند طبقه بندی گل بر اساس طول و عرض گلبرگ و تعداد گلبرگ، برای گرفتن خروجی از هر ورودی، در نورون اول لایه ورودی مقدار عددی طول و در نورون دوم مقدار عددی عرض گلبرگ و در نورون سوم تعداد گلبرگ ها قرار میگیره. پس تعداد نورون های لایه input برابر تعداد feature های data-point ها است. مقدار هر نورون به وسیله سیناپس به نورون های لایه بعد که لایه hidden است میرن و به هر سیناپس مقدار ثابتی به عنوان وزن اختصاص داده شده. مقدار هر نورون لایه ورودی در این وزن ضرب شده و به عنوان مقدار سیناپس به نورون لایه بعد منتقل میشه. مثل در تصویر بالا بین لایه input و لایه hidden اول، ۱۲ سیناپس وجود داره که هر سیناپس وزن مختص خودش رو داره.لایه های hidden، جایی هست که پردازش اصلی روی دیتا ورودی صورت میگیره و ورودی های مدل با یک تابع غیرخطی پیچیده از فضای ورودی به فضای خروجی میرن ( y=f(x)) و در اصطلاح کلاسیک (مخصوصا در مدل های قدیمی SVM) به اون kernel میگن. این لایه ها به هر تعداد میتونن باشن و وقتی بیشتر از تقریبا ۳ لایه باشن به این مدل، مدل یادگیری عمیق (Deep Learning) یا شبکه عصبی عمیق (Deep Neural Network) میگن. همچنین تعداد نورون های هر لایه هم دلخواهه ولی طبق تجربه من اکثرا (نه همیشه) بیشتر از ۱.۵ برابر تعداد نورون های input هستن. با افزایش تعداد لایه ها یا تعداد نورون های هر لایه hidden، ظرفیت مدل ما بیشتر میشه و میتونه مسائل پیچیده تری رو مدل کنه ولی ممکنه موجب بیشتر شدن ریسک over-fit بشه. فهمیدن اینکه چه تعداد لایه و نورون برای یه مسئله مناسبه روش معین و مشخصی نداره و بیشتر به وسیله آزمایش و خطا برای هر مسئله به دست میاد. در نورون های لایه hidden،‌ مقادیر سیناپس های ورودی به هر نورون با هم جمع میشن و به عنوان ورودی وارد یک تابع غیرخطی (تابع فعالسازی یا activation function) از پیش تعیین شده میشن و مقدار خروجی این تابع رو به عنوان مقدار فعالیت نورون در نظر میگیریم. لیستی از توابع معمول و کاربرد هاشونو در شکل زیر میبینید:امروزه در لایه hidden اکثرا از ReLU یا زیرمجموعه های اون به عنوان activation function استفاده میشه (دلیلشو بعدا بیشتر توضیح میدم ولی به صورت خلاصه آموزش شبکه عصبی رو آسون تر میکنن). حالا مقدار فعالیت هر نورون دوباره به وسیله سیناپس های وزن دار در یک مقدار ثابت که همون وزن است ضرب میشه و به لایه بعد منتقل میشه و این پروسه تا لایه output ادامه داره.در لایه output هم مقدار فعالیت نورون مثل لایه های hidden محاسبه میشه و مقدار فعالیت هر نورون لایه output در حقیقت میشه خروجی ما. در بخش قبل به دو نوع اصلی از مسائل supervised learning اشاره کردیم:مسائل regression: در این نوع مسائل توقع یک مقدار عددی به عنوان خروجی داریم و در لایه output صرفا یک نورون داریم و تابع فعال سازی اون رو هم Linear قرار میدیم.مسائل classification: ابعاد فضای خروجی مسائل classification برابر تعداد کلاس های اون مسئله اس و مجموع مقادیر اون هم همیشه ۱ است. مقدار هر بعد خروجی احتمال قرار گرفتن ورودی در اون دسته رو نسبت به بقیه دسته ها نشون میده. مثلا یک سیستم که میتونه تصاویر اسب و گربه و شتر رو دسته بندی کنه در خروجی ۳ نورون (بعد) داره که مجموع مقدار فعالیت اون ها به ۱ میرسه و به ازای هر ورودی، بعدی که بیشترین مقدار رو داره، class پیشبینی شده توسط سیستم است. برای مثال ممکنه خروجی این سیستم برای ابعاد اسب و گربه و شتر به ترتیب ۰.۲ - ۰.۷ - ۰.۱ باشه. در اینصورت سیستم تصویر ورودی رو به عنوان گربه تشخیص داده اون هم به احتمال ۷۰درصد. در مسائل classification تعداد نورون های لایه output برابر تعداد کلاس های اون مسئله و تابع فعالسازی sigmoid یا softmax هستند (تفاوت کاربردشونو بعدا میگم)حالا با همچین پروسه ای چجوری واقعا میشه مسائل خیلی پیچیده مدل بشن؟ این برمیگرده به قضیه ای به عنوان universal approximation theorem که باز کردنش کاملا از حوصله این بحث و البته حوصله خودم و شما خارجه و کسی که علاقه داره میتونه تو وب درموردش بیشتر سرچ کنه. به راه دیگه اش هم اینه یه کاغذ خودکار بردارید و یه شبکه عصبی خیلی کوچیک مثلا با ۴ نورون input و دولایه hidden با ۶ نورون رسم کنید و خروجی اون رو برای متغیر های پارامتری a-d به عنوان مقادیر نورون های ورودی با وزن ۱ برای تمام سیناپس ها حساب کنید و ببینید به چه تابع عجیب غریبی در خروجی میرسید یا به عبارتی این شبکه عصبی کوچیک چه تابع پیچیده ای رو میتونه مدلسازی کنه?? (کسی این کار رو کرد برای من بفرسته تا با اسم خودش برای بقیه هم منتشر کنم).در توضیحات بالا همه چیز معلوم هستن به جز ... wait for it ... وزن های سیناپس ها ✨?✨. در واقع انتخاب مقادیر صحیح برای وزن هر سیناپس همون پروسه آموزش دادنه و البته کار سختیه، مثلا تو عکس اول توی همین مقاله یک شبکه عصبی خیلی کوچیک میبینید ولی حدود ۳۲ سیناپس داره و باید ۳۲ عدد رو که شدیدا به هم وابسته هستن رو جوری تنظیم کنیم که مدل ما برای تعداد زیادی data-point کمترین مقدار خطا رو در خروجی بده یا به عبارت دیگه مسئله بهینه سازی با ۳۲ متغیر رو حل کنیم. به متدی که در اکثر قریب به اتفاق موارد برای این بهینه استفاده میشه، Stochastic Gradient Descent یا به اختصار SGD گفته میشه. جزییات پروسه آموزش و SGD بمونه برای هفته آینده...برای نوشتن بخش بعدی نیاز دارم  بدونم این مطلب چقدر برای مخاطبان قابل فهم بوده و چه جاهایی گنگ بوده.  خوشحال میشم به من فیدبک بدید (اعم از خوب و بد). آی دی تلگرام: @amir_daaeeمنتظر مطالب بعدی من باشید...قسمت پیشین: Supervised Learning - قسمت دومقسمت بعدی: Artificial Neural Network - قسمت دوم</description><category>amir daaee</category><author>amir daaee</author><pubDate>Fri, 07 Sep 2018 20:44:48 +0430</pubDate></item><item><title>Supervised Learning - قسمت دوم</title><link>https://virgool.ir/dataio/یادگیری-ماشین-supervised-learning-قسمت-دوم-mv0jl6e4u9ce</link><description>سلام. من امیر داعی هستم و با قسمت چهارم از مجموعه هوش مصنوعی برای همه در خدمتتونم.امروز میخوام درمورد مبحث مهمی به نام generalization در یادگیری ماشین صحبت کنم. generalization یا توانایی تعمیم دادن به معنی اینه که سیستم یادگیری ماشین بتونه مواردی رو که یادگرفته، برای نمونه های جدید و از قبل دیده نشده استفاده کنه و بتونه اون ها رو به خوبی دسته بندی کنه. در بعضی شرایط یک سیستم ML ممکنه اینقدر ضعیف باشه که حتی داده های train رو هم نتونه به خوبی دسته بندی کنه (نمونه های دیده نشده که هیچ) که به این وضعیت under-fit گفته میشه و در بعضی شرایط دیگه ممکنه سیستم به قدری قوی باشه که داده های train رو به صورت کامل در حافظه اش ضبط کنه و بر روی اون ها دقت خروجی خیلی خوبی (مثلا دقت ۱۰۰درصد) بده، ولی برای نمونه های جدید نمیتونه دقت خوبی رو نشون بده و به عبارتی توانایی تعمیم نداره که به این شرایط over-fit گفته میشه.منظورم از قوی بودن یک سیستم ML، پتانسیل اون برای یاد گرفتن سیستم های پیچیده تر هست و در اصطلاح فنی به اون ظرفیت یا capacity گفته میشه. هر الگوریتم یادگیری ماشین برای افزایش یا کاهش ظرفیت، یک روند مخصوص به خودش رو داره. مثلا در ANN با افزایش تعداد نورون ها و لایه های پنهان میشه ظرفیت رو افزایش داد و بالعکس (در آینده میگم اینا چی هستن، صبر داشته باشید?). یک مثلا ساده در مورد ظرفیت و over/under fit رو در متد برازش (قسمت قبل یه اشاره ساده کردم بهش) توضیح میدم. در برازش ظرفیت بر اساس درجه تابعی که نمودار رو بهش فیت میکنیم تعیین میشه. مثلا یک خط ساده، تابع با درجه ۱ رو به شکل ax+b و یک نمودار سهمی، یک تابع با درجه دو به شکل ax^2+bx+c رو برای برازش میطلبه. در این توابع با پیدا کردن مقادیر مناسب برای a,b,c باید نمودار رو فیت کنیم که تعداد این متغیر ها برابر درجه تابع+۱ است.حالا فرض کنید نموداری که میخوایم فیت کنیم، یک سیستم با درجه ۲ هست و فقط ۳ نقطه از اون رو به عنوان نقاط train داریم. با تعیین درجه ۲ به عنوان درجه تابع برازش، ۳ متغیر مجهول برای فیت کردن باید تعیین بشن (a,b,c) و با داشتن ۳ نقطه معلوم این معادله یک جواب یکتا داره (ریاضی اول دبیرستان)  و نمودار به خوبی فیت میشه. اگه ظرفیت تابع برازش رو کم کنیم و درجه تابع برازش رو ۱ انتخاب کنیم چی؟ ۲ مجهول و ۳ نقطه معلوم داریم: پاسخ دقیقی برای این معادله نداریم و مقادیر متغیر ها به صورت تقریبی به دست میاد که برای نقاط آموزش و هم سایر نقاط سهمی خطای زیادی داره. این حالت under-fit است. حالا اگه ظرفیت رو افزایش بدیم و درجه تابع رو مثلا ۳ بگیریم چطور؟ با داشتن ۴ مجهول در تابع و ۳ نقطه معلوم از نمودار، بینهایت پاسخ برای مجهول ها داریم که همگی ۳ نقطه train را به خوبی پوشش میدن (با خطای ۰) ولی فقط یکی از این پاسخ هاست که نمودار سهمی اصلی را به درستی پوشش میده و بقیه برای بقیه نقاط سهمی خطای زیادی دارن که به این شرایط over-fit میگیم.  پیدا کردن روی دادن over/under fit همیشه به این سادگی نیست. اگه تعداد نقاطی که برای train داریم کمتر یا بیشتر از درجه سیستم بود چی؟ در توابع دنیای واقعی تقریبا هیچ وقت ما نمیدونیم درجه سیستم چند هست و تعداد پارامتر های ورودی تابع تقریبا هیچ وقت ۱ نیست (توابع از ۲ بعد به بالا هستند). همینطور تو الگوریتم های یادگیری ماشین تنظیم کردن درجه تابع برای فیت کردن هم به این واضحی نیست و مثلا در یک DNN این که بگیم تابعی که فیت شده از چه درجه ای است کار بسیار سختیه. همینطور در کاربرد های واقعی همیشه در اندازه گیری های ما در data point های train مقداری نویز وجود داره که نمیذاره هیچوقت سیستم ML به دقت ۱۰۰٪ برسه (در مناسب ترین ظرفیت و بهترین شرایط) و با کاهش یا افزایش ظرفیت صرفا دقت در دیتا دیده نشده، از این مقدار بهینه کمتر میشه.عمومی ترین راهی که برای شناسایی under/over fit در پروسه طراحی سیستم ML انجام میشه، تقسیم بندی دیتا هایی که داریم به دو بخش train و test هست. مثلا ۸۰-۹۰ درصد دیتا پوینت هایی که داریم رو به عنوان train بقیه رو به عنوان test انتخاب میکنیم. پروسه یادگیری در ML اکثرا به صورت تکرار یک حلقه هست که با تکرار این حلقه (epoch) خطای سیستم کمتر و کمتر میشه تا به مقدار مدنظر برسه. در هر epoch فقط از دیتا train برای آموزش استفاده میکنیم و در انتهای epoch مقدار خطای سیستم ML رو برای دیتا test محاسبه میکنیم. با مقایسه مقدار خطای train و test و روندی که این خطا در حال تغییر هست (به ازای epochها) میشه over/under fit رو شناسایی کرد. اگه کاهش خطا با افزایش epochها برای هردو صفر یا خیلی کم باشد یا دارای نوسان بسیار زیاد باشد، در این حالت under-fit رخ داده است و اگر مقدار خطای سیستم برای train در حال کاهش و برای test درحال افزایش باشد، در اینصورت over-fit رخ داده است. نمونه ای از نمودار یادگیری در شرایط over-fit رو در شکل زیر میبینید: راه کار عمومی برای حل مشکل under-fit افزایش ظرفیت ML هست ولی این افزایش ظرفیت برای رسیدن به دقت مدنظر ممکنه به over-fit بیانجامه و برای حل مشکل over-fit باید دوباره ظرفیت رو کم کرد (منطقی نیست)‌ یا تعداد data point ها رو افزایش داد و با افزایش تعداد data pointها ممکنه با ثابت موندن ظرفیت شرایط under-fit دوباره رخ بده و این داستان ادامه دارد ?. پس تعیین ظرفیت و تعداد data-point های مورد نیاز، در یک پروسه  به صورت چرخه به دست میاد و برای توابع و اهداف مختلف خیلی متفاوته و واقعا هم کار سختیه.بیشتر مشکل توسط over-fit به وجود میاد (تا under-fit) چون با حل کردن مسئله under-fit دقت افزایش پیدا میکنه ولی در پروسه افزایش دقت over-fit رخ میده و نمیذاره از یه حدی بیشتر دقت به دست بیاریم (مگر تعداد data point ها رو زیاد کینم). هر الگوریتم ML البته یک ترفندی مخصوص به خودش رو برای کاهش اثر over-fit داره. یک روش early stopping است که در پروسه training نمودار train,test رو رصد میکنیم و جایی که خطای test به جای کاهش شروع به افزایش کرد پروسه آموزش رو متوقف میکنیم (شکل بالا) و از خروجی اون به عنوان سیستم نهایی استفاده میکنیم. در ANN متد های دیگه ای مثل dropout, noise layer, L1/L2 regularization و ... هم برای کاهش اثر over-fit وجود دارن که در آینده بهشون میپردازیم.در قسمت بعدی وارد حوزه شبکه های عصبی مصنوعی میشیم.خوشحال میشم به من فیدبک بدید (اعم از خوب و بد) تا بتونم مطالب رو به صورت مفید تری ارائه بدم. آی دی تلگرام: @amir_daaeeمنتظر مطالب بعدی من باشید...قسمت بعدی: Artificial Neural Network - قسمت اولقسمت پیشین: Supervised Learning - قسمت اول</description><category>amir daaee</category><author>amir daaee</author><pubDate>Fri, 17 Aug 2018 01:40:36 +0430</pubDate></item><item><title>Supervised Learning - قسمت اول</title><link>https://virgool.ir/dataio/یادگیری-ماشین-supervised-learning-قسمت-اول-qpl115z7czos</link><description> .سلام. من امیر داعی هستم و با قسمت سوم از مجموعه هوش مصنوعی برای همه در خدمتتونمبا توجه به سوالاتی که درمورد بخش قبل از جانب برخی دوستان مطرح شد، ظاهرا در بعضی مطالب دچار کژفهمی شده یا مطلب هنوز خیلی گنگ هست. بخشی از مشکل به خاطر اینه که من نتونستم موضوع را شفاف شرح بدم و البته مشکل بزرگتر اینه که مباحث یادگیری ماشین و هوش مصنوعی به اشکال مختلف و حتی همپوشان‌ در شاخه های مختلف تقسیم بندی میشه و در حیطه هوش مصنوعی حتی بعضی مباحث در هیچ کدوم از شاخه های کلاسیک نمیگنجند?. به همین دلیل هم نگاه کلی اولیه سوالات بیشتر و بیشتری ایجاد میکنه و برای پاسخ دادن بهشون باید به ترتیب وارد جزییات هر بخش بشیم.از این قسمت تا ۳ یا ۴ قسمت آینده به موضوع Supervised Learning میپردازیم که در بخش قبل معرفی کردیمش و یکی از سه تا زیر شاخه یادگیری ماشین کلاسیک هست تا در این شاخه از یادگیری ماشین به درک جامعی برسیم. البته در موضوع شبکه های عصبی یا به اصطلاح بعضی هوش مصنوعی یا به اصطلاح بعضی دیگه یادگیری عمیق در این مدت خیلی وارد جزییات نمیشیم چون یادگیری ماشین و شبکه های عصبی هرکدوم به صورت مستقل قابل تعریف هستن و هرکدوم دنیایی از مطالب رو در جزییات دارند و البته آشنایی با یادگیری ماشین پیش نیاز یادگرفتن هوش مصنوعی هست.قبل از شروع این رو هم بگم که این موضوعات شدیدا نیازمند دانش ریاضیات هستن، ولی برای کسانی که به دنبال کار تئوریک هستن و گاها میخوان مدل های جدید ارائه بدن که البته مخاطب مطالب من همچین افراد متخصصی نیستن?. برای افراد خارج این دسته به نظر من دانش ریاضیات درحد دبیرستان هم در بیشتر جا ها کفایت میکنه ولی البته با داشتن دانش ریاضی بیشتر، توانایی شخص برای پیاده کردن یک مسئله یادگیری ماشین یا هوش مصنوعی به مراتب افزایش پیدا میکنه و شخص میتونه مدل و مسائل را بسیار بهتر درک کنه. با توجه به اینکه آموزش من برای همه افراد هست و ممکنه مثلا کسی از رشته هنر هم جزو مخاطبان باشه، من مسائل رو حتی راحت تر شرح میدم تا با دانش ریاضی کمتر نیز قابل یادگیری باشند ولی برای آموزش جزییات سطح بالاتر و پیچیده تر ناچار به استفاده از ریاضیات پیچیده تر هستیم.نکته ی دیگه ای که هست اینه که من اعتقادی به فارسی سازی کلمات تخصصی ندارم، چون این کار میتونه موجب گیج کننده شدن متن بشه و کسی که دنبال مطالعه بیشتر از سورس های خارجی میره رو با مشکل رو به رو میکنه، بنابراین من از کلمات اصلی برای هر مفهوم استفاده میکنم و فقط موقع معرفی اگر معادل فارسی داشت اون رو بیان میکنم. در ضمن کلمات خلاصه شده اصطلاحات مختلف رو هم خوبه یاد بگیریم، چون در متن من زیاد استفاده میکنم تا حجم مطالب کمتر بشه. به بعضی از این خلاصه ها در قسمت قبل اشاره کردم و برای مفاهیم جدید هم موقع معرفی اشاره خواهم کرد. از جمله کلمات کاربردی و خلاصه شون مخصوصا برای این قسمت: machine learning:ML - Artificial Intelligence:AI - Artificial Neural Networks:ANN - Deep Neural Networks:DNNبریم سراغ Supervised Learning یا یادگیری با نظارت. تعریف خیلی ساده ریاضی این مفهوم یا تعریفش به زبان فارسی سخت!!! یه جورایی میشه همون curve fitting یا برازش منحنی (نگران نباشید بحثو زیاد ریاضیاتی نمیکنم?). تابع y=f(x) رو درنظر بگیرید (باور کنید زیاد نمیریم سراغ ریاضیات). این تابع به ازای گرفتن هر مقدار ورودی x، یک مقدار خروجی y ارائه میده. مقدار خروجی هم خودش میتونه پیوسته یا گسسته باشه. برای مثال یک تابع که با گرفتن مقدار ولتاژ خروجی از سنسور دما به عنوان ورودی، با عملیات ریاضی مقدار ولتاژ را به دما بر حسب سانتیگراد به عنوان خروجی میده یک تابع با خروجی پیوسته است (زیرا هر مقدار عددی رو به عنوان خروجی میتواند بده) و یک تابع دیگه که با گرفتن مقدار ولتاژ خروجی از سنسور دما به عنوان ورودی، صرفا یکی از اعداد ۱ یا ۲ یا ۳ را به عنوان خروجی میده که هر یک به ترتیب بیانگر سرد، معتدل و گرم بودن محیط میباشد یک تابع با خروجی گسسته است (زیرا هر مقداری را در خروجی نمیده).فرض کنید برای کاری، تابع f برای ما ناشناخته است و قصد ما پیدا کردن اونه. مثلا تابع بین کرنش (ورودی تابع) و تنش (خروجی تابع) یک ماده ناشناخته یا رابطه بین جریان (ورودی تابع) و ولتاژ (خروجی تابع) در یک مقاومت ناشناخته یا رابطه بین مدت زمان راه افتادن کار مشتریان و مقدار رضایت آن ها. در این شرایط میتونیم با آزمایش کردن چند ورودی دلخواه، مقدار تابع را برای تعداد محدودی از ورودی ها پیدا کنیم (کاری که بچه های فنی تو آزمایشگاه دانشگاه زیاد انجام میدن). در این موارد یکی از روش های کلاسیک پیدا کردن تابع برازش است که با داشتن ورودی و خروجی به ازای تعدادی نقطه آزمایش شده، میشه تابع رو پیدا کرد و مقدار خروجی را به ازای هر مقدار ورودی دلخواه بدون نیاز به آزمایش مجدد به دست اورد. البته برازش محدودیت های بسیار زیادی داره،‌از جمله اینکه باید بدونیم تابع از چه خانواده ای هست (مبحث ریاضی) و توابع اگر پیچیده یا به اصطلاح زیاد غیر خطی باشند، این روش ها اصلا بازدهی ندارند.مثلا در شکل زیر نقاط قرمز رنگ، نقاطی هستند که به ازای تعداد محدود ورودی (راستای افقی نمودار)، خروجی تابع (راستای عمودی) به دست آمده است و منحنی آبی رنگ نیز، تابع پیوسته برازش شده آن است: تابعی که معرفی کردیم خیلی ساده است، درحالی که در عمل توابع مورد استفاده که نیاز هست رابطه ریاضی آن کشف بشه خیلی پیچیده ترن. تابع معرفی شده صرفا یک ورودی داشت ولی توابع درعمل تعداد خیلی بیشتری ورودی میگیرند و به ازای آن ها یک خروجی میدهند. مثلا تابعی رو فرض کنید که با گرفتن دما، سرعت باد، شاخص UV و ... در ۱۰۰ نقطه متفاوت از شهر (حداقل ۳۰۰ ورودی)، مقدار بارندگی روز آینده را پیشبینی کرده و به عنوان خروجی بده و یا تابعی که با گرفتن مقدار تک تک پیکسل های یک تصویر (مثلا ۱۰۰۰۰ پیکسل) در خروجی بگه این تصویر یک سگ است یا گربه یا اسب. این نوع از توابع برای یافتن به وسیله روش های کلاسیک برازش خیلی خیلی پیچیده هستن و عملا یافتن اون ها غیر ممکنه.در اینجا یادگیری ماشین مثل یک قهرمان وارد رینگ میشه?. مثال هایی که در بالا زده شد، از سری مسائل supervised learning هستند که یکی از زیر شاخه های ML است. متد های جدید ML از جمله ANN میتونن پیچیده ترین توابع رو هم با استفاده از تعداد محدود آزمایش کشف کنن یا به عبارتی اون ها رو مدلسازی کنن. البته اکثر متد های ML به سادگی یک تابع جبری رو به عنوان تابع به ما نمیدن، ولی یک شی از مدل در محیط برنامه نویسی تشکیل میدن که کار کرد همون تابع رو داره.یک مثال از مسائل supervised بخوام بگم، مثلا ۱۰۰۰ عکس از گربه دارید و ۱۰۰۰ عکس از اسب و ۱۰۰۰ عکس از سگ. هر عکس 128x128 پیکسل باشه میشه ۱۶۳۸۴ پیکسل در کل و هر پیکسل شامل سه عدد به عنوان مقادیر RGB هست. یعنی در آخر هرعکس برابر ۴۹۱۵۲ عدد به عنوان ورودی هست. در اصطلاح ML به هر یک از عکس ها یک data point و به هریک از ۴۹۱۵۲ عدد در هر تصویر feature و به اسب یا سگ یا گربه بودن هر عکس، label اون data point گفته میشه. حالا ما به الگوریتم ML تک تک data point ها و label های متناظرشونو میدیم و طی یک پروسه که اصطلاحا training گفته میشه، الگوریتم ما تابع رو مدل میکنه. از این به بعد هر عکس جدیدی که به عنوان ورودی تابع بدیم، تابع به صورت صحیح میگه این عکس از کدوم یکی از اون سه حیوانه. در supervised learning به مسائلی که خروجی اون گسسته باشه (مثل همین مثال)، مسئله classification یا طبقه بندی گفته میشه و به مسائلی که خروجی آن پیوسته است، regression گفته میشه. نمونه ای از مسائل regression، مثال مدل پیشبینی مقدار بارندگی در روز آینده بر اساس اطلاعات محیط کنونی است. برای مثال در ۱۰۰۰ روز گذشته (data point) اطلاعات محیطی از جمله دما، رطوبت و ... (feature) به همراه مقدار بارندگی روز آینده آن ها که مقداری پیوسته است (در مسائل regression برخلاف classification به خروجی تابع به ازای هر data point اصطلاحا target value گفته میشه) ثبت شده. حالا ما به الگوریتم ML تک تک data point ها و target value های متناظرشونو میدیم و با پروسه training تابع میان متغیر های ورودی و خروجی رو مدل میکنه و از این پس با دریافت اطلاعات جدید محیط، مقدار بارندگی را پیشبینی میکنه.در قسمت بعدی به الگوریتم های پیاده سازی ML خواهیم پرداخت.برای نوشتن بخش بعدی نیاز دارم بدونم این مطلب چقدر برای مخاطبان قابل فهم بوده و چه جاهایی گنگ بوده. خوشحال میشم به من فیدبک بدید (اعم از خوب و بد). آی دی تلگرام: @amir_daaeeمنتظر مطالب بعدی من باشید...قسمت بعدی: Supervised Learning - قسمت دومقسمت پیشین: بیگ دیتا؟ یادگیری ماشین؟ هوش مصنوعی؟</description><category>amir daaee</category><author>amir daaee</author><pubDate>Fri, 17 Aug 2018 01:33:23 +0430</pubDate></item><item><title>بیگ دیتا؟ یادگیری ماشین؟ هوش مصنوعی؟</title><link>https://virgool.ir/dataio/بیگ-دیتا-یادگیری-ماشین-هوش-مصنوعی-ezb2rhbgpyth</link><description>برای شروع به نظرم خوبه مفاهیم رو از هم تفکیک کنیم و اصلا بفهمیم این تکنولوژی ها دقیقا چی هستن.از بیگ دیتا شروع کنیم. به شکل واضحی بیگ دیتا به حجم زیادی از اطلاعات مشخص گفته میشه که میتونه از منابع مختلفی دریافت شده باشه و بیشتر کاربردش اینه که از حجم خیلی زیادی اطلاعات به ظاهر بی ارزش، نتایج ارزشمندی استخراج کنیم (مثل استخراج طلا از معدن خاکی). مثلا از اطلاعات رفتار هزاران مشتری یک سایت فروش آنلاین استفاده کنیم تا بفهمیم به کدوم مشتری چه محصولی رو پیشنهاد بدیم یا بتونیم پیشبینی کنیم در ماه آینده کدوم محصولات بیشتر متقاضی دارن. رابطه بین بیگ دیتا، یادگیری ماشین (Machine Learning یا ML) و هوش مصنوعی (Artificial Intelligence یا AI) چیه؟ یه جورایی بیگ دیتا حکم سوخت رو داره برای اکثر مسائل AI و ML، این الگوریتم ها با دریافت حجم زیاد دیتا آموزش داده میشن (درموردش جلوتر بیشتر توضیح میدم). هرچی هم حجم اطلاعات بیشتر باشه، نتایج بهتر و دقیقتری میگیریم (البته بعضی از الگوریتم های ML مثل یادگیری تقویتی (Reinforcement Learning یا RL) به صورت مستقیم از دیتا استفاده نمیکنن و تقریبا از این قاعده مستثنی هستن).خب حالا بریم سراغ یادگیری ماشین. یادگیری ماشین یا ML به خانواده ای از الگوریتم ها گفته میشه که با گرفتن اطلاعات، پترن های بین اون ها رو شناسایی میکنن (به این پروسه، یادگیری میگن) و نیاز نیست یک ناظر انسانی تک تک شرایط رو مشخص و پترن ها رو به صورت دستی برنامه نویسی کنه. برای مثال در مسائل شناسایی تصاویر، تقریبا غیرممکنه بتونیم برای تک تک پیکسل های یک عکس شروطی بنویسیم تا مثلا در هر عکسی بتونه گربه رو شناسایی کنه، چون برای اینکار شاید برحسب شرایط انواع عکس ها (نور، زاویه، فاصله و...) شروطی که باید نوشته بشه به میلیارد برسه و از توان انسان خارجه. ولی در این نوع مسائل الگوریتم های یادگیری ماشین بسیار عالی عمل میکنن: کافیه یه تعداد زیادی عکس از گربه بهشون داده بشه تا با اون ها آموزش داده بشن، از اون به بعد میتونن در هر عکسی گربه ها رو شناسایی کنن :-).مسائل ML به صورت کلاسیک به سه بخش تقسیم میشن (البته واقعا میشه دسته بندی های بیشتری رو در کاربرد های نوین تعریف کرد):یادگیری با نظارت یا supervised: مسائلی که هر ورودی یا دیتای آموزش یک label هم داشته باشه. مثلا تعداد زیادی عکس گربه داشته باشید با label گربه و تعداد دیگری عکس سگ با همین label و ... . حالا توقع ما اینه که سیستم ML بتونه با دیدن عکس جدید بتونه labelشو به درستی حدس بزنه که این گربه اس یا سگ و این کار رو با دریافت اطلاعات و label مربوطه انجام میده.یادگیری بدون نظارت یا unsupervised: برعکس حالت قبل اینجا برای اطلاعات label در دسترس نیست. مثلا تعداد خیلی زیادی عکس سگ و گربه داریم و این ها با هم قاطی شدن و چون تعدادشون زیاده نمیشه تک تک از هم جداشون کرد و label گذاشت. در این مسائل الگوریتم ML با گرفتن خود اطلاعات، برحسب شباهت و الگو های داخل اطلاعات اون ها رو جدا میکنن. البته این مبحث خیلی گسترده تر از این مثال هست و در آینده بیشتر درموردش توضیح میدم.یادگیری تقویتی یا RL: تو این مسائل، الگوریتم یادگیری ماشین با انجام عمل در محیط تعریف شده و آزمایش و خطا، یاد میگیره چجوری در محیط عمل کنه تا بیشترین امتیاز رو در بلندمدت کسب کنه. مثلا یک سیستم ML میتونه با خودش شروع کنه به شطرنج بازی کردن و استراتژی های مختلف رو کشف کنه یا یادگیره به صورت ایمن رانندگی کنه و ... . خود این الگوریتم ها دو دسته اصلی value iteration و policy iteration تقسیم میشن که در آینده بیشتر درموردشون صحبت میکنیم.مسائل یادگیری ماشین به وسیله الگوریتم های مختلفی قابل پیاده سازی هست که هرکدوم کاربرد و مزایا و معایب مختلفی دارن، مثل SVM، درخت تصمیم گیری، KNN و ...در آخر بریم سراغ هوش مصنوعی. حقیقتش اینه که من تعریف مشخصی براش پیدا نکردم و برای اینکه بتونیم دقیقتر و علمی تر صحبت کنیم، من شبکه های عصبی مصنوعی رو توضیح میدم. شبکه های عصبی مصنوعی یا Artificial Neural Network یا به اختصار ANN، الگوریتمی از انواع ML هست که با الهام گرفتن از روند پردازش اطلاعات در مغز موجودات زنده طراحی شده اند: نورون ها و سیناپس ها به صورت ریاضی مدلسازی شده و بعدش با اطلاعات ورودی آموزش داده میشن. فرق این الگوریتم با بقیه الگوریتم های ML چی هست که اینقدر مورد توجه قرار گرفته اند؟ ANN در مقایسه با سایر الگوریتم ها در شرایطی که اطلاعات زیاد در دسترس باشه، خیلیییییی بازده بالاتری داره و عملا متد های دیگه رو بلااستفاده کرده. همچنین مسائلی توسط ANN قابل پیاده سازی شدن هستند که توسط الگوریتم های دیگه ممکن نبودند و حتی خارج از حیطه ML هست: الگوریتم های مولد (اینکه بتونه آهنگ بسازه یا نقاشی کنه) و یا پردازش زبان طبیعی (که خارج از حیطه یادگیری ماشین کلاسیک هست) و ... . در شکل زیر، یک مدل از شبکه های عصبی رو مشاهده میکنید: در شکل زیر مقایسه بازده شبکه های عصبی و متد های کلاسیک رو مشاهده میکنید:  ممکنه اسم یادگیری عمیق یا deep learning رو هم شنیده باشید. این اصطلاح هم برای ANN به کار میره، در شرایطی که تعداد hidden layer ها (در شکل اول) زیاد باشه. با افزایش تعداد لایه ها، به صورت عمومی بازده شبکه های عصبی میتونه بیشتر بشه. درمورد نورون ها و سیناپس ها و لایه ها و ... خیلی صحبت خواهیم کرد و درواقع بحث اصلی ما هستند. برای یادگرفتن این مبحث، باید موضوعات بیشتری رو پوشش بدیم (مثل پیش پردازش اطلاعات، over/under fit و ...) و همچنین کاربرد های دیگری هستند که در این مطلب پوشش داده نشدند (مثل Bayesian neural network و ...) که در آینده روشون تمرکز خواهیم کرد.خوشحال میشم نظرات، مباحث و سوالاتتونو با من درمیون بذارید تا در قسمت بعد درموردشون صحبت کنیم. آی دی تلگرام: @amir_daaeeمنتظر مطالب بعدی من باشید...قسمت بعدی: Supervised Learning - قسمت اولقسمت پیشین: هوش مصنوعی برای همه</description><category>amir daaee</category><author>amir daaee</author><pubDate>Fri, 17 Aug 2018 00:11:48 +0430</pubDate></item><item><title>هوش مصنوعی برای همه</title><link>https://virgool.ir/dataio/هوش-مصنوعی-برای-همه-pcrhaxhebw4s</link><description>من امیر داعی هستم و میخوام از امروز درمورد هوش مصنوعی و یادگیری ماشین مطلب بذارم. مطالب من برای معرفی، آموزش و دادن ایده تو این زمینه هست.حتی اگه حوضه تحصیلی و کاریتون درحال حاضر زیاد ارتباطی به علوم کامپیوتر نداره، بازم مباحث هوش مصنوعی در آینده خیلی نزدیک یقینا به کارتون میاد. حتما میپرسید چرا! من خودم دانش آموخته مکانیک هستم و از زمان نوجوونی خیلی تجربیات علمی و فنی مختلف داشتم: نجوم، چندین زبان برنامه نویسی، روباتیک، مباحث اولیه علوم رایانه، فیزیک نوین، اقتصاد، دینامیک سیستم، الکترونیک و ...‍ . ولی با قاطعیت مهمترین تجربه علمی زندگی من از سال ۲۰۱۵ شروع شد، زمانی که یک سیستم هوش مصنوعی از شرکت دیپ مایند تونست در بازی GO با  قهرمان جهان چندین بار برنده بشه و به عبارتی اون رو لوله کنه! این بازی نسبت به شطرنج خیلی خیلی حالات بازی کردن بیشتری داره(تو اوردر ۱۰ به توان ۲۰) و برای الگوریتم های قدیمی تر(مثل بازی شطرنج) این بازی ابدا قابل پیاده سازی نبود. این زمان بود که من طبق معمول به خاطر کنجکاوی شروع به یادگرفتن این تکنولوژی کردم و عمیقا متوجه یه تفاوت با تجربیات گذشته شدم: این تکنولوژی همه جوانب زندگی رو میتونه شدیدا تغییر بده. درحالی که علوم و فناوری های دیگه صرفا در یک یا چند حوضه محدود میتونن فعالیت کنن، این تکنولوژی بالاتر از فناوری هایی که میشناسیم قرار میگیره و همه اون ها رو بازآفرینی میکنه. یک نکته هم از قلم نیوفته اینکه الان سیستم های هوش مصنوعی پیشرفته تر برای بازی GO طراحی شدن و برای تست کردنشون دیگه با انسان بازی نمیکنن، بلکه با ورژن قبلی خودشون مسابقه میدن تا بشه درمورد پیشرفتشون نظر داد(چون حتی حرفه ای ترین انسان تو همه بازی ها میبازن و نمیشه درمورد پیشرفت سیستم نظری داد). امروزه در خیلی از مسائل هوش مصنوعی قابلیتی به مراتب بیشتر از انسان ها دارند!زمان انقلاب صنعتی، انسان ها متوجه شدند که میشه به جای استفاده از زور بازو ماشین هایی بسازند و از زور اون ها استفاده کنند: هم قوی تر هستند و هم سریع تر، هم خستگی کمتری برای انسان داره و هم هزینه کمتری دارند و به این شکل یک انقلاب در زندگی انسان ها در همه جوانب رخ داد. ما به تازگی متوجه شدیم که میشه به جای فکر کردن این کار رو به ماشین سپرد! هم سریعتر هستن، هم قوی تر و هم ارزان تر. ما در آستانه یک انقلاب بزرگ هستیم، انقلاب هوش مصنوعی که زندگی همه ما رو تحت تاثیر قرار میده و به احتمال خیلی زیاد اکثر شغل هامون رو ازمون میگیره. این موجب نگرانی هست؟ نمیدونم، در واقع هیچکس نمیدونه. ما زیاد درمورد زندگی انسان بعد این رویداد نمیدونیم ولی یه احتمالاتی میدیم: ممکنه هوش مصنوعی موجب یک رکود و بیکاری خیلی سنگین در دنیا و بحران جهانی اقتصادی بشه. یا ممکنه با از بین رفتن یک سری شغل ها، شغل های جدید به وجود بیان(مثل رویداد بعد از انقلاب صنعتی). یا شایدم هوش مصنوعی خیلی قوی بشه و ما رو متضاد با منافعش ببینه و ما رو نابود کنه یا به بردگی بگیره (مثل فیلم ترمیناتور) و این نگرانی دانشمندان و افراد بزرگی از جمله ایلان ماسک هست. یا شاید با ما دوست باشه، اینجوری روبات های هوش مصنوعی کار میکنن و منابع استخراج و تولید میکنند و ما انسان ها بدون نیاز به کار کردن در بهشتی که برامون ساخته میشه زندگی میکنیم. درمورد پیشبینی که از توانایی هوش مصنوعی وجود داره بعدا زیاد صحبت میکنم.در صحبتی که با بعضی از دوستانم داشتم، خیلی ها معتقدند هوش مصنوعی در مواردی که نیاز به ابتکار و خلاقیت هست نمیتونه وارد بشه و انسان جای پای محکمی در این زمینه ها داره، ولی متاسفانه اصلا اینجوری نیست: هوش مصنوعی هایی با عنوان GANN ابداع شده اند که شاید حتی بهتر از انسان خلاقیت داشته باشند. الان هوش مصنوعی میتونه نقاشی بکشه، آهنگ بسازه و داستان بنویسه! درحال حاضر یک آلبوم موسیقی به اسم Genesis توسط یک هوش مصنوعی به اسم AIVA نوشته شده (حتما آهنگ هاشو گوش بدید). شاید در آینده نزدیک برای طراحی یک سکوی نفتی یا شبکه توزیع برق یا اختراع دارو دیگه نیازی به دانشمند، پزشک و مهندس نباشه و سیستم هایی مثل GANN این کار ها رو خیلی سریعتر، دقیقتر و ارزون تر انجام بدن.سخن آخر برای این مطلب این که، ما نمیدونیم در آینده چه چیزی توسط هوش مصنوعی قراره رقم میخوره، ولی میدونیم تا این لحظه این فناوری سرعت پیشرفت خیلی خیلی زیادی داشته، ما سال ۲۰۰۶ یاد گرفتیم چجوری هوش مصنوعی رو آموزش بدیم (با این که کانسپتش از زمان های دور وجود داشت) و سال ۲۰۱۲ فهمیدیم چجوری میشه ظرفیتشون رو به صورت بهینه زیاد کرد، ولی تو این مدت واقعا کم هوش مصنوعی در خیلی از امور تونسته انسان رو مغلوب کنه. کسی نمیتونه جلوی انقلاب هوش مصنوعی رو بگیره (و البته علتی هم نداره که بگیره) ولی میتونیم با یادگیری و فعالیت تو این حوضه (مثلا استارت اپ) آینده رو زودتر و اونجور که خودمون میخوایم بسازیم.خوشحال میشم نظرات و مباحثتونو با من درمیون بذارید. آی دی تلگرام: @amir_daaeeاین هم لینک آلبوم genesis: https://soundcloud.com/user-95265362/albumsمنتظر مطالب بعدی من باشید...قسمت بعدی: بیگ دیتا؟ یادگیری ماشین؟ هوش مصنوعی؟</description><category>amir daaee</category><author>amir daaee</author><pubDate>Fri, 17 Aug 2018 00:00:57 +0430</pubDate></item></channel></rss>