شبکه عصبی چند لایه

همان‌گونه كه پيشتر و در طی اين سلسله مقالات ديديم آنچه كه عموما و در طبيعت به نام هوشمندی شناخته می‌شود خصلتی پيوندگرا (Connectionism) دارد، بدين معنی كه اطلاعات كاملا به صورت موازی و نيز توزيع شده پردازش می‌شوند.

شبكه‌های عصبی مصنوعی(ANN: Artificial Neural Networks) درواقع از ساختار درهم و توده‌ای مغز پستانداران الهام گرفته شده است، كه در آن ميليون‌ها سلول عصبی (نورون) از طريق ارتباطاتی كه با يكديگر دارند (سيناپس‌ها)، به حل مسائل يا ذخيره‌سازی اطلاعات می‌پردازند. اين شبكه‌ها مجموعه‌ای از مدل‌های متفاوتند كه توسط رياضيدانان و مهندسين برای شبيه‌سازی بخشی از عملكرد مغز پيشنهاد شده‌اند. ساختار اصلی شبكه‌های عصبی مصنوعی بر اساس دو جزء اصلی گره‌ها (نورون‌ها) و ارتباطات وزن‌دار(سيناپس‌ها) می‌باشد(شكل 1).

يادگيری در سيستم‌های طبيعی به صورت تطبيقی اتفاق می‌افتد. بدين معنی كه در اثر يادگيري، در سيناپس‌ها تغييراتی رخ می‌دهد. عين همين مسئله نيز در مورد شبكه‌های عصبی مصنوعی نيز صادق است. در اين شبكه‌ها يادگيری از طريق مثال انجام می‌شود(Learning By Example). بدين معنی كه اغلب(و نه همواره) مجموعه‌ای از ورودی و خروجی‌های درست به شبكه عصبی داده می‌شود و شبكه عصبی با استفاده ازين مثال‌ها، وزن(Weight) ارتباطات خود را به گونه‌ای تغيير می‌دهد كه در صورت دادن ورودی‌های جديد پاسخ‌های درستی را توليد كند. در واقع دانش شبكه عصبی در وزن ارتباطات آن ذخيره می‌شود.

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

امروزه شبكه‌های عصبی در كاربردهای مختلفی نظير مسائل تشخيص الگو(Pattern Recognition) كه خود شامل مسائلی مانند تشخيص خط(Character Recognition)، شناسايی گفتار(Speech Recognition)، پردازش تصوير(Image Processing) و مسائلی ازاين دست می‌شود و نيز مسائل دسته‌بندي(Classification) مانند دسته‌بندی(Classification Problems) متون و يا تصاوير، به كار می‌روند. در كنترل يا مدل‌سازی سيستم‌هايی كه ساختار داخلی ناشناخته يا بسيار پيچيده‌ای دارند نيز به صورت روز افزون از شبكه‌های عصبی مصنوعی استفاده می‌شود. به عنوان مثال می‌توان در كنترل ورودی يك موتور از يك ANN استفاده نمود كه در اين صورت شبكه عصبی خود تابع كنترل را ياد خواهد گرفت.

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

به صورت خلاصه می‌توان گفت كه شبكه‌های عصبی در حل سه گروه از مسائل بيشترين كاربرد را يافته‌اند: مسائلی كه دارای راه حل الگوريتميك نيستند، مسائلی كه راه حل الگوريتميك بسيار پيچيده‌ای دارند و نيز مسائلی كه انسان در حل آنها موفقتر از ماشين عمل می‌كند.

در حال حاضر تعداد بسيار زيادی از انواع مختلف شبكه‌های عصبی مصنوعی وجود دارند كه به صورت خلاصه عبارتند از: شبكه‌های پرسپترون چند لايه (Multi Layer Perceptron)، كوهونن، هاپفيلد… كه اين شبكه‌ها نيز خود با روش‌های مختلفی آموزش می‌بينند مانند روش پسخورد خطا (Error Back propagation).

می‌توان شبكه‌های عصبی را بر اساس شيوه پردازش اطلاعات در آنها، به دو گروه شبكه‌های Feed Forward و نيز شبكه‌های Recurrent (كه در آنها از فيدبك خروجی استفاده شده است) تقسيم كرد.

نوع يادگيری در اين شبكه‌های نيز می‌تواند يك معيار برای دسته‌بندی آنها باشد. يادگيری در برخی ازين شبكه‌ها با نظارت(Supervised) می‌باشد و در برخی ديگر به صورت متكی به خود(Self Organizing). در ادامه به شرح هر يك ازين مفاهيم خواهيم پرداخت.

ايده اصلی شبكه‌های عصبی

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

اما به سازوكار همين عمل در ذهن انسان دقت كنيد. با ديدن يك تصوير ناقص اغلب بلافاصله كامل آنرا به خاطر می‌آوريد يا با ديدن تصوير يك شخص سريعا نام او را می‌گوييد، يا با خواندن يك متن سريعا تمامی مطالب مربوط به آن را به ذهن می‌آوريد. در واقع ذهن انسان يك نوع حافظه آدرس‌دهی شده بر اساس محتواست (Content Addressable Memory). همانگونه كه از اين نام مشخص است در اين نوع حافظه، با دادن محتوای يك خانه حافظه، بلافاصله آدرس آن به عنوان خروجی داده می‌شود.

حال ببينيم كه داشتن چنين حافظه‌ای اصولا به چه كار می‌آيد. فرض كنيد كه حرف “A” قرار است توسط ماشين از ميان مجموعه‌ای از حروف شناسايی شود. در حالت بسيار ساده فرض بر اين است كه شكل تمامی حروف الفبا در حافظه ماشين موجود است. بنابراين ماشين خيلی ساده با مقايسه ورودی فعلی با اشكال موجود در حافظه تشخيص می‌دهد كه حرف ورودی جاری “A” هست يا خير. اما همانگونه كه پيشتر گفتيم در صورتی كه الگوهای حروف موجود در حافظه بسيار زياد باشد، مقايسه ورودی با تكتك الگوهای ذخيره شده عملا بسيار زمان بر است و مقدور نيست، بنابراين نياز به حافظه آدرس‌دهی شده بر اساس محتوا خواهيم داشت به اين ترتيب كه اين حافظه الگوی جاری را گرفته و بلافاصله پاسخ می‌دهد كه آيا اين الگو در حافظه موجود است يا خير.

اندكی دقت در مثال اخير نشان دهنده پيچيدگی مسائلی از اين دست است. تشخيص حرف “A” حتی به صورت چاپی هم توسط ماشين اساسا كار ساده‌ای نيست. دقت كنيد به تنوع اشكال اين حرف، سايز، خميدگی‌ها، دقت چاپگرها، …. و پيچيدگی مسئله، زمانی چند برابر می‌شود كه كار به تشخيص دستنويس حروف كشيده شود. حال اگر حافظه آدرس‌دهی شده بر اساس محتوای ما، دارای اين توانايی باشد كه حتی اگر شكل حرف “A” كمی هم دچار اعوجاج شده باشد باز هم آنرا تشخيص دهد، حل مسئله تا حدود زيادی ساده‌تر شده است. شبكه‌های عصبی دارای چنين خصلتی هستند.

حال ببينيم كه ايده اصلی عملكرد اين شبكه‌ها چگونه است؟

هاپفيلد (HopField) در 1982 طرح اصلی حافظه‌ای را ارائه كرد كه دارای خصوصيات فوق‌الذكر باشد. اين حافظه يا شبكه عصبی دارای دو عنصر گره و يال می‌باشد. هر گره دارای دو وضعيت فعال و غيرفعال است(صفر يا يك) و هر يال نيز دارای يك وزن می‌باشد (شكل 2). يال‌های با وزن مثبت بين دو گره تا گره فعال ديگری را تحريك می‌كنند و يال‌های با وزن منفی بين دو گره، گره فعال ديگری را غير فعال می‌سازند.

نحوه عملكرد شبكه بدين صورت است كه ابتدا يك گره به تصادف انتخاب می‌شود. اگر يك يا بيشتر از همسايه‌های آن گره فعال بودند جمع وزن‌دار يال‌های منتهی به آن گره‌ها حساب می‌شود. اگر اين جمع مثبت بود گره فعال می‌شود و در غير اين صورت گره مذكور غيرفعال باقی خواهد ماند. سپس مجددا يك گره ديگر به تصادف انتخاب شده و همين عمليات آنقدر تكرار می‌شود تا شبكه به يك حالت پايدار برسد. بعنوان مثال اگر شبكه شكل 2 شروع به كار كند گره پايين سمت چپ گره بالايی خود را فعال خواهد كرد و اين گره نيز به نوبه خود خواهد كوشيد تا گره بالاتر از خود را فعال كند اما گره بالايی به دليل سيگنال توقيفی (Inhibitory) ارسالی از گره بالای سمت راست تحريك نخواهد شد و اين سيكل همينطور تا رسيدن به حالت پايدار ادامه می‌يابد.

نكته در اينجا است كه اين شبكه بيش از چهار حالت پايدار ندارد (شكل 3). يعنی از هر حالت ابتدايی كه شروع كنيم نهايتا شبكه به يكی از اين چهار حالت ميل خواهد كرد. تز اصلی هاپفيلد نيز در واقع همين بود كه از هر حالت ابتدايی و با هر وزنی از يال‌ها كه شروع كنيم، شبكه در نهايت به حالت پايدار خواهد رسيد.

-شکل شماره 2 – شکل شماره 3

با دقت در كل ايده اين شبكه می‌توان گفت كه در واقع اين شبكه به صورت نوعی حافظه عمل می‌كند، حافظه‌ای كه اين چهار الگو را در خود ذخيره كرده است. علاوه بر اين شبكه فوق يك حافظه آدرس‌دهی شده بر اساس محتواست. به اين معنی كه اگر از يكی ازين چهار حالت به صورت ناقص شروع به كار كنيم شبكه به سوی شبيه‌ترين حالت ميل خواهد كرد و اين به اين معناست كه شبكه قادر به شناسايی يك الگوی ناقص است.

شكل 4 نشان می‌دهد كه اين شبكه در صورتی كه از الگوی ناقص سمت چپ شروع به كار كند در نهايت به الگوی كامل سمت راست خواهد رسيد(به خاطر داريد كه هدف ما يافتن روشی بود كه ما را از شكل پر اغتشاش حرف “A” به خود آن حرف برساند).

-شکل شماره 4

نگاهی به انجمن هاي علمي ايران و جهان در حوزه فاوا

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

مقدمه

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

مهمترين انجمن هاي علمي جهان

انجمن مهندسين برق و الکترونيک (IEEE)

انجمن مهندسين برق و الکترونيک که به اختصار “آي تريپل اي” خوانده مي شود، با بيش از 377،000 عضو فعال در نزديک به 150 کشور، بزرگترين انجمن علمي و فني در سطح جهان به شمار مي رود. اين انجمن، از طريق شاخه هاي دانشجويي بسيار خود که در کالج ها و دانشگاه هاي گوناگون در سطح جهان گسترده شده است، خدمات خود را به جوامع دانشجويي ارائه مي کند.

انجمن مهندسين برق و الکترونيک، در اول ژانويه سال 1963 م، در نتيجه ادغام انجمن مهندسين برق امريکا (AIEE) و انجمن مهندسين راديو (IRE) شکل گرفت. با وجود ترديد ها و نگراني هاي هر دو طرف از ادغام دو انجمن و بوجود آمدن نقش هاي جديد، آيين نامه ادغام پذيرفته شد و دکتر ارنست وبر به عنوان نخستين رئيس IEEE انتخاب گرديد.

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

در حال حاضر، انجمن مهندسين برق و الکترونيک داراي هفت نوع عضويت مي باشد: ادامه مطلب »

ارسال شده در ISI, مقالات. بیان دیدگاه »

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

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

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

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

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

نام این سیستم “شبکه‌های عصبی مصنوعی” یا “Artificial Neural Networks” است.

Data Analysis Using “Artificial Neural Networks”

هوش مصنوعی چيست ؟

« هوش مصنوعی، دانش ساختن ماشين‌‌ ها يا برنامه‌های هوشمند است. »[1] .

همانگونه كه از تعريف فوق-كه توسط يكی از بنيانگذاران هوش مصنوعی ارائه شده است- برمی‌آيد،حداقل به دو سؤال بايد پاسخ داد:
1ـ هوشمندی چيست؟
2ـ برنامه‌های هوشمند، چه نوعی از برنامه‌ها هستند؟

تعريف ديگری كه از هوش مصنوعی می‌توان ارائه داد به قرار زير است:
« هوش مصنوعی، شاخه‌ايست از علم كامپيوتر كه ملزومات محاسباتی اعمالی همچون ادراك (Perception)، استدلال(reasoning) و يادگيری(learning) را بررسی كرده و سيستمی جهت انجام چنين اعمالی ارائه می‌دهد.»

و در نهايت تعريف سوم هوش مصنوعی از قرار زير است:
«هوش مصنوعی، مطالعه روش‌هايی است برای تبديل كامپيوتر به ماشينی كه بتواند اعمال انجام شده توسط انسان را انجام دهد.»

به اين ترتيب می‌توان ديد كه دو تعريف آخر كاملاً دو چيز را در تعريف نخست واضح كرده‌اند.
1ـ منظور از موجود يا ماشين هوشمند چيزی است شبيه انسان.
2ـ ابزار يا ماشينی كه قرار است محمل هوشمندی باشد يا به انسان شبيه شود، كامپيوتر است.

هر دوی اين نكات كماكان مبهم و قابل پرسشند. آيا تنها اين نكته كه هوشمندترين موجودی كه می‌شناسيم، انسان است كافی است تا هوشمندی را به تمامی اعمال انسان نسبت دهيم؟ حداقل اين نكته كاملاً واضح است كه بعضی جنبه‌های ادراك انسان همچون ديدن و شنيدن كاملاً ضعيف‌تر از موجودات ديگر است.

علاوه بر اين، كامپيوترهای امروزی با روش‌هايی كاملاً مكانيكی(منطقی) توانسته‌اند در برخی جنبه‌های استدلال، فراتر از توانايی‌های انسان عمل كنند.

بدين ترتيب، آيا می‌توان در همين نقطه ادعا كرد كه هوش مصنوعی تنها نوعی دغدغه علمی يا كنجكاوی دانشمندانه است و قابليت تعمق مهندسی ندارد؟(زيرا اگر مهندسی، يافتن روش‌های بهينه انجام امور باشد، به هيچ رو مشخص نيست كه انسان اعمال خويش را به گونه‌ای بهينه انجام می‌دهد). به اين نكته نيز باز خواهيم گشت.

اما همين سؤال را می‌توان از سويی ديگر نيز مطرح ساخت، چگونه می‌توان يقين حاصل كرد كه كامپيوترهای امروزين، بهترين ابزارهای پياده‌سازی هوشمندی هستند؟

رؤيای طراحان اوليه كامپيوتر از بابيج تا تورينگ، ساختن ماشينی بود كه قادر به حل تمامی مسائل باشد، البته ماشينی كه در نهايت ساخته شد(كامپيوتر) به جز دسته ای خاص از مسائل[2] قادر به حل تمامی مسائل بود. اما نكته در اينجاست كه اين «تمامی مسائل» چيست؟ طبيعتاً چون طراحان اوليه كامپيوتر، منطق‌دانان و رياضيدانان بودند، منظورشان تمامی مسائل منطقی يا محاسباتی بود. بدين ترتيب عجيب نيست، هنگامی كه فون‌نيومان[3] سازنده اولين كامپيوتر، در حال طراحی اين ماشين بود، كماكان اعتقاد داشت برای داشتن هوشمندی شبيه به انسان، كليد اصلی، منطق(از نوع به كار رفته در كامپيوتر) نيست، بلكه احتمالاً چيزی خواهد بود شبيه ترموديناميك!

به هرحال، كامپيوتر تا به حال به چنان درجه‌ای از پيشرفت رسيده و چنان سرمايه‌گذاری عظيمی برروی اين ماشين انجام شده است كه به فرض اين كه بهترين انتخاب نباشد هم، حداقل سهل‌الوصول‌ترين و ارزان‌ترين و عمومی‌ترين انتخاب برای پياده‌سازی هوشمنديست.

بنابراين ظاهراً به نظر می‌رسد به جای سرمايه‌گذاری برای ساخت ماشين‌های ديگر هوشمند، می‌توان از كامپيوترهای موجود برای پياده‌سازی برنامه‌های هوشمند استفاده كرد و اگر چنين شود، بايد گفت كه طبيعت هوشمندی ايجاد شده حداقل از لحاظ پياده‌سازی، كاملاً با طبيعت هوشمندی انسانی متناسب خواهد بود، زيرا هوشمندی انسانی، نوعی هوشمندی بيولوژيك است كه با استفاده از مكانيسم‌های طبيعی ايجاد شده، و نه استفاده از عناصر و مدارهای منطقی.

در برابر تمامی استدلالات فوق می توان اين نكته را مورد تاُمل و پرسش قرار داد كه هوشمندی طبيعی تا بدان جايی كه ما سراغ داريم، تنها برمحمل طبيعی و با استفاده از روش های طبيعت ايجاد شده است. طرفداران اين ديدگاه تا بدانجا پيش رفته‌اند كه حتی ماده ايجاد كننده هوشمندی را مورد پرسش قرار داده اند، كامپيوتر از سيليكون استفاده می كند، در حالی كه طبيعت همه جا از كربن سود برده است.

مهم تر از همه، اين نكته است كه در كامپيوتر، يك واحد كاملاً پيچيده مسئوليت انجام كليه اعمال هوشمندانه را بعهده دارد، در حالی كه طبيعت در سمت و سويی كاملاً مخالف حركت كرده است. تعداد بسيار زيادی از واحدهای كاملاً ساده (بعنوان مثال از نورون‌های شبكه عصبی) با عملكرد همزمان خود (موازی) رفتار هوشمند را سبب می شوند. بنابراين تقابل هوشمندی مصنوعی و هوشمندی طبيعی حداقل در حال حاضر تقابل پيچيدگی فوق العاده و سادگی فوق العاده است. اين مساُله هم اكنون كاملاً به صورت يك جنجال(debate) علمی در جريان است.

در هر حال حتی اگر بپذيريم كه كامپيوتر در نهايت ماشين هوشمند مورد نظر ما نيست، مجبوريم برای شبيه‌سازی هر روش يا ماشين ديگری از آن سود بجوييم.

تاريخ هوش مصنوعی ادامه مطلب »

برنامه های عامل(1)

برنامه های عامل

ساده ترین فکر در مورد ساخت برنامه عامل، ذخیره کامل دنباله ادراکی و ساخت یک جدول که شامل عمل مناسب برای تمامی دنباله های ادراکی ممکن است، می باشد.

ولی این طرح، غیر ممکن است. زیرا :

· جدول مورد نیاز برای عامل ساده ای که تنها قادر به بازی شطرنج باشد 35100 سطر خواهد داشت.

· زمان بسیار طولانی لازم است تا طراح قادر به ساخت جدول گردد.

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

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

سیستم رانندگی هوشمند

برای ملموس تر شدن بحث برنامه ها، یک محیط خاص را در نظر می گیریم. نقش رانندگی ماشین را به راحتی می توان درک کرد . بنابر این این محیط را مورد مطالعه قرار می دهیم.

راننده به طور کلی نیازمند دانستن موارد زیر است:

· در کجا قرار دارد.

· سرعت او چقدر است.

· چه افراد و اجسام دیگری در خیابان هستند.

· اجسام و افراد دیگر با چه سرعتی حرکت می کنند.

اعمالی که باید راننده انجام بدهد:

· کنترل فرمان (وضعیت چرخ ها)

· کنترل سرعت

· کنترل وضعیت ماشین (گرمای موتور، روغن، دور موتور و …)

معیار هایی که راننده نیازمند دانستن آن ها است :

· صحیح و سالم به مقصد رسیدن

· حداقل سازی مصرف سوخت

· حداقل سازی زمان

· حداقل سازی تخلفات رانندگی

مکانیزم های مورد نیاز برای انجام فعالیت های فوق:

· سیستم مکان یابی جهانی (GPS=Global Positioning System)

· دوربین های تصویر برداری دیجیتالی

· سنسورهای مادون قرمز و رادار

· میکروفون یا صفحه کلید برای دریافت مقصد توسط مسافران

· کیلومتر سنج، شمارش دور موتور و …

· و…

در نهایت اگر این یک پروژه واقعی باشد، باید محیط های رانندگی متفاوت را برای برنامه تعیین کرد. (آیا در شهر رانندگی می کند یا در آزاد راه؟ در مناطق قطبی رانندگی می کند یا در مناطق استوایی؟ و …)

برای ساخت برنامه عامل واقعی از چهار نوع برنامه عامل می توان استفاده کرد:

· عامل های واکنشی ساده

· عامل هایی که اثرات دنیا را حفظ می کنند.

· عامل های هدف گرا

· عامل های سودمند

ارسال شده در عمومی, مقالات, نرم افزار. برچسب‌ها: . بیان دیدگاه »

برنامه های عامل (2)

عامل های واکنشی ساده

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

چنین اقدامی را یک قانون شرط-عمل(Condition-Action Rule) می نامیم.

این چنین عامل هایی می توانند کاملا کارا پیاده سازی شوند، ولی محدوده کاربردی آن ها بسیار محدود هستند.

عامل هایی که اثرات دنیا را حفظ می کنند

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

عامل به دو نوع دانش کد شده در برنامه نیاز دارد تا اطلاعات وضعیت داخلی را به هنگام کند.

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

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

ارسال شده در عمومی, مقالات, نرم افزار. برچسب‌ها: . Comments Off

روش های مبتنی بر جستجو

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

1- تلاش می کند که رفتارههای هوشمندانه انسان را بشناسد و تحلیل کند و درک کند

2 – مدل سازی از اطلاعاتی که شاخه ی 1 انجام می دهد

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

مساله —-> سیستم هوشمند ( روش حل مساله ) ——— > پاسخ

حال پرسشی که اینجا مطرح می شود این است:

روش های حل مساله در هوش مصنوعی چیست؟

نقطه ی اساسی در طراحی سیستم های هوشمند روش های حل مساله است روش هایی از قبل مشخص شده در هوش مصنوعی وجود دارد این روش ها 2 گروه کلی هستند:

1 – Search Based

2 – Knowledge Based

روش های کلی برای حل مساله به دو گروه مبتنی بر جستجو و مبتنی بر دانش تقسیم می شوند.اکنون انواع روش های مبتنی بر جستجو را بیان می کنیم:

1 – State Space Search ( جستجوی فضا حالت )

2 – Problem Reduction ( کاهش مساله )

3 – Games

حال این سوال مطرح می شود که چگونه یک مساله را با روش جستجو حل می کنیم . در روش فضا حالت ما یک مساله داریم :

در روش فضا حالت ما یک مساله داریم که سیستم هوشمند آن را دریافت می کند و فضای حالت آن مساله را می سازد و در فضای حالت آن جستجو می کند و جواب یا جواب های مساله را پیدا کرده و بر می گرداند.

فضای حالت مساله چیست ؟ فضای حالت در برگیرنده تمام حالت هایی است که ممکن است جواب مساله نیز در آن باشد.

برای مثال فضای حالت حرکت موس شما تمام صفحه نمایش است ولی جواب مساله آنجایی است که شما کلیک می کنید.

حال می خواهیم بدانیم فضای حالت از چه ساختاری تشکیل شده است:

ساختار فضای حالت گرافی است که از نودها تشکیل شده است.

مثال : فرض کنید که روبات x می خواهد به خانه شماره 2 برود.

روبات از خانه های 1 و 5 و 4 می تواند وارد شود و هدف این است که به خانه 2 برود.گراف فضا حالت بدین شکل می شود.

s نقطه شروع و G نقطه پایان می باشد. فضای حالت مساله شامل جواب ها و همینطور آنهایی که جواب نیستند نیز هست. نودهای این گراف متناظر با حالات مساله است و لبه ها عملگر تغییر حالت مساله هستند و هدف ما پیداکردن راه های S به G است.

جواب ها از نوع مسیر ( Path ) هستند. برای مثال داریم:

S –> 4 –> 3 –> 2

زمانی که برای یک حالت حالت بعدی وجود نداشته باشد به آن بسط ناپذیر می گویند . نود های پایانی یا بسط ناپذیرند یا جواب مساله هستند. در اصل ما دنبال جوابی هستیم که یک سر آن S است و طرف دیگر آن G می باشد.

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

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

1- تلاش می کند که رفتارههای هوشمندانه انسان را بشناسد و تحلیل کند و درک کند

2 – مدل سازی از اطلاعاتی که شاخه ی 1 انجام می دهد

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

مساله —-> سیستم هوشمند ( روش حل مساله ) ——— > پاسخ

حال پرسشی که اینجا مطرح می شود این است:

روش های حل مساله در هوش مصنوعی چیست؟

نقطه ی اساسی در طراحی سیستم های هوشمند روش های حل مساله است روش هایی از قبل مشخص شده در هوش مصنوعی وجود دارد این روش ها 2 گروه کلی هستند:

1 – Search Based

2 – Knowledge Based

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

1- تلاش می کند که رفتارههای هوشمندانه انسان را بشناسد و تحلیل کند و درک کند

2 – مدل سازی از اطلاعاتی که شاخه ی 1 انجام می دهد

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

مساله —-> سیستم هوشمند ( روش حل مساله ) ——— > پاسخ

حال پرسشی که اینجا مطرح می شود این است:

روش های حل مساله در هوش مصنوعی چیست؟

نقطه ی اساسی در طراحی سیستم های هوشمند روش های حل مساله است روش هایی از قبل مشخص شده در هوش مصنوعی وجود دارد این روش ها 2 گروه کلی هستند:

1 – Search Based

2 – Knowledge Based

ورودی های مسئله

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

عناصر اولیه تعریف یک مسئله، وضعیت ها و اعمال هستند. بنابراین اطلاعات مسئله شامل موارد زیر است:

· وضعیت آغازین(Initial state)

· مجموعه اعمالی که برای عامل قابل دسترسی هستند.(عامل می تواند آن ها را انجام دهد.)

عملگر(Operator) : بر انجام یک عمل دلالت می کند.

عامل پس از انجام یک عمل در یک وضعیت خاص، در وضعیت دیگری قرار می گیرد.

تابع S(successor) : در وضعیت ویژه ي X، S(x) برابر است با مجموعه ای از وضعیت های قابل دسترسی با انجام هر عمل.

به مجموع این موارد فضای وضعیت (Space state) مسئله را تعریف می کنند.

مسیر : یک مسیر در فضای وضعیت، دنباله ای از اعمال است که از یک وضعیت به وضعیت دیگر می رود.

· تست هدف(Goal test) : عامل باید بداند که وضعیتی که در آن قرار دارد، وضعیت هدف است یا خیر. که این عمل نیازمند یک تعریف از وضعیت هدف است.

· تابع هزینه – مسیر : تابعی است که برای هر مسیر، هزینه ای را در نظر می گیرد. هزینه یک مسیر، مجموع هزینه های اعمال مربوط به مسیر است. تابع هزینه مسیر اغلب با حرف G مشخص می شود.

اندازه گیری کارایی حل مسئله

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

· آیا این جستجو را حلی پیدا می کند؟

· آیا راه حلی مناسبی است؟(هزینه مسیر آن کم است؟)

· هزینه جستجو از نظر زمانی و حافظه مورد نیاز برای یافتن راه حل چیست؟

(هزینه کل = هزینه جستجو+هزینه مسیر)

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

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

 

جستجو برای راه حل

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

تولید دنباله های عمل

برای حل مسئله رفتن از آراد به بخارست، حالت اول آراد است. قدم اول، کنترل حالت برای تست هدف است. واضح است که این حالت هدف نیست، اما باید کنترل شود. زیرا امکان دارد مسئله «شروع در آراد، رسیدن به آراد» باشد. بنابرین تست هدف بسیار مهم است.

برای رسیدن به بخارست باید راه های مختلف را امتحان کنیم. بنابراین قدم بعدی تولید مجموعه ي جدیدی از حالت ها است. به این فرآیند گسترش حالت می گویند.

برای وضعیت، سه حالت جدید وجود دارد : {Sibiu – Timisoara – Zerind} . هنگامی که فقط یک امکان وجود داشته باشد ما مجبوریم که همان را ادامه دهیم. اما هنگامی که چند حالت وجود دارد، باید یکی را انتخاب کنیم و دوباره فرآیند گسترش حالت را انجام دهیم. سپس حالت های جدید را کنترل کرده و نتایج را ذخیره می کند. سپس یکی دیگر از حالت های ایجاد شده در مرحله قبل (والد) رفته و همین اعمال را با آن نیز انجام می دهیم.

سپس استراتژی جستجو با مقایسه نتایج تعیین می کند که کدام یکی از مسیر ها باید ادامه داده شوند.

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

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

1- درخت گسترش پیدا نکرده است.

2- فرآیند گسترش انجام شده ولی مجموعه تهی باز گردانده است.(حالت جدیدی به وجود نیاورده است.)

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

در یک حالت تعداد نامحدودی مسیر وجود دارد. برای مثال شاخه Arad-Sibiu-Arad می تواند به Arad-Sibiu-Arad-Sibiu-Arad ادامه پیدا کند و مدام گسترش یابد. یک الگوریتم جستجوی خوب از چنین حالت هایی اجتناب می ورزد.

 

ساختار داده برای درخت های جستجو

یک گره، یک ساختار داده با پنج عنصر است:

· وضعیتی که گره در فضای حالت دارد.

· گره والد(گره ای که در جستجو، گره جدیدی را تولید کند.)

· عملگری که برای تولید گره به کار رفته است.

· تعداد گره های مسیر از ریشه تا گره مورد نظر (عمق گره)

· هزینه مسیر، از حالت اولیه تا گره.

یک گره با یک حالت متفاوت است. زیرا :

· یک گره، یک ساختار داده نگهدارنده است که برای بازنمایی درخت جستجو در یک مسئله ویژه با الگوریتم ویژه است.

· یک حالت بیانگر پیکره بندی دنیا است.

در نتیجه گره ها عمق و والد دارند ولی حالت ها چنین ویژگی هایی ندارند.

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

سپس باید گره هایی که قرار است توسعه یابند، جمع آوری شوند. این مجموعه را Fringe یا Frontier می گویند.

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

· Make-Queue(Elements) : یک صف با عناصر داده شده تشکیل می دهد.

· Check-Empty(Queue) : اگر صف خالی است، “شکست”(Failure) را باز می گرداند.

· Remove-Front(Queue) : عنصر جلویی صف را حذف کرده و آن را باز می گرداند.

· Queuing-Fn(Elements, Queue) : مجموعه ای از عناصر را به داخل صف اضافه می کند.

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

 

ستراتژی های جستجو

استراتژی های جستجو با چهار ویژگی زیر سنجیده می شوند :

· کامل بودن(Completeness) : در صورت وجود راه حل، آیا استراتژی می تواند آن را پیدا کند؟

· پیچیدگی زمان (Time Complexity) : چقدر طول می کشد که یک راه حل پیدا کند؟

· پیچیدگی فضا (Space Complexity) : چه میزان حافظه باید برای ارائه جستجو صرف شود؟

· بهینه سازی (Optimality) : آیا استراتژی راه حلی با کیفیت بالا را می تواند پیدا کند؟(زمانی که راه حل های متفاوتی وجود دارند.)

استراتژی های جستجو به دو نوع آگاهانه(Informed) و ناآگاهانه(Uninformed) تقسیم می شوند.

در ابتدا چند استراتژی جستجوی ناآگاهانه را مورد بررسی قرار می دهیم.

1- جستجوی سطحی (Breadth-first Search)

در این نوع جستجو ابتدا گره ریشه گسترش می یابد، سپس تمام گره هایی که توسط ریشه تولید شده اند، خودشان گسترش می یابند و سپس مولد های آن ها و این عمل تکرار می شود.

ویژگی های مثبت :

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

ویژگی های منفی :

  • فضای زیادی را اشغال می کند.
  • زمان زیادی صرف می کند.

ویژگی های منفی به این دلیل به وجود می آیند که این استراتژی تمامی راه ها را امتحان می کند.

برای مثال هنگامی که بخواهد به عمق 12 گره برسد و هر گره 1 میلی ثانیه زمان ببرد، بر فرض اینکه در هر مرحله 10 گره جدید ایجاد شود، به 35 سال زمان نیاز دارد!(1012)

2- جستجو با هزینه یکسان(Uniform cost Search)

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

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

جستجو با هزینه یکسان، استراتژی جستجوی سطحی را توسط گسترش کم هزینه ترین گره (که توسط تابع هزینه مسیر g اندازه گیری می شود)، بهبود می بخشد.

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

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

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

3- جستجوی عمقی (Depth-first Search)

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

ویژگی های مثبت :

  • جستجوی عمقی نیاز به حافظه نسبتا کمی دارد.(جستجوی عمقی به 12 کیلوبایت در عمق 12 دارد. بر خلاف جستجوی سطحی که نیاز به 111 ترابایت دارد!)
  • جستجوی عمقی در مسائلی که راه حل های زیادی دارند، بسیار سریع تر از جستجوی سطحی عمل می کند.

ویژگی های منفی :

  • جستجو همیشه به سمت پایین حرحت می کند و به بالا باز نمی گردد.(مگر در مواقعی که به بن بست می رسد.) بنابراین اگر راه حل کوتاه تری نیز وجود داشته باشد، نمی تواند آن را پیدا کند.(جستجو کامل نیست.)
  • ممکن است راه حلی پیدا کند که طولانی تر از راه حل بهینه باشد.(جستجو بهینه نیست.)

 

4- جستجوی عمقی محدود شده (Depth-limited Search)

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

مثال :در نقشه رومانی 20 شهر وجود دارد. بنابراین می توان گفت که اگر در شهر A است، باید مسیری با حداکثر طول 19 پیدا کند.

ولی مهم ترین عیب این استراتژی این است که اگر عمق تعیین شده آن قدر کوچک باشد که راه حل بهینه در آن عمق وجود نداشته باشد، جستجو ناقص می ماند.

5- جستجوی عمیق کننده تکراری (Iterative Deepening Search)

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

جستجوی عمیق کننده تکراری (همانند جستجوی سطحی) ابتدا تمامی حالات عمق 0 را بررسی کرد و سپس به سراغ عمق 1 و الی آخر می رود.

بنابراین جستجوی عمیق کننده تکراری مزایای جستجوی سطحی و عمقی را با هم ترکیب می کند.

ویژگی های مثبت

· کامل است.

· بهینه است.

· حافظه اندکی را مورد استفاده قرار می دهد.

این استراتژی از نظر زمانی همانند جستجوی عمقی است.

6- جستجوی دو طرفه (Bidirectional Search)

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

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

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

جستجوی آگاهانه

CSP (Constraint Satisfaction Problem)

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

روش های جستجوی آگاهانه

این استراتژی ها با استفاده از دانش ویژه مسئله، راه حل های کارا تری پیدا می کنند.

کشف کنندگی(Heuristic)

کلمه کشف کنندگی از فعل یونانی Heuriskein که به معنی پیدا کردن یا کشف کردن است، مشتق شده است.

برخی کشف کنندگی را متضاد حالت الگوریتمیک به کار می برند.

تکنیک های کشف کنندگی بر کاربرد های اولیه هوش مصنوعی حکم فرما بود. اولین آزمایشگاه سیستم های خبره، که توسط Ed Fergenbaum، Bruce Buchanan، Joshua Lederberg در دانشگاه استنفورد آغاز به کار کرد، پروژه برنامه نویسی کشف کننده (HPP) نامیده شد.

کشف کنندگی ها به عنوان راه تجربی مطرح می شوند که خبره دان ها از آن برای تولید راه حل های خوب بدون جستجوی بی نتیجه استفاده می کردند.

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

1- جستجوی بهترین (Best-First Search)

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

نام «جستجوی بهترین» نادرست است. زیرا اگر ما می توانستیم واقعا بهترین گره را در ابتدا بسط دهیم، دیگر نمی توانستیم نام این عمل را جستجو بگذاریم.

به دلیل وجود توابع ارزیابی گوناگون، خانواده بزرگی از الگوریتم های جستجوی بهترین وجود دارد. همان گونه که الگوریتم جستجوی بهترین نیز عضوی از خانواده بزرگ الگوریتم جستجوی عمومی است.

 

مثال :

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

hSLD(n) : مسافت مستقیم بین n و مکان هدف.

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

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

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

اگر چه همانطور که در این مثال نشان داده شد، آن ها همیشه راه حل بهینه را پیدا نمی کنند.

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

ویژگی ها

از شناسایی های مشابه گریزان است.

بهینه نیست.

کامل نیست.

پیچیدگی فضای آن O(bm) است. (m = حداکثر عمق فضای جستجو)

پیچیدگی زمان آن O(bm) است.

· حداقل سازی مجموع هزینه مسیر : جستجوی A*

جستجوی حریصانه هزینه تخمین زده شده h(n) به سمت هدف را به حداقل می رساند و به موجب آن، هزینه جستجو را به مقدار قابل ملاحظه ای کاهش می دهد. ولی نه بهینه و نه کامل است.

همچنین جستجو با هزینه یکسان، هزینه مسیر g(n) را به حداقل می رساند و علاوه بر آن بهینه و کامل نیز هست.

اگر بتوانیم دو استراتژی را (برای دست یابی به مزایای آن ها) ترکیب کنیم، بهترین کار را انجام داده ایم.

این کار به این صورت انجام می شود :

f(n) = g(n) + h(n)

در نتیجه :

هزینه تخمین زده شده ارزانترین راه حل از طریق n = f(n)

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

این استراتژی جستجو را جستجوی A* می گویند.

فتار جستجوی A*

قبل از اینکه به اثبات کامل و بهینه بودن A* بپردازیم، بهتر است که تصویری از چگونگی کارکرد این جستجو نشان دهیم.

(فایل فلش این درخت را می توانید از اینجا دانلود کنید.)

اگر شما درخت جستجوی A* را امتحان کنید، متوجه یک پدیده خواهید شد. در طول هر مسیری از ریشه، هزینه f هرگز کاهش پیدا نمی کند. این یک حادثه نیست و تقریبا در مورد تمام کشف کنندگی های مجاز وجود دارد. این خاصیت برای کشف کنندگی، خاصیت یکنواختٌی (Monotonicity) گفته می شود.

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

دو گره n و n’ را در نظر می گیریم که n پدر n’ است. حال تصور کنید که g(n)=3 و h(n)=4 . سپس f(n) = g(n) + h(n) = 7 . بنابراین حداقل هزینه واقعی یک مسیر از n، 7 است. حال فرض کنید g(n’)=4 و h(n’)=2 در نتیجه f(n’) = g(n’) + h(n’) = 6 . این یک مثال از یک کشف کنندگی یکنواخت بود. با استفاده از این واقعیت که هر مسیری از n’ هم چنین مسیری از n است، می توانیم ببینیم که مقدار 6 بی معناست، زیرا ما قبلا هزینه واقعی، که حداقل 7 است را می دانستیم.

از این رو هر گره جدیدی که تولید می شود، باید کنترل کنیم که آیا هزینه f این گره از هزینه f پدرش کمتر است یا خیر. اگر کمتر باشد هزینه f پدر به جای فرزند می نشیند.

f(n’) = max(f(n), g(n) + h(n))

از این طریق، ما مقادیر گمراه کننده را که ممکن است با یک کشف کنندگی یکنوا پدیدار شوند، حذف می کنیم. این معادل سازی معادله Pathmax نامیده می شود. اگر آن را به کار ببریم، سپس f همیشه در طول هر مسیری از ریشه غیر کاهشی خواهد بود، مشروط بر اینکه h امکان پذیر باشد

[...] اگر f در طول هر مسیری از ریشه هرگز کاهش پیدا نکند، ما می توانیم ناحیه هایی (Contours) در فضای حالت بکشیم. شکل زیر مثالی را نشان می دهد. داخل ناحیه ای که 400 نام گذاری شده، تمام گره ها (n)f ای که کمتر یا مساوی 400 هستند به هم وصل شده و الی آخر.

پس به علت اینکه A* ، گره برگی کمترین f را بسط می دهد، می توانیم ببینیم که جستجوی A* از گره اولیه، گره هایی با هزینه f افزایشی را در نواحی متحدالمرکز اضافه می کند.

اگر f* را هزینه مسیر راه حل تعریف کنیم می توانی بگوییم که جستجوی A* :

  • تمام گره ها با f(n)>f* را بسط می دهد.
  • ممکن است تعدادی از گره هایی که به درستی بر روی ناحیه هدف برای f(n)=f* قرار دارند، قبل از اینکه گره هدف انتخاب شود، بسط دهد.

بهینگی A*

فرض کنید که G حالت هدف بهینه با هزینه مسیر f* باشد. 2G نیز یک حالت هدف زیر بهینه باشد، که یک حالت هدف با هزینه مسیر g(G2)>f* است. شرایطی را که فرض می کنیم این است که A*، G2 را از صف انتخاب کرده است. زیرا G2 یک حالت هدف است و جستجو را با یک راه حل زیر بهینه پایان می دهد.

حال نشان می دهیم ای غیر ممکن است :

یک گره همانند n را در نظر بگیرید که در حال حاضر گره ای برای روی مسیر بهینه به G است. (نباید چینن گره ای وجود داشته باشد مگر اینکه مسیر به طور کامل بسط داده شده باشد، در اینصورت الگوریتم G را برمی گرداند) چون h مجاز است داریم :

f*> f(n)

علاوه بر آن، اگر n برای بسط روی G2 انتخاب نشده باشد، داریم :

f(n) > f(G2)

با ترکیب این دو نتیجه می گیریم :

f* > f(G2)

اما به این علت که G2 یک حالت هدف است، داریم 0=h(G2) ؛ از این رو f(G2)=g(G2) . بنابراین ما با استفاده از این فرضیات ثابت کردیم که f* > g(G2) .

این نتیجه با این فرض که G2 زیر بهینه است در تناقض خواهد بود. بنابراین باید توجه کنیم که A* هرگز یک هدف زیر بهینه را برای بسط انتخاب نمی کند. به علت اینکه فقط یک راه حل پس از انتخاب آن برای بسط برمی گردد، پس A* یک الگوریتم بهینه است.

اثبات کامل بودن A*

چون A* به منظور افزایش f گره­ ها را بسط می دهد، سرانجام باید به یک حالت هدف برسد. البته درست است، مگر اینکه گره های نامحدود زیادی با f(n)< SPAN> وجود داشته باشند. تنها راهی که ممکن است گره های نامحدود وجود داشته باشند :</F*>

الف – گره ای با فاکتور انشعاب نامحدود وجود دارد

ب – مسیری با هزینه مسیر متناهی اما تعداد زیادی گره های نامحدود در طول مسیر وجود داشته دارد.

از این رو، عبارت صحیح این است که A* روی گراف های متناهی محلی (گراف هایی با فاکتور انشعاب محدود : Locally Finite Graphs) کامل است، مشروط بر اینکه مقدار ثابت مثبت ¶ وجود داشته باشد که هر عملگر حداقل هزینه ای برابر با ¶ داشته باشد.

پیچیدگی A*

جستجوی A* بین تمام الگوریتم ها کامل، بهینه و کارآ بهینه است. متأسفانه بدین معنا نیست که A* پاسخی برای تمام نیازهای جستجو است. برای بیشتر مسائل، تعداد گره ها که در شمارنده هدف قرار دارند نسبت به طول راه حل مرتبه نمایی دارند. اگر خطا در تابع کشف کننده رشدی سریع تر از لگاریتم هزینه مسیر واقعی نداشته باشد، رشد نمایی اتفاق نخواهد افتاد. به زبان ریاضی، شرط برای رشد زیرنمایی عبارت زیر است :

که در آن h*(n) هزینه واقعی رسیدن از n به هدف است. در استفاده ی عملی، خطاها با هزینه مسیر متناسب هستند و سرانجام رشدنمایی هر کامپیوتری را تسخیر می کند. البته استفاده از یک کشف کنندگی خوب هنوز باعث صرفه جویی زیادی نسبت به جستجوی ناآگاهانه می شود.

A* به دلیل ذخیره ی تمام گره های تولید شده، معمولا قبل از اینکه دچار کمبود زمان شود، دچار کمبود فضا می شود.

گذری بر سیستم‌های خبره‌ (Expert Systems)


اشاره
<استدلال> در میان اهل فن و صاحبان اندیشه تعاریف و تفاسیر متنوعی دارد. در نگاهی کلی، استفاده از دلیل و برهان برای رسیدن به یک نتیجه از فرضیاتی منطقی با استفاده از روش‌های معین، تعریفی از استدلال تلقی می‌شود؛ تعریفی که البته با دیدگاه‌های فلسفی و گاه ایده‌آل‌گرایانه از استدلال تفاوت دارد. با این حال موضوع مهم و اساسی در اینجا بحث در چیستی و چرایی این دیدگاه‌ها نیست، بلکه در مورد نحوه طراحی سیستم‌های با قدرت استدلال، با هر تعریفی، برای رسیدن به مجموعه‌ای از تصمیمات منطقی‌ ‌ با استفاده از مفروضات یا به طور دقیق‌تر دانشی است که در اختیار آن‌ها قرار می‌گیرد. سیستم‌هایی خبره (expert systems) اساسا برای چنین هدفی طراحی می‌شوند. در حقیقت به واسطه الگوبرداری این سیستم‌ها از نظام منطق و استدلال انسان و نیز یکسان بودن منابع دانش مورد استفاده آن‌ها، حاصل کار یک سیستم خبره می‌تواند تصمیماتی باشد که درحوزه‌ها و عرصه‌های مختلف قابل استفاده، مورد اطمینان و تاثیرگذار هستند. بسیاری بر این باورند که سیستم‌های خبره بیشترین پیشرفت را در هوش مصنوعی به وجود آورده‌اند. آن‌چه درادامه می‌خوانید نگاهی کوتاه به تعاریف و سازوکار سیستم‌های خبره و گذری بر مزایا و محدودیت‌های به کارگیری این سیستم‌ها در علوم و فنون مختلف است. طبیعتاً مباحث کاربردی‌تر و عملی‌تر درباره سیستم‌های خبره و بحث درباره نحوه توسعه و پیاده‌سازی آن‌ها، نیازمند مقالات جداگانه‌ای است که در آینده به آن‌ها خواهیم پرداخت.

سیستم خبره چیست؟
در یک تعریف کلی می‌توان گفت سیستم‌های خبره، برنامه‌های کامپیوتری‌ای هستند که نحوه تفکر یک متخصص در یک زمینه خاص را شبیه‌سازی می‌کنند. در واقع این نرم‌افزارها، الگوهای منطقی‌ای را که یک متخصص بر اساس آن‌ها تصمیم‌گیری می‌کند، شناسایی می‌نمایند و سپس بر اساس آن الگوها، مانند انسان‌ها تصمیم‌گیری می‌کنند.
یکی از اهداف هوش مصنوعی، فهم هوش انسانی با شبیه‌سازی آن توسط برنامه‌های کامپیوتری است. البته بدیهی است که “هوش‌”‌ را می‌توان به بسیاری از مهارت‌های مبتنی بر فهم، از جمله توانایی تصمیم‌گیری، یادگیری و فهم زبان تعمیم داد و از این‌رو واژه‌ای کلی محسوب می‌شود.
بیشتر دستاوردهای هوش مصنوعی در زمینه تصمیم‌گیری و حل مسئله بوده است که اصلی‌ترین موضوع سیستم‌های خبره را شامل می‌شوند. به آن نوع از برنامه‌های هوش مصنوعی که به سطحی از خبرگی می‌رسند که می‌توانند به جای یک متخصص در یک زمینه خاص تصمیم‌گیری کنند، expert systems یا سیستم‌های خبره گفته می‌شود. این سیستم‌ها برنامه‌هایی هستند که پایگاه دانش آن‌ها انباشته از اطلاعاتی است که انسان‌ها هنگام تصمیم‌گیری درباره یک موضوع خاص، براساس آن‌ها تصمیم می‌گیرند. روی این موضوع باید تأکید کرد که هیچ‌یک از سیستم‌های خبره‌ای که تا‌کنون طراحی و برنامه‌نویسی شده‌اند، همه‌منظوره نبوده‌اند و تنها در یک زمینه محدود قادر به شبیه‌سازی فرآیند تصمیم‌گیری انسان هستند.
به محدوده اطلاعاتی از الگوهای خبرگی انسان که به یک سیستم خبره منتقل می‌شود، task domain گفته می‌شود. این محدوده، سطح خبرگی یک سیستم خبره را مشخص می‌کند و نشان می‌دهد ‌که آن سیستم خبره برای چه کارهایی طراحی شده است. سیستم خبره با این task ها یا وظایف می‌تواند کارهایی چون برنامه‌ریزی، زمانبندی، و طراحی را در یک حیطه تعریف شده انجام دهد.
به روند ساخت یک سیستم خبره، knowledge engineering یا مهندسی دانش گفته می‌شود. یک مهندس دانش باید اطمینان حاصل کند که سیستم خبره طراحی شده، تمام دانش مورد نیاز برای حل یک مسئله را دارد. طبیعتاً در غیراین‌صورت، تصمیم‌های سیستم خبره قابل اطمینان نخواهند بود.
ساختار یک سیستم خبره‌
هر سیستم خبره از دو بخش مجزا ساخته شده است: پایگاه دانش و موتور تصمیم‌گیری.
پایگاه دانش یک سیستم خبره از هر دو نوع دانش مبتنی بر حقایق ‌(factual) و نیز دانش غیرقطعی (heuristic) استفاده می‌کند. Factual knowledge، دانش حقیقی یا قطعی نوعی از دانش است که می‌توان آن را در حیطه‌های مختلف به اشتراک گذاشت و تعمیم داد؛ چراکه درستی آن قطعی است.
در سوی دیگر، Heuristic knowledge قرار دارد که غیرقطعی‌تر و بیشتر مبتنی بر برداشت‌های شخصی است. هرچه حدس‌ها یا دانش هیورستیک یک سیستم خبره بهتر باشد، سطح خبرگی آن بیشتر خواهد بود و در شرایط ویژه، تصمیمات بهتری اتخاذ خواهد کرد.
دانش مبتنی بر ساختار Heuristic در سیستم‌های خبره اهمیت زیادی دارد این نوع دانش می‌تواند به تسریع فرآیند حل یک مسئله کمک کند.
البته یک مشکل عمده در ارتباط با به کارگیری دانشHeuristic آن است که نمی‌توان در حل همه مسائل از این نوع دانش استفاده کرد. به عنوان نمونه، نمودار (شکل 1) به خوبی نشان می‌دهد که جلوگیری از حمل سموم خطرناک از طریق خطوط هوایی با استفاده از روش Heuristic امکانپذیر نیست.

شکل 1

اطلاعات این بخش از سیستم خبره از طریق مصاحبه با افراد متخصص در این زمینه تامین می‌شود. مهندس دانش یا مصاحبه‌کننده، پس از سازمان‌دهی اطلاعات جمع‌آوری‌شده از متخصصان یا مصاحبه شوندگان، آ‌ن‌ها را به قوانین قابل فهم برای کامپیوتر به صورت (if-then) موسوم به قوانین ساخت (production rules) تبدیل می‌کند.
موتور تصمیم‌گیری سیستم خبره را قادر می‌کند با استفاده از قوانین پایگاه دانش، پروسه تصمیم‌گیری را انجام دهد. برای نمونه، اگر پایگاه دانش قوانینی به صورت زیر داشته باشد:
●دفتر ماهنامه شبکه در تهران قرار دارد.
●تهران در ایران قرار دارد.
سیستم خبره می‌تواند به قانون زیر برسد:
●‌ دفتر ماهنامه شبکه در ایران قرار دارد.
استفاده از منطق فازی
موضوع مهم دیگر در ارتباط با سیستم‌های خبره، پیوند و ارتباط آن با دیگر شاخه‌های هوش مصنوعی است. به بیان روشن‌تر، برخی از سیستم‌های خبره از Fuzzy Logic یا منطق فازی استفاده می‌کنند. در منطق غیرفازی تنها دو ارزش درست (true) یا نادرست (false) وجود دارد. چنین منطقی نمی‌تواند چندان کامل باشد؛ چراکه فهم و پروسه تصمیم‌گیری انسان‌ها در بسیاری از موارد، کاملا قطعی نیست و بسته به زمان و مکان آن، تا حدودی درست یا تا حدودی نادرست است. در خلال سال‌های 1920 و 1930، Jan Lukasiewicz فیلسوف لهستانی منطقی را مطرح کرد که در آن ارزش یک قانون می‌تواند بیشتر از دو مقدار 0 و 1 یا درست و نادرست باشد. سپس پروفسور لطفی‌زاده نشان داد که منطق Lukasiewicz را می‌توان به صورت “درجه درستی” مطرح کرد. یعنی به جای این‌که بگوییم: “این منطق درست است یا نادرست؟” بگوییم: “این منطق چقدر درست یا چقدر نادرست است؟”
از منطق فازی در مواردی استفاده می‌شود که با مفاهیم مبهمی چون “سنگینی”، “سرما”، “ارتفاع” و از این قبیل مواجه شویم. این پرسش را در نظر بگیرید : “وزن یک شیء 500 کیلوگرم است، آیا این شیء سنگین است؟” چنین سوالی یک سوال مبهم محسوب می‌شود؛ چراکه این سوال مطرح می‌شود که “از چه نظر سنگین؟” اگر برای حمل توسط یک انسان بگوییم، بله سنگین است. اگر برای حمل توسط یک اتومبیل مطرح شود، کمی سنگین است، ولی اگر برای حمل توسط یک هواپیما مطرح شود سنگین نیست.
در اینجاست که با استفاده از منطق فازی می‌توان یک درجه درستی برای چنین پرسشی در نظر گرفت و بسته به شرایط گفت که این شیء کمی سنگین است. یعنی در چنین مواردی گفتن این‌که این شیء سنگین نیست
(false) یا سنگین است (true) پاسخ دقیقی نیست.
مزایا و محدودیت‌های سیستم‌های خبره
دستاورد سیستم‌های خبره را می‌توان صرفه‌جویی در هزینه‌ها و نیز تصمیم‌گیری‌های بهتر و دقیق‌تر و بسیاری موارد تخصصی‌تر دیگر عنوان کرد. استفاده از سیستم‌های خبره برای شرکت‌ها می‌تواند صرفه‌جویی به همراه داشته باشد.
در زمینه تصمیم‌گیری نیز گاهی می‌توان در شرایط پیچیده، با بهره‌گیری از چنین سیستم‌هایی تصمیم‌های بهتری اتخاذ کرد و جنبه‌های پیچیده‌ای را در مدت زمان بسیار کمی مورد بررسی قرار داد که تحلیل آنها به روزها زمان نیاز دارد.
از سوی دیگر، به‌کارگیری سیستم‌های خبره محدودیت‌های خاصی دارد. به عنوان نمونه، این سیستم‌ها نسبت به آنچه انجام می‌دهند، هیچ <حسی> ندارند. چنین سیستم‌هایی نمی‌توانند خبرگی خود را به گستره‌های وسیع‌تری تعمیم دهند؛ چراکه تنها برای یک منظور خاص طراحی شده‌اند و پایگاه دانش آن‌ها از دانش متخصصان آن حوزه نشات گرفته و از این‌رو محدود است.
چنین سیستم‌هایی از آنجا که توسط دانش متخصصان تغذیه اطلاعاتی شده‌اند، در صورت بروز برخی موارد پیش‌بینی نشده، نمی‌توانند شرایط جدید را به درستی تجزیه و تحلیل نمایند.
کاربرد سیستم‌های خبره‌
از سیستم‌های خبره در بسیاری از حیطه‌ها از جمله برنامه‌ریزی‌های تجاری، سیستم‌های امنیتی، اکتشافات نفت و معادن، مهندسی ژنتیک، طراحی و ساخت اتومبیل، طراحی لنز دوربین و زمانبندی برنامه پروازهای خطوط هوایی استفاده می‌شود. دو نمونه از کاربردهای این سیستم‌ها در ادامه توضیح داده‌شده‌اند.
●‌ طراحی و زمانبندی‌
سیستم‌هایی که در این زمینه مورد استفاده قرار می‌گیرند، چندین هدف پیچیده و تعاملی را مورد بررسی قرار می‌دهند تا جوانب کار را روشن کنند و به اهداف مورد نظر دست یابند یا بهترین گزینه را پیشنهاد دهند. بهترین مثال از این مورد، زمانبندی پروازهای خطوط هوایی، کارمندان و گیت‌های یک شرکت حمل و نقل هوایی است.
‌●تصمیم‌گیری‌های مالی‌
صنعت خدمات مالی یکی از بزرگ‌ترین کاربران سیستم‌های خبره است. نرم‌افزارهای پیشنهاددهنده نوعی از سیستم‌های خبره هستند که به عنوان مشاور بانکداران عمل می‌کنند. برای نمونه، با بررسی شرایط یک شرکت متقاضی وام از یک بانک تعیین می‌کند که آیا پرداخت این وام به شرکت برای بانک مورد نظر صرفه اقتصادی دارد یا نه. همچنین شرکت‌های بیمه برای بررسی میزان خطرپذیری و هزینه‌های موارد مختلف، از این سیستم‌ها استفاده می‌کنند.
چند سیستم خبره مشهور
از نخستین سیستم‌های خبره می‌توان به Dendral اشاره کرد که در سال 1965 توسط Edward Feigenbaum وJoshun Lederberg پژوهشگران هوش مصنوعی در دانشگاه استنفورد ساخته شد.
وظیفه این برنامه کامپیوتری، تحلیل‌های شیمیایی بود. ماده مورد آزمایش می‌توانست ترکیبی پیچیده از کربن، هیدروژن و نیتروژن باشد. Dendarl می‌توانست با بررسی آرایش و اطلاعات مربوط به یک ماده، ساختار مولکولی آن را شبیه‌سازی کند. کارکرد این نرم‌افزار چنان خوب بود که می‌توانست با یک متخصص رقابت کند.
از دیگر سیستم‌های خبره مشهور می‌توان به MYCIN اشاره کرد که در سال 1972 در استنفورد طراحی شد. MYCIN برنامه‌ای بود که کار آن تشخیص عفونت‌های خونی با بررسی اطلاعات به دست آمده از شرایط جسمی بیمار و نیز نتیجه آزمایش‌های او بود.
برنامه به گونه‌ای طراحی شده بود که در صورت نیاز به اطلاعات بیشتر، با پرسش‌هایی آن‌ها را درخواست می‌کرد تا تصمیم‌گیری بهتری انجام دهد؛ پرسش‌هایی چون “آیا بیمار اخیرا دچار سوختگی شده است؟” (برای تشخیص این‌که آیا عفونت خونی از سوختگی نشات گرفته یا نه. MYCIN ( گاه می‌توانست نتایج آزمایش را نیز از پیش حدس بزند.
سیستم خبره دیگر در این زمینه Centaur بود که کار آن بررسی آزمایش‌های تنفسی و تشخیص بیماری‌های ریوی بود.
یکی از پیشروان توسعه و کاربرد سیستم‌های خبره، سازمان‌های فضایی هستند که برای مشاوره و نیز بررسی شرایط پیچیده و صرفه‌جویی در زمان و هزینه چنین تحلیل‌هایی به این سیستم‌ها روی آورده‌اند.
Marshall Space Flight Center) MSFC) یکی از مراکز وابسته به سازمان فضایی ناسا از سال 1994 در زمینه توسعه نرم‌افزارهای هوشمند کار می‌کند که هدف آن تخمین کمّ و کیف تجهیزات و لوازم مورد نیاز برای حمل به فضا است.
این برنامه‌های کامپیوتری با پیشنهاد راهکارهایی در این زمینه از بار کاری کارمندان بخش‌هایی چون ISS (ایستگاه فضایی بین المللی) می‌کاهند و به گونه‌ای طراحی شده‌اند که مدیریت‌پذیرند و بسته به شرایط مختلف، قابل تعریف هستند.
مرکز فضایی MSFC، توسط فناوری ویژه خود موسوم به 2G به ایجاد برنامه‌های ویژه کنترل هوشمندانه و سیستم‌های مانیتورینگ خطایاب می‌پردازد. این فناوری را می‌توان هم در سیستم‌های لینوکسی و هم در سیستم‌های سرور مبتنی بر ویندوز مورد استفاده قرار داد.
آنچه در نهایت می‌توان گفت آن است که یکی از مزیت‌های سیستم‌های خبره این است که می‌توانند در کنار متخصصان انسانی مورد استفاده قرار بگیرند که ماحصل آن تصمیمی مبتنی بر تخصص انسانی و دقت ماشینی است. این فناوری از دید تجاری نیز برای توسعه‌دهندگان آن سودآور است.
هم‌اکنون شرکت‌های بسیاری به فروش سیستم‌های خبره و پشتیبانی از مشتریان محصولات خود می‌پردازند. درآمد یک شرکت کوچک فعال در زمینه فروش چنین محصولاتی می‌تواند سالانه بالغ بر پنج تا بیست میلیون دلار باشد. بازار فروش و پشتیبانی سیستم‌های خبره در سراسر جهان نیز سالانه به صدها میلیون دلار می‌رسد.

استخراج ویژگی های صوتی

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

معرفی ویژگی های صوتی :
این مرحله در پردازش انواع سیگنال ها اجتناب ناپذیر می باشد.یک سیگنال در یک بازه زمانی حاوی داده های نامربوط بسیاری می باشد که به صورت مستقیم می توان از آنها برای طبقه بندی استفاده کرد.مشکل اصلی در این زمینه یافتن ویژگی های موثری است که به روند طبقه بندی سرعت و دقت بالاتری بخشند.زیرا ویژگی های ضعیف علاوه بر دشوار ساختن عملیات طبقه بندی ، موجب دریافت نتایج ضعیف می گردند.در این راستا در ادامه انواع ویژگی های سیگنال های صوتی به اجمال مورد بررسی قرار می گیرند.
ویژگی های طیفی
ویژگی های طیفی ویژگی هایی هستند که یک طیف را در بازه های زمانی کوچک قابل تمایز می سازند.این ویژگی ها به خصوص درباره طبقه بندی سیگنال های صوتی بسیار موثر می باشند.اگر چه ویژگی های متفاوتی در مسایل مختلف قابل بحث هستند ، اما در مورد موضوعاتی مانند تشخیص آوا ها و ابزار های موسیقی ویژگی های موقتی از جایگاه ویژه ای برخوردارند.
در استخراج ویژگی های طیفی فاز مربوط به طیف قابل حذف است و به این منجر به 50 در صد کاهش اطلاعات خواهد شد.همچنین ساختار مناسب طیف در اکثر مواقع قابل حذف می باشد.همچنین می توان بسیاری از اطلاعات نامربوط دیگر را حذف نمود.تنها چیزی که باقی می ماند طیف ضخیم مربوط به توزیع انرژی می باشد که در طبقه بندی سیگنال های صوتی از اهمیت بالایی بر خوردار می باشد و در واقع پایه ای برای تشخیص ویژگی های گفتار و آوا های صوتی می باشد.
ضرایب Cepstral
ضرایب Cepstral که با c(k) نشان داده می شوند یک راه بسیار مناسب برای مدل کردن توزیع انرژی طیف می باشند.این ضرایب به صورت زیر قابل محاسبه اند :
C(k)=IDFT{log|DFT{x(n)}|}
که DFT تبدیل فوریه و IDFT معکوس آن می باشد.در نرم افزار MATLAB این ضرایب به صورت زیر قابل محاسبه اند :
c = real(ifft( log( abs( fft(x)))));
از آنجا که دقت عددی تولید شده بسیار کم اهمیت می باشد در فرمول بالا جز حقیقی به عنوان c در نظر گرفته شده است.
ضرایب Cepstral در فریم های کوتاهی در طول زمان محاسبه می شوند که البته مدل های محاسبه شده با محاسبه میانگین و واریانس هر ضریب در طول زمان قابل افزایش است.فقط از M ضریب اول Cepstral به عنوان ویژگی استفاده می شود.در مورد این ضرایب نکات زیر حائز اهمیت است :
• در صورت استفاده از کلیه ضرایب طیف به صورت دقیق به دست می آید.
• شمای طیف ضخیم با استفاده از ضرایب ابتدایی به دست می آید.
• دقت مدل سازی با توجه به تعداد ضرایب تعیین می شود.
• اولین ضریب که انرژی می باشد دور انداخته می شود.
معمولا M=f/2000 تخمین خوبی برای M می باشد که f در این فرمول فرکانس می باشد.
مشکل عمده در استفاده از ضرایب Cepstral خطی بودن مقیاس فرکانس می باشد.زیرا معمولا فرکانس هایی که در محدوده 100 تا 200 هرتز و 10 تا 20 کیلو هرتز هستند دارای اهمیت می باشند که ضرایب Cepstral این محدوده را به حساب نمی آورند.در این شرایط به نظر می آید که مقیاس لگاریتمی از فرکانس بتواند عملکرد بهتری داشته باشد.برای حل این مشکل باید توجه داشت که عمدتا ما به دنبال تشابهات و عدم تشابهات در مورد ادراک ها برای طبقه بندی هستیم ضمن اینکه ویژگی های مرتبط استخراج شده از این ادراک ها ما را به سمت یک کلاس بندی مطلوب هدایت می کند.بنابراین در راستای رسیدن به هدف نیاز به مرغوب سازی ویژگی ها با اعمال اندکی تغییر در آنها احساس می شود. البته باید توجه داشت که اعمال تغییرات کوچک در ویژگی ها منجر به اعمال تغییرات کوچک در داده های ادراکی می شود(و بالعکس).به دلیل پایین بودن وضوح این تغییرات به خاطر مناسب نبودن مقیاس نیاز به ضرایبی با درجه وضوح بالاتری در نشان دادن این تغییرات جزیی داریم . این نیاز منجر به استفاده از ضرایب جدیدی تحت عنوان ضرایب Mel-frequency cepstralمی شود که به طور کامل کمبود های یاد شده را پوشش می دهد.در ادامه به بررسی تاثیر انواع مقیاس ها بر روی کیفیت خواهیم پرداخت.
حال اگر در حوزه فرکانسی از مقیاس لگاریتمی استفاده شود به این ترتیب فاصله بین نت ها با وضوح بیشتری نسبت به حالت قبل قبل قابل مشاهده است.در واقع به داده های ادراکی نزدیک تر است.
همانطور که دیده شد استفاده از مقیاس لگاریتمی در دامنه و فرکانس منجر به وضوح بیشتر می شود.اعمال این تغییر بر روی ضرایب Cepstral منتهی به تولید یک سری از ویژگی های جدیدی خواهد شد که در قسمت بعد به آن پرداخته خواهد شد.

ضرایب Mel-Frequency cepstral
این ضرایب نوع بهبود یافته از ضریب cepstral می باشند.
مراحل کار برای تولید این ضرایب به این صورت است که پس از پنجره بندی و ایجاد فریم ها از سیگنال ورودی تبدیل فوریه گسسته بر روی هر یک از این فریم ها اعمال شده و حاصل به filterbank داده می شود.این فیلتر بر روی دامنه فرکانس ها اعمال شده و آن را یکنواخت می سازد.
یک راه برای تولید Mel-frequency درونیابی بر روی فرکانس گسسته اصلی می باشد.پس از اعمال فیلتر و سپس تبدیل cosine گسسته(DCT) MFCC بدست آمده است.
مقیاس مورد استفاده در فرکانس Mel به صورت زیر محاسبه می شود :
Mel(f)=2595log(1+f/700)
پس از محاسبه این ضریب در ادامه به پاره ای از دلایل موفقیت این ضریب خواهیم پرداخت.
یکی از دلایل کارایی بالا این ضریب در درجه وضوح بالای آن می باشد.به این معنی که تغییرات جزیی با استفاده از این مقیاس اثر خود را به خوبی نشان می دهند.نقطه قوت دیگر این روش در استفاده از DCT می باشد که علاوه بر اینکه spectral fine structure را حذف می کند و باعث خلاصه سازی داده ها می شود همبستگی بین ویژگی ها را از بین برده و عملیات طبقه بندی را بهبود می بخشد.
MFCC در کنار سایر ویژگی ها می تواند به صورت یک بردار پیوسته از ویژگی ها بیان شود.به عنوان یکی از ویژگی های مورد استفاده در کنار MFCC می توان به مرکز ثقل طیف اشاره کرد.
ویژگی دیگر قابل بررسی درباره طیف پهنای باند آن می باشد.
به عنوان ویژگی های دیگر به خصوص در باره صدا های موزون می توان به بی نظمی طیفی اشاره کرد که در واقع انحراف از دامنه های موزون طیف می باشد.
ویژگی های زمانی
در این بخش به توصیف ویژگی های زمانی یک سیگنال صوتی و تحولات آن با گذشت زمان می پردازیم.این ویژگی دارای اثرات مشخص تری می باشد.برای استخراج این ویژگی یک سطح میانی از سیگنال ورودی با خصوصیات زیر در نظر می گیریم :
• Power envelope سیگنال با سرعت 100 هرتز تا 1 کیلو هرتز نمونه برداری شده است.
• یا Power envelopes سیگنال دارای 3 تا 40 زیرباند می باشد.
• فاز و ساختار مناسب طیف از آن حذف شده اند.
در راستای استخراج ویژگی ها دو مسئله به عنوان نمونه قابل طرح است.مسئله اول دسته بندی اصوات صوتی می باشد.در این مسئله ویژگی های زمانی قابل استخراج بدین شرحند :
• ویژگی زمان خیز :که فاصله زمانی بین شروع تا لحظه ماکسیمم شدن دامنه می باشد.
• شروع غیر همزمانی در فرکانس های متفاوت
• نوسان فرکانسی
• نوسان دامنه ای
امادر مورد مسئله دوم که طبقه بندی عمومی سیگنال های صوتی می باشد ، ویژگی های قابل استخراج بدین شرحند :
• نوسان دامنه ای
• MFCC ویژگی های زمانی
در ادامه پس از آشنایی با چند ویژگی زمانی به ویژگی هایی که در دامنه زمانی محاسبه می شوند می پردازیم.
در پاره ای از اوقات به دلیل کم کردن حجم محاسباتی نیاز به یک سری از ویژگی های بسیار روشن و سهل وصول و تا حد ممکن دوری از تبدیل فوریه در استخراج ویژگی ها می باشد.اولین ویژگی از این دسته Zero-crossing rate می باشد.
این ویژگی تا حد زیادی با مرکز ثقل طیف در ارتباط می باشد.
به عنوان یک ویژگی دیگر از ویژگی های زمانی قابل استخراج از سیگنال می توان Short-time energy را نام برد.این ویژگی یکی از ضعیف ترین ویژگی های سیگنال های صوتی می باشد که البته در صورت تنوع آماری می تواند مفید واقع شود.