الگوریتم ژنتیک

الگوریتم ژنتیک

الگوریتم‌های ژنتیک، به عنوان یکی از راه‌حل‌های یافتن جواب مسئله در بین روش‌های مرسوم در هوش مصنوعی مطرح است. در حقیقت بدین روش می توانیم در فضای حالت مسئله حرکتی سریع‌تر برای یافتن جواب‌های احتمالی داشته باشیم؛ یعنی می توانیم با عدم بسط دادن کلیه حالات، به جواب‌های مورد نظر برسیم.

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

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

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

۱۰۱۱۰۱۱۰۱۰۰۰۰۱۰۱۰۱۱۱۱۱۱۱۰

‌یا

۱۲۶۴۱۹۶۳۵۲۴۷۸۹۲۳۴۵۵۵۴۸۲۱۶

‌برای شروع فعالیت الگوریتم ژنتیک نیازمند جمعیتی از کروموزوم‌ها به صورت تصادفی هستیم. یعنی در ابتدا به عنوان قدم اول، تعدادی کروموزوم به صورت تصادفی ایجاد می کنیم. فرض کنید N کروموزوم و این N را جمعیت آغازین می‌نامیم.

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

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

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

شکسته شدن کروموزوم ها

بدین ترتیب دو کرومزوم جدید تولید می‌شود (دو جواب جدید). راه دیگری نیز برای انجام عمل ترکیب وجود دارد و آن انتخاب چند نقطه شکست است. مثلاً به شکل زیر برای ۲ نقطه شکست توجه کنید.

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

نتیجه نهایی

اکنون یک مرحله را انجام دادیم و یک کرومزوم جدید (جواب جدید) برای مسئله ایجاد کردیم. در ادامه دو مرتبه دو کرومزوم از جمعیت اولیه انتخاب می‌کنیم و همه اعمال گفته‌شده را روی آن انجام می دهیم تا کرومزوم دیگری ایجاد شود و این‌کار را به قدری تکرار می‌کنیم تا به تعداد کرومزوم‌های جمعیت اولیه، کرومزوم جدید داشته باشیم و این مجموعه کرومزوم جدید در حقیقت نسل جدید ما خواهند بود و ما این‌کار را به قدری ادامه می‌دهیم تا نسل‌های بهتر و بهتری را ایجاد کنیم و هنگامی جواب نهایی به دست میآید که تابع ارزشی ما، مقدار مطلوب ما را به ازای مقدار مورد نظر ما از کروموزوم ها برگرداند.

شاخه‌های علم هوش مصنوعی

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

علم هوش مصنوعی

شبیه سازی درعلم  هوش مصنوعی

یکی از مهم‌ترین مباحث مطرح در این زمینه، موضوع شبیه‌سازی است. غالباً پرسیده می‌شود آیا صرف این‌که ماشینی بتواند نحوه صحبت کردن انسان را شبیه‌سازی کند، به معنی آن است که هوشمند است؟ به عنوان مثال، شاید شما هم درباره روبات‌های نرم‌افزاری که می‌توانند چت کنند (Chatter Bots) چیزهایی شنیده باشید. این روبات‌ها از روش‌های تقلیدی استفاده می‌کنند و به تعبیری، نمونه مدرن و اینترنتی آزمون تورینگ هستند.

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

یکی از مشهورترین انتقادات در این زمینه را فیلسوفی به نام جان سیرل (John Searle) مطرح کرده است. او معتقد است بحث هوشمندی ماشین‌های غیربیولوژیک اساساً بی‌ربط است و برای اثبات ادعای خود مثالی می‌آورد که در مباحث تئوریک هوش مصنوعی <بحث اتاق چینی> نامیده می‌شود. سیرل ابتدا نقد خود درباره هوش ماشینی را در ۱۹۸۰ مطرح کرد و سپس آن در مقاله کامل‌تری که در ۱۹۹۰ منتشر کرد، بسط داد.

مفهوم هوشمندی در هوش مصنوعی

ماجرای اتاق چینی به این صورت است: فرض کنید داخل اتاقی یک نفر نشسته است و کتابی از قواعد سمبول‌های زبان چینی در اختیار دارد. برای این فرد عبارات – سمبول‌‌های – چینی روی کاغذ نوشته می‌شود و از زیر درِ اتاق به داخل فرستاده می‌شود. او باید با مراجعه به کتاب قواعد پاسخ مناسب را تهیه کند و روی کاغذ پس بفرستد. اگر فرض کنیم کتاب مرجع مورد نظر به اندازه کافی کامل است، این فرد می‌تواند بدون این‌که حتی معنی یک نماد از سمبول‌های زبان چینی را بفهمد، به پرسش‌ها پاسخ دهد. آیا می‌توان به این ترتیب نتیجه گرفت که پاسخ دهنده هوشمند است؟

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

ماشین‌ها بتوانند با دنیای پیرامون خود کنش و واکنش داشته باشند، آنگاه می‌توانند فکر کنند. منظور این است که کامپیوترها نیز مانند ما دارای حس بینایی، شنوایی، لامسه و حس‌های دیگر باشند. در این صورت، ترکیب همزمان ” پاسخ‌های تقلیدی ” با ” واکنش مناسب به محیط ” یعنی همان ” هوشمندی ” اتفاقاً کسی مانند جان سیرل نیز تفکرات مشابهی دارد؛ با این تفاوت که به طور خاص او شکل ایده‌آل کنش و واکنش مورد نیاز را همان تعامل بیولوژیکی می‌داند.

اشکالات وارد بر آزمون تورینگ

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

مسئله دیگری که در بحث  علم هوش مصنوعی اهمیت دارد، موضوع <قالب و محتوا> است. منظور از قالب یا Context در اینجا، ظرفی است که محتوا داخل آن قرار می‌گیرد.

نقش محتوا در هوشمندی انسان ها

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

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

شاخه‌های علم هوش مصنوعی‌

امروزه علم هوش مصنوعی به دو دسته اصلی تقسیم می‌شود: یکی هوش مصنوعی سمبولیک یا نمادین (Symbolic AI) و دیگری هوش غیرسمبولیک که پیوندگرا (Connection AI) نیز نامیده می‌شود.

علم هوش مصنوعی سمبولیک از رهیافتی مبتنی بر محاسبات آماری پیروی می‌کند و اغلب تحت عنوان “یادگیری ماشین” یا (Machine Learning) طبقه‌بندی می‌شود. هوش سمبولیک می‌کوشد سیستم و قواعد آن را در قالب سمبول‌ها بیان کند و با نگاشت اطلا‌عات به سمبول‌ها و قوانین به حل مسئله بپردازد. در میان معروف‌ترین شاخه‌های هوش مصنوعی سمبولیک می‌توان به سیستم‌های خبره (Expert Systems) و شبکه‌های Bayesian اشاره کرد.

یک سیستم خبره می‌تواند حجم عظیمی از داده‌ها را پردازش نماید و بر اساس تکنیک‌های آماری، نتایج دقیقی را تهیه کند. شبکه‌های Bayesian یک تکنیک محاسباتی برای ایجاد ساختارهای اطلاعاتی و تهیه استنتاج‌های منطقی از روی اطلاعاتی است که به کمک روش‌های آمار و احتمال به دست‌ آمده‌اند. بنابراین در هوش سمبولیک، منظور از “یادگیری ماشین” استفاده از الگوریتم‌های تشخیص الگوها، تحلیل و طبقه‌بندی اطلاعات است.

علم هوش مصنوعی سمبولیک

این گرایش از علم هوش مصنوعی ، بیشتر بر مدل سازی شناخت اعمال تأکید دارد و چندان خود را به قابلیت تعمق در بیولوژیک سیستم های ارائه شده مقید نمی کند.Case-Based Reasoning یکی از گرایش های فعال در این شاخه می باشد . به عنوان مثال روند استدلال توسط یک پزشک هنگام تشخیص یک بیماری کاملاً شبیه به CBR می باشد به این ترتیب که پزشک در ذهن خود تعداد بسیاری زیادی از شواهد بیماریهای شناخته شده را دارد و تنها باید مشاهدات خود را با نمونه های موجود در ذهن خویش تطبیق داده ، شبیه ترین نمونه را به عنوان بیماری بیابد . به این ترتیب مشخصات ، نیازمندی ها و توانائیهای CBR به عنوان یک چارچوب کلی پژوهش در هوش مصنوعی مورد توجه قرار گرفته است.

علم هوش مصنوعی پیوندگرا

اما علم هوش مصنوعی پیوندگرا متکی بر یک منطق استقرایی است و از راه حل “آموزش/ بهبود سیستم از طریق تکرار” بهره‌ می‌گیرد. این آموزش‌ها نه بر اساس نتایج و تحلیل‌های دقیق آماری، بلکه مبتنی بر شیوه آزمون و خطا و <یادگیری از راه تجربه> است. در علم هوش مصنوعی  پیوندگرا، قواعد از ابتدا در اختیار سیستم قرار نمی‌گیرد، بلکه سیستم از طریق تجربه، خودش قوانین را استخراج می‌کند. متدهای ایجاد شبکه‌های عصبی (Neural Networks) و نیز به‌کارگیری منطق فازی (Fuzzy Logic) در این دسته قرار می‌گیرند.

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

شبکه های عصبی و هوش مصنوعی

شبکه‌های عصبی که از مدل شبکه عصبی ذهن انسان الهام گرفته‌اند امروزه دارای کاربردهای کاملاً علمی و گسترده تکنولوژیک شده‌اند و کاربرد آن در زمینه‌های متنوعی مانند سیستم‌های کنترلی، رباتیک، تشخیص متون، پردازش تصویر،… مورد بررسی قرار گرفته است.

علاوه بر این کار بر روی توسعه سیستم‌های هوشمند با الهام از طبیعت (هوشمندی‌های ـ غیر از هوشمندی انسان) اکنون از زمینه‌های کاملاً پرطرفدار در هوش مصنوعی است.

الگوریتم ژنیتک که با استفاده از ایده تکامل داروینی و انتخاب طبیعی پیشنهاد شده روش بسیار خوبی برای یافتن پاسخ به مسائل بهینه سازیست. به همین ترتیب روش‌های دیگری نیز مانند استراتژی‌های تکاملی نیز (Evolutionary Algorithms) در این زمینه پیشنهاد شده اند.

دراین زمینه هر گوشه‌ای از سازو کار طبیعت که پاسخ بهینه‌ای را برای مسائل یافته است مورد پژوهش قرار می‌گیرد. زمینه‌هایی چون سیستم امنیتی بدن انسان (Immun System) که در آن بیشمار الگوی ویروس‌های مهاجم به صورتی هوشمندانه ذخیره می‌شوند و یا روش پیدا کردن کوتاه‌ترین راه به منابع غذا توسط مورچگان (Ant Colony) همگی بیانگر گوشه‌هایی از هوشمندی بیولوژیک هستند.

برای درک بهتر تفاوت میان این دو شیوه به یک مثال توجه کنید. فرض کنید می‌خواهیم یک سیستم OCR بسازیم. سیستم OCR نرم‌افزاری است که پس از اسکن کردن یک تکه نوشته روی کاغذ می‌تواند متن روی آن را استخراج کند و به کاراکترهای متنی تبدیل نماید.

هوشمندی نرم افزاری

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

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

در طول دهه‌های ۱۹۶۰ و ۱۹۷۰ به دنبال ابداع اولین برنامه نرم‌افزاری موفق در گروه سیستم‌های مبتنی بر دانش(Knowledge-Based) توسط جوئل موزس، سیستم‌های هوش سمبولیک به یک جریان مهم تبدیل شد. ایده و مدل شبکه‌های عصبی ابتدا در دهه ۱۹۴۰ توسط Warren McCulloch و Walter Pitts معرفی شد.

سپس در دهه ۱۹۵۰ کارهای روزنبالت (Rosenblatt) درمورد شبکه‌های دولایه مورد توجه قرارگرفت. در ۱۹۷۴ الگوریتم Back Propagation توسط Paul Werbos معرفی شد، ولی متدولوژی شبکه‌های عصبی عمدتاً از دهه ۱۹۸۰ به این سو رشد زیادی پیدا کرد و مورد استقبال دانشمندان قرار گرفت. منطق فازی ابتدا توسط پروفسور لطفی زاده، در ۱۹۶۵ معرفی شد و از آن زمان به بعد توسط خود او و دیگر دانشمندان دنبال شد.

منطق فازی و هوش مصنوعی

در دهه ۱۹۸۰ تلاش‌های دانشمندان ژاپنی برای کاربردی کردن منطق فازی به ترویج و معرفی منطق فازی کمک زیادی کرد. مثلاً طراحی و شبیه سازی سیستم کنترل فازی برای راه‌آهن Sendai توسط دو دانشمند به نام‌هایYasunobu و Miyamoto در ۱۹۸۵، نمایش کاربرد سیستم‌های کنترل فازی از طریق چند تراشه مبتنی بر منطق فازی در آزمون « پاندول معکوس » توسط Takeshi Yamakawa در همایش بین‌المللی پژوهشگران منطق فازی در توکیو در ۱۹۸۷ و نیز استفاده از سیستم‌های فازی در شبکه مونو ریل توکیو و نیز و معرفی سیستم ترمز ABS مبتنی بر کنترلرهای فازی توسط اتومبیل‌سازی هوندا در همین دهه تاثیر زیادی در توجه مجدد دانشمندان جهان به این حوزه از علم داشت.

البته هنگامی که از گرایش‌های آینده سخن می‌گوییم، هرگز نباید از گرایش‌های ترکیبی غفلت کنیم. گرایش‌هایی که خود را به حرکت در چارچوب شناختی یا بیولوژیک یا منطقی محدود نکرده و به ترکیبی از آنها می‌اندیشند. شاید بتوان پیش‌بینی کرد که چنین گرایش‌هایی فرا ساختارهای (Meta –Structure) روانی را براساس عناصر ساده بیولوژیک بنا خواهند کرد.