Python
Python
تهیه و تنظیم:
علی خرمی
زمستان 1398
1
2
فهرست مطالب
3
ساختارهای تصمیم 37 ......................................................................................................................
4
.1فصل اول :آَشنایی با زبان برنامه نویسی پایتون
پایتون چیست؟
در سال 1991در کشور هلند طراحی شد .این زبان از زبانهای برنامهنویسی مفسر بوده و به صورت کامل یک زبان
شیءگرا است که به زبانهای تفسیری Perlو Rubyشباهت دارد و از مدیریت خودکار حافظه استفاده میکند.
پایتون ،کد باز ( )Open Sourceاست ،زبانی که گوگل و یا یاهو از آن به عنوان یکی از اصلی ترین ابزارهای توسعه
استفاده می کنند .برنامه های پایتون مثل PHPقابل اجرا روی اغلب سیستم عامل هاست .پایتون ،دستور زبانی شبیه
گفتار ساده ی انگلیسی دارد و با دارا بودن 33کلمه کلیدی جزء ساده ترین زبان ها است.
سادگی و خوانایی از ویژگیهای بارز زبان برنامهنویسی پایتون است ،آنچنان ساده که حتی کودکان نیز قادر به آموختن
آن هستند و قدرت در کنار این سادگی و خوانایی ،معجزه پایتون میباشد .از نگاه هر برنامهنویسی ،برنامههای پایتون
مجموعهای از کدهای زیبا هستند ،بدون هیچ آشفتگی و پیچیدگی .جالب است بدانید مایکروسافت نیز این زبان را با
هم اکنون پایتون در شرکت ها و سازمان های بزرگی مثل ناسا و گوگل و یاهو و … به صورت گسترده مورد استفاده قرار
می گیرد.
دانلود و نصب
برای برنامه نویسی به زبان های مختلف محیط های توسعه ی یکپارچه یا IDEهای مختلفی وجود دارند که به برنامه
نویسان در نوشتن و ویرایش کدها ،پیدا کردن خطاها ،نمایش خروجی ،و برخی موارد دیگر کمک می کنند .برای اجرای
کدهای Pythonمحیط های مختلفی وجود دارد که ساده ترین آنها IDELمی باشد .برای دانلود این محیط کدنویسی ،بر
https://www.python.org/downloads
با کلیک بر روی لینک باال ،صفحه ای به صورت زیر باز می شود ،که در این صفحه همانطور که در شکل زیر مشاهده می
کنید ،بر روی دکمهای که با فلش نشان داده شده کلیک کرده ،تا آخرین نسخه IDELدانلود شود:
5
شکل .1شروع نصب
بعد از دانلود فایل مورد نظر به محل ذخیره آن رفته و بر روی فایل دو بار کلیک کنید .سپس در صفحه ای که به صورت
زیر نمایش داده میشود ،تیک مورد نظر را زده و سپس بر روی گزینه Customize installationکلیک کنید:
شکل .2
6
بعد از کلیک بر روی گزینه مذکور صفحه ای به صورت زیر نمایش داده می شود .در این صفحه بر روی دکمه Nextکلیک
کنید:
شکل .3
در صفحه بعد بر روی دکمه Installکلیک کرده و منتظر بمانید تا برنامه نصب شود:
7
شکل .4
در آخر و بعد از نصب کامل برنامه پیغامی مبنی بر موفقیت آمیز بودن ،نصب برنامه به شما نمایش داده می شود و شما
8
شکل .5
اجازه بدهید یک برنامه بسیار ساده به زبان پایتون بنویسیم .این برنامه یک پیغام را نمایش میدهد .از منوی Startمحیط
9
شکل .6
10
شکل .7
در صفحه باز شده به صورت زیر بر روی منوی Fileو سپس گزینه New Fileکلیک کنید:
11
شکل .8
با کلیک بر روی گزینه New Fileصفحه ای به صورت زیر نمایش داده می شود که شما می توانید کدهای خود را در
داخل آن بنویسید:
12
شکل .9
13
شکل .10
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مقدار
متغیر
متغیر مکانی از حافظه است که شما میتوانید مقادیری را در آن ذخیره کنید .میتوان آن را به عنوان یک ظرف تصور
کرد که دادههای خود را در آن قرار دادهاید .محتویات این ظرف میتواند پاک شود یا تغییر کند .هر متغیر دارای یک
نام نیز هست .که از طریق آن میتوان متغیر را از دیگر متغیرها تشخیص داد و به مقدار آن دسترسی پیدا کرد .همچنین
دارای یک مقدار میباشد که میتواند توسط کاربر انتخاب شده باشد یا نتیجه یک محاسبه باشد .مقدار متغیر میتواند
تهی نیز باشد .متغیر دارای نوع نیز هست بدین معنی که نوع آن با نوع دادهای که در آن ذخیره میشود یکی است.
متغیر دارای عمر نیز هست که از روی آن میتوان تشخیص داد که متغیر باید چقدر در طول برنامه مورد استفاده قرار
گیرد .و در نهایت متغیر دارای محدوده استفاده نیز هست که به شما میگوید که متغیر در چه جای برنامه برای شما قابل
دسترسی است .ما از متغیرها به عنوان یک انبار موقتی برای ذخیره داده استفاده میکنیم .هنگامی که یک برنامه ایجاد
میکنیم احتیاج به یک مکان برای ذخیره داده ،مقادیر یا دادههایی که توسط کاربر وارد میشوند ،داریم .این مکان ،همان
متغیر است .برای این از کلمه متغیر استفاده میشود چون ما میتوانیم بسته به نوع شرایط هر جا که الزم باشد ،مقدار
آن را تغییر دهیم .متغیرها موقتی هستند و فقط موقعی مورد استفاده قرار میگیرند که برنامه در حال اجراست و وقتی
شما برنامه را میبندید محتویات متغیرها نیز پاک میشود .قبال ذکر شد که به وسیله نام متغیر میتوان به آن دسترسی
پیدا کرد .برای نامگذاری متغیرها باید قوانین زیر را رعایت کرد:
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یک نوع دیکشنری تعریف شده است .برای تعریف دیکشنری بین کلید و مقدار عالمت :و بین کلید/مقدارها
مثال در مثال باال یک دیکشنری تعریف کرده ایم که سه آیتم یا کلید/مقدار دارد که بین آنها عالمت کاما ) (,قرار داده
ایم .ولی بین یک کلید و مقدار مربوط به آن عالمت :قرار گرفته است .برای اختصاص یک مقدار به چند متغیر میتوان
مثال:
دقت کنید که برای متغیرهای تعریف شده در حالت باال یک خانه حافظه تخصیص داده می شود ،یعنی مقدار 11در
حافظه ذخیره شده و متغیرهای num1و num2و num3و num4و num5به آن خانه از حافظه اشاره می کنند.
همچنین می توان چند متغیر را تعریف کرد و برای هر یک از آن ها مقدار جداگانه ای مشخص نمود :
مثال:
26
برای چاپ یک کاراکتر )مثل (Wاز این رشته کافیست که به صورت زیر عمل کنیم:
مثال:
مثال:
نکته ای که بهتر است در همینجا به آن اشاره کنیم این است که کلید/مقدارها در دیکشنری می توانند از هر نوعی
باشند و شما برای چاپ مقدار مربوط به یک کلید باید نام کلید را دقیق بنویسید .به مثال زیر توجه کنید:
27
در مثال باال ما مقدار کلید ‘ ’1را چاپ کرده ایم .حال اگر به جای ‘’2عدد 2را بنویسیم ،یعنی عالمت کوتیشن را
()Placeholdersجانگهدار
به متد () printدر خطوط ( )9-15توجه کنید .این متد به دو قسمت تقسیم شده است .قسمت اول یک رشته قالب
بندی شده است و قسمت دوم هم شامل متدی به نام () formatاست که دارای مقدار یا مقادیری است که توسط
رشته قالب بندی شده مورد استفاده قرار میگیرند .اگر به دقت نگاه کنید رشته قالب بندی شده دارای عدد صفری
است که در داخل دو آکوالد محصور شده است .البته عدد داخل دو آکوالد میتواند از صفر تا nباشد .به این اعداد
جانگهدار می گویند .این اعداد بوسیله مقدار یا مقادیری که در داخل متد () formatهستند جایگزین میشوند .به
عنوان مثال جانگهدار { }0به این معناست که اولین مقدار داخل متد () formatدر آن قرار میگیرد .برای روشن شدن
جانگهدارها از صفر شروع میشوند .تعداد جانگهدارها باید با تعداد مقادیری که در داخل متد () formatآورده شده اند
برابر باشد .برای مثال اگر شما چهار جانگهدار مثل باال داشته باشید باید چهار مقدار هم برای آنها بعد از رشته قالب
28
بندی شده در نظر بگیرید .اولین جانگهدار با اولین مقدار و دومین جا نگهدار با دومین مقدار جایگزین میشود .در
ابتدا فهمیدن این مفهوم برای کسانی که تازه برنامه نویسی را شروع کردهاند سخت است اما در درسهای آینده
عبارات و عملگرها
ابتدا با دو کلمه آشنا شوید:
مثال :X+Yیک عبارت است که در آن Xو Yعملوند و عالمت +عملگر به حساب میآیند.
زبانهای برنامه نویسی جدید دارای عملگرهایی هستند که از اجزاء معمول زبان به حساب میآیند .پایتون دارای
عملگرهای مختلفی از جمله عملگرهای ریاضی ،تخصیصی ،مقایسهای ،منطقی و بیتی میباشد .از عملگرهای ساده
انواع مختلف عملگر که در این بخش مورد بحث قرار میگیرند ،عبارتند از:
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
در مثال باال ابتدا دو متغیر را که میخواهیم با هم مقایسه کنیم را ایجاد کرده و به آنها مقادیری اختصاص میدهیم.
سپس با استفاده از یک عملگر مقایسهای آنها را با هم مقایسه کرده و نتیجه را چاپ میکنیم .به این نکته توجه کنید
که هنگام مقایسه دو متغیر از عملگر == به جای عملگر = باید استفاده شود .عملگر = عملگر تخصیصی است و در
عملگرهای منطقی
عملگرهای منطقی بر روی عبارات منطقی عمل می کنند و نتیجه آنها نیز یک مقدار بولی است .از این عملگرها اغلب
برای شرطهای پیچیده استفاده می شود .همانطور که قبال یاد گرفتید مقادیر بولی می توانند Falseیا Trueباشند.
34
عملگرهای بیتی
عملگرهای بیتی به شما اجازه میدهند که شکل باینری انواع دادهها را دستکاری کنید .در سیستم باینری (دودویی)
که کامپیوتر از آن استفاده میکند وضعیت هر چیز یا خاموش است یا روشن .برای نشان دادن حالت روشن از عدد 1و
برای نشان دادن حالت خاموش از عدد 1استفاده میشود .بنابراین اعداد باینری فقط میتوانند صفر یا یک باشند .یک
بیت نشان دهنده یک رقم باینری است و هر بایت نشان دهنده 8بیت است .به عنوان مثال برای یک داده از نوع int
برای مثال عدد 100وقتی به عنوان یک متغیر از نوع intذخیره میشود در کامپیوتر به صورت زیر خوانده میشود:
000000000000000000000000000001100100
مکان وجود دارد که هر کدام دو عملوند قبول میکنند .عملوند سمت چپ این عملگرها حالت باینری یک مقدار و
عملگرهای خاص
عالوه بر عملگرهایی که تا کنون ذکر شد ،پایتون دارای عملگرهای خاص زیر نیز میباشد:
35
عملگرهای membershipکه بررسی میکنند آیا متغیر مورد نظر در یک مجموعه ( )sequenceهمچون
عملگرهای Identityکه مکانهای قرار گیری دو شیء را با هم مقایسه میکند (بررسی میکنند آیا دوشی با هم
مثال:
در خط اول کد باال ،چک میشود که آیا عدد 5در مجموعه [ ]3, 8, 5, 10وجود دارد یا نه؟ و چون وجود دارد مقدار
Trueبر گردانده میشود ولی چون عدد 5وجود دارد مقدار Falseبرگردانده میشود.
36
گرفتن ورودی از کاربر
پایتون متد )(inputرا برای گرفتن ورودی از کاربر ،در اختیار شما قرار میدهد .همانطور که از نام این متد پیداست،
تمام کاراکترهایی را که شما در محیط برنامه نویسی تایپ میکنید تا زمانی که دکمه enterرا میزنید ،میخواند .به
برنامه از کاربر میخواهد که نام خود را وارد کند (خط .)1در خط 1شما به عنوان کاربر نام خود را وارد میکنید .سپس
برنامه از ما سن را سؤال میکند (خط .)2در خط 6هم یک خط فاصله به وسیله متد () printایجاد کرده ایم تا بین
ورودی های شما و خروجی فاصله ای جهت تفکیک ایجاد شود .حال برنامه را اجرا کرده و با وارد کردن مقادیر مورد
ساختارهای تصمیم
تقریبا همه زبانهای برنامه نویسی به شما اجازه اجرای کد را در شرایط مطمئن می دهند .حال تصور کنید که یک
برنامه دارای ساختار تصمیم گیری نباشد و همه کدها را اجرا کند .این حالت شاید فقط برای چاپ یک پیغام در صفحه
مناسب باشد ولی فرض کنید که شما بخواهید اگر مقدار یک متغیر با یک عدد برابر باشد سپس یک پیغام چاپ شود
آن وقت با مشکل مواجه خواهید شد .پایتون راه های مختلفی برای رفع این نوع مشکالت ارائه می دهد .در این بخش
37
دستور if…else
دستور if
میتوان با استفاده از دستور ifو یک شرط خاص که باعث ایجاد یک کد میشود یک منطق به برنامه خود اضافه کنید.
دستور ifسادهترین دستور شرطی است که برنامه میگوید اگر شرطی برقرار است کد معینی را انجام بده .ساختار
code to execute
مثال:
38
دستور if…else
دستور ifفقط برای اجرای یک حالت خاص به کار میرود یعنی اگر حالتی برقرار بود کار خاصی انجام شود .اما زمانی که
شما بخواهید ifاستفاده کنید .ساختار دستور if elseاگر شرط خاصی برقرار شد یک دستور و اگر برقرار نبود دستور
else :
مثال:
39
مثال:
40
عملگر شرطی
عملگر شرطی در پایتون مانند دستور شرطی if…elseعمل میکند .در زیر نحوه استفاده از این عملگر آمده است:
عملگر شرطی تنها عملگر سه تایی پایتون است که نیاز به سه عملوند دارد ،یک مقدار زمانی که شرط درست باشد،
شرط و یک مقدار زمانی که شرط نادرست باشد .اجازه بدهید که نحوه استفاده این عملگر را در داخل برنامه مورد
تکرار
ساختارهای تکرار به شما اجازه میدهند که یک یا چند دستور کد را تا زمانی که یک شرط برقرار است تکرار کنید.
while
for
41
حلقه while
ابتداییترین ساختار تکرار در پایتون حلقه Whileاست .ابتدا یک شرط را مورد بررسی قرار میدهد و تا زمانیکه شرط
برقرار باشد کدهای درون بلوک اجرا میشوند .ساختار حلقه Whileبه صورت زیر است:
while(condition) :
;code to loop
مثال:
اگر میخواهید یک حلقه بی نهایت ایجاد کنید که هیچگاه متوقف نشود باید یک شرط ایجاد کنید که همواره درست
( )trueباشد:
while(True) :
این تکنیک در برخی موارد کارایی دارد و آن زمانی است که شما بخواهید با استفاده از دستورات breakو returnکه
حلقه for
یکی دیگر از ساختارهای تکرار حلقه forاست .این حلقه عملی شبیه به حلقه whileانجام میدهد .ساختار حلقه forبه
42
for iterator_var in sequence :
; code to repeat
iterator_varیک متغیر موقتی in ،کلمه کلیدی و sequenceهم یک سری مانند tuple،listو … می باشد .می توان
حلقه forرا اینگونه ترجمه کرد ،که به ازای یا به تعداد آیتم های موجود در سری ،فالن کارها یا کدها را تکرار کن .در
پایتون به شما اجازه میدهد که از حلقهها به صورت تو در تو استفاده کنید .اگر یک حلقه در داخل حلقه دیگر قرار
بگیرد ،به آن حلقه تو در تو گفته میشود .در این نوع حلقهها ،به ازای اجرای یک بار حلقه بیرونی ،حلقه داخلی به طور
کامل اجرا میشود .در زیر نحوه ایجاد حلقه تو در تو آمده است:
گاهی اوقات با وجود درست بودن شرط میخواهیم حلقه متوقف شود .سؤال اینجاست که چطور این کار را انجام دهید؟
با استفاده از کلمه کلیدی breakحلقه را متوقف کرده و با استفاده از کلمه کلیدی continueمیتوان بخشی از حلقه را
رد کرد و به مرحله بعد رفت .برنامه زیر نحوه استفاده از continue،breakو passرا نشان میدهد:
43
ممکن است این سوال برایتان پیش آمده باشد که کاربرد کلمه passچیست؟ از این دستور زمانی استفاده می کنیم که
در شرایطی خاص نیاز به انجام هیچ کاری نباشد! مثال برای تعریف یک تابع خالی تا بعدا کدهای آن نوشته شود .یا
زمانی که بخواهیم همانند مثال باال ،کدهای بدنه یک دستور شرطی و یا حلقه را بعدا بنویسیم ،به کار می رود .حال شما
برای درک بهتر ،کلمه passرا از کد باال حذف کرده و کد را اجرا کنید .مشاهده می کنید که به شما پیغام خطا نمایش
داده می شود و از شما می خواهد که بدنه دستور ifو forرا مشخص کنید ولی اگر کلمه passرا دوباره بنویسید ،این
44
.2فصل دوم :مقدمه ای بر هوش مصنوعی
تاریخچه
آلن تورینﮓ ( )1950یکی از بحث برانگیزترین پرسشهای فلسفی تاریﺦ را پرسید :آیا ماشین میتواند فکر کند؟
• تست تورینﮓ
شما در یک سوی دیوار با سوی دیگر دیوار به صورت نوشتاری صحبت میکنید حال آنکه در آنسوی دیوار نه انسانی
• آیا ماشین م یتواند از انسان چنان تقلید کند که در یک آزمون محاورهای نتوانیم تفاوت انسان و ماشین را تشخیص
• در سال 1956جان مک کارتی ،یکی از نظریه پردازان پیشگام آن زمان ،اصطالح هوش مصنوعی را برای اولین بار در
نخستین کنفرانسی که به این موضوع اختصاص یافته بود ،به کار برد.
• دانشمندان بعدا این تاریﺦ را به عنوان تاریﺦ تولد علم هوش مصنوعی انتخاب کردند.
45
• تقریبا در همان زمان جان فون نیومان نظریه بازیها را معرفی کرد .این نظریه نقش موثری در پیشبرد جنبههای نظری
• مک کارتی در آن زمان معتقد بود که میتوان کاری کرد که ماشین نیز هوشی همانند هوش انسانی داشته باشد.
• در سال 1968آرتور سی کالرک ،در رمان معروف خود یعنی اودیسه فضایی 2001اصطالح آزمون تورینﮓ را به جای
• همه کسانی که نخستین گا مها را در راه معرفی هوش مصنوعی برداشتند ،یک هدف را در سرداشتند و آن رساندن
هوش مصنوعی
هنوز تعریف دقیقی که مورد قبول همه دانشمندان این علم باشد برای هوش مصنوعی ارائه نشدهاست .هوش مصنوعی
عبارت است از مطالعه این که چگونه کامپیوترها را میتوان وادار به کارهایی کرد که در حال حاضر انسا نها آنها را بهتر
انجام میدهند .هوش مصنوعی ،شاخهایست از علم کامپیوتر که ملزومات محاسباتی اعمالی همچون ادراک
( ،)Perceptionاستدالل ( )reasoningو یادگیری ( )learningرا بررسی کرده و سیستمی جهت انجام چنین اعمالی ارائه
میدهد .هوش مصنوعی ،مطالعه روش هایی است برای تبدیل کامپیوتر به ماشینی که بتواند اعمال انجام شده توسط
انسان را انجام دهد .هوش مصنوعی علم و مهندسی ایجاد ماشینهایی باهوش با به کارگیری از کامپیوتر و الگوگیری از
درک هوش انسانی و نهایتا دستیابی به مکانیزم هوش مصنوعی در سطح هوش انسانی میباشد .شیوهها و تکنیکهای
هوش مصنوعی ،برای حل آن دسته از مسائل به وجود آمده اند که به طور سهل و آسان توسط برنامهنویسی تابعی
( ،)Functional programmingیا شیو ههای ریاضی قابل حل نبوده اند .روشهای هوش مصنوعی به درد حوزههایی
میخورند که مسائل آنها بهخوبی تعریف نمیشوند .هوش مصنوعی که همواره هدف نهایی دانش رایانه بوده است و
46
چاﻟﺸﻬای بنیادیﻦ هوش مصنوعی
مهمترین مشخصه هوشمندی در آزمون تورینﮓ توانایی پردازش و درک زبان طبیعی است .آیا صرف اینکه ماشینی
بتواند نحوه صحبت کردن انسان را شبیهسازی کند ،به معنی آن است که هوشمند است؟ انتقادات دیگری نیز به آزمون
تورینﮓ وارد میشود .ازجمله اینکه ممکن است یک ماشین هوشمند باشد ،ولی نتواند همچون انسان ارتباط برقرار
کند .ضمن اینکه دانش پیشزمینه یا آرشیو ذهنی یک موجود هوشمند نقش مؤثری در هوشمندی او بازی میکند .یکی
از مشهورترین انتقادات در این زمینه را فیلسوفی به نام جان سیرل ( )John Searleمطرح کرده است .سیرل ابتدا نقد
خود درباره هوش ماشینی را در 1980مطرح کرد و سپس آن در مقاله کاملتری که در 1990منتشر کرد ،بسط داد .او
معتقد است بحث هوشمندی ماشی نهای غیربیولوژیک اساسًا بیربط است.
هوش مﺤاسﺒاتی
در هوش مصنوعی پیوندگرا ،قواعد از ابتدا در اختیار سیستم قرار نمیگیرد ،بلکه سیستم از طریق تجربه ،خودش قوانین
را استخراج میکند .شبکههای عصبی ( )Neural Networksو نیز بهکارگیری منطق فازی ( )Fuzzy Logicو الگوریتم
ژنیتک ( )GAکه با استفاده از ایده تکامل داروینی و انتخاب طبیعی پیشنهاد شده ،در این دسته قرار میگیرند.
47
شکل .16شبکه عصبی مصنوعی
شبکههای عصبی را می توان با اغماض زیاد ،مدلهای الکترونیکی از ساختار عصبی مغز انسان نامید .مکانیسم فراگیری
مسائل ،با روشهای محاسباتی که بهطور معمول توسط سیستمهای کامپیوتری در پیش گرفته شدهاند ،تفاوت دارد.
شبکههای عصبی شبیه سازی شده یا کامپیوتری ،فقط قادرند تا بخش کوچکی از خصوصیات و ویژگیهای شبکههای
عصبی بیولوژیک را شبیهسازی کنند .در حقیقت ،هدف از ایجاد یک شبکه عصبی نرمافزاری ،بیش از آنکه شبیه سازی
1
Neural Networks
48
مغز انسان باشد ،ایجاد مکانیسمی برای حل مسائل مهندسی با الهام از الگوی رفتاری شبکههای بیولوژیک است.در
شبکههای عصبی بیولوژیک ،نرونها در ساختا ری سه بعدی به یکدیگر اتصال یافتهاند .اتصاالت بین نرونها در
شبکههای عصبی بیولوژیک آنقدر زیاد و پیچیده است که به هیچ وجه نمیتوان شبکه مصنوعی مشابهی طراحی کرد.
تکنولوژی مدارات مجتمع امروزی به ما امکان میدهد که شبکههای عصبی را در ساختارهای دو بعدی طراحی کنیم.
سیستمهایی اشاره دارد که به جای مقادیر “درست” و “نادرست” که در محیطهای دیجیتال طبیعیترند ،میتوانند با
سطوح متغیر قطعیت کار کنند .تئوری مجموعههای فازی مفهوم عضویت باینری عناصر را بسط میدهد و عضویت
49
جالبترین کاربرد منطق فازی ،تفسیری است که این علم از ساختار تصمیم گیریهای موجودات هوشمند ،و در راس
آنها ،هوش انسانی به دست میدهد .شاید یکی از جالبترین کاربردهای منطق فازی هوش مصنوعی در باز یهای
رایانهای و جلوههای ویژه سینمایی باشد .منطق فازی در هوشمند ساختن روباتهای سختافزاری نیز کاربردهای زیادی
دارد.
میکنند .در حقیقت بدین روش میتوانیم در فضای حالت مسئله حرکتی سریعتر برای یافتن جوابهای احتمالی داشته
باشیم؛ یعنی میتوانیم با عدم بسط دادن کلیه حاالت ،به جوابهای مورد نظر برسیم .الگوریتم های ژنتیک الگوریتمهایی
هستند که دارای قدرت بسیار زیادی در یافتن جواب مسئله هستند ،اما باید توجه داشت که شاید بتوان کاربرد اصلی
این الگوریتم ها را در مسائلی در نظر گرفت که دارای فضای حالت بسیار بزرگ هستند و عمًال بررسی همه حالتها برای
انسان در زما نهای نرمال (در حد عمر بشر) ممکن نیست .از طرفی باید توجه داشت که حتمًا بین حاالت مختلف مسئله
محاسات هوشمند برای مشکالت بیو مدیکال برنامههای کاربردی گستردهای در آینده ارائه خواهند کرد و در حال حاضر
به طور موفقیت آمیز در زمینههای مختلف زیر به کار رفته اند.
• سامانههای تشخیص
• آنالیزهای شیمی-پزشکی
• پیشرفتهای دارویی
2
Genetic Algorithm
50
سامانههای تشخیص
به طور عادی برای کشف سرطان و مشکالت قلبی کاربرد دارند .مزایای استفاده از ANNها این است که تحت تاثیر
آنالیزهاي شیمﻲ-ﭘزشﻜﻲ
• در پزشکی برای آزمایش خون،
در آنالیز تصاویر پزشکی با کیفیت های متفاوت و متنوع به کار گرفته میشود .برنامههای کاربردی در این زمینه شامل
51
• تعیین بلوغ مغزی
مدل کردن آزمایشی سیستم قلبی-عروقی انسان .تشخیص میتواند به وسیله ساختن یک مدل از سیستم قلبی-
عروقی یک شخص منحصر به فرد و مقایسه آن با داده های پزشکی که از بیمار گرفته شده بدست آید .مزایای چنین
سیستم هایی میتواند چک شدن سریع و بدون درد بیماریهای قلبی باشد .بنابراین بیماری در مراحل اولیه تشخیص
داده میشود .البته در این سیستم نیاز به پزشکان رد نمیشود .تلفیق سنسورها در این روش ما را قادر میسازد تا روابط
پیچیده میان مقادیر سنسورهای مجزا یاد گرفته شود (در صورت تحلیل شدن به صورت مجزا از بین خواهند رفت)
هوش محاسباتی به طورآزمایشی برای پیاده سازی بویایی الکترونیکی استفاده شدهاند .بویایی الکترونیکی ظرفیت
زیادی برای برنامههای کاربردی در پزشکی از راه دور دارد .بویایی الکترونیکی میتواند رایحه را در محیطهای جراحی
متحرک تشخیص دهد .این بوی تشخیص داده شده به صورت الکترونیکی به قسمت دیگر منتقل میشود تا به وسیله
سیستمهای باز تولید بو بازسازی شود .با توجه به این که حس بویایی اهمیت زیادی برای جراحی دارد بویایی از راه دور
پاتولوژی یک تکنیک تصویرگری است که با طبیعت بیماری ها (تغییرات ساختاری و عملکردی در بافت ها ) در ارتباط
میباشد .احتیاج آن به رنﮓ و کیفیت ،استفاده از تکنولوژی عکسهای دیجیتالی را برای اجرا دشوار میسازد .شناخت
الگو یک ایده برای دسته بندی دادهای ورودی به کالس های قابل شناسایی بوسیله خصوصیت مهم داده است .که این
مشخصات این طرح از جزئیات بی ربط گرفته میشود .دلیل استفاده از شبکه های عصبی در شناخت الگو به خاطر
52
پزشک نمونه (کیوسک سالمت)
یک برنامه کاربردی که در اواسط سال 1980تولید شد" یک نمونه پزشک" نامیده شد .به عنوان یک کمک اتوماتیک
برای حافظه از شبکه های عصبی برای ذخیره تعداد زیادی از پروندهای پزشکی ،که هر کدام از آنها شامل اطالعاتی از
عالئم ،تشخیص ها و درمان برای یک مورد بخصوص بود ،استفاده شد .بعد از آموزش ،شبکه میتوانست با یک مجموعه
ارائه فیلتر جدیدی مبنتی بر کنترل فازی برای بهسازی تصاویر MRI
تشخیص بافت های سه بعدی غیر عادی در تصاویر پزشکی ( CT Scanو ) MRIتوسط منطق فازی
جداساز میکروکالسیفیکاسیونهای مشکوک در تصاویر دیجیتال ماموگرافی بوسیله کاربرد منطق فازی
oتخمین محل قرارگیری پروتئین های زیر سلولی از ترکیبات دی پپتیدی با استفاده از الگوریتم فازی
k-nearst neighbors
oشبیه سازی ویژگی های پیچیده تحت تاثیر با ژن بوسیله تاثیر فازی در جمعیت
oدر سالهای اخیر ،دانشمندان زیادی استفاده از الگوریتمهای ژنتیک را بعنوان وسیله ای برای طراحی
سیستمهای فازی کشف کردند .سیستمهای فازی ژنتیک بر روی محاسبات تکاملی و منطق فازی
53
بحث می کند .برای دانشمندان و مهندسان از نظر تحقیق و بررسی بر روی کاربردهای موجود در حوزه
54
.3فصل سوم :شﺒکه های عصﺒی
مقدمه
مقدمه
وجود مسائلی بدون راه حل یا به سختی قابل حل ،حرکت از تحقیقات صرفا تئوری به تحقیقات کاربردی ،توسعه تئوریک
سیستمهای دینامیکی هوشمند مدل آزاد مبتنی بر داده های تجربی که شبکه های عصبی جزو آنها هستند و استخراج
دانش نهفته در داده ها ،از جمله عوامل ظهور هوش محاسباتی (محاسبات نرم) بوده است.
به شبکه های عصبی مصنوعی ( )ANNسیستمها هوشمند گویند ،چرا که بر اساس محاسبات روی داده های عددی یا
مثالها ،قوانین کلی را فرا می گیرند .این سیستم ها در مدلسازی ساختار نروسیناپتیکی مغز بشر می کوشند .البته
باید در نظر داشت در حال حاضر عدم کفایت دانش موجود بشر از فیزیولوژی عصبی محرز است .به عبارت بهتر در این
زمان مغز بشر دست نیافتنی مینماید .نکته بعدی این است که در هنگام صحبت از شبکههای عصبی مصنوعی تعیین
ساختار مغز
55
مغز سیستمی پیچیده دارای پردازش اطالعات با ساختار موازی است و با 2درصد وزن بدن ،مصرف بیش از 20درصد
کل اکسیژن بدن را مصرف میکند .مغز انسان با جمع آوری و محاسبه حجم عظیمی از اطالعات و سیگنالها هنگام فهم
این مطالب سروکار دارد .محاسبات مغز در ساختاری کامال مغایر با ساختار کامپیوترهای امروزی هستند .مغز اجتماعی
oهر نورون امکان ذخیره اطالعات در خود و ارتباطات میان نرونها را دارد.
oیادگیری در واقع ایجاد ارتباطات جدید میان نرونها و تنظیم ارتباطات موجود است.
در این جزوه با شبکهای کوچک از نرونهای مصنوعی ساده که برای حل مسائل پیچیده آموزش پذیر هستند ،آشنا
نکات مهم در محاسبات نرونی :ترتیب نرونها و شدت سیناپسهای میان نرونها
بلوکهای ساختاری در هر دو شبکه مصنوعی و بیولوژیکی دستگاههای محاسباتی خیلی سادهای هستند.
هدف اصلی این درس تعیین ارتباطهای مناسب جهت حل مسائل مشخص است.
56
انتظارات
)1قابلیت یادگیری
oشبکه عصبی بدون قابلیت یادگیری با افزوده شدن یک مثال جدید توانایی خود را از دست می دهد.
قابلیت یادگیری یعنی توانایی تنظیم پارامترهای شبکه (وزنهای سیناپتیکی) در مسیر زمان که محیط شبکه
تغییر میکند و شبکه شرایط جدید را تجربه میکند ،با این هدف که شبکه بتواند با آموزش مختصر برای
)2پراکندگی اطالعات
هر نرون متاثر از فعالیت سایر نرونها (هر وزن مریوط به همه ورودیها)
اگر بخشی از نرونهای شبکه حذف شوند یا عملکرد غلط داشته باشند ,باز هم احتمال رسیدن به پاسﺦ صحیح
وجود دارد.
)3قابلیت تعمیم
57
شبکه تابع را یاد می گیرد ،الگوریتم را می آموزد و یا رابطه تحلیلی مناسبی برای نقاطی در فضا به دست می
آورد.
)4پردازش موازی
)5مقاوم بودن
تاریخچه
دیدگاه جدید شبکه های عصبی در دهه 40با استفاده از یک مدل منطقی توسط مک کلوث و والتر پیتز انجام
شد.
دونالد هب ،ادامه راه پاولف در شرط گذاری کالسیک به عنوان خواص نرونها
در 1958شبکه پرسپترون توسط روزنبالت معرفی گردید .این شبکه قادر به شناسایی الگوها بود.
در 1960توسط ویدرو ( دانشگاه استنفورد ) شبکه عصبی تطبیقی خطی آداالین با قانون یادگیری جدید بوجود
در 1969مینسکی و پاپرت کتابی نوشتند که محدودیتهای سیستمهای تک الیه و چند الیه پرسپترون را
تشریح کردند
در ،1972تئو کوهونن و جیمز اندرسون به طور مستقل شبکه های عصبی جدیدی با کارکرد عناصر ذخیره ساز
مطرح شدند.
دهه 80رشد تکنولوژی میکروپروسسورها و روند صعودی تحقیقات روی شبکه عصبی
58
کاربردها
پزشکی
در این رابطه Wشدت سیناپس n ،ورودی خالص f ،تابع تحریک و aسیگنال گذرنده از اکسون است.
59
oخطی
oزیگموئیدی
ساده ترین شبکه عصبی ،یک شبکه عصبی پرسپترون تک نرونی است.
قابل استفاده در طبقه بندی بین دو کالس که تفکیک پذیر خطی باشند.
60
امکان آموزش با نظارت شبکه وجود دارد.
oمثال W12شدت سیناپس دومین عنصر ورودی به نرون اول را نشان میدهد.
61
ساختار شبکه عصبی ﭘرسپترون تک الیه
در شبکه تک الیه بردار ورودی توسط نرونهای الیه با رابطه ( a=f(Wp+bبه بردار خروجی مرتبط می شوند .شکل زیر
62
شکل .25شبکه پیشخور ( )feedforwardسه الیه
در شبکه های چند الیه ،خروجی هر الیه به عنوان بردار ورودی برای الیه بعدی محسوب می شود.
...، W1،W2به ترتیب ماتریس وزن الیه اول ،دوم و ....را نشان می دهد.
...، S1،S2به ترتیب تعداد نرونهای الیه اول ،دوم و ....را نشان می دهد.
...، f1،f2به ترتیب توابع تحریک الیه اول ،دوم و ....را نشان می دهد.
...، n1،n2به ترتیب بردار ورودی خالص الیه اول ،دوم و ....را نشان می دهد.
...، a1،a2به ترتیب بردار خروجی الیه اول ،دوم و ....را نشان می دهد.
...، b1،b2به ترتیب بردار بایاس الیه اول ،دوم و ....را نشان می دهد.
در طبقه بندی بین دو کالس ،اگر پاسﺦ نرون صفر باشد بیانگر تعلق نمونه ورودی به کالس اول و پاسﺦ یک نشان دهنده
تعلق نمونه به کالس دیگر می باشد .جهت آموزش شبکه ،پس از معرفی یک نمونه آموزشی ،پاسﺦ شبکه و پاسﺦ مورد
انتظار مقایسه شده و بر اساس میزان اختالف این دو پاسﺦ ،مقادیر وزن نرون و مقدار بایاس تنظیم میشود .پارامترهای
وزن در واقع مشخص کننده معادله مرز بین دوکالس در فضای بردار ویژگی میباشند.
63
چند سوال:
)4آیا تعداد عناصر بردار ورودی Rو تعداد نرونهای Sمی توانند با هم برابر نباشند؟
)5آیا همه نرونهای موجود در یک الیه باید دارای توابع تحریک یکسان باشند؟
تفاوت اصلی در وجود حداقل یک سیگنال برگشتی از یک نرون به همان نرون یا نرونهای همان الیه و یا الیههای قبل
است .البته استفاده از بلوک تاخیر ( Dدر شبکه های گسسته) نیز نشانه پسخور بودن ساختار است.
نکته :شبکه های پسخور از توانایی بالقوه بیشتری نسبت به شبکه های پیشخور برخوردارند و بهتر می توانند رفتار
شناسایی الگو
شناسایی الگو فاکتور مهم در طراحی سیستمهای اطالعاتی است و موضوع مشترک تحقیقاتی برای اکثر رشته ها از
oاتفاق :بیماری
oسیگنال آمیخته با نویز :اشکاالت آزمایشی (چه در وسایل و چه در بدن فرد بیمار)
شناسایی الگو چیزی جز جدا سازی داده ها یا الگو های ورودی بین دستجات مختلف نیست .مراحل طراحی یک سیستم
کد گذاری :بیان ویژگیهای شی مورد نظر ( که از طریق اندازه گیری به دست میآیند) ،توسط بردارهای ورودی
بیان هندسی :تخصیص یک نقطه در فضای چند بعدی اقلیدسی به هر شی
استخراج شاخص :استخراج مشخصه های مهم از روی بردار های ورودی و کاهش ابعاد الگوها (عناصری از
طبقه بندی الگوها :روندی برای تصمیم گیری بهینه اتوماتیک
تخصیص الگوهای ورودی به یکی از طبقاتی که فضای اقلیدسی برای تصمیم گیری به تعداد متناهی از آنها تقسیم شده
است.
شبکههای عصبی مستقیما با دادههای واقعی کار می کنند .لذا به طراحیهای مدل آزاد یا تخمین زننده های یونیورسال
مدل آزاد موسومند .شبکه های عصبی در مقابل روشهای کالسیک حل مسائل قرار می گیرند .در روشهای کالسیک
باید تمامی الگوهای یادگیری قبل از حل مسئله طبقه بندی الگو در اختیار باشند .یعنی ،ابتدا باید یک مدل ریاضی از
مشاهدات داشت تا پس از ارزیابی مدلها بر اساس دادههای واقعی طراحی انجام شود .روشهای کالسیک معموال خاص
سوال :اطالعاتی که شبکه های عصبی بر مبنای آن عمل تصمیم گیری را انجام می دهد ،چگونه و در کجا ذخیره میگردد؟
65
بررسی یک مثال
هدف :جداسازی سه نوع میوه سیب ،پرتقال و گالبی در یک انبار به طور خودکار.
کد گذاری :نشان دادن سیب ،پرتقال و گالبی به ترتیب با بردارهای p2 ،p1و p3به عنوان بردارهای مرجع (مولفه بردارها
استخراج شاخص :عنصر سوم در همه طبقات مشترک است .لذا با حذف این مولفه به بردارهای دو بعدی میرسیم.
مساله بیان شده یک مسئله ساده شناسایی الگوی باینری است و با دریافت یک بردار ورودی 2بعدی و تصمیم گیری
سیب
گالبی
پرتقال
66
1 −1
[=𝑊 و اوزان نرونها بدست می آید] :
1 1
که بصورت خطی از هم جدا شدهاند ،دارد (جداسازی خطی) .مرز جدا ساز نواحی در حالت تک نرونی یک فوق صفحه و
در حالت کلی برای هر نقطه دلخواه qروی ناحیه مرزی داریم:
< >a,bنماد ضرب داخلی دو بردار بوده و همواره تصویر bروی aمضربی از ضرب داخلی دو بردار است.
تذکر :1خط مرزی همواره عمود بر بردار وزن بوده و محل قرار گرفتن مرز توسط بردار بایاس تعیین میشود.
تذکر :2تصویر بردار سازنده هر نقطه روی خط مرزی بر بردار وزن ،برابر با مضربی از منفی جمله بایاس ( )-bاست.
(چرا؟)
نتیجه :برای تمام نقاطی که باالی (با توجه به جهت بردار وزن) خط مرزی قرار دارند ،ورودی خالص نرون مثبت است
67
شکل .28جداسازی خطی در پرسپترون تک الیه
به منظور دسته بندی نمونه ها در بیش از دو کالس میتوان در شبکه عصبی پرسپترون ،یک الیه با بیش از یک نرون
طراحی نمود.
سوال :در شکل روبرو ورودی خالص نرون چگونه است؟ آیا پاسﺦ یکتاست؟
.1پارامترهای وزن و بایاس نرون ،با مقادیر تصادفی کوچک مقداردهی اولیه می شوند.
.2یک نمونه آموزشی با بردار ورودی Xبه شبکه معرفی و ورودی خالص نرون برآورد میشود.
.5براساس خطای پاسﺦ دهی ،پارامترهای وزن و بایاس شبکه تصحیح میشود.
68
.6مراحل 2تا 5برای کلیه نمونه های آموزشی به انجام میرسد .یک بار ” epochمعرفی کامل نمونه های آموزشی به
.7آموزش شبکه در چندین اپک به انجام میرسد به نحوی که یکی از شرایط زیر حاصل شود:
دیگر تغییر محسوسی در پارامترهای وزن و بایاس نرون ایجاد نشود.
مثال متلب
-1فرض کنید دو دسته داده xو yبصورت زیر تعریف شوند:
;N = 20
)Figure(1
;)plotpv(x,y
69
شکل .29دو دسته داده بصورت خطی جدایی پذیر
;net = perceptron
;)net = train(net,x,y
;)view(net
نتیجه وزنهای بدست آمده پس از آموزش شبکه خطی به شکل زیر است:
70
نمایش خط جداساز با توجه به وزن نرونها.31 شکل
[ را در چه گروهی دستهبندی میکند؟5] داده ورودی با مقدار، شبکه عصبی آموزش داده شده:سوال
3
% create network
);
71
view(net);
net.layers{1}.size = 5;
net.layers{1}.transferFcn = 'logsig';
view(net);
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
شب که همینﮓ از هر دو ساختار پیشخور وپسخور تشکیل می شود.هدف اصلی در شبکه همینﮓ این است که تشخیص
کدام الگوی مرجع بیشترین نزدیکی را به الگوی ورودی دارد و سپس آن را در خروجی شبکه ظاهر میکند .
ویژگیها
• دارای 3الیه
• تشخیص اینکه کدام الگوی مرجع بیشترین نزدیکی را به الگوی ورودی دارد.
73
در مواردی که به شبکه بردار ورودی اختیاری (مثال پرتقال بیضوی) اعمال می شود انتظار بر این است که الگوی مرجعی
که بیشترین نزدیکی را با ورودی دارد ،در خروجی ظاهر شود .دو پروسه محاسباتی :ذخیره سازی الگوها و بازیابی
همبستگی یا ضرب داخلی بین بردارهای مرجع با بردار ورودی را محاسبه میکند .بردارهای مرجع الگوهایی هستند که
تمامی عناصر بردار خروجی الیه اول مقادیری بین 0و 2Rدارند .چرا؟
نرون با بزرگترین مقدار خروجی متناظر با الگوی مرجعی خواهد بود که بیشترین شباهت (کمترین فاصله همینﮓ) را با
الیه دوم الیه برگشتی است که الیه رقابتی نیز نامیده می شود .در این مرحله خروجی ماکزیمم از بقیه جدا میگردد.
وزنهای این الیه W2نامیده می شوند که به الگوریتم های بدست آوردن آنها (آموزش) پرداخته نمی شود.
74
الیه سوم ،شبکه پیشخور با تابع تحریک آستانه متقارن دو مقداره است .وزن ها در این الیه از رابطه زیر تعیین می
شود:
شﺒکه هاپﻔیلد
این شبکه دارای ساختار تک الیه بازگشتی است و در آن عملکرد همه نرونها مشابه یکدیگر است و نرون ورودی یا
خروجی در آن وجود ندارد .مقادیر اولیه نرونها توسط ورودی تعیین میشود و سپس شبکه با تکرار به یکی از الگوهای
انتظار داریم که اگر در لحظه 0به شبکه الگوی سیب [ ]1;1اعمال شود ،شبکه به سمت [ ]1;1همگرا گردد.
75
شبکه همینﮓ به پاسﺦ مناسب منتهی میشود و همواره به یکی از الگوهای مرجع همگرا میشود ،و الگوی دارای
بیشترین تشابه به ورودی را بر میگزیند ،در حالی که شبکه هاپفیلد پاسﺦ را کد میکند .پاسﺦ هاپفیلد ممکن است
انواع الگوریتمهای یادگیری برای تنظیم پارامترها از تفاوتهای مهم انواع شبکه ها با یکدیگر است.
آموزش و یادگیری
سیستمهای یادگیر صرفا با مشاهده عملکردشان رفتار خود را جهت رسیدن به هدفی خاص بهبود می بخشند .اگر
مقاصد و اهداف به طور کامل تعریف شده باشد ،دیگر احتیاجی به فرایند یادگیری نیست .یادگیری به علت عدم قطعیت
در شرایط محیطی الزم می گردد .رفتار سیستمهای یادگیر توسط الگوریتمهای بازگشتی بیان می شود .با الگوریتمهای
آموزش شاخص اجرایی مشخص شده ای بهینه می گردد .در حالت کلی دو نوع یادگیری داریم :با ناظر -بدون ناظر.
یادگیری با ناظر
در این حالت در هر تکرار الگوریتم یادگیری جواب مطلوب سیستم یادگیرنده از قبل آماده است ،به عبارت دیگر
الگوریتم به جواب مطلوب دسترسی دارد .مثال اگر هدف یادگیری تابع y=x2باشد ،پاسﺦ مطلوب به ورودی 0,5برابر
0,25میباشد .به طور کل جوابی را که سیستم یادگیر با وضعیت فعلی پارامترهایش می دهد ،جواب واقعی در نظر
میگیریم .بنابر این الگوریتم هم به جواب مطلوب و هم به جواب واقعی دسترسی دارد .یعنی خطای یادگیری که تفاوت
در این حالت جواب مطلوب برای سیستم یادگیرنده موجود نیست ،یعنی :عدم دسترسی به خطای یادگیری
سوال:
چگونه میتوان یک سیستم یادگیرنده را آموزش داد ،اگر ندانیم که این سیستم قرار است چه کاری انجام دهد؟
بیشتر الگوریتمهای بدون ناظر عمل خوشه بندی را انجام میدهند ،یعنی میآموزند که الگوهای ورودی را به تعداد
متناهی از گروهها تقسیم کنند .سیستم یادگیرنده توسط محیط تحریک شود .قانون یادگیری با رجوع به نتیجه تحریک،
پارامترهای سیستم یادگیری را تغییر دهد .سیستم یادگیرنده به خاطر تغییراتی که در ساختار داخلی آن اتفاق افتاده
معیاری سنجیده شود .معیار بهبود ،هدف یادگیری را مدل میکند .قانون یادگیری ،روندی است که در آن ماتریس وزنها
و بردارهای بایاس شبکه عصبی تنظیم میشوند .این قوانین توسط روابط بازگشتی و عموما به صورت معادالت تفاضلی
معادله یادگیری
یک نرون با یک بردار پارامتر wو بردار ورودی pقابل نمایش است.
هر نرون توانایی تنظیم بردار پارامتر خود بر اساس ورودی و یک سیگنال معلم را داراست
در یادگیری با ناظر :سیگنال معلم همان سیگنال خطا است
در یادگیری بدون ناظر :سیگنال معلم تغییر بردار حالت خود نرون است
– حالت پیوسته:
– حالت گسسته:
αنشان دهنده تاثیر از گذشته و ηنرخ یادگیری میباشد L .سیگنال یادگیری بوده و در حالت کلی تابعی از p, w, t
(برای حالت با ناظر) میباشد .مثال در قانون یادگیری پرسپترون بوده و سیگنال معلم همان سیگنال خطا و برابر L=t-a
است.
– حالت پیوسته:
– حالت گسسته:
77
در یادگیری offlineبه کمک داده های یادگیری طراحی شبکه عصبی و آموزش آن انجام می شود و پس از آن به عنوان
یک سیستم استاتیکی عمل می کند .ولی در حالت onlineمثل یک سیستم دینامیکی همواره در حال یادگیری است.
در یادگیری تشدیدی معموال مقادیر خروجی مطلوب در دسترس نیست و در آن به شبکه اعالم میشود که مثال عملکرد
آن %50درست است یا اصال مطلوب نیست .سیگنال برگشتی از نوع نقادی است در صورتیکه در یادگیری با ناظر جنبه
دستوری دارد (چون tمعلوم است) .سیگنال نقاد پارامترهای شبکه را تنظیم میکند با این امید که سیگنال نقاد بهتری
شبکه در اینجا بایستی تنها با ارائﺔ صرف بردارهای ورودی ،ارتباطات موجود بین الگوهای ورودی را پیدا کرده و در
شﺒکههای آداﻻیﻦ
شبکه آداالین با قانون یادگیری ویدرو – هوف ( معروف به قانون )LMSدر سال 1960و بعد از شبکه پرسپترون با قانون
یادگیری SLPRبه وجود آمد .شبکه آداالین شبیه پرسپترون است ولی با تابع تبدیل خطی ( به جای آستانه دو مقداره).
مناسب برای تقریب خطی یک تابع یا اجرای عمل شناسایی الگو
پارامترهای شبکه به نحوی تنظیم می شوند که شاخص اجرایی میانگین مربعات خطا بهینه شود.
مﺒانی بﻬینهسازی
بسیاری از مسائل مهندسی را میتوان بصورت یک مساله بهینه سازی بیان کرد .یادگیری شبکه های عصبی نیز میتواند
یک مساله بهینه سازی باشد .در یادگیری عملکردی پارامترهای شبکه به نحوی تنظیم می شوند که عملکرد شبکه
بهینه شود.
78
قدم اول :تعریف عملکرد و تعیین شاخص عملکرد است که از لحاظ اجرایی این شاخص معموال میانگین مربعات خطا
( )MSEاست.
قدم دوم :جستجو در فضای پارامترهای شبکه برای تنظیم آنها به طوریکه معیار اجرایی عملکرد کاهش یابد.
در الگوریتمهای بهینه سازی ،تخمین بعدی نقطه بهینه از روی تخمین بهینه فعلی بدست میآید.
در ادامه سه شبکه عصبی پرسپترون (پیشخور) ،همینﮓ (رقابتی) و هاپفیلد (حافظه انجمنی بازگشتی) و استفاده از
79