8-Amaliy mashgʻulot: Xatolarni teskari tarqalishi usuli


Download 312.98 Kb.
Pdf ko'rish
bet1/2
Sana07.04.2023
Hajmi312.98 Kb.
#1340474
  1   2
Bog'liq
8-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

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