مطالب زیر نقل قول می باشد                                                                                                منبع:سیاوش

هوش مصنوعی چیست؟
فکر کنم جواب دادن به این سوال یه مقدار سخت باشه. چون در حال حاضر ما حتی تعریف دقیقی برای هوش نداریم!
واژه ی هوش مصنوعی (Artificial Intelligence) اولین بار توسط شخصی به نام John McCarthy استفاده شد با این تعریف: "علم و مهندسی ساخت ماشین های هوشمند".
اینم یه تعریف دیگه از هوش مصنوعی که تو خیلی از منابع بکار رفته:
" هوش مصنوعی عبارت است از مطالعه ی این که چگونه کامپیوترها را میی توان وادار به کارهایی کرد که در حال حاضر انسان‌ها آنها رابهتر انجام می‌دهند "
خوب من کلا زیاد از تعریف خوشم نمی یاد، در نتیجه این قسمت رو همینجا خاتمه میدم، با مثال فکر کنم بهتر بشه مفاهیم رو نشون داد! در آخر اگر دوست داشتین تعریفی که خودتون از هوش مصنوعی پیدا کردینو بگید!

تاریخ هوش مصنوعی

میشه گفت مبحث هوش مصنوعی و پیشرفتش از سال 1950 شروع شد! توی این سال شخصی بنام آلن تورینگ (Alen Turing) تستی بنام تورینگ تست رو معرفی کرد و گفت که هر ماشینی که بتونه از این تست سربلند بیرون بیاد رو میشه یه ماشین هوشمند شمرد. تا الان هیچ ماشینی نتونسته این تست رو با موفقیت پشت سر بگذاره، که خیلی هم عجیب نیست چون برای یه ماشین تست خیلی سختیه! جالب اینه که تقریبا هر انسان سالمی می تونه به راحتی تو این تست قبول بشه حتی یه بچه ی 5-6 ساله!

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

** منظور از ماشین یه پاسخ گو هست! می تونه یه برنامه کامپیوتری باشه مثلا! "

بعد از تستی که جناب آقای تورینگ (روحشون شاد) معرفی کردند هوش مصنوعی خیلی پیشرفتای دیگری داشت. مثلا اولین برنامه ی هوش مصنوعی توی دانشگاه منچستر نوشته شد که شطرنج بازی میکرد!
تو سال 1958 آقای John McCarthy زبان برنامه نویسی Lisp رو اختراع کردند! که احتمال داره خیلی از شما اسمشو شنیده باشید!
زبان برنامه نویسی Prolog هم تو همین دوره در سال 1972 بوجود اومد که الان هم یه زبون قوی در زمینه ی منطق حساب میشه!
تو سال 1997 دیپ بلو (Deep Blue) که یه ماشین شطرنج باز بود، تونست قهرمان جهان "گری کاسپارف" رو شکست بده! که این یه موفقیت بزرگ بود توی جهان هوش مصنوعی! می تونید بازی ششم رو که کاسپارف می بازه تو اینجا ببینید!

گری کاسپارف در مقابل دیپ بلو

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


موارد استفاده ی هوش مصنوعی

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

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

یه مثال جالب! همین اینترنتی که شما الان تو خونه استفاده می کنی اولش برای ایجاد شبکه های هماهنگی برای ارتش بوده! که بعد ها گسترش یافته تا به اینجا رسیده!

یا مثلا GPS! نگاه نکنید الان هر کسی می تونه یه GPS تهیه کنه! این سیستم در ابتدا توی ارتش آمریکا استفاده می شده برای پیدا کردن موقعیت و مختصات جغرافیایی سرباز ها! "

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

من تو این نوشته فقط درباره شبکه ی مصنوعی صحبت می کنم!


شبکه ی عصبی

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

خوب یه مثال دیگه می زنم بعد یکم بیشتر وارد میشیم!
شما نوشتن و خوندن رو یاد گرفتین! تا حالا به این فکر کردید که دست خط هر کسی با اون یکی فرق داره اما شما همه ی اونا رو می تونید بخونید؟ این دوباره منعطف بودن مغز آدم رو می رسونه! یا یه نکته ی دیگه، شما هر چقدر بیشتر تمرین کنید دست خطتون بهتر میشه! اینم نشون میده مغز آدم خودشو در طی تمرین به یه معیاری که به نظرش بهتره نزدیک تر می کنه!
اما چطوری؟ مغز آدم چجوری کار میکنه؟ تا حالا از خودتون پرسیدید چجوری یه چیز جدید یاد می گیرید یا چطوری فکر می کنید؟ هر آدمی باید اینو بدونه بنظر من! لا اقل باید یکم خودمونو بشناسیم.
مغز آدم از یه سری سلول عصبی (Neuron) تشکیل شده که هر کدوم سیگنال هایی برای هم میفرستند! جالبه بدونید این سلول های عصبی کاری که می کنن خیلییی سادست مثلا مثل حمع دو تا عدده اما چیزی که باعث میشه بتونن این کارای پیچیدرو انجام بدن اینه که تعداد این سلول ها خیلییی زیاده! مغز آدم حدود 10 به توان 11 تا از این سلول ها داره! تصور این عدد خیلی آسون نیست!
هر نورون تعدادی axom داره که مثل خروجی عمل می کنن و تعداد خیلی زیادی هم dendrite که به عنوان ورودی عمل می کنن. نورون ها یه مقدار مشخصی قدرت سیگنال نیاز دارن تا فعال شن، وقتی فعال شدن یه سیگنال الکتریکی برای سایر نورون ها میفرستن! هر چقدر نورون ها بیشتر استفاده بشن ارتباط بینشون (axonها و dendriteها) قوی تر میشه.
حالا ما همین سیستم رو سعی می کنیم کوچیکترش رو توی کامپیوتر شبیه سازی کنیم. کامپیوتر هایی که الان به اونا دسترسی داریم حتی قدرت پردازش 20 بیلیون نورون رو هم ندارن، ولی با تعداد کمی نورون هم می شه پاسخ های مناسبی از شبکه ی عصبی گرفت.
خوب حالا تو کامپیوتر چطوری نورون ها رو سازمان می دیم؟
نورون ها همونطوری که تو عکس می بینین توی لایه های مختلف قرار می گیرن، لایه ی اول رو لایه ی ورودی (Input Layer) می گن که ورودی ها رو میگیره و بر حسب قدرت ارتباطش با هر نورون توی لایه ی بعدی سیگنال ورودی رو به لایه ی بعد میفرسته! از این به بعد به قدرت ارتباط هر نورون با نورون دیگه وزن (Weight) اون نورون می گیم. مقدار هر نورون توی هر لایه به وزن و مقدار نورون های لایه ی قبلش بستگی داره. در نهایت ما یه لایه ی خروجی داریم که توی این شکل دو تا نورون توشه! لایه های میانی تعدادشون می تونه هر اندازه ای باشه، و تعداد نورون هاشم مثل بقیه ی لایه ها می تونه هر چقدر که بخوایم باشه. بعدا اشاره می کنیم که چطوری انتخاب کنیم تعداد لایه ها و نورون های هر لایه رو.

یک شبکه ی عصبی ساده

حالا اینو ما درست کردیم، به چه دردی می خوره؟
یه شبکه ی عصبی مثل یه تابع عمل می کنه که به تعداد نورون های ورودی، ورودی می گیره و به تعداد نورون های خروجی هم خروجی میده! مثلا این شبکه عصبی که تو شکل می بینید به این صورته:

  1. f(x1, x2, x3, x4, x5) = y1 , y2

حالا این تابع چه تابعیه؟ اینجاس که قدرت شبکه ی عصبی معلوم میشه!
ما میایم و به این تابع 100 تا مثال که جوابشو می دونیم میگیم و هر بار عملیات بازپخشانی (Back propagating) رو انجام میدیم! بازپخشانی یه عملیاتیه که طی اون وزن نورون ها رو طوری تغییر میدیم که جواب های شبکه به جواب هایی که انتظار داشتیم نزدیک تر بشن! یعنی ما در اصل یه تابع می سازیم که خودمون نمیدونیم اون تابع چی هست و فقط چند تا مثال از اون رو داریم!
بگذارید یه مثال بزنم. مثلا شما چطوری جمع کردن رو یاد گرفتین؟ بهتون گفتن 2+2 میشه 4، 2+3 میشه 5 و ... انقدر مثال دیدید تا فهمیدید آهان پس جمع یعنی این!
دقیقا میتونیم همین رو به کامپیوتر یاد بدیم! یعنی یه شبکه عصبی با دو نورون ورودی طراحی می کنیم و یه لایه ی میانی با 3 تا نورون و در نهایت یه لایه ی خروجی با یه نورون (چون تابع جمع دو تا ورودی داره و یک خروجی)
بعد برای کامپیوتر چند تا جواب معلوم رو میگیم! مثلا میگیم 2 و 2 باید بده 4، 2 و 3 باید بده 5 و براش 1000 تا مثال میزنیم! در نهایت ازش میپرسیم حالا بگو 100 و 23 چی میشه؟ (اعدادی که تا بحال برای شبکه عصبیمون مثال نزدیم). و جواب میگیریم مثلا 123.0223! تعجب نکنید شبکه عصبی همیشه قرار نیست جواب قطعی بده، در نهایت می تونیم به یه روشی اونو به جواب قطعی تبدیل کنیم، مثلا توی این مثال روند کردن جواب میده!

چرا تعداد نورون های لایه ی میانی رو گفتین 3 تا؟
تعداد نورون های لایه های میانی می تونه هر چیزی باشه به جای 3، اما باید توجه داشته باشین هر نورونی که اضافه می کنیم از یه طرف گپ خطا رو کمتر می کنی اما از طرف دیگه زمان بیشتری برای پردازش می گیره و چون تعداد نورون ها زیاد شده تعداد خطا های کوچک هم زیاد تر می شن و یه خطای بزرگ رو ایجاد می کنن! پس باید با روش های مختلف بهترین حالت رو انتخاب کنیم. توی این مثال با آزمایش و خطا به این نتیجه رسیدیم که 3 تا بهترین نتیجرو به ما میده! "

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