0% found this document useful (0 votes)
157 views79 pages

Python

Uploaded by

Ali st
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
157 views79 pages

Python

Uploaded by

Ali st
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 79

‫دانشگاه خراسان‬

‫هوش محاسباتی با پایتون‬

‫تهیه و تنظیم‪:‬‬

‫علی خرمی‬

‫زمستان ‪1398‬‬

‫‪1‬‬
2
‫فهرست مطالب‬

‫فصل اول‪ :‬آَشنایی با زبان برنامه نویسی پایتون‪5 .................................‬‬ ‫‪.1‬‬

‫پایتون چیست؟ ‪5 ................................................................................................................................‬‬

‫دانلود و نصب ‪5 ...................................................................................................................................‬‬

‫ساخت یک برنامه ساده ‪9 ......................................................................................................................‬‬

‫نکاتی در مورد کدنویسی در پایتون ‪19 .....................................................................................................‬‬

‫توضیحات ‪20 ...................................................................................................................................‬‬

‫کاراکترهای کنترلی ‪21 ......................................................................................................................‬‬

‫متغیر ‪23 ........................................................................................................................................‬‬

‫انواع داده ‪24 ..................................................................................................................................‬‬

‫استفاده از متغیرها ‪25 ......................................................................................................................‬‬

‫(‪)Placeholders‬جانگهدار ‪28 .............................................................................................................‬‬

‫عبارات و عملگرها ‪29 .......................................................................................................................‬‬

‫عملگرهای ریاضی ‪30 ........................................................................................................................‬‬

‫عملگرهای تخصیصی (جایگزینی) ‪31 ...................................................................................................‬‬

‫عملگرهای مقایسه ای ‪33 ..................................................................................................................‬‬

‫عملگرهای منطقی ‪34 .......................................................................................................................‬‬

‫عملگرهای بیتی ‪35 ..........................................................................................................................‬‬

‫عملگر بیتی تغییر مکان (‪35 ......................................................................................................)shift‬‬

‫عملگرهای خاص ‪35 .........................................................................................................................‬‬

‫گرفتن ورودی از کاربر ‪37 ..................................................................................................................‬‬

‫‪3‬‬
‫ساختارهای تصمیم ‪37 ......................................................................................................................‬‬

‫دستور ‪39 ........................................................................................................................... if…else‬‬

‫تکرار ‪41 .........................................................................................................................................‬‬

‫حلقه ‪42 ................................................................................................................................... for‬‬

‫فصل دوم ‪ :‬آشنایی با شبکه های عصبی ‪45 ................................................‬‬ ‫‪.2‬‬

‫‪4‬‬
‫‪ .1‬فصل اول‪ :‬آَشنایی با زبان برنامه نویسی پایتون‬

‫پایتون چیست؟‬

‫در سال ‪ 1991‬در کشور هلند طراحی شد‪ .‬این زبان از زبانهای برنامهنویسی مفسر بوده و به صورت کامل یک زبان‬

‫شیءگرا است که به زبانهای تفسیری ‪ Perl‬و ‪ Ruby‬شباهت دارد و از مدیریت خودکار حافظه استفاده میکند‪.‬‬

‫پایتون‪ ،‬کد باز (‪ )Open Source‬است‪ ،‬زبانی که گوگل و یا یاهو از آن به عنوان یکی از اصلی ترین ابزارهای توسعه‬

‫استفاده می کنند‪ .‬برنامه های پایتون مثل ‪ PHP‬قابل اجرا روی اغلب سیستم عامل هاست‪ .‬پایتون‪ ،‬دستور زبانی شبیه‬

‫گفتار ساده ی انگلیسی دارد و با دارا بودن ‪ 33‬کلمه کلیدی جزء ساده ترین زبان ها است‪.‬‬

‫سادگی و خوانایی از ویژگیهای بارز زبان برنامهنویسی پایتون است‪ ،‬آنچنان ساده که حتی کودکان نیز قادر به آموختن‬

‫آن هستند و قدرت در کنار این سادگی و خوانایی‪ ،‬معجزه پایتون میباشد‪ .‬از نگاه هر برنامهنویسی‪ ،‬برنامههای پایتون‬

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

‫نام ‪ IronPython‬در تکنولوژی ‪ .Net‬خود گنجانده است‪.‬‬

‫هم اکنون پایتون در شرکت ها و سازمان های بزرگی مثل ناسا و گوگل و یاهو و … به صورت گسترده مورد استفاده قرار‬

‫می گیرد‪.‬‬

‫دانلود و نصب‬

‫برای برنامه نویسی به زبان های مختلف محیط های توسعه ی یکپارچه یا ‪ IDE‬های مختلفی وجود دارند که به برنامه‬

‫نویسان در نوشتن و ویرایش کدها‪ ،‬پیدا کردن خطاها‪ ،‬نمایش خروجی‪ ،‬و برخی موارد دیگر کمک می کنند‪ .‬برای اجرای‬

‫کدهای ‪ Python‬محیط های مختلفی وجود دارد که ساده ترین آنها ‪ IDEL‬می باشد‪ .‬برای دانلود این محیط کدنویسی‪ ،‬بر‬

‫روی لینک زیر کلیک کنید‪:‬‬

‫‪https://www.python.org/downloads‬‬

‫با کلیک بر روی لینک باال‪ ،‬صفحه ای به صورت زیر باز می شود‪ ،‬که در این صفحه همانطور که در شکل زیر مشاهده می‬

‫کنید‪ ،‬بر روی دکمهای که با فلش نشان داده شده کلیک کرده‪ ،‬تا آخرین نسخه ‪ IDEL‬دانلود شود‪:‬‬

‫‪5‬‬
‫شکل ‪ .1‬شروع نصب‬

‫بعد از دانلود فایل مورد نظر به محل ذخیره آن رفته و بر روی فایل دو بار کلیک کنید‪ .‬سپس در صفحه ای که به صورت‬

‫زیر نمایش داده میشود‪ ،‬تیک مورد نظر را زده و سپس بر روی گزینه ‪ Customize installation‬کلیک کنید‪:‬‬

‫شکل ‪.2‬‬

‫‪6‬‬
‫بعد از کلیک بر روی گزینه مذکور صفحه ای به صورت زیر نمایش داده می شود‪ .‬در این صفحه بر روی دکمه ‪ Next‬کلیک‬

‫کنید‪:‬‬

‫شکل ‪.3‬‬

‫در صفحه بعد بر روی دکمه ‪ Install‬کلیک کرده و منتظر بمانید تا برنامه نصب شود‪:‬‬

‫‪7‬‬
‫شکل ‪.4‬‬

‫در آخر و بعد از نصب کامل برنامه پیغامی مبنی بر موفقیت آمیز بودن‪ ،‬نصب برنامه به شما نمایش داده می شود و شما‬

‫می توانید دکمه ‪ Close‬را بزنید‪:‬‬

‫‪8‬‬
‫شکل ‪.5‬‬

‫ساخت یک برنامه ساده‬

‫اجازه بدهید یک برنامه بسیار ساده به زبان پایتون بنویسیم ‪.‬این برنامه یک پیغام را نمایش میدهد‪ .‬از منوی ‪ Start‬محیط‬

‫برنامه نویسی ‪ IDEL‬را به صورت زیر اجرا کنید‪:‬‬

‫‪9‬‬
‫شکل ‪.6‬‬

‫با کلیک بر روی ‪ IDEL‬صفحه ای به صورت زیر نمایش داده می شود‪:‬‬

‫‪10‬‬
‫شکل ‪.7‬‬

‫در صفحه باز شده به صورت زیر بر روی منوی ‪ File‬و سپس گزینه ‪ New File‬کلیک کنید‪:‬‬

‫‪11‬‬
‫شکل ‪.8‬‬

‫با کلیک بر روی گزینه ‪ New File‬صفحه ای به صورت زیر نمایش داده می شود که شما می توانید کدهای خود را در‬

‫داخل آن بنویسید‪:‬‬

‫‪12‬‬
‫شکل ‪.9‬‬

‫در پنجره باال کدهای زیر را بنویسید‪:‬‬

‫‪13‬‬
‫شکل ‪.10‬‬

‫مانند شکل زیر از منوی ‪ File‬گزینه ‪ Save‬را بزنید‪:‬‬

‫‪14‬‬
‫شکل ‪.11‬‬

‫سپس یک مسیر برای ذخیره فایل انتخاب کنید‪ .‬ما در شکل زیر فایل را در درایو ‪ C‬ذخیره کرده ایم‪:‬‬

‫‪15‬‬
‫شکل ‪.12‬‬

‫بعد از ذخیره فایل به محیط کدنویسی بر گشته و از منوی ‪ Run‬گزینه ‪ Run Module‬و یا دکمه ‪ F5‬را بزنید‪:‬‬

‫‪16‬‬
‫شکل ‪.13‬‬

‫مشاهده می کنید که برنامه اجرا شده و پیغام ‪ !Welcome to Python tutorials‬چاپ می شود‪:‬‬

‫‪17‬‬
‫شکل ‪.14‬‬

‫مثال باال سادهترین برنامه ای است که شما میتوانید در ‪ Python‬بنویسید‪ .‬هدف در مثال باال نمایش یک پیغام در صفحه‬

‫نمایش است‪ .‬هر زبان برنامه نویسی دارای قواعدی برای کدنویسی است‪ .‬پایتون دارای متدهای از پیش تعریف شده ای‬

‫است که هر کدام برای مقاصد خاصی به کار می روند‪ .‬هر چند که در آینده در مورد متدها بیشتر توضیح می دهیم ولی‬

‫در همین حد به توضیح متد بسنده می کنیم که ‪)(print‬متدها مجموعه ای از کدها هستند که دارای یک نام بوده و در‬

‫جلوی نام آنها عالمت () قرار می گیرد‪ .‬یکی از این متدها‪ ،‬متد است‪ .‬از متد ()‪ print‬برای چاپ یک رشته استفاده میشود‪.‬‬

‫یک رشته گروهی از کاراکترها است‪ ،‬که به وسیله دابل کوتیشن )“( محصور شده است‪ .‬مانند ‪Welcome to Python ” :‬‬

‫‪ .“!Tutorials‬یک کاراکتر میتواند یک حرف‪ ،‬عدد‪ ،‬عالمت یا … باشد‪ .‬در کل مثال باال نحوه استفاده از متد ()‪print‬‬

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

‫نمیگیرد‪:‬‬

‫‪18‬‬
‫همیشه به یاد داشته باشید که ‪ Python‬به بزرگی و کوچکی حروف حساس است ‪.‬یعنی به طور مثال ‪ MAN‬و ‪ man‬در‬

‫‪ Python‬با هم فرق دارند‪ .‬رشتهها و توضیحات از این قاعده مستثنی هستند که در درسهای آینده توضیح خواهیم داد‪.‬‬

‫مثال کدهای زیر با خطا مواجه میشوند و اجرا نمیشوند‪:‬‬

‫تغییر در بزرگی و کوچکی حروف از اجرای کدها جلوگیری میکند‪ .‬اما کد زیر کامالً بدون خطا است‪:‬‬

‫نکاتی در مورد کدنویسی در پایتون‬

‫در زبان هایی مثل جاوا و سی شارپ‪ ،‬از عالمت آکوالد )}{( برای ایجاد یک بالک کد‬

‫ولی در زبان پایتون از ترکیب عالمت دو نقطه )‪ (:‬و تو رفتگی برای اینکار استفاده می شود‪:‬‬

‫ما با دونقطه به پایتون میگوییم که قصد داریم یک بلوک کد را آغاز کنیم و با تو رفتگی ابتدای خطوط دستورات آن‬

‫بلوک را تعریف میکنیم‪ .‬برای تورفتگی میتوانیم از ‪ 3‬یا ‪ 4‬یا ‪ 11‬فضای خالی استفاده کنیم‪ .‬میزان این فضای خالی تا‬

‫زمانی که در تمام کد رعایت شود‪ ،‬اهمیتی ندارد‪ .‬در کد زیر به اهمیت تو رفتگی ها پی می برید‪:‬‬

‫‪19‬‬
‫در کد باال‪ ،‬بالک اول (‪ )Block1‬از خط ‪ 1‬تا ‪ 3‬را شامل می شود‪ .‬به این نکته توجه کنید که خطوط بعد از عالمت ‪ :‬حتما‬

‫باید دارای تو رفتگی باشند‪ .‬بالک دوم (‪ )Block2‬از خط ‪ 4‬شروع و به خط ‪ 11‬ختم می شود‪ .‬نکته ای که باید در اینجا‬

‫دوباره به آن اشاره کنیم این است که دستور یا بالکهایی که دارای فاصله های برابر از سمت چپ هست جزو یک بالک‬

‫میباشند‪ .‬مثال در کد باال خطوط ‪2‬و ‪ 3‬جز ‪ Block1‬هستند چون تو رفتگی آنها از سمت چپ برابر است و اگر مثال فاصله‬

‫های خط ‪ 3‬از سمت چپ را حذف کنیم دیگر جز بالک ‪ 9،Block4‬و در خط ‪ Block2‬را زیر مجموعه ‪ 6،Block3‬محسوب‬

‫نمیشود‪ .‬یک بالک را می توان زیر مجموعه بالک دیگر کرد‪ .‬مثال در خط را زیر مجموعه ‪ Block3‬کرده ایم‪ .‬در نهایت‬

‫خط ‪ 11‬جز هیچکدام از بالک ها نیست و مستقل اجرا می شود‪ .‬گاهی اوقات و هنگام کدنویسی‪ ،‬الزم است که رشته های‬

‫طوالنی را در چند خط بنویسید‪ .‬برای اینکار در پایتون می توان از عالمت \ به صورت زیر استفاده کنید‪:‬‬

‫توضیحات‬
‫وقتی که کدی تایپ می کنید شاید بخواهید که متنی جهت یادآوری وظیفه آن کد به آن اضافه کنید‪ .‬در ‪) Python‬و‬

‫بیشتر زبانهای برنامه نویسی( می توان این کار را با استفاده از توضیحات انجام داد‪ .‬توضیحات متونی هستند که توسط‬

‫مفسر نادیده گرفته می شوند و به عنوان بخشی از کد محسوب نمی شوند‪.‬‬

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

‫فرض کنید که می خواهید در مورد یک کد خاص‪ ،‬توضیح بدهید‪ ،‬می توانید توضیحات را در باالی کد یا کنار آن‬

‫بنویسید‪ .‬از توضیحات برای مستند سازی برنامه هم استفاده می شود‪ .‬در برنامه زیر نقش توضیحات نشان داده شده‬

‫است‪:‬‬

‫‪20‬‬
‫در کد باال‪ ،‬خط اول کد باال یک توضیح درباره خط دوم است که به کاربر اعالم می کند که وظیفه خط دوم چیست ؟ با‬

‫اجرای کد باال فقط جمله ‪ Hello World‬چاپ شده و خط اول در خروجی نمایش داده نمی شود چون مفسر توضیحات‬

‫را نادیده می گیرد‪ .‬همانطور که مشاهده می کنید برای درج توضیخات در پایتون از عالمت ‪ #‬استفاده می شود‪ .‬برای‬

‫توضیحات طوالنی هم باید در ابتدای هر خط از توضیح این عالمت درج شود‪:‬‬

‫کاراکترهای کنترلی‬
‫کاراکترهای کنترلی‪ ،‬کاراکترهای ترکیبی هستند که با یک بک اسلش (\) شروع میشوند و به دنبال آنها یک حرف یا‬

‫عدد میآید و یک ‪ \n‬رشته را با فرمت خاص نمایش میدهند‪ .‬برای مثال برای ایجاد یک خط جدید و قرار دادن رشته‬

‫در آن میتوان از کاراکتر کنترلی استفاده کرد‪:‬‬

‫مشاهده کردید که مفسر بعد از مواجهه با کاراکتر کنترلی ‪ \n‬نشانگر ماوس را به خط بعد برده و بقیه رشته را در خط‬

‫بعد نمایش میدهد‪ .‬جدول زیر لیست کاراکترهای کنترلی و کارکرد آنها را نشان میدهد‪:‬‬

‫‪21‬‬
‫جدول ‪.1‬‬

‫ما برای استفاده از کاراکترهای کنترلی‪ ،‬از بک اسلش (\) استفاده میکنیم‪ .‬از آنجاییکه \ معنای خاصی به رشتهها‬

‫میدهد برای چاپ بک اسلش (\) باید از (\\) استفاده کنیم‪:‬‬

‫یکی از موارد استفاده از \\‪ ،‬نشان دادن مسیر یک فایل در ویندوز است‪:‬‬

‫از آنجاییکه از دابل کوتیشن (“) برای نشان دادن رشتهها استفاده میکنیم برای چاپ آن از ”\ استفاده میکنیم‪:‬‬

‫همچنین برای چاپ کوتیشن (‘) از ’\ استفاده میکنیم‪ .‬برای ایجاد فاصله بین حروف یا کلمات از ‪ \t‬استفاده میشود‪.‬‬

‫‪22‬‬
‫برای چاپ کاراکترهای یونیکد میتوان از ‪ \u‬استفاده کرد‪ .‬برای استفاده از ‪ ،\u‬مقدار در مبنای ‪ 16‬کاراکتر را درست بعد‬

‫از عالمت ‪ \u‬قرار میدهیم‪ .‬برای مثال اگر بخواهیم عالمت کپی رایت (©) را چاپ کنیم‪ ،‬باید بعد از عالمت ‪ \u‬مقدار‬

‫‪ 00A9‬را قرار دهیم مانند‪:‬‬

‫متغیر‬
‫متغیر مکانی از حافظه است که شما میتوانید مقادیری را در آن ذخیره کنید‪ .‬میتوان آن را به عنوان یک ظرف تصور‬

‫کرد که دادههای خود را در آن قرار دادهاید‪ .‬محتویات این ظرف میتواند پاک شود یا تغییر کند‪ .‬هر متغیر دارای یک‬

‫نام نیز هست‪ .‬که از طریق آن میتوان متغیر را از دیگر متغیرها تشخیص داد و به مقدار آن دسترسی پیدا کرد‪ .‬همچنین‬

‫دارای یک مقدار میباشد که میتواند توسط کاربر انتخاب شده باشد یا نتیجه یک محاسبه باشد ‪.‬مقدار متغیر میتواند‬

‫تهی نیز باشد‪ .‬متغیر دارای نوع نیز هست بدین معنی که نوع آن با نوع دادهای که در آن ذخیره میشود یکی است‪.‬‬

‫متغیر دارای عمر نیز هست که از روی آن میتوان تشخیص داد که متغیر باید چقدر در طول برنامه مورد استفاده قرار‬

‫گیرد‪ .‬و در نهایت متغیر دارای محدوده استفاده نیز هست که به شما میگوید که متغیر در چه جای برنامه برای شما قابل‬

‫دسترسی است‪ .‬ما از متغیرها به عنوان یک انبار موقتی برای ذخیره داده استفاده میکنیم‪ .‬هنگامی که یک برنامه ایجاد‬

‫میکنیم احتیاج به یک مکان برای ذخیره داده‪ ،‬مقادیر یا دادههایی که توسط کاربر وارد میشوند‪ ،‬داریم ‪.‬این مکان‪ ،‬همان‬

‫متغیر است ‪ .‬برای این از کلمه متغیر استفاده میشود چون ما میتوانیم بسته به نوع شرایط هر جا که الزم باشد‪ ،‬مقدار‬

‫آن را تغییر دهیم‪ .‬متغیرها موقتی هستند و فقط موقعی مورد استفاده قرار میگیرند که برنامه در حال اجراست و وقتی‬

‫شما برنامه را میبندید محتویات متغیرها نیز پاک میشود‪ .‬قبال ذکر شد که به وسیله نام متغیر میتوان به آن دسترسی‬

‫پیدا کرد‪ .‬برای نامگذاری متغیرها باید قوانین زیر را رعایت کرد‪:‬‬

‫‪23‬‬
‫اسامی متغیرها نسبت به بزرگی و کوچکی حروف حساس هستند‪ .‬در پایتون دو حرف مانند ‪ a‬و ‪ A‬دو کاراکتر مختلف به‬

‫حساب میآیند‪ .‬دو متغیر با نامهای ‪ myNumber‬و ‪ MyNumber‬دو متغیر مختلف محسوب میشوند چون یکی از آنها با‬

‫حرف کوچک ‪ m‬و دیگری با حرف بزرگ ‪ M‬شروع میشود‪ .‬متغیر دارای نوع هست که نوع دادهای را که در خود ذخیره‬

‫میکند را نشان میدهد‪ .‬در درس بعد در مورد انواع داده ها در پایتون توضیح می دهیم‪ .‬لیست کلمات کلیدی پایتون‪،‬‬

‫که نباید از آنها در نامگذاری متغیرها استفاده کرد در زیر آمده است‪:‬‬

‫انواع داده‬
‫انواع داده هایی که در پایتون وجود دارند عبارتند از‪:‬‬

‫‪24‬‬
‫در مورد انواع داده های باال و نحوه استفاده از آنها در متغیرها‪ ،‬در درس بعد توضیح می دهیم‪.‬‬

‫استفاده از متغیرها‬
‫بر خالف زبان هایی مثل جاوا و سی شارپ‪ ،‬که هنگام تعریف متغیر باید نوع متغیر را هم مشخص می کردیم‪ ،‬در پایتون‬

‫کافیست که فقط نام متغیر را نوشته و به وسیله عالمت مساوی یک مقدار به آن اختصاص دهیم‪:‬‬

‫;‪variableName = Value‬‬

‫در مثال زیر نحوه تعریف و مقداردهی متغیرها نمایش داده شده است‪:‬‬

‫در خطوط ‪ ،1-7‬متغیر ها تعریف شده اند‪ .‬اما نوع این متغیرها چیست؟ پایتون نوع متغیرها را بسته به مقداری که به‬

‫آنها اختصاص داده می شود در نظر می گیرد‪ .‬مثال نوع متغیر ‪ StringVar‬در خط ‪ 4‬از نوع رشته است‪ ،‬چون یک مقدار‬

‫رشته ای به آن اختصاص داده شده است‪ .‬به خطوط ‪ 6 ،5‬و ‪ 7‬کد باال توجه کنید‪ .‬در خط ‪ 5‬یک متغیر تعریف شده‬

‫است و نوع داده ای که به آن اختصاص داده شده است از نوع ‪ list‬است‪ .‬همانطور که در درس قبل اشاره شد‪ ،‬برای‬

‫تعریف ‪ list‬عالمت ][ به کار می رود و آیتم های داخل آن به وسیله کاما از هم جدا می شوند‪.‬‬

‫‪25‬‬
‫در خط ‪ 6‬هم یک متغیر تعریف شده است و یک مقدار از نوع ‪ tuple‬به آن اختصاص داده شده است‪ .‬در تعریف ‪tuple‬‬

‫به جای عالمت ][ از )( استفاده می شود‪ .‬تفاوت بین این دو را در درس های آینده بیشتر توضیح می دهیم‪ .‬و اما در‬

‫خط ‪ 7‬یک نوع دیکشنری تعریف شده است‪ .‬برای تعریف دیکشنری بین کلید و مقدار عالمت ‪ :‬و بین کلید‪/‬مقدارها‬

‫هم عالمت ‪ ,‬قرار می گیرد‪:‬‬

‫;}‪dictionaryVar = {Key1:Value1, Key2:Value2, Key3:Value3‬‬

‫مثال در مثال باال یک دیکشنری تعریف کرده ایم که سه آیتم یا کلید‪/‬مقدار دارد که بین آنها عالمت کاما )‪ (,‬قرار داده‬

‫ایم‪ .‬ولی بین یک کلید و مقدار مربوط به آن عالمت ‪ :‬قرار گرفته است‪ .‬برای اختصاص یک مقدار به چند متغیر میتوان‬

‫به صورت زیر عمل کرد‪:‬‬

‫;‪identifier1 = identifier2 = ... indentifierN = Value‬‬

‫مثال‪:‬‬

‫دقت کنید که برای متغیرهای تعریف شده در حالت باال یک خانه حافظه تخصیص داده می شود‪ ،‬یعنی مقدار ‪ 11‬در‬

‫حافظه ذخیره شده و متغیرهای ‪ num1‬و ‪ num2‬و ‪ num3‬و ‪ num4‬و ‪ num5‬به آن خانه از حافظه اشاره می کنند‪.‬‬

‫همچنین می توان چند متغیر را تعریف کرد و برای هر یک از آن ها مقدار جداگانه ای مشخص نمود ‪:‬‬

‫;‪identifier1, identifier2, ... indentifierN = Value1, Value2, ... ValueN‬‬

‫مثال‪:‬‬

‫‪26‬‬
‫برای چاپ یک کاراکتر )مثل ‪ (W‬از این رشته کافیست که به صورت زیر عمل کنیم‪:‬‬

‫مثال‪:‬‬

‫مثال‪:‬‬

‫نکته ای که بهتر است در همینجا به آن اشاره کنیم این است که کلید‪/‬مقدارها در دیکشنری می توانند از هر نوعی‬

‫باشند و شما برای چاپ مقدار مربوط به یک کلید باید نام کلید را دقیق بنویسید‪ .‬به مثال زیر توجه کنید‪:‬‬

‫‪27‬‬
‫در مثال باال ما مقدار کلید ‘‪ ’1‬را چاپ کرده ایم‪ .‬حال اگر به جای ‘‪’2‬عدد ‪ 2‬را بنویسیم‪ ،‬یعنی عالمت کوتیشن را‬

‫نگذاریم با خطا مواجه می شویم‪:‬‬

‫(‪)Placeholders‬جانگهدار‬

‫به متد ()‪ print‬در خطوط (‪ )9-15‬توجه کنید‪ .‬این متد به دو قسمت تقسیم شده است‪ .‬قسمت اول یک رشته قالب‬

‫بندی شده است و قسمت دوم هم شامل متدی به نام ()‪ format‬است که دارای مقدار یا مقادیری است که توسط‬

‫رشته قالب بندی شده مورد استفاده قرار میگیرند‪ .‬اگر به دقت نگاه کنید رشته قالب بندی شده دارای عدد صفری‬

‫است که در داخل دو آکوالد محصور شده است‪ .‬البته عدد داخل دو آکوالد میتواند از صفر تا ‪ n‬باشد‪ .‬به این اعداد‬

‫جانگهدار می گویند‪ .‬این اعداد بوسیله مقدار یا مقادیری که در داخل متد ()‪ format‬هستند جایگزین میشوند‪ .‬به‬

‫عنوان مثال جانگهدار {‪ }0‬به این معناست که اولین مقدار داخل متد ()‪ format‬در آن قرار میگیرد‪ .‬برای روشن شدن‬

‫مطلب به شکل زیر توجه کنید‪:‬‬

‫جانگهدارها از صفر شروع میشوند‪ .‬تعداد جانگهدارها باید با تعداد مقادیری که در داخل متد ()‪ format‬آورده شده اند‬

‫برابر باشد‪ .‬برای مثال اگر شما چهار جانگهدار مثل باال داشته باشید باید چهار مقدار هم برای آنها بعد از رشته قالب‬

‫‪28‬‬
‫بندی شده در نظر بگیرید‪ .‬اولین جانگهدار با اولین مقدار و دومین جا نگهدار با دومین مقدار جایگزین میشود‪ .‬در‬

‫ابتدا فهمیدن این مفهوم برای کسانی که تازه برنامه نویسی را شروع کردهاند سخت است اما در درسهای آینده‬

‫مثالهای زیادی در این مورد مشاهده خواهید کرد‪.‬‬

‫عبارات و عملگرها‬
‫ابتدا با دو کلمه آشنا شوید‪:‬‬

‫عملگر‪ :‬نمادهایی هستند که اعمال خاص انجام میدهند‪.‬‬ ‫‪‬‬

‫عملوند‪ :‬مقادیری که عملگرها بر روی آنها عملی انجام میدهند‪.‬‬ ‫‪‬‬

‫مثال ‪ :X+Y‬یک عبارت است که در آن ‪ X‬و ‪ Y‬عملوند و عالمت ‪ +‬عملگر به حساب میآیند‪.‬‬

‫زبانهای برنامه نویسی جدید دارای عملگرهایی هستند که از اجزاء معمول زبان به حساب میآیند‪ .‬پایتون دارای‬

‫عملگرهای مختلفی از جمله عملگرهای ریاضی‪ ،‬تخصیصی‪ ،‬مقایسهای‪ ،‬منطقی و بیتی میباشد‪ .‬از عملگرهای ساده‬

‫ریاضی میتوان به عملگر جمع و تفریق اشاره کرد‪.‬‬

‫سه نوع عملگر در پایتون وجود دارد ‪:‬‬

‫یگانی – (‪ )Unary‬به یک عملوند نیاز دارد‬

‫دودویی – (‪ )Binary‬به دو عملوند نیاز دارد‬

‫سه تایی – (‪ )Ternary‬به سه عملوند نیاز دارد‬

‫انواع مختلف عملگر که در این بخش مورد بحث قرار میگیرند‪ ،‬عبارتند از‪:‬‬

‫عملگرهای ریاضی‬ ‫‪‬‬

‫عملگرهای تخصیصی‬ ‫‪‬‬

‫عملگرهای مقایسهای‬ ‫‪‬‬

‫عملگرهای منطقی‬ ‫‪‬‬

‫عملگرهای بیتی‬ ‫‪‬‬

‫‪29‬‬
‫عملگرهای ریاضی‬
‫پایتون از عملگرهای ریاضی برای انجام محاسبات استفاده میکند‪ .‬جدول زیر عملگرهای ریاضی پایتون را نشان می‬

‫دهد‪:‬‬

‫جدول ‪.2‬‬

‫در مثال باال از نوع عددی استفاده شده است‪ .‬اما استفاده از عملگرهای ریاضی برای نوع رشتهای نتیجه متفاوتی دارد‪.‬‬

‫اگر از عملگر ‪ +‬برای رشتهها استفاده کنیم دو رشته را با هم ترکیب کرده و به هم میچسباند‪ .‬حال میتوانیم با ایجاد‬

‫یک برنامه نحوه عملکرد عملگرهای ریاضی در پایتون را یاد بگیریم‪:‬‬

‫‪30‬‬
‫برنامه باال نتیجه هر عبارت را نشان میدهد‪ .‬در این برنامه از متد ()‪ print‬برای نشان دادن نتایج در سطرهای متفاوت‬

‫استفاده شده‬

‫است‪ .‬در خط ‪ 9‬برای اینکه ارقام کسری بعد از عدد حاصل دو رقم باشند از {‪ }f.:22‬استفاده میکنیم‪ }f.:22{ .‬در این‬

‫جا بدین‬

‫معناست که عدد را تا دو رقم اعشار نمایش بده‪ .‬پایتون خط جدید و فاصله و فضای خالی را نادیده میگیرد‪ .‬در خط ‪17‬‬

‫مشاهده میکنید “!‪ ”World‬و “‪ “ Hello‬که دو رشته به وسیله عملگر ‪ +‬به هم متصل شدهاند‪ .‬نتیجه استفاده از عملگر‬

‫‪ +‬برای چسباندن دو کلمه رشته ”‪ “!Hello World‬خواهد بود ‪.‬به فاصلههای خالی بعد از اولین کلمه توجه کنید اگر آنها‬

‫را حذف کنید از خروجی برنامه نیز حذف میشوند‪.‬‬

‫عملگرهای تخصیصی (جایگزینی)‬


‫نوع دیگر از عملگرهای پایتون عملگرهای جایگزینی نام دارند ‪.‬این عملگرها مقدار متغیر سمت راست خود را در‬

‫متغیر سمت چپ قرار میدهند‪ .‬جدول زیر انواع عملگرهای تخصیصی در پایتون را نشان میدهد‬

‫‪31‬‬
‫از عملگر =‪ +‬برای اتصال دو رشته نیز میتوان استفاده کرد‪ .‬استفاده از این نوع عملگرها در واقع یک نوع خالصه‬

‫نویسی در کد است‪ .‬مثال شکل اصلی کد ‪var1 += var2‬به صورت ‪ var1 = var1 + var2‬میباشد‪ .‬این حالت کدنویسی‬

‫زمانی کارایی خود را نشان میدهد که نام متغیرها طوالنی باشد‪ .‬برنامه زیر چگونگی استفاده از عملگرهای تخصیصی‬

‫و تأثیر آنها را بر متغیرها نشان میدهد‪:‬‬

‫‪32‬‬
‫در برنامه از ‪ 3‬عملگر تخصیصی استفاده شده است‪ .‬ابتدا یک متغیر و مقدار ‪10‬با استفاده از عملگر = به آن اختصاص‬

‫داده شده است‪ .‬سپس به آن با استفاده از عملگر =‪ +‬مقدار ‪ 11‬اضافه شده است‪ .‬و در آخر به وسیله عملگر =‪ -‬عدد ‪11‬‬

‫از آن کم شده است‪.‬‬

‫عملگرهای مقایسه ای‬


‫از عملگرهای مقایسهای برای مقایسه مقادیر استفاده میشود ‪.‬نتیجه این مقادیر یک مقدار بولی (منطقی) است‪ .‬این‬

‫عملگرها اگر نتیجه مقایسه دو مقدار درست باشد مقدار ‪ 1‬و اگر نتیجه مقایسه اشتباه باشد مقدار ‪ 1‬را نشان میدهند‪.‬‬

‫این عملگرها به طور معمول در دستورات شرطی به کار میروند به این ترتیب که باعث ادامه یا توقف دستور شرطی می‬

‫شوند‪ .‬جدول زیر عملگرهای مقایسهای در پایتون را نشان میدهد‪:‬‬

‫مثال‪:‬‬

‫‪33‬‬
‫در مثال باال ابتدا دو متغیر را که میخواهیم با هم مقایسه کنیم را ایجاد کرده و به آنها مقادیری اختصاص میدهیم‪.‬‬

‫سپس با استفاده از یک عملگر مقایسهای آنها را با هم مقایسه کرده و نتیجه را چاپ میکنیم‪ .‬به این نکته توجه کنید‬

‫که هنگام مقایسه دو متغیر از عملگر == به جای عملگر = باید استفاده شود‪ .‬عملگر = عملگر تخصیصی است و در‬

‫عبارتی مانند ‪ x = y‬مقدار ‪ y‬را در به ‪ x‬اختصاص میدهد‪.‬‬

‫عملگر == عملگر مقایسهای است که دو مقدار را با هم مقایسه میکند مانند ‪. x==y‬‬

‫عملگرهای منطقی‬
‫عملگرهای منطقی بر روی عبارات منطقی عمل می کنند و نتیجه آنها نیز یک مقدار بولی است‪ .‬از این عملگرها اغلب‬

‫برای شرطهای پیچیده استفاده می شود‪ .‬همانطور که قبال یاد گرفتید مقادیر بولی می توانند ‪ False‬یا ‪ True‬باشند‪.‬‬

‫فرض کنید که ‪ var2‬و ‪ var3‬دو مقدار بولی هستند‪.‬‬

‫‪34‬‬
‫عملگرهای بیتی‬
‫عملگرهای بیتی به شما اجازه میدهند که شکل باینری انواع دادهها را دستکاری کنید‪ .‬در سیستم باینری (دودویی)‬

‫که کامپیوتر از آن استفاده میکند وضعیت هر چیز یا خاموش است یا روشن‪ .‬برای نشان دادن حالت روشن از عدد ‪ 1‬و‬

‫برای نشان دادن حالت خاموش از عدد ‪ 1‬استفاده میشود‪ .‬بنابراین اعداد باینری فقط میتوانند صفر یا یک باشند‪ .‬یک‬

‫بیت نشان دهنده یک رقم باینری است و هر بایت نشان دهنده ‪ 8‬بیت است‪ .‬به عنوان مثال برای یک داده از نوع ‪int‬‬

‫به ‪ 32‬بیت یا ‪ 4‬بایت فضا برای ذخیره آن نیاز داریم‪،‬‬

‫برای مثال عدد ‪ 100‬وقتی به عنوان یک متغیر از نوع ‪ int‬ذخیره میشود در کامپیوتر به صورت زیر خوانده میشود‪:‬‬

‫‪000000000000000000000000000001100100‬‬

‫عملگرهای بیتی پایتون در جدول زیر نشان داده شدهاند‪:‬‬

‫عملگر بیتی تغییر مکان (‪)shift‬‬


‫این نوع عملگرها به شما اجازه میدهند که بیتها را به سمت چپ یا راست جا به جا کنید‪ .‬دو نوع عملگر بیتی تغییر‬

‫مکان وجود دارد که هر کدام دو عملوند قبول میکنند‪ .‬عملوند سمت چپ این عملگرها حالت باینری یک مقدار و‬

‫عملوند سمت راست تعداد جابه جایی بیت ها را نشان میدهد‪.‬‬

‫عملگرهای خاص‬
‫عالوه بر عملگرهایی که تا کنون ذکر شد‪ ،‬پایتون دارای عملگرهای خاص زیر نیز میباشد‪:‬‬

‫‪35‬‬
‫عملگرهای ‪ membership‬که بررسی میکنند آیا متغیر مورد نظر در یک مجموعه (‪ )sequence‬همچون‬ ‫‪‬‬

‫رشته‪ list ،‬یا ‪ Tuple‬وجود دارد یا خیر‪.‬‬

‫عملگرهای ‪ Identity‬که مکانهای قرار گیری دو شیء را با هم مقایسه میکند (بررسی میکنند آیا دوشی با هم‬ ‫‪‬‬

‫برابر هستند یا خیر)‪.‬‬

‫در جدول زیر انواع عملگرهای ‪ membership‬و ‪ Identity‬ذکر شدهاند‪:‬‬

‫مثال‪:‬‬

‫در خط اول کد باال‪ ،‬چک میشود که آیا عدد ‪ 5‬در مجموعه [‪ ]3, 8, 5, 10‬وجود دارد یا نه؟ و چون وجود دارد مقدار‬

‫‪ True‬بر گردانده میشود‪ .‬در خط دوم هم که کام ً‬


‫ال مشخص است که اگر عدد ‪ 5‬در مجموعه وجود نداشته باشد مقدار‬

‫‪ True‬بر گردانده میشود ولی چون عدد ‪ 5‬وجود دارد مقدار ‪ False‬برگردانده میشود‪.‬‬

‫‪36‬‬
‫گرفتن ورودی از کاربر‬
‫پایتون متد ‪ )(input‬را برای گرفتن ورودی از کاربر‪ ،‬در اختیار شما قرار میدهد‪ .‬همانطور که از نام این متد پیداست‪،‬‬

‫تمام کاراکترهایی را که شما در محیط برنامه نویسی تایپ میکنید تا زمانی که دکمه ‪ enter‬را میزنید‪ ،‬میخواند‪ .‬به‬

‫برنامه زیر توجه کنید‪:‬‬

‫برنامه از کاربر میخواهد که نام خود را وارد کند (خط ‪ .)1‬در خط ‪ 1‬شما به عنوان کاربر نام خود را وارد میکنید‪ .‬سپس‬

‫برنامه از ما سن را سؤال میکند (خط ‪ .)2‬در خط ‪ 6‬هم یک خط فاصله به وسیله متد ()‪ print‬ایجاد کرده ایم تا بین‬

‫ورودی های شما و خروجی فاصله ای جهت تفکیک ایجاد شود‪ .‬حال برنامه را اجرا کرده و با وارد کردن مقادیر مورد‬

‫نظر نتیجه را مشاهده کنید‪.‬‬

‫ساختارهای تصمیم‬
‫تقریبا همه زبانهای برنامه نویسی به شما اجازه اجرای کد را در شرایط مطمئن می دهند‪ .‬حال تصور کنید که یک‬

‫برنامه دارای ساختار تصمیم گیری نباشد و همه کدها را اجرا کند‪ .‬این حالت شاید فقط برای چاپ یک پیغام در صفحه‬

‫مناسب باشد ولی فرض کنید که شما بخواهید اگر مقدار یک متغیر با یک عدد برابر باشد سپس یک پیغام چاپ شود‬

‫آن وقت با مشکل مواجه خواهید شد‪ .‬پایتون راه های مختلفی برای رفع این نوع مشکالت ارائه می دهد‪ .‬در این بخش‬

‫با مطالب زیر آشنا خواهید شد‪:‬‬

‫دستور ‪if‬‬ ‫‪‬‬

‫‪37‬‬
‫دستور ‪if…else‬‬ ‫‪‬‬

‫عملگر سه تایی‬ ‫‪‬‬

‫دستور ‪ if‬چندگانه‬ ‫‪‬‬

‫دستور ‪ if‬تو در تو‬ ‫‪‬‬

‫عملگرهای منطقی‬ ‫‪‬‬

‫دستور ‪if‬‬

‫میتوان با استفاده از دستور ‪ if‬و یک شرط خاص که باعث ایجاد یک کد میشود یک منطق به برنامه خود اضافه کنید‪.‬‬

‫دستور ‪ if‬سادهترین دستور شرطی است که برنامه میگوید اگر شرطی برقرار است کد معینی را انجام بده‪ .‬ساختار‬

‫دستور ‪ if‬به صورت زیر است‪:‬‬

‫‪if (condition) :‬‬

‫‪code to execute‬‬

‫مثال‪:‬‬

‫‪38‬‬
‫دستور ‪if…else‬‬

‫دستور ‪ if‬فقط برای اجرای یک حالت خاص به کار میرود یعنی اگر حالتی برقرار بود کار خاصی انجام شود‪ .‬اما زمانی که‬

‫شما بخواهید ‪ if‬استفاده کنید‪ .‬ساختار دستور ‪ if else‬اگر شرط خاصی برقرار شد یک دستور و اگر برقرار نبود دستور‬

‫دیگر اجرا شود باید از دستور‪ else‬در زیر آمده است‪:‬‬

‫‪if (condition) :‬‬

‫‪code to execute if condition is true‬‬

‫‪else :‬‬

‫;‪code to execute if condition is false‬‬

‫مثال‪:‬‬

‫‪39‬‬
‫مثال‪:‬‬

‫‪40‬‬
‫عملگر شرطی‬

‫عملگر شرطی در پایتون مانند دستور شرطی ‪ if…else‬عمل میکند‪ .‬در زیر نحوه استفاده از این عملگر آمده است‪:‬‬

‫‪condition_is_true if condition else condition_is_false‬‬

‫عملگر شرطی تنها عملگر سه تایی پایتون است که نیاز به سه عملوند دارد‪ ،‬یک مقدار زمانی که شرط درست باشد‪،‬‬

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

‫بررسی قرار دهیم‪:‬‬

‫تکرار‬
‫ساختارهای تکرار به شما اجازه میدهند که یک یا چند دستور کد را تا زمانی که یک شرط برقرار است تکرار کنید‪.‬‬

‫حلقهها در پایتون عبارتند از‪:‬‬

‫‪while‬‬ ‫‪‬‬
‫‪for‬‬ ‫‪‬‬

‫‪41‬‬
‫حلقه ‪while‬‬

‫ابتداییترین ساختار تکرار در پایتون حلقه ‪ While‬است‪ .‬ابتدا یک شرط را مورد بررسی قرار میدهد و تا زمانیکه شرط‬

‫برقرار باشد کدهای درون بلوک اجرا میشوند‪ .‬ساختار حلقه ‪ While‬به صورت زیر است‪:‬‬

‫‪while(condition) :‬‬

‫;‪code to loop‬‬

‫مثال‪:‬‬

‫اگر میخواهید یک حلقه بی نهایت ایجاد کنید که هیچگاه متوقف نشود باید یک شرط ایجاد کنید که همواره درست‬

‫(‪ )true‬باشد‪:‬‬

‫‪while(True) :‬‬

‫‪# code to loop‬‬

‫این تکنیک در برخی موارد کارایی دارد و آن زمانی است که شما بخواهید با استفاده از دستورات ‪ break‬و ‪ return‬که‬

‫در آینده توضیح خواهیم داد از حلقه خارج شوید‪.‬‬

‫حلقه ‪for‬‬

‫یکی دیگر از ساختارهای تکرار حلقه ‪ for‬است‪ .‬این حلقه عملی شبیه به حلقه ‪ while‬انجام میدهد‪ .‬ساختار حلقه ‪ for‬به‬

‫صورت زیر است‪:‬‬

‫‪42‬‬
‫‪for iterator_var in sequence :‬‬

‫; ‪code to repeat‬‬

‫‪ iterator_var‬یک متغیر موقتی‪ in ،‬کلمه کلیدی و ‪ sequence‬هم یک سری مانند ‪ tuple،list‬و … می باشد‪ .‬می توان‬

‫حلقه ‪ for‬را اینگونه ترجمه کرد‪ ،‬که به ازای یا به تعداد آیتم های موجود در سری‪ ،‬فالن کارها یا کدها را تکرار کن‪ .‬در‬

‫زیر یک مثال از حلقه ‪ for‬آمده است‪:‬‬

‫پایتون به شما اجازه میدهد که از حلقهها به صورت تو در تو استفاده کنید‪ .‬اگر یک حلقه در داخل حلقه دیگر قرار‬

‫بگیرد‪ ،‬به آن حلقه تو در تو گفته میشود‪ .‬در این نوع حلقهها‪ ،‬به ازای اجرای یک بار حلقه بیرونی‪ ،‬حلقه داخلی به طور‬

‫کامل اجرا میشود‪ .‬در زیر نحوه ایجاد حلقه تو در تو آمده است‪:‬‬

‫خارج شدن از حلقه با استفاده از ‪ pass‬و ‪break،continue‬‬

‫گاهی اوقات با وجود درست بودن شرط میخواهیم حلقه متوقف شود‪ .‬سؤال اینجاست که چطور این کار را انجام دهید؟‬

‫با استفاده از کلمه کلیدی ‪ break‬حلقه را متوقف کرده و با استفاده از کلمه کلیدی ‪ continue‬میتوان بخشی از حلقه را‬

‫رد کرد و به مرحله بعد رفت‪ .‬برنامه زیر نحوه استفاده از ‪continue،break‬و ‪ pass‬را نشان میدهد‪:‬‬

‫‪43‬‬
‫ممکن است این سوال برایتان پیش آمده باشد که کاربرد کلمه ‪ pass‬چیست؟ از این دستور زمانی استفاده می کنیم که‬

‫در شرایطی خاص نیاز به انجام هیچ کاری نباشد! مثال برای تعریف یک تابع خالی تا بعدا کدهای آن نوشته شود‪ .‬یا‬

‫زمانی که بخواهیم همانند مثال باال‪ ،‬کدهای بدنه یک دستور شرطی و یا حلقه را بعدا بنویسیم‪ ،‬به کار می رود‪ .‬حال شما‬

‫برای درک بهتر‪ ،‬کلمه ‪ pass‬را از کد باال حذف کرده و کد را اجرا کنید‪ .‬مشاهده می کنید که به شما پیغام خطا نمایش‬

‫داده می شود و از شما می خواهد که بدنه دستور ‪ if‬و ‪ for‬را مشخص کنید ولی اگر کلمه ‪ pass‬را دوباره بنویسید‪ ،‬این‬

‫خطا نادیده گرفته و کد اجرا می شود‪.‬‬

‫‪44‬‬
‫‪ .2‬فصل دوم ‪ :‬مقدمه ای بر هوش مصنوعی‬

‫تاریخچه‬

‫آلن تورینﮓ (‪ )1950‬یکی از بحث برانگیزترین پرسشهای فلسفی تاریﺦ را پرسید‪ :‬آیا ماشین میتواند فکر کند؟‬

‫آیا یک کامپیوتر میتواند بازی تقلید را با موفقیت پشت سر بگذارد؟‬

‫• تست تورینﮓ‬

‫شما در یک سوی دیوار با سوی دیگر دیوار به صورت نوشتاری صحبت میکنید حال آنکه در آنسوی دیوار نه انسانی‬

‫دیگر بلکه یک ماشین قرار گرفته است‪.‬‬

‫شکل ‪ .15‬تست تورینﮓ‬

‫• آیا ماشین م یتواند از انسان چنان تقلید کند که در یک آزمون محاورهای نتوانیم تفاوت انسان و ماشین را تشخیص‬

‫دهیم؟ تورینﮓ نتوانست پاسﺦ قطعی این پرسش ها را پیدا کند‪.‬‬

‫• در سال ‪ 1956‬جان مک کارتی‪ ،‬یکی از نظریه پردازان پیشگام آن زمان‪ ،‬اصطالح هوش مصنوعی را برای اولین بار در‬

‫نخستین کنفرانسی که به این موضوع اختصاص یافته بود‪ ،‬به کار برد‪.‬‬

‫• دانشمندان بعدا این تاریﺦ را به عنوان تاریﺦ تولد علم هوش مصنوعی انتخاب کردند‪.‬‬

‫‪45‬‬
‫• تقریبا در همان زمان جان فون نیومان نظریه بازیها را معرفی کرد‪ .‬این نظریه نقش موثری در پیشبرد جنبههای نظری‬

‫و علمی هوش مصنوعی داشت‪.‬‬

‫• مک کارتی در آن زمان معتقد بود که میتوان کاری کرد که ماشین نیز هوشی همانند هوش انسانی داشته باشد‪.‬‬

‫• در سال ‪ 1968‬آرتور سی کالرک‪ ،‬در رمان معروف خود یعنی اودیسه فضایی ‪ 2001‬اصطالح آزمون تورینﮓ را به جای‬

‫باز ی تقلید سر زبانها انداخت‪.‬‬

‫• همه کسانی که نخستین گا مها را در راه معرفی هوش مصنوعی برداشتند‪ ،‬یک هدف را در سرداشتند و آن رساندن‬

‫سطح هوش ماشینی به سطح هوش انسانی بود‪.‬‬

‫هوش مصنوعی‬

‫هنوز تعریف دقیقی که مورد قبول همه دانشمندان این علم باشد برای هوش مصنوعی ارائه نشدهاست‪ .‬هوش مصنوعی‬

‫عبارت است از مطالعه این که چگونه کامپیوترها را میتوان وادار به کارهایی کرد که در حال حاضر انسا نها آنها را بهتر‬

‫انجام میدهند‪ .‬هوش مصنوعی‪ ،‬شاخهایست از علم کامپیوتر که ملزومات محاسباتی اعمالی همچون ادراک‬

‫(‪ ،)Perception‬استدالل (‪ )reasoning‬و یادگیری (‪ )learning‬را بررسی کرده و سیستمی جهت انجام چنین اعمالی ارائه‬

‫میدهد‪ .‬هوش مصنوعی‪ ،‬مطالعه روش هایی است برای تبدیل کامپیوتر به ماشینی که بتواند اعمال انجام شده توسط‬

‫انسان را انجام دهد‪ .‬هوش مصنوعی علم و مهندسی ایجاد ماشینهایی باهوش با به کارگیری از کامپیوتر و الگوگیری از‬

‫درک هوش انسانی و نهایتا دستیابی به مکانیزم هوش مصنوعی در سطح هوش انسانی میباشد‪ .‬شیوهها و تکنیکهای‬

‫هوش مصنوعی‪ ،‬برای حل آن دسته از مسائل به وجود آمده اند که به طور سهل و آسان توسط برنامهنویسی تابعی‬

‫(‪ ،)Functional programming‬یا شیو ههای ریاضی قابل حل نبوده اند‪ .‬روشهای هوش مصنوعی به درد حوزههایی‬

‫میخورند که مسائل آنها بهخوبی تعریف نمیشوند‪ .‬هوش مصنوعی که همواره هدف نهایی دانش رایانه بوده است و‬

‫اکنون نیز در خدمت توسعه علوم رایانه است‪.‬‬

‫‪46‬‬
‫چاﻟﺸﻬای بنیادیﻦ هوش مصنوعی‬

‫مهمترین مشخصه هوشمندی در آزمون تورینﮓ توانایی پردازش و درک زبان طبیعی است‪ .‬آیا صرف اینکه ماشینی‬

‫بتواند نحوه صحبت کردن انسان را شبیهسازی کند‪ ،‬به معنی آن است که هوشمند است؟ انتقادات دیگری نیز به آزمون‬

‫تورینﮓ وارد میشود‪ .‬ازجمله اینکه ممکن است یک ماشین هوشمند باشد‪ ،‬ولی نتواند همچون انسان ارتباط برقرار‬

‫کند‪ .‬ضمن اینکه دانش پیشزمینه یا آرشیو ذهنی یک موجود هوشمند نقش مؤثری در هوشمندی او بازی میکند‪ .‬یکی‬

‫از مشهورترین انتقادات در این زمینه را فیلسوفی به نام جان سیرل (‪ )John Searle‬مطرح کرده است‪ .‬سیرل ابتدا نقد‬

‫خود درباره هوش ماشینی را در ‪ 1980‬مطرح کرد و سپس آن در مقاله کاملتری که در ‪ 1990‬منتشر کرد‪ ،‬بسط داد‪ .‬او‬

‫معتقد است بحث هوشمندی ماشی نهای غیربیولوژیک اساسًا بیربط است‪.‬‬

‫هوش مﺤاسﺒاتی‬

‫در هوش مصنوعی پیوندگرا‪ ،‬قواعد از ابتدا در اختیار سیستم قرار نمیگیرد‪ ،‬بلکه سیستم از طریق تجربه‪ ،‬خودش قوانین‬

‫را استخراج میکند‪ .‬شبکههای عصبی (‪ )Neural Networks‬و نیز بهکارگیری منطق فازی (‪ )Fuzzy Logic‬و الگوریتم‬

‫ژنیتک (‪ )GA‬که با استفاده از ایده تکامل داروینی و انتخاب طبیعی پیشنهاد شده‪ ،‬در این دسته قرار میگیرند‪.‬‬

‫‪47‬‬
‫شکل ‪ .16‬شبکه عصبی مصنوعی‬

‫شبکههای عصبی را می توان با اغماض زیاد‪ ،‬مدلهای الکترونیکی از ساختار عصبی مغز انسان نامید‪ .‬مکانیسم فراگیری‬

‫و آموزش مغز اساسًا بر تجربه استوار است‪.‬‬

‫شبکه های عصبی‪)NN( 1‬‬


‫مدلهای الکترونیکی شبکههای عصبی طبیعی نیز بر اساس همین الگو بنا شده اند و روش برخورد چنین مدلهایی با‬

‫مسائل‪ ،‬با روشهای محاسباتی که بهطور معمول توسط سیستمهای کامپیوتری در پیش گرفته شدهاند‪ ،‬تفاوت دارد‪.‬‬

‫شبکههای عصبی شبیه سازی شده یا کامپیوتری‪ ،‬فقط قادرند تا بخش کوچکی از خصوصیات و ویژگیهای شبکههای‬

‫عصبی بیولوژیک را شبیهسازی کنند‪ .‬در حقیقت‪ ،‬هدف از ایجاد یک شبکه عصبی نرمافزاری‪ ،‬بیش از آنکه شبیه سازی‬

‫‪1‬‬
‫‪Neural Networks‬‬

‫‪48‬‬
‫مغز انسان باشد‪ ،‬ایجاد مکانیسمی برای حل مسائل مهندسی با الهام از الگوی رفتاری شبکههای بیولوژیک است‪.‬در‬

‫شبکههای عصبی بیولوژیک‪ ،‬نرونها در ساختا ری سه بعدی به یکدیگر اتصال یافتهاند‪ .‬اتصاالت بین نرونها در‬

‫شبکههای عصبی بیولوژیک آنقدر زیاد و پیچیده است که به هیچ وجه نمیتوان شبکه مصنوعی مشابهی طراحی کرد‪.‬‬

‫تکنولوژی مدارات مجتمع امروزی به ما امکان میدهد که شبکههای عصبی را در ساختارهای دو بعدی طراحی کنیم‪.‬‬

‫شکل ‪ .17‬مدل سازی ساختار عصبی‬

‫منطق فازی (‪)Fuzzy Logic‬‬


‫تئوری مجموعههای فازی و منطق فازی را اولین بار پرفسور لطفیزاده در سال ‪ 1965‬معرفی نمود‪ .‬منطق فازی به‬

‫سیستمهایی اشاره دارد که به جای مقادیر “درست” و “نادرست” که در محیطهای دیجیتال طبیعیترند‪ ،‬میتوانند با‬

‫سطوح متغیر قطعیت کار کنند‪ .‬تئوری مجموعههای فازی مفهوم عضویت باینری عناصر را بسط میدهد و عضویت‬

‫درجهبندی شده را مطرح میکند‪.‬‬

‫شکل ‪ .18‬منطق فازی – دکتر لطفی زاده‬

‫‪49‬‬
‫جالبترین کاربرد منطق فازی‪ ،‬تفسیری است که این علم از ساختار تصمیم گیریهای موجودات هوشمند‪ ،‬و در راس‬

‫آنها‪ ،‬هوش انسانی به دست میدهد‪ .‬شاید یکی از جالبترین کاربردهای منطق فازی هوش مصنوعی در باز یهای‬

‫رایانهای و جلوههای ویژه سینمایی باشد‪ .‬منطق فازی در هوشمند ساختن روباتهای سختافزاری نیز کاربردهای زیادی‬

‫دارد‪.‬‬

‫الگوریتم ژنتیک‪)GA( 2‬‬


‫الگوریتم های ژنتیک از اصول انتخاب طبیعی داروین برای یافتن فرمول بهینه جهت پیشبینی یا تطبیق الگو استفاده‬

‫میکنند‪ .‬در حقیقت بدین روش میتوانیم در فضای حالت مسئله حرکتی سریعتر برای یافتن جوابهای احتمالی داشته‬

‫باشیم؛ یعنی میتوانیم با عدم بسط دادن کلیه حاالت‪ ،‬به جوابهای مورد نظر برسیم‪ .‬الگوریتم های ژنتیک الگوریتمهایی‬

‫هستند که دارای قدرت بسیار زیادی در یافتن جواب مسئله هستند‪ ،‬اما باید توجه داشت که شاید بتوان کاربرد اصلی‬

‫این الگوریتم ها را در مسائلی در نظر گرفت که دارای فضای حالت بسیار بزرگ هستند و عمًال بررسی همه حالتها برای‬

‫انسان در زما نهای نرمال (در حد عمر بشر) ممکن نیست‪ .‬از طرفی باید توجه داشت که حتمًا بین حاالت مختلف مسئله‬

‫باید دارای پیوستگی مناسب و منطقی باشیم‪.‬‬

‫کاربرد مﺤاسﺒات هوشمند در مﻬندسی پزشکی‬

‫محاسات هوشمند برای مشکالت بیو مدیکال برنامههای کاربردی گستردهای در آینده ارائه خواهند کرد و در حال حاضر‬

‫به طور موفقیت آمیز در زمینههای مختلف زیر به کار رفته اند‪.‬‬

‫• سامانههای تشخیص‬

‫• آنالیزهای شیمی‪-‬پزشکی‬

‫• آنالیز تصویر و تشخیص الگو‬

‫• پیشرفتهای دارویی‬

‫• داده کاوی پزشکی‬

‫‪2‬‬
‫‪Genetic Algorithm‬‬

‫‪50‬‬
‫سامانههای تشخیص‬

‫به طور عادی برای کشف سرطان و مشکالت قلبی کاربرد دارند‪ .‬مزایای استفاده از ‪ ANN‬ها این است که تحت تاثیر‬

‫عوامل خستگی‪ ،‬شرایط کاری و موقعیتهای عاطفی قرار نمیگیرند‪.‬‬

‫• تشخیص سرطان سینه‬

‫• بررسی سیگنال ‪ EEG‬برای تشخیص مراحل خواب‬

‫• تشخیص بیماری سل‬

‫• تشخیص هوشمند بیماری دیابت‬

‫آنالیزهاي شیمﻲ‪-‬ﭘزشﻜﻲ‬
‫• در پزشکی برای آزمایش خون‪،‬‬

‫• نمونه ادرار ‪،‬‬

‫• سطوح شیارهای گلوکز در دیابتیک ها‪،‬‬

‫• تعیین سطوح در مایعات بدن ‪،‬‬

‫• تعیین شرایط پاتولوژی مثل سل‬

‫آنالیز تصویر و تشخیص الگو‬

‫در آنالیز تصاویر پزشکی با کیفیت های متفاوت و متنوع به کار گرفته میشود‪ .‬برنامههای کاربردی در این زمینه شامل‬

‫• کشف تومور در‪Veltra-Sonogram‬‬

‫• دسته بندی ‪ X-Ray‬های سینه ‪،‬‬

‫• دسته بندی بافت و ماهیچه در ‪MRI‬‬

‫• تعیین شکل استخوان بندی از عکسهای ‪X-Ray‬‬

‫‪51‬‬
‫• تعیین بلوغ مغزی‬

‫سایر کاربردها در مهندسی ﭘزشکی‬


‫• توسعه داروها برای درمان سرطان و ایدز‬

‫• پروسه مدل کردن بیومولکول ها‬

‫مدل سازی ساختار بدن‪:‬‬ ‫‪‬‬

‫مدل کردن آزمایشی سیستم قلبی‪-‬عروقی انسان‪ .‬تشخیص میتواند به وسیله ساختن یک مدل از سیستم قلبی‪-‬‬

‫عروقی یک شخص منحصر به فرد و مقایسه آن با داده های پزشکی که از بیمار گرفته شده بدست آید‪ .‬مزایای چنین‬

‫سیستم هایی میتواند چک شدن سریع و بدون درد بیماریهای قلبی باشد‪ .‬بنابراین بیماری در مراحل اولیه تشخیص‬

‫داده میشود‪ .‬البته در این سیستم نیاز به پزشکان رد نمیشود‪ .‬تلفیق سنسورها در این روش ما را قادر میسازد تا روابط‬

‫پیچیده میان مقادیر سنسورهای مجزا یاد گرفته شود (در صورت تحلیل شدن به صورت مجزا از بین خواهند رفت)‬

‫بویایی الکترونیکی‪:‬‬ ‫‪‬‬

‫هوش محاسباتی به طورآزمایشی برای پیاده سازی بویایی الکترونیکی استفاده شدهاند‪ .‬بویایی الکترونیکی ظرفیت‬

‫زیادی برای برنامههای کاربردی در پزشکی از راه دور دارد‪ .‬بویایی الکترونیکی میتواند رایحه را در محیطهای جراحی‬

‫متحرک تشخیص دهد‪ .‬این بوی تشخیص داده شده به صورت الکترونیکی به قسمت دیگر منتقل میشود تا به وسیله‬

‫سیستمهای باز تولید بو بازسازی شود‪ .‬با توجه به این که حس بویایی اهمیت زیادی برای جراحی دارد بویایی از راه دور‬

‫حایز اهمیت است‪.‬‬

‫تشخیص الگو‬ ‫‪‬‬

‫پاتولوژی یک تکنیک تصویرگری است که با طبیعت بیماری ها (تغییرات ساختاری و عملکردی در بافت ها ) در ارتباط‬

‫میباشد‪ .‬احتیاج آن به رنﮓ و کیفیت‪ ،‬استفاده از تکنولوژی عکسهای دیجیتالی را برای اجرا دشوار میسازد‪ .‬شناخت‬

‫الگو یک ایده برای دسته بندی دادهای ورودی به کالس های قابل شناسایی بوسیله خصوصیت مهم داده است‪ .‬که این‬

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

‫توانایی آنها در یادگیری و ذخیره دانش است‪.‬‬

‫‪52‬‬
‫پزشک نمونه (کیوسک سالمت)‬ ‫‪‬‬

‫یک برنامه کاربردی که در اواسط سال ‪ 1980‬تولید شد" یک نمونه پزشک" نامیده شد‪ .‬به عنوان یک کمک اتوماتیک‬

‫برای حافظه از شبکه های عصبی برای ذخیره تعداد زیادی از پروندهای پزشکی ‪،‬که هر کدام از آنها شامل اطالعاتی از‬

‫عالئم ‪،‬تشخیص ها و درمان برای یک مورد بخصوص بود‪ ،‬استفاده شد‪ .‬بعد از آموزش‪ ،‬شبکه میتوانست با یک مجموعه‬

‫از عالئم بهترین تشخیص و درمان را ارائه دهد‪.‬‬

‫کاربرد نظریه فازی در مهندسی ﭘزشکی‬


‫استخراج قوانین فازی از ثبتهای پلتیموگرافی برای طبقه بندی خواب نوزاد‬ ‫‪‬‬

‫ارائه فیلتر جدیدی مبنتی بر کنترل فازی برای بهسازی تصاویر ‪MRI‬‬ ‫‪‬‬

‫تشخیص بافت های سه بعدی غیر عادی در تصاویر پزشکی ( ‪CT Scan‬و ‪ ) MRI‬توسط منطق فازی‬ ‫‪‬‬

‫جداساز میکروکالسیفیکاسیونهای مشکوک در تصاویر دیجیتال ماموگرافی بوسیله کاربرد منطق فازی‬ ‫‪‬‬

‫سیستمهای فازی در بیو انفورماتیک‬ ‫‪‬‬

‫‪ o‬مطالعه تفاوت های بین پلی نوکلئیدها‬

‫‪ o‬آنالیز اطالعات تجربی با استفاده از تئوری انطباقی رزونانس فازی‬

‫‪ o‬تنظیم توالی ها بر پایه الگوریتم برنامه نویسی دینامیک در قالب فازی‬

‫‪ o‬ترتیب گذاری ‪ DNA‬با استفاده از سیستم ژنتیکی فازی‬

‫‪ o‬جمع آوری ژن ها بوسیله اطالعات از ریز آرایه ها‬

‫‪ o‬تخمین محل قرارگیری پروتئین های زیر سلولی از ترکیبات دی پپتیدی با استفاده از الگوریتم فازی‬
‫‪k-nearst neighbors‬‬
‫‪ o‬شبیه سازی ویژگی های پیچیده تحت تاثیر با ژن بوسیله تاثیر فازی در جمعیت‬

‫‪ o‬نسبت دادن مقادیر عضویت گروهی به ژن ها با استفاده از متود ‪ c-mean‬فازی‬

‫فازی ژنتیک‬ ‫‪‬‬

‫‪ o‬در سالهای اخیر‪ ،‬دانشمندان زیادی استفاده از الگوریتمهای ژنتیک را بعنوان وسیله ای برای طراحی‬

‫سیستمهای فازی کشف کردند‪ .‬سیستمهای فازی ژنتیک بر روی محاسبات تکاملی و منطق فازی‬

‫‪53‬‬
‫بحث می کند‪ .‬برای دانشمندان و مهندسان از نظر تحقیق و بررسی بر روی کاربردهای موجود در حوزه‬

‫سیستم فازی و الگوریتم ژنتیک زمینه های گسترده ای موجود است‬

‫‪54‬‬
‫‪ .3‬فصل سوم‪ :‬شﺒکه های عصﺒی‬

‫موضوعات این فصل‪:‬‬

‫مقدمه‬ ‫‪‬‬

‫معنای شبکه های عصبی‬ ‫‪‬‬

‫انگیزه های بیولوژیکی‬ ‫‪‬‬

‫تشابهات و انتظارات‬ ‫‪‬‬

‫تاریخچه و کاربرد‬ ‫‪‬‬

‫مدل ریاضی نرون‬ ‫‪‬‬

‫مدل تک ورودی و چند ورودی‬ ‫‪‬‬

‫ساختار شبکه های عصبی‪ :‬شبکه های یک و چند الیه‬ ‫‪‬‬

‫مقدمه‬

‫وجود مسائلی بدون راه حل یا به سختی قابل حل‪ ،‬حرکت از تحقیقات صرفا تئوری به تحقیقات کاربردی‪ ،‬توسعه تئوریک‬

‫سیستمهای دینامیکی هوشمند مدل آزاد مبتنی بر داده های تجربی که شبکه های عصبی جزو آنها هستند و استخراج‬

‫دانش نهفته در داده ها‪ ،‬از جمله عوامل ظهور هوش محاسباتی (محاسبات نرم) بوده است‪.‬‬

‫به شبکه های عصبی مصنوعی (‪ )ANN‬سیستمها هوشمند گویند ‪ ،‬چرا که بر اساس محاسبات روی داده های عددی یا‬

‫مثالها ‪ ،‬قوانین کلی را فرا می گیرند‪ .‬این سیستم ها در مدلسازی ساختار نروسیناپتیکی مغز بشر می کوشند‪ .‬البته‬

‫باید در نظر داشت در حال حاضر عدم کفایت دانش موجود بشر از فیزیولوژی عصبی محرز است‪ .‬به عبارت بهتر در این‬

‫زمان مغز بشر دست نیافتنی مینماید‪ .‬نکته بعدی این است که در هنگام صحبت از شبکههای عصبی مصنوعی تعیین‬

‫حدود انتظارات‪ ،‬امکانات و شباهتها ضروری است‪.‬‬

‫ساختار مغز‬

‫‪55‬‬
‫مغز سیستمی پیچیده دارای پردازش اطالعات با ساختار موازی است و با ‪ 2‬درصد وزن بدن‪ ،‬مصرف بیش از ‪ 20‬درصد‬

‫کل اکسیژن بدن را مصرف میکند‪ .‬مغز انسان با جمع آوری و محاسبه حجم عظیمی از اطالعات و سیگنالها هنگام فهم‬

‫این مطالب سروکار دارد‪ .‬محاسبات مغز در ساختاری کامال مغایر با ساختار کامپیوترهای امروزی هستند‪ .‬مغز اجتماعی‬

‫از نرونها محسوب می شود‪.‬‬

‫هر نرون بیولوژیکی‬ ‫‪‬‬

‫‪ o‬دارای پیچیدگی یک میکروپروسسور‬

‫‪ o‬سرعت محاسباتی به مراتب کمتر از میکروپروسسور است‪.‬‬

‫‪ o‬هر نورون امکان ذخیره اطالعات در خود و ارتباطات میان نرونها را دارد‪.‬‬

‫‪ o‬یادگیری در واقع ایجاد ارتباطات جدید میان نرونها و تنظیم ارتباطات موجود است‪.‬‬

‫در مقابل نرونهای طبیعینرونهای شبکه مصنوعی‬ ‫‪‬‬

‫‪ o‬جزیی از یک برنامه کامپیوتری یا تراشه های نیمه هادی‬

‫‪ o‬سرعتی بسیار باالتر از نرون بیولوژیکی (‪ 1،000،000‬برابر)‬

‫‪ o‬ولی فقط دارای کسری از توانایی باالی نرونهای بیولوژیکی‬

‫در این جزوه با شبکهای کوچک از نرونهای مصنوعی ساده که برای حل مسائل پیچیده آموزش پذیر هستند‪ ،‬آشنا‬

‫میشویم‪ .‬شبکه های عصبی تقریبزنهای عمومی (یونیورسال) توابع هستند‪.‬‬

‫مغز دارای ‪ 1011‬نرون با ‪ 1016‬ارتباط میان آنها‬ ‫‪‬‬

‫نرونهای حسی‪ ،‬محرک و ارتباطی‬ ‫‪‬‬

‫نکات مهم در محاسبات نرونی‪ :‬ترتیب نرونها و شدت سیناپسهای میان نرونها‬ ‫‪‬‬

‫ساختارهای عصبی در خالل یادگیری به وجود آمده و از بین می روند‬ ‫‪‬‬

‫بلوکهای ساختاری در هر دو شبکه مصنوعی و بیولوژیکی دستگاههای محاسباتی خیلی سادهای هستند‪.‬‬ ‫‪‬‬

‫نرونهای مصنوعی از سادگی بیشتری برخوردارند‪.‬‬ ‫‪‬‬

‫ارتباط های بین نورونها عملکرد شبکه را تعیین میکند‪.‬‬ ‫‪‬‬

‫دارای ساختار موازی‬ ‫‪‬‬

‫هدف اصلی این درس تعیین ارتباطهای مناسب جهت حل مسائل مشخص است‪.‬‬

‫‪56‬‬
‫انتظارات‬

‫‪ )1‬قابلیت یادگیری‬

‫شبکه عصبی طبیعی‬ ‫‪‬‬

‫‪ o‬شبکه عصبی سیستم کامال پیچیده و غیرخطی‬

‫‪ o‬توزیع خاصیت پردازش غیرخطی در کل شبکه‬

‫‪ o‬شبکه عصبی بدون قابلیت یادگیری با افزوده شدن یک مثال جدید توانایی خود را از دست می دهد‪.‬‬

‫قابلیت یادگیری یعنی توانایی تنظیم پارامترهای شبکه (وزنهای سیناپتیکی) در مسیر زمان که محیط شبکه‬ ‫‪‬‬

‫تغییر میکند و شبکه شرایط جدید را تجربه میکند‪ ،‬با این هدف که شبکه بتواند با آموزش مختصر برای‬

‫شرایط جدید نیز کارآمد باشد‪.‬‬

‫‪ )2‬پراکندگی اطالعات‬

‫پردازش اطالعات به صورت متن‬ ‫‪‬‬

‫هر نرون متاثر از فعالیت سایر نرونها (هر وزن مریوط به همه ورودیها)‬ ‫‪‬‬

‫اگر بخشی از نرونهای شبکه حذف شوند یا عملکرد غلط داشته باشند‪ ,‬باز هم احتمال رسیدن به پاسﺦ صحیح‬ ‫‪‬‬

‫وجود دارد‪.‬‬

‫‪ )3‬قابلیت تعمیم‬

‫آموزش شبکه با مثالهای اولیه‬ ‫‪‬‬

‫ارائه خروجی مناسب در مقابل ورودیهای آموزش داده نشده‬ ‫‪‬‬

‫فرایند درونیابی‬ ‫‪‬‬

‫‪57‬‬
‫شبکه تابع را یاد می گیرد‪ ،‬الگوریتم را می آموزد و یا رابطه تحلیلی مناسبی برای نقاطی در فضا به دست می‬ ‫‪‬‬

‫آورد‪.‬‬

‫‪ )4‬پردازش موازی‬

‫پاسﺦ همزمان سلولهای قرار گرفته در یک تراز به ورودیهای آن تراز‬ ‫‪‬‬

‫افزایش سرعت پردازش‬ ‫‪‬‬

‫توزیع وظیفه پردازش بین پردازنده های کوچکتر مستقل‬ ‫‪‬‬

‫‪ )5‬مقاوم بودن‬

‫رفتار مستقل هر سلول‬ ‫‪‬‬

‫تصحیح خطاهای محلی در یک روند همکاری‬ ‫‪‬‬

‫افزایش قابلیت مقاوم بودن (تحمل پذیری خطا) در سیستم‬ ‫‪‬‬

‫تاریخچه‬
‫دیدگاه جدید شبکه های عصبی در دهه ‪ 40‬با استفاده از یک مدل منطقی توسط مک کلوث و والتر پیتز انجام‬ ‫‪‬‬

‫شد‪.‬‬

‫دونالد هب‪ ،‬ادامه راه پاولف در شرط گذاری کالسیک به عنوان خواص نرونها‬ ‫‪‬‬

‫در ‪ 1958‬شبکه پرسپترون توسط روزنبالت معرفی گردید‪ .‬این شبکه قادر به شناسایی الگوها بود‪.‬‬ ‫‪‬‬

‫در ‪ 1960‬توسط ویدرو ( دانشگاه استنفورد ) شبکه عصبی تطبیقی خطی آداالین با قانون یادگیری جدید بوجود‬ ‫‪‬‬

‫آمد که از لحاظ ساختار شبیه شبکه پرسپترون بود‪.‬‬

‫در ‪ 1969‬مینسکی و پاپرت کتابی نوشتند که محدودیتهای سیستمهای تک الیه و چند الیه پرسپترون را‬ ‫‪‬‬

‫تشریح کردند‬

‫در ‪ ،1972‬تئو کوهونن و جیمز اندرسون به طور مستقل شبکه های عصبی جدیدی با کارکرد عناصر ذخیره ساز‬ ‫‪‬‬

‫مطرح شدند‪.‬‬

‫دهه ‪ 80‬رشد تکنولوژی میکروپروسسورها و روند صعودی تحقیقات روی شبکه عصبی‬ ‫‪‬‬

‫ایده شبکه های بازگشتی با جان هاپفیلد ‪1982‬‬ ‫‪‬‬

‫الگوریتم پس انتشار خطا توسط راملهارت و مکلند ‪1986‬‬ ‫‪‬‬

‫‪58‬‬
‫کاربردها‬

‫طبقه بندی‪ ،‬شناسایی و تشخیص الگو‬ ‫‪‬‬

‫پردازش سیگنال‬ ‫‪‬‬

‫پیش بینی سریهای زمانی‬ ‫‪‬‬

‫مدلسازی و کنترل‬ ‫‪‬‬

‫بهینه سازی‬ ‫‪‬‬

‫سیستمهای خبره و فازی‬ ‫‪‬‬

‫مسائل مالی و بیمه‬ ‫‪‬‬

‫ساخت وسایل صنعتی و امور حمل ونقل‬ ‫‪‬‬

‫پزشکی‬ ‫‪‬‬

‫مدل ریاضی شﺒکه عصﺒی‬

‫مدل تک ورودی‬ ‫‪‬‬

‫شکل ‪ .19‬مدل ریاضی نرون‬

‫)𝑏 ‪𝑎 = 𝑓(𝑊𝑝 +‬‬

‫در این رابطه ‪ W‬شدت سیناپس‪ n ،‬ورودی خالص‪ f ،‬تابع تحریک و ‪ a‬سیگنال گذرنده از اکسون است‪.‬‬

‫برخی توابع تحریک مرسوم نرون مصنوعی‬ ‫‪‬‬

‫‪59‬‬
‫‪ o‬خطی‬

‫‪ o‬دو مقداره حدی‬

‫‪ o‬زیگموئیدی‬

‫شکل ‪ .20‬مدل ریاضی تابع تحریک‬

‫ساده ترین شبکه عصبی‪ ،‬یک شبکه عصبی پرسپترون تک نرونی است‪.‬‬

‫شکل ‪ .21‬ساختار شبکه عصبی تک نرونی‬

‫ویژگی ها‪:‬‬ ‫‪‬‬

‫نیاز به تعریف ساختار شبکه ندارد‪.‬‬

‫تابع محرک‪ ،‬یک تابع پله ای است‪.‬‬

‫قابلیت تصمیم گیری باینری دارد‪.‬‬

‫قابل استفاده در طبقه بندی بین دو کالس که تفکیک پذیر خطی باشند‪.‬‬

‫‪60‬‬
‫امکان آموزش با نظارت شبکه وجود دارد‪.‬‬

‫شکل ‪ .22‬تفکیک خطی باینری‬

‫مدل چند ورودی‬ ‫‪‬‬

‫‪ o‬مدل کردن به فرم ماتریسی‬

‫‪ o‬اندیس اول شماره خود نرون‬

‫‪ o‬اندیس دوم نشان دهنده مبدا سیگنال ورودی نرون‬

‫‪ o‬مثال ‪ W12‬شدت سیناپس دومین عنصر ورودی به نرون اول را نشان میدهد‪.‬‬

‫‪ o‬در حالت کلی‪ ،‬هر سطر ماتریس ‪ W‬متناظر با یک نرون است‪.‬‬

‫شکل ‪ .23‬مدل رساضی چند ورودی‬

‫‪61‬‬
‫ساختار شبکه عصبی ﭘرسپترون تک الیه‬
‫در شبکه تک الیه بردار ورودی توسط نرونهای الیه با رابطه (‪ a=f(Wp+b‬به بردار خروجی مرتبط می شوند‪ .‬شکل زیر‬

‫شبکه تک الیه با ‪ S‬نرون و ‪ R‬ورودی را نشان میدهد‪.‬‬

‫شکل ‪ .24‬مدل شبکه عصبی تک الیه‬

‫ماتریس ‪ W‬دارای ‪ S‬سطر و ‪ R‬ستون‬

‫شبکه ﭘرسپترون چند الیه‬

‫‪62‬‬
‫شکل ‪ .25‬شبکه پیشخور (‪ )feedforward‬سه الیه‬

‫در شبکه های چند الیه‪ ،‬خروجی هر الیه به عنوان بردار ورودی برای الیه بعدی محسوب می شود‪.‬‬

‫‪ ...، W1،W2‬به ترتیب ماتریس وزن الیه اول‪ ،‬دوم و ‪ ....‬را نشان می دهد‪.‬‬ ‫‪‬‬

‫‪ ...، S1،S2‬به ترتیب تعداد نرونهای الیه اول‪ ،‬دوم و ‪ ....‬را نشان می دهد‪.‬‬ ‫‪‬‬

‫‪ ...، f1،f2‬به ترتیب توابع تحریک الیه اول‪ ،‬دوم و ‪ ....‬را نشان می دهد‪.‬‬ ‫‪‬‬

‫‪ ...، n1،n2‬به ترتیب بردار ورودی خالص الیه اول‪ ،‬دوم و ‪ ....‬را نشان می دهد‪.‬‬ ‫‪‬‬

‫‪ ...، a1،a2‬به ترتیب بردار خروجی الیه اول‪ ،‬دوم و ‪ ....‬را نشان می دهد‪.‬‬ ‫‪‬‬

‫‪ ...، b1،b2‬به ترتیب بردار بایاس الیه اول‪ ،‬دوم و ‪ ....‬را نشان می دهد‪.‬‬ ‫‪‬‬

‫در طبقه بندی بین دو کالس‪ ،‬اگر پاسﺦ نرون صفر باشد بیانگر تعلق نمونه ورودی به کالس اول و پاسﺦ یک نشان دهنده‬

‫تعلق نمونه به کالس دیگر می باشد‪ .‬جهت آموزش شبکه‪ ،‬پس از معرفی یک نمونه آموزشی‪ ،‬پاسﺦ شبکه و پاسﺦ مورد‬

‫انتظار مقایسه شده و بر اساس میزان اختالف این دو پاسﺦ‪ ،‬مقادیر وزن نرون و مقدار بایاس تنظیم میشود‪ .‬پارامترهای‬

‫وزن در واقع مشخص کننده معادله مرز بین دوکالس در فضای بردار ویژگی میباشند‪.‬‬

‫‪63‬‬
‫چند سوال‪:‬‬

‫‪ )1‬تعداد عناصر بردار ورودی (‪ )R‬چگونه مشخص می شود؟‬

‫‪ )2‬یک نرون چه نوع تابع ورودی‪-‬خروجی را نمایندگی می کند؟‬

‫‪ )3‬آیا می توان بردار ورودی ‪ P‬را به عنوان یک الیه در نظر گرفت؟‬

‫‪ )4‬آیا تعداد عناصر بردار ورودی ‪ R‬و تعداد نرونهای ‪ S‬می توانند با هم برابر نباشند؟‬

‫‪ )5‬آیا همه نرونهای موجود در یک الیه باید دارای توابع تحریک یکسان باشند؟‬

‫‪ )6‬آیا می توان در الیه های مختلف‪ ،‬توابع تبدیل مختلف داشت؟‬

‫ساختار پسخور (‪ )feedback‬در مقابل پیشخور‬

‫تفاوت اصلی در وجود حداقل یک سیگنال برگشتی از یک نرون به همان نرون یا نرونهای همان الیه و یا الیههای قبل‬

‫است‪ .‬البته استفاده از بلوک تاخیر ‪( D‬در شبکه های گسسته) نیز نشانه پسخور بودن ساختار است‪.‬‬

‫شکل ‪ .26‬بلوک تاخیر‬

‫سوال‪ :‬بلوک متناظر با عنصر تاخیر در شبکه های پیوسته چیست؟‬

‫نکته‪ :‬شبکه های پسخور از توانایی بالقوه بیشتری نسبت به شبکه های پیشخور برخوردارند و بهتر می توانند رفتار‬

‫مربوط به ویژگیهای زمانی سیستمها را نشان دهند‪( .‬چرا؟)‬

‫شناسایی الگو‬
‫شناسایی الگو فاکتور مهم در طراحی سیستمهای اطالعاتی است و موضوع مشترک تحقیقاتی برای اکثر رشته ها از‬

‫زبان شناسی تا رشتههای مهندسی است‪.‬‬

‫ساختار کلی یک فرایند شناسایی الگو و تصمیم گیری‪:‬‬ ‫‪‬‬

‫‪ o‬چیزی یا موضوعی اتفاق افتاده است‬


‫‪64‬‬
‫‪ o‬اتفاق‪ ،‬توسط سیگنالی نمایندگی می شود‪.‬‬

‫‪ o‬سیگنال مشاهده شده با سیگنال ارسالی یکسان نیست‪.‬‬

‫‪ o‬اتخاذ تصمیم بر مبنای سیگنال مشاهده شده ( نه ارسالی)‬

‫مثال‪( :‬فرد بیمار)‬

‫‪ o‬اتفاق‪ :‬بیماری‬

‫‪ o‬مشاهده کننده ‪ :‬پزشک‬

‫‪ o‬سیگنالها ‪ :‬تستهای آزمایشگاهی یا عالئم بیماری‬

‫‪ o‬سیگنال آمیخته با نویز‪ :‬اشکاالت آزمایشی (چه در وسایل و چه در بدن فرد بیمار)‬

‫‪ o‬تشخیص بیماری بر مبنای سیگنال آمیخته با نویز‬

‫شناسایی الگو چیزی جز جدا سازی داده ها یا الگو های ورودی بین دستجات مختلف نیست‪ .‬مراحل طراحی یک سیستم‬

‫شناسایی الگو را می توان مراحل زیر دانست‪:‬‬

‫کد گذاری‪ :‬بیان ویژگیهای شی مورد نظر ( که از طریق اندازه گیری به دست میآیند)‪ ،‬توسط بردارهای ورودی‬ ‫‪‬‬

‫بیان هندسی‪ :‬تخصیص یک نقطه در فضای چند بعدی اقلیدسی به هر شی‬ ‫‪‬‬

‫استخراج شاخص‪ :‬استخراج مشخصه های مهم از روی بردار های ورودی و کاهش ابعاد الگوها (عناصری از‬ ‫‪‬‬

‫بردارهای مشخصه که در تمامی طبقات مشترکند‪ ،‬حذف می شوند‪).‬‬

‫طبقه بندی الگوها‪ :‬روندی برای تصمیم گیری بهینه اتوماتیک‬ ‫‪‬‬

‫تخصیص الگوهای ورودی به یکی از طبقاتی که فضای اقلیدسی برای تصمیم گیری به تعداد متناهی از آنها تقسیم شده‬
‫است‪.‬‬

‫شبکههای عصبی مستقیما با دادههای واقعی کار می کنند‪ .‬لذا به طراحیهای مدل آزاد یا تخمین زننده های یونیورسال‬

‫مدل آزاد موسومند‪ .‬شبکه های عصبی در مقابل روشهای کالسیک حل مسائل قرار می گیرند‪ .‬در روشهای کالسیک‬

‫باید تمامی الگوهای یادگیری قبل از حل مسئله طبقه بندی الگو در اختیار باشند‪ .‬یعنی‪ ،‬ابتدا باید یک مدل ریاضی از‬

‫مشاهدات داشت تا پس از ارزیابی مدلها بر اساس دادههای واقعی طراحی انجام شود‪ .‬روشهای کالسیک معموال خاص‬

‫مساله توسعه داده می شوند و معموال به مشتقگیری در آنها نیاز است‪.‬‬

‫سوال‪ :‬اطالعاتی که شبکه های عصبی بر مبنای آن عمل تصمیم گیری را انجام می دهد‪ ،‬چگونه و در کجا ذخیره میگردد؟‬

‫‪65‬‬
‫بررسی یک مثال‬
‫هدف‪ :‬جداسازی سه نوع میوه سیب‪ ،‬پرتقال و گالبی در یک انبار به طور خودکار‪.‬‬

‫سنسورهای موجود برای ثبت ویژگی میوهها‬

‫کد گذاری‪ :‬نشان دادن سیب‪ ،‬پرتقال و گالبی به ترتیب با بردارهای ‪ p2 ،p1‬و ‪ p3‬به عنوان بردارهای مرجع (مولفه بردارها‬

‫به ترتیب شکل‪ ،‬زبری و وزن می باشد)‬

‫استخراج شاخص‪ :‬عنصر سوم در همه طبقات مشترک است‪ .‬لذا با حذف این مولفه به بردارهای دو بعدی میرسیم‪.‬‬

‫مساله بیان شده یک مسئله ساده شناسایی الگوی باینری است و با دریافت یک بردار ورودی ‪ 2‬بعدی و تصمیم گیری‬

‫درباره نوع میوه به هدف می رسیم‪.‬‬

‫سیب‬

‫گالبی‬

‫پرتقال‬

‫شکل ‪ .27‬تشخیص وزنها از روی خط جدا کننده سه نوع میوه‬

‫با توجه به شکل باال می توان نتیجه گرفت‬

‫‪66‬‬
‫‪1 −1‬‬
‫[=𝑊‬ ‫و اوزان نرونها بدست می آید‪] :‬‬
‫‪1 1‬‬

‫حل مساله با ﭘرسپترون تک الیه‬


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

‫که بصورت خطی از هم جدا شدهاند‪ ،‬دارد (جداسازی خطی)‪ .‬مرز جدا ساز نواحی در حالت تک نرونی یک فوق صفحه و‬

‫برای حالت دو بعدی یک خط راست است‪.‬‬

‫در حالت کلی برای هر نقطه دلخواه ‪ q‬روی ناحیه مرزی داریم‪:‬‬

‫< ‪ >a,b‬نماد ضرب داخلی دو بردار بوده و همواره تصویر ‪ b‬روی ‪ a‬مضربی از ضرب داخلی دو بردار است‪.‬‬

‫تذکر ‪ :1‬خط مرزی همواره عمود بر بردار وزن بوده و محل قرار گرفتن مرز توسط بردار بایاس تعیین میشود‪.‬‬

‫تذکر ‪ :2‬تصویر بردار سازنده هر نقطه روی خط مرزی بر بردار وزن‪ ،‬برابر با مضربی از منفی جمله بایاس (‪ )-b‬است‪.‬‬

‫(چرا؟)‬

‫نتیجه‪ :‬برای تمام نقاطی که باالی (با توجه به جهت بردار وزن) خط مرزی قرار دارند‪ ،‬ورودی خالص نرون مثبت است‬

‫و برای تمام نقاط زیر آن منفی می باشد‪.‬‬

‫‪67‬‬
‫شکل ‪ .28‬جداسازی خطی در پرسپترون تک الیه‬

‫به منظور دسته بندی نمونه ها در بیش از دو کالس میتوان در شبکه عصبی پرسپترون‪ ،‬یک الیه با بیش از یک نرون‬

‫طراحی نمود‪.‬‬

‫سوال‪ :‬در شکل روبرو ورودی خالص نرون چگونه است؟ آیا پاسﺦ یکتاست؟‬

‫آموزش شﺒکه عصﺒی‬

‫‪ .1‬پارامترهای وزن و بایاس نرون‪ ،‬با مقادیر تصادفی کوچک مقداردهی اولیه می شوند‪.‬‬

‫‪ .2‬یک نمونه آموزشی با بردار ورودی ‪ X‬به شبکه معرفی و ورودی خالص نرون برآورد میشود‪.‬‬

‫‪ .3‬خروجی نرون مطابق با تابع پله ای برآورد می شود‪.‬‬

‫‪ .4‬خطای پاسﺦ دهی شبکه‪ ،‬تعیین می شود‪.‬‬

‫‪ .5‬براساس خطای پاسﺦ دهی‪ ،‬پارامترهای وزن و بایاس شبکه تصحیح میشود‪.‬‬

‫‪68‬‬
‫‪ .6‬مراحل ‪ 2‬تا ‪ 5‬برای کلیه نمونه های آموزشی به انجام میرسد‪ .‬یک بار ”‪ epoch‬معرفی کامل نمونه های آموزشی به‬

‫شبکه را یک “اپک گویند‪.‬‬

‫‪ .7‬آموزش شبکه در چندین اپک به انجام میرسد به نحوی که یکی از شرایط زیر حاصل شود‪:‬‬

‫دیگر تغییر محسوسی در پارامترهای وزن و بایاس نرون ایجاد نشود‪.‬‬ ‫‪‬‬

‫تعداد دفعات تکرار از یک حد مشخص شده فراتر رود‪.‬‬ ‫‪‬‬

‫مثال متلب‬
‫‪ -1‬فرض کنید دو دسته داده ‪ x‬و ‪ y‬بصورت زیر تعریف شوند‪:‬‬

‫‪close all, clear all, clc, format compact‬‬

‫‪%number of samples of each class‬‬

‫;‪N = 20‬‬

‫‪%define inputs and outputs‬‬

‫‪offset = 5; % offset for second class‬‬


‫‪x = [randn(2,N) randn(2,N)+offset]; % inputs‬‬
‫‪y = [zeros(1,N) ones(1,N)]; % outputs‬‬

‫)‪%Plot input samples with PLOTPV (Plot perceptron input/target vectors‬‬

‫)‪Figure(1‬‬

‫;)‪plotpv(x,y‬‬

‫نتیجه رسم دو دسته داده در شکل زیر آورده شده است‪:‬‬

‫‪69‬‬
‫شکل ‪ .29‬دو دسته داده بصورت خطی جدایی پذیر‬

‫با کدهای زیر می توان ساختار شبکه عصبی را دید‪:‬‬

‫;‪net = perceptron‬‬
‫;)‪net = train(net,x,y‬‬
‫;)‪view(net‬‬

‫شکل ‪ .30‬ساختار شبکه عصبی مورد استفاده در مثال‬

‫نتیجه وزنهای بدست آمده پس از آموزش شبکه خطی به شکل زیر است‪:‬‬

‫‪70‬‬
‫ نمایش خط جداساز با توجه به وزن نرونها‬.31 ‫شکل‬

‫[ را در چه گروهی دستهبندی میکند؟‬5] ‫ داده ورودی با مقدار‬،‫ شبکه عصبی آموزش داده شده‬:‫سوال‬
3

‫مثال تعریف ساختار شبکه عصبی در متلب‬


.‫کد زیر ورودی و خروجی را تعریف می کند‬

close all, clear all, clc, format compact

inputs = [1:6]' % input vector (6-dimensional pattern)

outputs = [1 2]' % corresponding target output vector

% create network

net = network( ...

1, ... % numInputs, number of inputs,

2, ... % numLayers, number of layers

[1; 0], ... % biasConnect, numLayers-by-1 Boolean vector,

[1; 0], ... % inputConnect, numLayers-by-numInputs Boolean matrix,

[0 0; 1 0], ... % layerConnect, numLayers-by-numLayers Boolean matrix

[0 1] ... % outputConnect, 1-by-numLayers Boolean vector

);

% View network structure

71
view(net);

.‫ ساختار شبکه عصبی ایجاد شده‬.32 ‫شکل‬

:‫با دستورات زیر معماری و تابع تحریک تعریف شده است‬

% number of hidden layer neurons

net.layers{1}.size = 5;

% hidden layer transfer function

net.layers{1}.transferFcn = 'logsig';

view(net);

% initial network response without training

initial_output = net(inputs)

% network training

net.trainFcn = 'trainlm';

net.performFcn = 'mse';

net = train(net,inputs,outputs);

72
‫‪% network response after training‬‬

‫)‪final_output = net(inputs‬‬

‫شﺒکه عصﺒی همینگ‬

‫شب که همینﮓ از هر دو ساختار پیشخور وپسخور تشکیل می شود‪.‬هدف اصلی در شبکه همینﮓ این است که تشخیص‬

‫کدام الگوی مرجع بیشترین نزدیکی را به الگوی ورودی دارد و سپس آن را در خروجی شبکه ظاهر میکند ‪.‬‬

‫شکل ‪ .33‬ساختار شبکه همینﮓ‬

‫ویژگیها‬

‫• دارای هر دو ساختار پیشخور و پسخور‬

‫• دارای ‪ 3‬الیه‬

‫• برای شناسایی الگوهای باینری‬

‫• تشخیص اینکه کدام الگوی مرجع بیشترین نزدیکی را به الگوی ورودی دارد‪.‬‬

‫‪73‬‬
‫در مواردی که به شبکه بردار ورودی اختیاری (مثال پرتقال بیضوی) اعمال می شود انتظار بر این است که الگوی مرجعی‬

‫که بیشترین نزدیکی را با ورودی دارد‪ ،‬در خروجی ظاهر شود‪ .‬دو پروسه محاسباتی‪ :‬ذخیره سازی الگوها و بازیابی‬

‫اطالعات در این شبکهها انجام می گیرد‪.‬‬

‫در الیه اول‪:‬‬

‫شبکه پیشخور با تابع تبدیل خطی بکار رفته است‪.‬‬

‫همبستگی یا ضرب داخلی بین بردارهای مرجع با بردار ورودی را محاسبه میکند‪ .‬بردارهای مرجع الگوهایی هستند که‬

‫قصد شناسایی آنها را داریم‪.‬‬

‫ذخیره سازی الگوهای مرجع در الیه اول‬

‫تعداد نورونهای این الیه برابر تعداد الگوها‬

‫‪ R‬تعداد عناصر بردار ورودی‬

‫به نوعی فاصله همینﮓ سنجیده می شود‪.‬‬

‫تمامی عناصر بردار خروجی الیه اول مقادیری بین ‪ 0‬و ‪ 2R‬دارند‪ .‬چرا؟‬

‫نرون با بزرگترین مقدار خروجی متناظر با الگوی مرجعی خواهد بود که بیشترین شباهت (کمترین فاصله همینﮓ) را با‬

‫الگوی ورودی دارد‪ .‬چرا؟‬

‫الیه دوم الیه برگشتی است که الیه رقابتی نیز نامیده می شود‪ .‬در این مرحله خروجی ماکزیمم از بقیه جدا میگردد‪.‬‬

‫وزنهای این الیه ‪ W2‬نامیده می شوند که به الگوریتم های بدست آوردن آنها (آموزش) پرداخته نمی شود‪.‬‬

‫‪74‬‬
‫الیه سوم‪ ،‬شبکه پیشخور با تابع تحریک آستانه متقارن دو مقداره است‪ .‬وزن ها در این الیه از رابطه زیر تعیین می‬

‫شود‪:‬‬

‫که در آن 𝑗𝑖𝑝 عنصر ‪ i‬ام از الگوی مرجع ‪ j‬ام می باشد‪.‬‬

‫شﺒکه هاپﻔیلد‬

‫این شبکه دارای ساختار تک الیه بازگشتی است و در آن عملکرد همه نرونها مشابه یکدیگر است و نرون ورودی یا‬

‫خروجی در آن وجود ندارد‪ .‬مقادیر اولیه نرونها توسط ورودی تعیین میشود و سپس شبکه با تکرار به یکی از الگوهای‬

‫مرجع همگرا می شود‪.‬‬

‫شکل ‪ .34‬ساختار شبکه هاپفیلد‬

‫انتظار داریم که اگر در لحظه ‪ 0‬به شبکه الگوی سیب [‪ ]1;1‬اعمال شود‪ ،‬شبکه به سمت [‪ ]1;1‬همگرا گردد‪.‬‬

‫یک انتخاب خوب برای ‪ W ,b‬عبارتست از‪:‬‬

‫عیب شبکه هاپفیلد ‪ :‬همگرایی به الگویی غیر از الگوهای مرجع است‪.‬‬

‫‪75‬‬
‫شبکه همینﮓ به پاسﺦ مناسب منتهی میشود و همواره به یکی از الگوهای مرجع همگرا میشود‪ ،‬و الگوی دارای‬

‫بیشترین تشابه به ورودی را بر میگزیند‪ ،‬در حالی که شبکه هاپفیلد پاسﺦ را کد میکند‪ .‬پاسﺦ هاپفیلد ممکن است‬

‫جزو الگوهای ذخیره شده نباشد‪.‬‬

‫انواع الگوریتمهای یادگیری برای تنظیم پارامترها از تفاوتهای مهم انواع شبکه ها با یکدیگر است‪.‬‬

‫آموزش و یادگیری‬

‫سیستمهای یادگیر صرفا با مشاهده عملکردشان رفتار خود را جهت رسیدن به هدفی خاص بهبود می بخشند‪ .‬اگر‬

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

‫در شرایط محیطی الزم می گردد‪ .‬رفتار سیستمهای یادگیر توسط الگوریتمهای بازگشتی بیان می شود‪ .‬با الگوریتمهای‬

‫آموزش شاخص اجرایی مشخص شده ای بهینه می گردد‪ .‬در حالت کلی دو نوع یادگیری داریم‪ :‬با ناظر ‪ -‬بدون ناظر‪.‬‬

‫یادگیری با ناظر‬

‫در این حالت در هر تکرار الگوریتم یادگیری جواب مطلوب سیستم یادگیرنده از قبل آماده است‪ ،‬به عبارت دیگر‬

‫الگوریتم به جواب مطلوب دسترسی دارد‪ .‬مثال اگر هدف یادگیری تابع ‪ y=x2‬باشد‪ ،‬پاسﺦ مطلوب به ورودی ‪ 0,5‬برابر‬

‫‪ 0,25‬میباشد‪ .‬به طور کل جوابی را که سیستم یادگیر با وضعیت فعلی پارامترهایش می دهد‪ ،‬جواب واقعی در نظر‬

‫میگیریم‪ .‬بنابر این الگوریتم هم به جواب مطلوب و هم به جواب واقعی دسترسی دارد‪ .‬یعنی خطای یادگیری که تفاوت‬

‫این دو مقدار می باشد‪ ،‬در دسترس است‪.‬‬

‫یادگیری بدون ناظر‬

‫در این حالت جواب مطلوب برای سیستم یادگیرنده موجود نیست‪ ،‬یعنی ‪ :‬عدم دسترسی به خطای یادگیری‬

‫سوال‪:‬‬

‫چگونه میتوان یک سیستم یادگیرنده را آموزش داد‪ ،‬اگر ندانیم که این سیستم قرار است چه کاری انجام دهد؟‬

‫بیشتر الگوریتمهای بدون ناظر عمل خوشه بندی را انجام میدهند‪ ،‬یعنی میآموزند که الگوهای ورودی را به تعداد‬

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

‫پارامترهای سیستم یادگیری را تغییر دهد‪ .‬سیستم یادگیرنده به خاطر تغییراتی که در ساختار داخلی آن اتفاق افتاده‬

‫است‪ ،‬پاسﺦ مناسبتری به محیط بدهد‪.‬‬


‫‪76‬‬
‫شبکه عصبی توانایی تجربه اندوزی از گذشته و بهبود رفتار خود را داراست‪ .‬بهبود یادگیری در طول زمان باید بر اساس‬

‫معیاری سنجیده شود‪ .‬معیار بهبود‪ ،‬هدف یادگیری را مدل میکند‪ .‬قانون یادگیری‪ ،‬روندی است که در آن ماتریس وزنها‬

‫و بردارهای بایاس شبکه عصبی تنظیم میشوند‪ .‬این قوانین توسط روابط بازگشتی و عموما به صورت معادالت تفاضلی‬

‫بیان میشوند‪ .‬نوع یادگیری در چگونگی این روند دخالت دارد‪.‬‬

‫معادله یادگیری‬
‫یک نرون با یک بردار پارامتر ‪ w‬و بردار ورودی ‪ p‬قابل نمایش است‪.‬‬

‫هر نرون توانایی تنظیم بردار پارامتر خود بر اساس ورودی و یک سیگنال معلم را داراست‬

‫در یادگیری با ناظر‪ :‬سیگنال معلم همان سیگنال خطا است‬ ‫‪‬‬

‫در یادگیری بدون ناظر‪ :‬سیگنال معلم تغییر بردار حالت خود نرون است‬ ‫‪‬‬

‫قانون کلی یادگیری برای یک نرون‬

‫– حالت پیوسته‪:‬‬

‫– حالت گسسته‪:‬‬

‫‪ α‬نشان دهنده تاثیر از گذشته و ‪ η‬نرخ یادگیری میباشد‪ L .‬سیگنال یادگیری بوده و در حالت کلی تابعی از ‪p, w, t‬‬

‫(برای حالت با ناظر) میباشد‪ .‬مثال در قانون یادگیری پرسپترون بوده و سیگنال معلم همان سیگنال خطا و برابر ‪L=t-a‬‬

‫است‪.‬‬

‫• برای هر نرون شبکه عصبی نیز داریم‪:‬‬

‫– حالت پیوسته‪:‬‬

‫– حالت گسسته‪:‬‬

‫)𝑘( 𝑗𝑖𝑤∆ ترم اصالحی میباشد‪.‬‬

‫الگوریتم های ‪ LMS‬و پس انتشارخطا از انواع آموزش با ناظر هستند‪.‬‬

‫‪77‬‬
‫در یادگیری ‪ offline‬به کمک داده های یادگیری طراحی شبکه عصبی و آموزش آن انجام می شود و پس از آن به عنوان‬

‫یک سیستم استاتیکی عمل می کند‪ .‬ولی در حالت ‪ online‬مثل یک سیستم دینامیکی همواره در حال یادگیری است‪.‬‬

‫در یادگیری تشدیدی معموال مقادیر خروجی مطلوب در دسترس نیست و در آن به شبکه اعالم میشود که مثال عملکرد‬

‫آن ‪ %50‬درست است یا اصال مطلوب نیست‪ .‬سیگنال برگشتی از نوع نقادی است در صورتیکه در یادگیری با ناظر جنبه‬

‫دستوری دارد (چون ‪ t‬معلوم است)‪ .‬سیگنال نقاد پارامترهای شبکه را تنظیم میکند با این امید که سیگنال نقاد بهتری‬

‫در آینده جهت تنظیم پارامترها تولید شود‪.‬‬

‫یادگیری بدون ناظر (خود سازماندهنده)‬


‫در این نوع یادگیری‪ ،‬هیچ سیگنالی که اطالعاتی در مورد مطلوبیت جواب شبکه به خود شبکه وارد نماید موجود نیست‪.‬‬

‫شبکه در اینجا بایستی تنها با ارائﺔ صرف بردارهای ورودی‪ ،‬ارتباطات موجود بین الگوهای ورودی را پیدا کرده و در‬

‫خروجی شبکه ُکد نماید‪.‬‬

‫شﺒکههای آداﻻیﻦ‬

‫شبکه آداالین با قانون یادگیری ویدرو – هوف ( معروف به قانون ‪ )LMS‬در سال ‪ 1960‬و بعد از شبکه پرسپترون با قانون‬

‫یادگیری ‪ SLPR‬به وجود آمد‪ .‬شبکه آداالین شبیه پرسپترون است ولی با تابع تبدیل خطی ( به جای آستانه دو مقداره)‪.‬‬

‫مناسب برای تقریب خطی یک تابع یا اجرای عمل شناسایی الگو‬ ‫‪‬‬

‫دارای منحنی سطح خطای اجرایی سهموی‬ ‫‪‬‬

‫دارای مزیت برخورداری از یک نقطه مینیمم‬ ‫‪‬‬

‫یادگیری از نوع با ناظر‬ ‫‪‬‬

‫پارامترهای شبکه به نحوی تنظیم می شوند که شاخص اجرایی میانگین مربعات خطا بهینه شود‪.‬‬ ‫‪‬‬

‫قانون یادگیری ‪ LMS‬است‪.‬‬ ‫‪‬‬

‫مﺒانی بﻬینهسازی‬

‫بسیاری از مسائل مهندسی را میتوان بصورت یک مساله بهینه سازی بیان کرد‪ .‬یادگیری شبکه های عصبی نیز میتواند‬

‫یک مساله بهینه سازی باشد‪ .‬در یادگیری عملکردی پارامترهای شبکه به نحوی تنظیم می شوند که عملکرد شبکه‬

‫بهینه شود‪.‬‬

‫‪78‬‬
‫قدم اول‪ :‬تعریف عملکرد و تعیین شاخص عملکرد است که از لحاظ اجرایی این شاخص معموال میانگین مربعات خطا‬

‫(‪ )MSE‬است‪.‬‬

‫قدم دوم‪ :‬جستجو در فضای پارامترهای شبکه برای تنظیم آنها به طوریکه معیار اجرایی عملکرد کاهش یابد‪.‬‬

‫در الگوریتمهای بهینه سازی‪ ،‬تخمین بعدی نقطه بهینه از روی تخمین بهینه فعلی بدست میآید‪.‬‬

‫الگوریتم بیشترین نزول برابر است با‪:‬‬

‫پرسپترون چند الیه‬

‫شبکه های بدون نظارت‬

‫اضافه کردن جزوه دوم‬

‫در ادامه سه شبکه عصبی پرسپترون (پیشخور)‪ ،‬همینﮓ (رقابتی) و هاپفیلد (حافظه انجمنی بازگشتی) و استفاده از‬

‫آنها در حل مسئله معرفی میشوند‪.‬‬

‫‪79‬‬

You might also like