And after all I'm only ordinary man
3. هوش مصنوعی به زبان خیلی ساده: شبکه عصبی مصنوعی1
پیش گفتار
این مقاله در ادامه مقالات زیر می باشد.
قسمت اول «هوش مصنوعی به زبان خیلی ساده: یادگیری ماشین»
قسمت دوم «هوش مصنوعی به زبان خیلی ساده: شناسایی الگو»
در این قسمت قرار هست با شبکه عصبی مصنوعی آشنا بشیم. به جرات میشه گفت شبکه های عصبی، یکی از مهم ترین روش ها در حل مسائل به وسیله هوش مصنوعی هست. امروزه پشت هر محصول خفنی که در زمینه ی هوش مصنوعی می بینیم و گاهی اوقات آدم رو به ترس وا می داره، شبکه های عصبی عمیق (یادگیری عمیق)، وجود داره.
لازمه که بدونید شبکه عصبی یکی از دروس اصلی در رشته هوش مصنوعی و رباتیک به حساب میاد. و برای درک کاملش نیاز به مطالعه و زمان گذاشتن و فکر کردن بیشتر از یک یا چند مقاله هست. با این حال:
شما که این مقاله رو میخونید، اگر یک مهندس هوافضا در ناسا هستید یا در سوپر مارکت احمد آقا کار می کنید. یا اگر استاد تمام در دانشگاه MIT هستید و یا چون شرایط طوری بود که نتونستید دیپلمتون رو به اتمام برسونید، ولی علاقمندید راجع به هوش مصنوعی بدونید، لطفا این مقاله رو طوری بخونید که قراره کلمه به کلمشو متوجه بشید. اگر غیر این بود، لطفا به من اطلاع بدید. (این متن تا ابد در حال ویرایش هست)
خلاصه قسمت های قبل
در مطالب گذشته با یادگیری ماشین آشنا شدیم و دیدیم که با استفاده از یادگیری ماشین، می تونیم به کامپیوتر یک مفهوم رو بیاموزیم و یه جورایی به کامپیوتر قابلیت فکر کردن بدیم.
در مساله پیشبینی قیمت خونه دیدیم، که چطور کامپیوتر می تونه با استفاده از معادله خط، الگو «هرچه متراژ خونه بیشتر، قیمت خونه بیشتر» رو یاد بگیره و قیمت خونه رو پیشبینی بکنه.
در مقاله قبلی، در مساله پیشبینی قیمت خانه، تنها موضوعی که درباره اش صحبت نکردیم، نحوه ی بدست آوردن پارامتر های معاله خط بود. در این مقاله و مقاله بعد به صورت کامل، روش شبکه عصبی رو بررسی خواهیم کرد.
شبکه عصبی مصنوعی
اگر به خاطر داشته باشید، در تعریف یادگیری ماشین، بسیار مختصر و مفید گفتیم: با استفاده از یادگیری ماشین می تونیم به کامپیوتر یک مفهوم رو یاد بدیم.
شبکه عصبی مصنوعی، یکی از روش های یادگیری ماشین می باشد که از شبکه عصبی بیولوژیکی، الهام گرفته شده.
واقعیتش اینه که حالشو ندارم شبکه عصبی مصنوعی رو با شبکه عصبی بیولوژیکی مقایسه کنم و فقط به عکس زیر بسنده می کنم. که احتمالا چیز زیادی دستگیرتون نمیشه :D
یک مساله
همانند مقاله قسمت قبل، مساله مون پیشبینی قیمت خونه هست. با این تفاوت که می خوایم به وسیله شبکه عصبی، این مساله رو حل کنیم. درواقع به دنبال این هستیم که یک عدد تحت عنوان متراژ خونه به شبکه عصبی بدیم. و یک عدد تحت عنوان قیمت خونه، در خروجی شبکه عصبی، دریافت کنیم. می خوایم این کار رو با کوچک ترین شبکه عصبی ممکن، یعنی یک نورون، انجام بدیم.
در دنیای واقعی یک شبکه عصبی می تونه از میلیون ها نورون تشکیل شده باشه.
طبق عکس زیر، x متراژ خونه هست که وارد شبکه عصبی مون میشه. و y برابر است با قیمت پیشبینی شده خونه که ما در خروجی شبکه مون، خواهیم داشت.
تصویر زیر، دل و روده ی یک نورون رو نشون میده.
اگر بخوام خیلی خلاصه بگم، هر عددی که وارد نورون می شه، دوتا بلا سرش میاد. طبق عکس بالا، در گام اول z و در گام دوم a محاسبه میشه.
محاسبه z
اگر توجه کنید و مقاله قبل رو خونده باشید، z براتون آشنا به نظر می رسه. درواقع z همون معاله ی خط هست که متراژ خونه رو ضرب در w (شیب خط) و با b (عرض از مبدا) جمع می کنه.
محاسبه a
وقتی z محاسبه شد، در ادامه یک تابع ای تحت عنوان f (تابع فعالیت) روش اعمال و a محاسبه میشه. و a همون y، یعنی خروجی نورون مون که در این مثال قیمت خونه هست، میباشد. (اگر شما با توابع در ریاضات آشنا نیستید و رابطه خوبی با ریاضی نداشتید و اگر متوجه نشدید. نگران نباشید فعلا زیاد مهم نیست).
فرمول زیر معادله یک نورون هست، که به اصطلاح بهش تابع هدف میگن. تنها تفاوتش با معادله خط، تابع f هست که بعدا یه کوچولو راجع بش توضیح میدم.
فرض کنید همانند مقاله قبل، مجموعه داده ای (Data set) از خرید و فرش خانه (قیمت خانه بر حسب متراژ) داریم. و وقتی این مجموعه داده رو رسم می کنیم، طوری که محور عمودی، قیمت خانه و محور افقی، متراژ خانه می باشد، با عکس زیر مواجه میشیم.
هدف اصلی ما در حل مساله مون با استفاده از شبکه های عصبی، بدست آوردن پارامتر های w و b هست. به طوری که وقتی تابع هدف رو رسم می کنیم، مثل خط آبی رنگ در عکس زیر، به اصطلاح رو داده هامون fit شده باشه.
در عکس زیر، برای سادگی ابتدا فرض کردیم، تابع f بدون تاثیر هست و برابر با یک در نظر گرفتیم. بعد به پارامتر هامون (w و b) به صورت اتفاقی (Random) مقدار دادیم. w رو برابر با یک و b رو برابر با صفر قرار دادیم. وقتیکه پارامترها رو درون تابع هدفمون جایگذاری کردیم به معادله ی معروف y = x یعنی خط قرمز رنگ رسیدیم.
از اونجایی که داده ها، تعداد و ابعادشون کم هست و تونستیم رسمشون کنیم. میتونیم ببینیم که خط قرمز به درستی روی داده هامون fit نشده. تنها روی یک نمونه آموزشی (اولی از سمت راست) fit شده. به نظر میرسه اگر خط کمی بره بالا اوضاع بهتر میشه. لذا مقدار b رو افزایش میدیم. (در معادله خط b عرض از مبدا هست. و باعث میشه خط بالا و پایین بره). پس مقدار b رو از صفر به یک افزایش میدیم. و به خط سبز رنگ، در تصویر زیر رسیدیم.
خط سبز انگار بهتر داده ها رو یاد گرفته. ولی باز روی نمونه های سمت چپ ترین و سمت راست ترین هنوز به درستی عمل نمیکنه. لازمه که حالا کمی زاویه خط، یعنی پارامتر w رو تغییر بدیم. اینبار مقدار w رو 0.5 واحد کاهش میدیم. و به خط آبی رنگ میرسم.
تبریک میگم! تونستیم خطی رو کشف کنیم که به درستی روی داده های آموزشیمون fit بشه. درواقع تجربیات گذشته رو یاد گرفته.
موضوعی که وجود داره در دنیای واقعی، استفاده از روشی که در بالا استفاده کردیم و پارامتر ها رو بدست آوردیم غیر ممکن هست. چراکه خیلی از مواقع ابعاد نمونه های آموزشی بالاست و غیر قابل رسم هست.
در قسمت های بعد، با مراحل شبکه عصبی بیشتر آشنا خواهیم شد و خواهیم دید که چگونه پارامتر ها، به وسیله ی الگوریتم بهینه سازی گرادیان نزولی، محاسبه خواهند شد.
خلاصه
1- شبکه عصبی مصنوعی، یکی از روش های یادگیری ماشین است.
2- تمام هدف ما در شبکه عصبی، تقریب زدن پارامتر های w و b هستند. طوری که تابع هدفمون به درستی روی داده های آموزشی fit بشه. (تجربیات گذشته رو یاد بگیره)
« قسمت بعد هوش مصنوعی به زبان خیلی ساده »
امیدوارم موضوعاتی که مطرح کردم براتون جالب بوده باشه. و بهم در اصلاح کاستی ها در نظرات کمک کنید.
آخرین ویرایش: 22 / 9 / 98
مطلبی دیگر از این انتشارات
4. هوش مصنوعی به زبان خیلی ساده: شبکه عصبی مصنوعی2
مطلبی دیگر از این انتشارات
2. هوش مصنوعی به زبان خیلی ساده: شناسایی الگو
مطلبی دیگر از این انتشارات
شناسایی چهره در تصویر به زبان خیلی ساده + کد پایتون