از جهت کاربرد نیز تا کنون در حل مسائل زیادی در زمینه بهینه سازی از جمله در مهندسی برق، کامپیوتر، صنایع، مکانیک، اقتصاد، مدیریت و ... استفاده شده است. دلیل استقبال بالا از این الگوریتم در کنار کارایی بالای آن، بیشتر به جنبه نوآوری و جدید و جذاب بودن آن برای متخصصین حوزه بهینه سازی بر می گردد. شکل زیر روند اعمال الگوریتم رقابت استعماری به یک مسئله بهینه سازی در حالت کلی را نشان می دهد. یادگیری شبکه عصبی نیز که یک مسئله بهینه سازی است، همین روند را خواهد داشت.
شکل 5: روند اعمال الگوریتم رقابت استعماری به یک مسئله بهینه سازی در حالت کلی
آموزش شبکه عصبی
آموزش شبکه عصبی همانگونه که در بالا نیز بدان اشاره گردید، همان تعیین وزنهای مناسب برای شبکه عصبی است. برای این منظور باید از یک روش بهینه سازی قوی و سریع استفاده کرد.
آموزش شبکه عصبی با استفاده از الگوریتم رقابت استعماری (ICA)
سوال اول: چرا آموزش شبکه عصبی با استفاده از الگوریتم های تکاملی؟
از روی این سوال خیلی از موارد بدون پرسیدن آن، رد می شویم. اما اتفاقاً این مهم ترین سوال است. چرا در کنار وجود الگوریتم های بهینه سازی مبتنی بر گرادیان (Gradient-Based Methods) که الگوریتمی مثل پس انتشار خطا (Error Back-Propagation) از آن ها استخراج می شود و خیلی سریع هم هست، باید برویم سراغ روشهای تکاملی مثل الگوریتم ICA؟ بیایید مزایا و معایب هر روش را بررسی کنیم.
- الگوریتم های بهینه سازی مبتنی بر گرادیان و الگوریتم پس انتشار خطا (BP) خیلی سریع هستند.
- الگوریتم های بهینه سازی مبتنی بر گرادیان و الگوریتم پس انتشار خطا (BP) مشکل افتادن در دام مینیمم محلی را دارند.
- الگوریتم های بهینه سازی مبتنی بر گرادیان و الگوریتم پس انتشار خطا (BP) فقط به دسته ای خاص و استاندارد از شبکه های عصبی مثل پرسپترون چند لایه (BP) و آر بی اف که حل بسته برای مشتق تابع هدف نسبت به وزنها را دارند، قابل اعمال هستند.
- الگوریتم های بهینه سازی تکاملی در مقایسه با الگوریتم های مبتنی بر گرادیان کند هستند.
- الگوریتم های بهینه سازی تکاملی قابلیت فرار از دام محلی را دارند.
- الگوریتم های بهینه سازی تکاملی وابسته به ساختار خاصی از شبکه نیستند و به هر ساختار تعریف شده ای قابل اعمال هستند.
- به غیر از تعیین وزنها (یادگیری شبکه عصبی) می توان همزمان ساختار شبکه (تعداد لایه ها و تعداد نرونها در هر لایه) را نیز توسط الگوریتم های بهینه سازی تکاملی مثل الگوریتم رقابت استعماری یاد گرفت.
پس استفاده از الگوریتم های تکاملی در شبکه عصبی مزیت فرار از نقاط مینیمم محلی و نیز عدم وابستگی به ساختار معین شبکه را دارد. اما در عوض این الگوریتم ها کند می باشند.
البته کند بودن بحث بسیار مهمی است و به همین سادگی نمی توان از آن عبور کرد. در مواردی کند بودن این روشها سایر مزیت های الگوریتم را زیر سوال می برد. در مورد شبکه عصبی نیز همین گونه است. استفاده از الگوریتم های تکاملی در مورد شبکه های عصبی استاندارد (در کنار وجود روشهای مبتنی بر گرادیان سریع) خیلی توجیه پذیر نیست. البته اگر زمان کافی داشته باشیم (میل دادن زمان به بینهایت) استفاده از الگوریتم های تکاملی معمولاً به جواب بهتری نسبت به الگوریتم های مبتنی بر گرادیان ختم خواهد شد. اما در عمل این گونه نیست و ما نمی توانیم مثلاً یک هفته برای یادگیری یک شبکه عصبی وقت بگذرایم وقتی که روش پس انتشار خطا در حدود یکی دو ساعت آن را حل می کند (حتی اگر به جواب کمی ضعیف تر برسد).
اما پرونده استفاده از الگوریتم های تکاملی در یادگیری شبکه عصبی را نباید بسته فرض کرد. شبکه های عصبی زیادی مطرح می شوند که ساختاری دارند که نظم کافی برای گرفتن مشتقات مورد استفاده در روشهای مبتنی بر گرادیان را نداشته و بنابراین روشهایی مثل پس انتشار خطا قابل اعمال نیستند. اینجاست که الگوریتم های تکاملی و در کنار آنها، الگوریتم رقابت استعماری باید مورد استفاده قرار گیرند.
سوال دوم: چرا الگوریتم رقایت استعماری؟
الگوریتم رقایت استعماری (ICA) در کنار روشهای دیگر بهینه سازی به عنوان ابزار نوینی برای محاسبات تکاملی و حل مسائل بهینه سازی مطرح شده و با موفقیت به بسیاری از مسائل در این حوزه اعمال شده است. اکثر مقالات منتشر شده (بعضی از آنها را
در این لینک ببینید) نیز از موفقیت و برتری نسبی این الگوریتم حکایت کرده اند.
پیاده سازی و برنامه نویسی عملی آموزش شبکه عصبی در متلب: بخش های مختلف کد مورد استفاده برای یادگیری شبکه عصبی را در زیر می بینیم. این کدها از دستورات تولباکس شبکه عصبی متلب استفاده می کنند. به زودی فیلم جامعی در مورد آموزش عملی برنامه نویسی شبکه عصبی در متلب در همین وبسیات عرضه خواهد شد. همچنین
در این لینک فایلهای آموزشی مکاتبه ای از متلبسایت قابل تهیه هستند. بخش های مختلف یک برنامه شبکه عصبی را با هم مرور می کنیم.
%% Start of Program
بعضی کدهای مروبط به شروع برنامه در اینجا قرار می گیرد.
%% Data generation or loading
دسته دیتای مورد استفاده را که معمولاً در یک فایل اکسل یا نوت پد و غیره قرار دارد در این بخش لود می کنیم. در بعضی موارد نیز دیتای مصنوعی را خودمان تولید می کنیم.
%% Data Normalization
دیتا را قبل از اعمال به شبکه عصبی معمولاً نرمالیزه می کنیم. خروجی ها را نیز در بعضی مسائل همانند مسائل طبقه بندی الگو (Pattern Recognition) کد گذاری می کنیم.
%% Train and Test Data
دیتای تست و ترین و در بعضی موارد ارزیابی در این بخش جدا می شوند. مثلاً می نویسیم:
TrPercent = 80;
TrNum = round(TrPercent/100 * DataNum);
R = randperm(DataNum);
TrIndex = R(1:TrNum);
TsIndex = R(TrNum+1:end);
Xtr = XN(TrIndex,:);
Xts = XN(TsIndex,:);
Ytr = YN(TrIndex,:);
Yts = YN(TsIndex,:);
%% Network Structure
ساختار شبکه در این بخش ایجاد می شود. معمولاً از دستور newff در متلب استفاده می کنیم. مثال زیر را ببینید.
pr = [-1 1];
PR = repmat(pr,InputNum,1);
Network = newff(PR, [10 5 1],{'tansig' 'tansig' 'purelin'});
Network.trainParam.epochs = 100;
Network.trainParam.goal = 0.0001;
%% Network Training
حال شبکه را آموزش می دهیم.
Network = train(Network,Xtr',Ytr');
%% Network Assessment
شبکه آموزش دیده را ارزیابی می کنیم.
%% Network Analysis and Display
بعضی تحلیل ها را انجام داده و نمودارهای لازم را می کشیم.
%% End of Program
برای استفاده از الگوریتم رقابت استعماری برای آموزش شبکه عصبی چه باید کرد؟
ما سعی می کنیم از ساختار شبکه را با دستور
newff ایجاد کنیم. ولی در کل می توان برنامه را از اول بدون استفاده از دستورات تولباکس نیز نوشت.
تابع هزینههمان ساختار کد بالا را درنظر بگیرید. در آنجا در درستور زیر ساختار شبکه ایجاد شد.
Network = newff(PR, [10 5 1],{'tansig' 'tansig' 'purelin'});
روی این ساختار در workspace متلب کلیک کنید. تمام تنظیمات شبکه را خواهید دید. سعی کنید محل ذخیره شدن وزن های شبکه عصبی را پیدا کرده و به آنها دسترسی پیدا کنید. شما باید بتوانید این وزنهای اولیه تصادفی را دستکاری کنید (در انتهای پست در
بخش پیوست توضیحات بیشتری در این مورد داده شده است). تابع هزینه شما به این صورت خواهد بود.
function Cost = ICA_CostFunction_Fcn(Country,Network);
از رشته طولانی
Country به ترتیب کدینگی که خود انتخاب کرده اید، وزن لایه های مختلف را جدا کنید.
[W U V , …] = GetNetworkWeightsFromCountry_Fcn(Country);
این وزنها را در محل های مناسبشان در
Network قرارداده و دیتای ورودی اموزش را با استفاده از دستور
sim متلب به
Network داده و خروجی ان را گرفته و با خروجی واقعی تست مقایسه کرده و برگردانید.
Network2 = Change Network With W U V …
Load TrainData_X
Load TrainData_Y
NetOut = sim(Network2,TrainData_X)
Cost = mse(NetOut, TrainData_Y)
end
آموزش شبکهحال باید شبکه را آموزش دهیم. بدون دستکاری کدهای اولیه دستور
train مورد استفاده در آنها را با یک تابع جدید که خودمان می نویسیم عوض کنید. اسم این تابع را مثلاً
TrianUsing_ICA_Fcn می گذاریم.
Function TrainedNetwork = TrianUsing_ICA_Fcn(Network,Xtr,Ytr);
کدهای آماده الگوریتمک رقابت استعماری (یا هر الگوریتم تکاملی دیگری) را در داخل این تابع قرار می دهیم. طول رشته بردار کشور (بعد یا همان تعداد متغیرهای بهینه سازی) را برابر با تعداد کل وزنهای مجهول شبکه در نظر می گیرم. با داشتن تابع هزینه تعریف شده، مثل هر مسئله بهینه سازی دیگری، به این مسئله بهینه سازی نگاه کرده و کدها را به آن اعمال می کنیم. البته این کار نیاز به کمی تغییرات و بازی کردن با کدها را خواهد داشت. اگر به کدهای الگوریتم رقابت استعماری دسترسی ندارید و یا نحوه استفاده از آنها را نمی دانید،
این لینک را ببینید.
BestWeights = FindBestWeightsUsingICA_Fcn(Network,Xtr,Ytr);
TrainedNetwork = Modify Network with Best Weights;
end
مقالات منتشر شده
تا کنون مقالات متعددی در مورد استفاده از الگوریتم رقابت استعماری در یادگیری شبکه عصبی، منتشر شده اند. چندین مورد از این مقالات در بخش
پایان نامه ها و مقالات در
این لینک لیست شده اند. عنوان دو مورد از این مقالات را در زیر می بینید.
1) Title: Neural Network Learning based on Chaotic Imperialist Competitive Algorithm
Authors: Marjan Abdechiri, Karim Faez, Helena Bahrami
Publication Year: 2010
Language: English
Type (Journal/Conference/Book Chapter): Conference Paper
Journal/Conference Title: The 2nd International Workshop on Intelligent System and Applications(ISA2010)
2) Title: Artificial Neural Network Weights Optimization based on Imperialist Competitive Algorithm
Authors: Maryam, Tayefeh Mahmoudi, Nafiseh, Forouzideh, Caro, Lucas, Fattaneh, Taghiyareh
Publication Year: 2009
Language: English
Type (Journal/Conference/Book Chapter): Conference Paper
Journal/Conference Title: Computer Science and Information Technologies 2009, CSIT'2009: Fourth International Scientific and Technical Conference, 15-17 October 2009, Lviv, Ukraine
شبیه سازی پروژه ها و مقالات رشته برق
با عرض سلام خدمت تمامی بازدید کنندگان وبلاگ تخصصی دانشجویان ارشد و دکترای برق
شبیه سازی و ترجمه ی متون تخصصی رشته ی برق پذیرفته می شود. می توانید جهت سفارشات مورد نظر خود در قالب فرم زیر به این ادرس میل بزنید.
سفارشات مربوط به شبیه سازیهای گرایش قدرت:
سفارشات مربوط به شبیه سازیهای گرایش کنترل و ترجمه متون برق:
|
توضیحات |
عنوان |
ردیف |
|
|
نام و نام خانوادگی |
1 |
|
|
شماره ی همراه * |
2 |
|
|
دانشگاه محل تحصیل*** |
3 |
|
|
رشته ی تحصیلی-گرایش |
4 |
|
|
مقطع تحصیلی |
5 |
|
|
زمان تحویل پروژه به استاد* |
6 |
|
|
زمان پیشنهادی تحویل پروژه به شما* |
7 |
|
|
عنوان پروژه ی درخواستی* |
8 |
|
|
استاد مربوطه |
9 |
|
توضیحات مربوطه: |
10 |
*** لطفا فرم بالا را با دقت پر کرده و مجددا ان را به ایمیل فوق میل نمایید. پر کردن عناوین ستاره دار الزامی است.
***نام دانشگاه محل تحصیل خود را حتما درج کنید
همچنین مدیریت این وبلاگ اقدام به تشکیل یک تیم تخصصی از دانشجویان و فارغ التحصیلان تحصیلات تکمیلی دانشگاههای برتر ایران که همگی انها دارای مدارک تافل و یا ایلتس هستند، کرده است. هدف از تشکیل تیم تخصصی مذکور انجام ترجمه های ی فارسی به انگلیسی و برگرداندن متون تخصصی و یا مقالات شما از فارسی به انگلیسی جهت درج در کنفرانسها و ژورنالهای داخلی و خارجی می باشد. لذا می توانید سفارشات خود را به ادرس زیر ارسال کنید:



سفارشات مربوط به ترجمه ===>
:: موضوعات مرتبط:
اموزش نرم افزار
:: برچسبها:
شبکه عصبی و الگوریتم رقابت استعماری,
الگوریتم رقابت استعماری,
کاربرد شبکه عصبی در برق,
شبکه عصبی برای برق