8-Amaliy mashgʻulot: Xatolarni teskari tarqalishi usuli
Download 312.98 Kb. Pdf ko'rish
|
1 2
Bog'liq8-movzu
8-Amaliy mashgʻulot: Xatolarni teskari tarqalishi usuli (back-propagation) Xatolarni teskari tarqalish algoritmi (The backpropagation algorithm (Rumelhart and McClelland, 1986)) sun’iy intellekt tarmoqlarida foydalanilgan. Sun’iy neyronlar qatlamlarga birlashtirilib signallarini oldinga keyingi qatlamga uzatiladi. Xatolar esa teskari yo’nalishda tarqaladi. Sun’iy intellekt tarmog’i kirish qiymatlarini kirish qatalmidagi neyronlar orqali qabul qiladi. Chiqish qiymatlari esa chiqish qatlami neyronlari orqali beriladi. Tarmoqda bir yoki bir necha yashirin qatlam bo’lishi mumkin. Xatolarni teskari tarqalish algoritmi o’qituvchili o’rgatishda foydalaniladi. Ya’ni kirish qiymati uchun tarmoq chiqarishi kerak bo’lgan chiqish qiymati beriladi. Tarmoqning chiqishidan chiqqan qiymat va chiqishi kerak bo’lgan qiymat orasidagi farq xisoblanib xatolik topiladi. Xatoliklarni teskari tarqalish usulining g’oyasi ushbu xatoni sun’iy neyron tarmog’i o’rganishni tugatgangacha ya’ni o’rgangancha kamaytirish xisoblanadi. O’rgatishni boshlashda vaznlar ixtiyoriy tanlangan qiymatlar bo’ladi. Ularning qiymatlarini shunday moslashtirish kerakki tarmoqning xatoligi minimal bo’lsin. Sun’iy neyronlardagi faollashtiruvchi funksiyada vaznlar qiymatining kirish qiymatlariga ko’paytmasi yig’indisi xisoblanadi: (1) Ko’rinib turibdiki faollashtirish faqatgina kirishlar va vaznlarga bog’liq bo’ladi. Chiziqli funksiya neyronning o’rganish qobiliyatini cheklagani uchun odatda quyidagi sigmoid kabi funksiyalardan foydalaniladi: (2) Sigmoid funksiya qiymati x ning katta musbut qiymatlarida 1 ga yaqin bo’ladi. x ning qiymati nol bo’lganda esa funksiya qiymati 0.5 bo’ladi. Bu neyron chiqish qiymatlarining yuqori qiymatdan past qiymatga bir tekisda o’tishini ta’minlaydi. Chiqish qiymatlar faqatgina faollashtiruvchi funksiyaga kirish qiymatlari va ularga mos vaznlarga bog’liq bo’ladi. Sun’iy neyronni o’rgatishdan maqsad kirishga biror qiymat berilganda chiqishda kutilgan qiymatni olish uchun bo’ladi. Xatolik bu kutilgan chiqish qiymati va xaqiqiy chiqqan qiymat orasidagi farq bo’lib, uni minimallashtirish uchun vaznlar qiymatlar mos ravishda o’zgartiriladi. Xatolik funksiyasini quyidagicha ifodalash mumkin: (3) Xatolik kutilgan chiqish qiymati va xaqiqiy chiqqan qiymat orasidagi farqning kvadrati orqali xisoblanadi. Kvadratni xisoblaganda qiymat musbat bo’ladi. Bundan tashqari farq qiymati katta bo’lsa kvadrat qiymati yanada kattalashib ketadi va aksincha farq qiymati kichik bo’lsa kvadrat qiymat yanada kichik bo’ladi. Tarmoqni xatoligi chiqish qatlami neyronlarning xatoliklarning yig’indisidan iborat bo’ladi: (4) Xatoliklarni teskari tarqalish algoritmi xatolik kirish, chiqish va vaznlar qiymatlari o’zaro qanday bog’langanini xisoblaydi. Vaznlarni gradientli xisoblash usuli bilan mos xolda o’zgartirishimiz mumkin: (5) Vaznning o’zgarishini (Δw ji ) xisoblash uchun xatolik funksiyasidan vazn bo’yicha xosila olinadi va uning qiymati η ga bog’liq bo’ladi. Bunda vaznning qiymat o’zgarishi xatolikning kamayishiga ko’proq yordam bersa vaznning qiymat o’zgarishi ko’proq bo’ladi, aksincha bo’lsa kamroq bo’ladi. (5) formuladan foydalanib xatolik minimal bo’lguncha vazn qiymati xisoblanadi. Xatolikning vaznga nisbatan xosilasini xisoblash uchun birinchi E xatolikning O j chiqish qiymatlariga nisbatan xosilasini xisoblaymiz: (6) O j chiqish qiymatini faollashtirish qiymatiga A j bog’likligi xisoblanadi. O’z navbatida bu vaznga bog’liqlikni keltirib chiqaradi ((1) va (2) dan): (7) Va quyidagini keltirib chiqaramiz ((6) va (7) dan): (8) Har bir vazn qiymat o’zgarishi quyidagicha bo’ladi ((5) va (8) dan): (9) (9) formulani ikki qatlamli sun’iy tarmoqni o’rgatish uchun ishlatish mumkin. Qatlam soni yana bittaga oshganda v ik vaznlarni sozlash uchun avvalo xatolik oldingi qatlamdan kelayotgan kirish qiymatiga bog’liqligini xisoblash lozim. (7), (8), va (9) dagi x i bilan w ji ni o’zgartiriladi. Tarmoq xatoligi vazn v ik o’zgarishiga qanday bog’langanini ko’rishimiz kerak: (10) Bu yerda: (11) Va v ik vaznli neyronlarning u k kirishlari bo’lsa ((7) dan): (12) Agar yana qatlam qo’shadigan bo’lsak , xatolik oldingi qatlam kirishlari va vaznlariga qay tarzda bog’liqligini xisoblaymiz. Xatolikni teskari tarqalish usulida sun’iy intellekt tarmog’ida qatlamlar soni kam bo’ladi. Chunki tarmoqni o’rgatish vaqti har bir qatlam uchun eksponensial tarzda oshadi. public void BackPropagate( float [] inputs, float [] expected) //backpropogation; { float [] output = FeedForward(inputs); //runs feed forward to ensure neurons are populated correctly cost = 0; for ( int i = 0; i < output.Length; i++) cost += ( float )Math.Pow(output[i] - expected[i], 2); //calculated cost of network cost = cost / 2; //this value is not used in calculions, rather used to identify the performance of the network float [][] gamma; List< float []> gammaList = new List< float []>(); for ( int i = 0; i < layers.Length; i++) { gammaList.Add( new float [layers[i]]); } gamma = gammaList.ToArray(); //gamma initialization int layer = layers.Length - 2; for ( int i = 0; i < output.Length; i++) gamma[layers.Length-1][i] = (output[i] - expected[i]) * activateDer(output[i],layer); //Gamma calculation for ( int i = 0; i < neurons[layers.Length - 1].Length; i++) //calculates the w' and b' for the last layer in the network { biases[layers.Length - 1][i] -= gamma[layers.Length - 1][i] * learningRate; for ( int j = 0; j < neurons[layers.Length - 2].Length; j++) { weights[layers.Length - 2][i][j] -= gamma[layers.Length - 1][i] * neurons[layers.Length-2][j] * learningRate; //*learning } } for ( int i = layers.Length - 2; i > 0; i--) //runs on all hidden layers { layer = i - 1; for ( int j = 0; j < neurons[i].Length; j++) //outputs { gamma[i][j] = 0; for ( int k = 0; k < gamma[i+1].Length; k++) { gamma[i][j] = gamma[i + 1][k] * weights[i][k][j]; } gamma[i][j] *= activateDer(neurons[i][j],layer); //calculate gamma } for ( int j = 0; j < neurons[i].Length; j++) //itterate over outputs of layer { biases[i][j] -= gamma[i][j] * learningRate; //modify biases of network for ( int k = 0; k < neurons[i-1].Length; k++) //itterate over inputs to layer { weights[i - 1][j][k] -= gamma[i][j] * neurons[i-1][k] * learningRate; //modify weights of network } } } } //Genet Download 312.98 Kb. Do'stlaringiz bilan baham: |
1 2
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling