Atgalinio dauginimo algoritmas c. Daugiasluoksnio neuroninio tinklo mokymo, naudojant atgalinio skleidimo metodą, algoritmas

Tikslai dauginimas atgal yra paprasti: koreguokite kiekvieną svorį proporcingai pagal tai, kiek jis prisideda prie bendros klaidos. Jei pakartotinai sumažinsime kiekvieno svorio paklaidą, galiausiai turėsime svorių rinkinį, leidžiantį gerai prognozuoti.

Grandinės taisyklės atnaujinimas

Galima įsivaizduoti kaip ilgą įdėtų lygčių seką. Jei taip galvojate apie sklaidą pirmyn, tai atgalinis sklidimas yra tik programa grandinės taisyklės(sudėtinga funkcijų diferenciacija), kad surastumėte nuostolių išvestines, atsižvelgiant į bet kurį įdėtosios lygties kintamąjį. Atsižvelgiant į sklidimo pirmyn funkciją:

F(x)=A(B(C(x)))

A, B ir C yra skirtinguose sluoksniuose. Naudodami grandinės taisyklę, galime lengvai apskaičiuoti f(x) išvestinę x atžvilgiu:

F′(x)=f′(A)⋅A′(B)⋅B′(C)⋅C′(x)

Ką apie išvestinę B? Norėdami rasti išvestinę pagal B, galite apsimesti, kad B(C(x)) yra konstanta, pakeiskite jį rezervuotos vietos kintamuoju B, ir toliau ieškokite išvestinės, susijusios su B standartinis.

F′(B)=f′(A)⋅A′(B)

Šis paprastas metodas taikomas bet kuriam funkcijos kintamajam ir leidžia mums tiksliai nustatyti poveikį kiekvienas kintamasis į bendrą rezultatą.

Grandinės taisyklės taikymas

Naudokime grandinės taisyklę nuostolių išvestinei apskaičiuoti atsižvelgiant į bet kokį tinklo svorį. Grandinėjimo taisyklė padės mums nustatyti, kiek kiekvienas svoris prisideda prie bendros klaidos ir krypties, kuria kiekvienas svoris turėtų būti atnaujintas, kad būtų sumažinta klaida. Štai lygtys, kurių reikia norint sudaryti prognozę ir apskaičiuoti bendrą klaidą arba nuostolius:

Atsižvelgiant į tinklą, kurį sudaro vienas neuronas, viso nuostolio Neuroninį tinklą galima apskaičiuoti taip:

Kaina = C(R(Z(XW)))

Naudodami grandinės taisyklę, galime lengvai rasti nuostolių išvestinę pagal svorį W.

C′(W)=C′(R)⋅R′(Z)⋅Z′(W)=(y^−y)⋅R′(Z)⋅X

Dabar, kai turime lygtį, skirtą apskaičiuoti nuostolių išvestinę bet kokio svorio atžvilgiu, pažvelkime į neuroninio tinklo pavyzdį:

Kokia yra nuostolio išvestinė Va?

C′(WO)=C′(y^)⋅y^′(ZO)⋅Z′O(WO)=(y^−y)⋅R′(ZO)⋅H

Ką apie Wh? Norėdami tai išsiaiškinti, tiesiog grįžtame į savo funkciją, rekursyviai taikydami grandinės taisyklę, kol pasiekiame funkciją, kuri turi elementą Wh.

C′(Wh)=C′(y^)⋅O′(Zo)⋅Z′o(H)⋅H′(Zh)⋅Z′h(Wh)=(y^−y)⋅R′(Zo )⋅Wo⋅R′(Zh)⋅X

Ir šiaip įdomu, kas būtų, jei mūsų tinkle būtų 10 paslėptų sluoksnių. Kokia yra pirmojo svorio praradimo w1 išvestinė?

C(w1)=(dC/dy^)⋅(dy^/dZ11)⋅(dZ11/dH10)⋅(dH10/dZ10)⋅(dZ10/dH9)⋅(dH9/dZ9)⋅(dZ9/dH8)⋅( dH8/dZ8)⋅(dZ8/dH7)⋅(dH7/dZ7)⋅(dZ7/dH6)⋅(dH6/dZ6)⋅(dZ6/dH5)⋅(dH5/dZ5)⋅(dZ5/dH4)⋅(dH4)⋅ dZ4)⋅(dZ4/dH3)⋅(dH3/dZ3)⋅(dZ3/dH2)⋅(dH2/dZ2)⋅(dZ2/dH1)⋅(dH1/dZ1)⋅(dZ1/dW1)

Pastebite modelį? Skaičiavimo, reikalingo išvestiniams nuostoliams apskaičiuoti, kiekis didėja, kai mūsų tinklas gilėja. Taip pat atkreipkite dėmesį mūsų išvestinių skaičiavimų perteklius. Kiekvieno sluoksnio nuostolių išvestinė prideda du naujus elementus prie elementų, kuriuos jau apskaičiavo virš jo esantys sluoksniai. O kas, jei būtų koks nors būdas išsaugoti mūsų darbą ir išvengti šių pasikartojančių skaičiavimų?

Darbo išsaugojimas naudojant atmintinę

Atmintinė yra kompiuterių mokslo terminas, turintis paprastą reikšmę: neskaičiuok tų pačių dalykų vėl ir vėl. Išsaugodami atmintinę, išsaugome anksčiau apskaičiuotus rezultatus, kad išvengtume tos pačios funkcijos skaičiavimo iš naujo. Tai naudinga norint paspartinti rekursines funkcijas, iš kurių viena yra platinimas atgal. Atkreipkite dėmesį į toliau pateiktų išvestinių lygčių modelį.

Kiekvienas iš šių sluoksnių perskaičiuoja tas pačias išvestines! Užuot rašę ilgas išvestines kiekvieno svorio lygtis, galime naudoti atmintinę, kad išsaugotume savo darbą, kai grąžiname klaidą per tinklą. Norėdami tai padaryti, apibrėžiame 3 lygtis (žemiau), kurios kartu išreiškiamos trumpa forma visi skaičiavimai, reikalingi atgaliniam dauginimui. Matematika ta pati, tačiau lygtys yra puikus spartusis klavišas, kurį galime naudoti norėdami sekti jau atliktus skaičiavimus ir išsaugoti savo darbą, kai grįžtame per tinklą.

Pirmiausia apskaičiuojame išvesties sluoksnio klaida ir perduokite rezultatą į priešais esantį paslėptą sluoksnį. Apskaičiavę paslėpto sluoksnio klaidą, jo reikšmę grąžiname ankstesniam paslėptam sluoksniui. Ir taip toliau, ir taip toliau. Grįždami per tinklą, kiekvienam sluoksniui taikome 3 formulę, kad apskaičiuotume nuostolių išvestinę to sluoksnio svorių atžvilgiu. Šis vedinys mums sako kuria kryptimi reguliuoti savo svorį sumažinti bendrus nuostolius.

Pastaba: terminas sluoksnio klaida reiškia nuostolių išvestinę priemonę įėjimas į sluoksnis. Jis atsako į klausimą: kaip pasikeičia nuostolių funkcijos išvestis, kai pasikeičia įvestis į šį sluoksnį?

Išvesties sluoksnio klaida

Norint apskaičiuoti išvesties sluoksnio paklaidą, reikia rasti nuostolių išvestinę išvesties sluoksnio įvesties atžvilgiu, Zo. Tai atsako į klausimą: kaip paskutinio sluoksnio svoriai veikia bendrą tinklo klaidą? Tada išvestinė yra:

C′(Zo)=(y^−y)⋅R′(Zo)

Kad būtų lengviau įrašyti, praktikai MO paprastai pakeičia seką (y^−y)∗R"(Zo) terminas Eo. Taigi mūsų išvesties sluoksnio klaidos formulė yra tokia:

Eo=(y^−y)⋅R′(Zo)

Paslėpto sluoksnio klaida

Norėdami apskaičiuoti paslėpto sluoksnio paklaidą, turite rasti nuostolių išvestinę, atsižvelgiant į paslėpto sluoksnio įvestį, Zh.

Eh=Eo⋅Wo⋅R′(Zh)

Ši formulė yra atgalinio dauginimo pagrindas. Apskaičiuojame dabartinio sluoksnio paklaidą ir grąžiname svertinę klaidą atgal į ankstesnį sluoksnį, tęsdami procesą, kol pasieksime pirmąjį paslėptą sluoksnį. Be to, mes atnaujiname svorius, naudodami kiekvieno svorio praradimo išvestinę.

Bet kokio svorio praradimo išvestinė

Grįžkime prie mūsų nuostolių išvestinės formulės atsižvelgiant į išvesties sluoksnio svorį Va.

C′(WO)=(y^−y)⋅R′(ZO)⋅H

Žinome, kad pirmąją dalį galime pakeisti išvesties sluoksnio klaidos lygtimi Ech. H reiškia paslėpto sluoksnio aktyvavimą.

C′(Wo)=Eo⋅H

Taigi, norėdami rasti nuostolių išvestinę bet kokio mūsų tinklo svorio atžvilgiu, mes tiesiog padauginame atitinkamo sluoksnio paklaidą iš jo įvesties (ankstesnio sluoksnio išvesties).

C′(w)=CurrentLayerError⋅CurrentLayerInput

Pastaba: įėjimas reiškia aktyvavimą iš ankstesnio sluoksnio, o ne svertinę įvestį, Z.

Apibendrinant

Čia yra paskutinės 3 lygtys, kurios kartu sudaro atgalinio dauginimo pagrindą.

Štai procesas, vizualizuotas naudojant mūsų pavyzdį neuroninis tinklas aukštesnis:

Atgalinis dauginimas: kodo pavyzdys

def relu_prime(z): jeigu z > 0: grąžinti 1 grąžinti 0 def kaina (yHat, y): grąžinti 0,5 * (yHat - y)**2 def cost_prime(yHat, y): grąžinti yHat-y def backprop(x, y, Wh, Wo, lr): yHat = feed_forward(x, Wh, Wo) # Sluoksnio klaida Eo = (yHat - y) * relu_prime(Zo) Eh = Eo * Wo * relu_prime(Zh) # Svorių kainos išvestinė dWo = Eo * H dWh = Eh * x # Atnaujinkite svorius Wh -= lr * dWh Wo -= lr * dWo

Delta yra taisyklė, kuri naudojama treniruojant perceptroną, naudojant išvesties sluoksnio klaidos reikšmę. Jei tinkle yra du ar daugiau sluoksnių, tarpiniams sluoksniams nėra aiškios klaidos reikšmės ir negalima naudoti delta taisyklės.

Pagrindinė platinimo atgal idėja yra tai, kaip gauti paslėptų sluoksnių neuronų klaidų įvertinimą. Atkreipkite dėmesį, kad garsus išvesties sluoksnio neuronų padarytos klaidos atsiranda dėl nežinomas paslėpto sluoksnio neuronų klaidos. Kuo didesnė sinapsinio ryšio tarp paslėptojo sluoksnio neurono ir išėjimo neurono vertė, tuo stipresnė klaida pirmasis turi įtakos antrojo klaidai. Vadinasi, paslėptų sluoksnių elementų paklaidos įvertį galima gauti kaip paskesnių sluoksnių klaidų svertinę sumą.

Backpropagation algoritmas (BEP), kuris yra delta taisyklės apibendrinimas, leidžia treniruoti PR ANN su bet kokiu sluoksnių skaičiumi. Galima sakyti, kad AORO iš tikrųjų naudoja įvairovę gradiento nusileidimas, perstatant svorius minimalios paklaidos kryptimi.

Naudojant AOR, daroma prielaida, kad sigmoidinė funkcija naudojama kaip aktyvinimo funkcija. Ši funkcija taupo skaičiavimo pastangas, nes turi paprastą išvestinę:

Sigmoidinė funkcija apriboja stiprius signalus iki 1 ir sustiprina silpnus signalus.

Atgalinio sklaidos algoritmo prasmė ta, kad treniruojant tinklui pirmiausia pateikiamas vaizdas, kuriam apskaičiuojama išvesties klaida. Tada ši klaida tinkle plinta priešinga kryptimi, pakeisdama interneuronų jungčių svorį.

Algoritmas apima tą pačią veiksmų seką, kaip ir treniruojant perceptroną. Pirmiausia gaunami interneuronų jungčių svoriai atsitiktinės reikšmės, tada atliekami šie veiksmai:

1) Pasirinkta treniruočių pora ( X , Z*), X tiekiamas į įėjimą;

2) Apskaičiuojama tinklo išvestis Z = F(Y);

3) Apskaičiuojama išvesties paklaida E;

4) Tinklo svoriai koreguojami taip, kad būtų kuo mažiau klaidų;

1 ir 2 žingsniai yra sklidimas į priekį per tinklą, o 3 ir 4 yra atvirkštinis sklidimas.

Prieš treniruotę būtina padalinti esamas įvesties-išvesties poras į dvi dalis: mokymą ir testavimą.

Treniruotės kokybei tikrinti naudojamos testų poros – neuroninis tinklas yra gerai apmokytas, jei bandomosios poros nurodytai įvesties išvestis yra artima bandomajai.

Treniruotės metu gali būti, kad neuroninis tinklas rodo gerus mokymo duomenų rezultatus, bet prastus bandymų duomenis. Gali būti dvi priežastys:

1. Testo duomenys labai skiriasi nuo treniruočių duomenų, t.y. treniruočių poros neapėmė visų įvesties erdvės sričių.


2. Atsirado „perkvalifikavimo“ fenomenas ( perdėtas), kai neuroninio tinklo elgsena yra sudėtingesnė nei sprendžiama problema.

Paskutinis atvejis funkcijos aproksimavimo taškais problema pavaizduota Fig. 3.3, kur balti apskritimai žymi bandymo duomenis, o tamsūs apskritimai – treniruočių duomenis.

Daugiasluoksniuose neuroniniuose tinkluose visų sluoksnių, išskyrus paskutinį, neuronų išvesties vertės paprastai nežinomos, remiantis tik klaidų reikšmėmis, trijų ar daugiau sluoksnių perceptrono tinklo išėjimuose

Vienas iš šios problemos sprendimo variantų yra sukurti išvesties signalų rinkinius, atitinkančius įvesties signalus kiekvienam neuroninio tinklo sluoksniui, o tai, žinoma, yra labai daug darbo reikalaujanti operacija ir ne visada įmanoma dinamiškai koreguoti sinapsių svorio koeficientus, kurių metu, kaip taisyklė, dauguma silpni ryšiai ir šiek tiek keičiasi viena ar kita kryptimi, ir išsaugomi tik tie pakeitimai, dėl kurių sumažėjo viso tinklo išvesties klaida. šis metodas, nepaisant

akivaizdus paprastumas, reikalauja sudėtingų įprastų skaičiavimų. Ir galiausiai, trečias, priimtinesnis variantas yra klaidos signalų sklidimas iš neuroninio tinklo išėjimų į jo įvestis, priešinga tiesioginiam signalų sklidimui normaliai veikiant algoritmas vadinamas atgalinio skleidimo procedūra (klaida atgalinis dauginimasis) Tai jis, apie kurį kalbama toliau

Atgalinio sklaidos algoritmas yra pasikartojantis gradiento mokymosi algoritmas, naudojamas sumažinti standartinis nuokrypis srovė iš reikalingų daugiasluoksnių neuroninių tinklų su nuosekliosiomis jungtimis išėjimų

Pagal metodą mažiausių kvadratų, objektyvioji neuroninio tinklo paklaidos funkcija, kurią reikia sumažinti, yra reikšmė

kur yra tikroji neurono išvesties būsena neuroninio tinklo išvesties sluoksnyje, kai vaizdas tiekiamas į jo įvestis, reikalinga šio neurono išvesties būsena

Sumavimas atliekamas per visus išvesties sluoksnio neuronus ir visus tinklo apdorojamus vaizdus

kur yra sinapsinio ryšio, jungiančio sluoksnio neuroną su sluoksnio neuronu, svorio koeficientas - mokymosi greičio koeficientas,

Pagal sudėtingų funkcijų diferencijavimo taisyklę

kur yra neurono įvesties signalų ir aktyvavimo funkcijos argumento svertinė suma Kadangi aktyvavimo funkcijos išvestinė turi būti nustatyta visoje abscisių ašyje, vieneto šuolio funkcija ir kitos aktyvavimo funkcijos su nehomogeniškumu netinka. svarstomi neuroniniai tinklai Jie naudoja šiuos sklandžias funkcijas, Kaip hiperbolinis tangentas arba klasikinė sigmoidė su eksponentine (žr. 1 1 lentelę) Pavyzdžiui, esant hiperbolinei liestine

Trečiasis daugiklis yra lygus ankstesnio sluoksnio neurono išėjimui

Pirmąjį veiksnį (1.11) galima lengvai išplėsti taip:

Čia sumavimas atliekamas tarp sluoksnio neuronų, įvedant naują kintamąjį:

gauname rekursinę formulę sluoksnio reikšmėms apskaičiuoti iš senesnio sluoksnio verčių

Išvesties sluoksniui:

Dabar galime parašyti (1.10) išplėstine forma:

Kartais norint suteikti svorio korekcijos procesui tam tikrą inerciją, išlyginant staigius šuolius judant paviršiumi objektyvią funkciją, (1.17) papildomas svorio pokyčio reikšme ankstesnėje iteracijoje.

kur yra inercijos koeficientas; dabartinis iteracijos numeris.

Taigi visas neuroninio tinklo mokymo algoritmas naudojant atgalinio sklaidos procedūrą yra sudarytas taip.

1 ŽINGSNIS. Pritaikykite vieną iš galimų vaizdų tinklo įvestims ir, esant normaliam neuroninio tinklo veikimo režimui, kai signalai sklinda iš įėjimų į išėjimus, apskaičiuokite pastarųjų reikšmes. Priminsime, kad:

kur yra neuronų skaičius sluoksnyje, atsižvelgiant į neuroną su pastovia išvesties būsena, kuri nustato poslinkį; neuronų įvestis sluoksnyje

kur yra sigmoidas,

kur yra įvesties vaizdo vektorinis komponentas.

4 ŽINGSNIS. Sureguliuokite visus svorius neuroniniame tinkle:

5 ŽINGSNIS. Jei tinklo klaida reikšminga, pereikite prie 1 veiksmo. Kitu atveju užbaikite.

Tinklai 1 veiksme pakaitomis atsitiktinė tvarka Visi treniruočių vaizdai pateikiami taip, kad tinklas, vaizdžiai tariant, vienų nepamirštų, nes kitų įsimena.

Iš (1.17) išraiškos matyti, kad kai išvesties vertė linkusi į nulį, mokymosi efektyvumas pastebimai sumažėja. Naudojant dvejetainius įvesties vektorius, vidutiniškai pusė svorių nebus pakoreguota, taigi regionas galimas vertes Pageidautina perkelti neuronų išėjimus ribose, o tai pasiekiama paprastais logistinių funkcijų pakeitimais. Pavyzdžiui, sigmoidas su eksponentine transformuojasi į:

Panagrinėkime neuroninio tinklo pajėgumo klausimą, ty vaizdų, pateiktų jo įvestims, kuriuos jis gali išmokti atpažinti, skaičių. Tinklams, turintiems daugiau nei du sluoksnius, šis klausimas lieka atviras. Dviejų sluoksnių tinklų deterministinis tinklo pajėgumas apskaičiuojamas taip:

kur yra reguliuojamų svorių skaičius, yra neuronų skaičius išvesties sluoksnyje.

Ši išraiška buvo gauta atsižvelgiant į kai kuriuos apribojimus. Pirma, įėjimų ir neuronų skaičius paslėptame sluoksnyje turi tenkinti nelygybę Antra, tačiau aukščiau pateiktas įvertinimas buvo atliktas tinklams su slenkstinėmis neuronų aktyvavimo funkcijomis ir tinklų su sklandžia aktyvinimo funkcijomis talpa, pavyzdžiui (1,23). paprastai yra didesnis. Be to, terminas deterministinis reiškia, kad gautas pajėgumo įvertinimas tinka visiems įvesties modeliams, kuriuos gali pateikti įvestis. Tiesą sakant, įvesties modelių pasiskirstymas turi tam tikrą dėsningumą, kuris leidžia neuroniniam tinklui apibendrinti ir taip padidinti savo tikrąjį pajėgumą. Nuo vaizdų platinimo, in bendras atvejis, iš anksto nežinoma, apie tikrąją talpą galime kalbėti tik preliminariai, tačiau dažniausiai ji yra dvigubai didesnė už deterministinę talpą.

Neuroninio tinklo talpos klausimas glaudžiai susijęs su galutinę vaizdų klasifikaciją atliekančio tinklo išvesties sluoksnio reikalingos galios klausimu. Pavyzdžiui, norint padalinti įvesties vaizdų rinkinį į dvi klases, pakanka vieno išvesties neurono. Tokiu atveju kiekvienas loginis lygis nurodys atskirą klasę. Dviejuose išvesties neuronuose su slenksčio aktyvavimo funkcija gali būti užkoduotos keturios klasės. Siekiant padidinti klasifikavimo patikimumą, pageidautina įvesti dubliavimą, kiekvienai klasei priskiriant po vieną neuroną išvesties sluoksnyje arba, dar geriau, kelis, kurių kiekvienas yra išmokytas nustatyti, ar vaizdas priklauso klasei, turinčiai savo laipsnį. pasitikėjimas, pavyzdžiui: didelis, vidutinis ir žemas. Tokie neuroniniai tinklai leidžia klasifikuoti įvesties vaizdus, ​​sujungtus į neryškius (neryškius arba susikertančius) rinkinius. Ši savybė priartina tokius tinklus realiomis sąlygomis biologinių neuroninių tinklų funkcionavimas.

Aptariamas neuroninis tinklas turi keletą kliūtis“ Pirma, procese yra didelių teigiamų arba neigiamos reikšmės svoriai gali perkelti neuronų sigmoidų veikimo tašką į prisotinimo sritį. Mažos logistinės funkcijos išvestinės reikšmės, remiantis (1.15) ir (1.16), sustabdys mokymąsi, o tai paralyžiuoja tinklą. Antra, gradiento nusileidimo metodo naudojimas negarantuoja tikslo funkcijos visuotinio minimumo. Tai glaudžiai susiję su mokymosi greičio pasirinkimo klausimu. Svorio padidėjimas, taigi ir mokymosi greitis, norint rasti ekstremumą, turi būti be galo mažas, tačiau šiuo atveju mokymasis bus

vyksta nepriimtinai lėtai. Kita vertus, per dideli svorių koregavimai gali sukelti nuolatinį mokymosi proceso nestabilumą. Todėl kaip mokymosi greičio koeficientas 1] dažniausiai pasirenkamas mažesnis nei 1 skaičius (pavyzdžiui, 0,1), kuris mokymosi proceso metu palaipsniui mažėja. Be to, norint neįtraukti atsitiktinių tinklo smūgių vietiniuose minimumuose, kartais, stabilizavus svorio koeficientų reikšmes, 7 trumpam laikui žymiai padidėja, kad būtų galima pradėti gradiento nusileidimą nuo naujas taškas. Jei pakartojus šią procedūrą kelis kartus tinklas bus į tą pačią būseną, galime manyti, kad buvo rastas visuotinis minimumas.

Yra dar vienas būdas pašalinti vietinius minimumus ir tinklo paralyžių, tai yra naudoti stochastinius neuroninius tinklus.

Pateiksime aukščiau pateiktą geometrinę interpretaciją.

Atgalinio sklidimo algoritme apskaičiuojamas paklaidos paviršiaus gradiento vektorius. Šis vektorius rodo trumpiausio nusileidimo išilgai paviršiaus kryptį nuo dabartinio taško, judėjimas išilgai kurio sumažina paklaidą. Mažėjančių žingsnių seka lems bent vieną ar kitą tipą. Sunkumas čia yra žingsnių ilgio pasirinkimas.

At didelio dydžiožingsnis, konvergencija bus greitesnė, tačiau kyla pavojus peršokti sprendimą arba tuo atveju sudėtinga forma klaidos paviršiai eiti neteisinga kryptimi, pavyzdžiui, judant siaura vaga su stačiais šlaitais, šokinėjant iš vienos pusės į kitą. Priešingai, kai mažas žingsnelis ir einant teisinga kryptimi reikės daug pasikartojimų. Praktiškai žingsnio dydis laikomas proporcingu šlaito statumui, kad algoritmas sulėtėtų beveik iki minimumo. Teisingas pasirinkimas mokymosi greitis priklauso nuo konkreti užduotis ir dažniausiai tai daroma eksperimentiniu būdu. Ši konstanta taip pat gali priklausyti nuo laiko, mažėjant algoritmui.

Paprastai šis algoritmas modifikuojamas įtraukiant impulso (arba inercijos) terminą. Taip skatinamas progresas fiksuota kryptimi, todėl jei buvo žengti keli žingsniai ta pačia kryptimi, algoritmas padidina greitį, o tai kartais leidžia išvengti lokalaus minimumo, taip pat greičiau pravažiuoti lygias vietas.

Kiekviename algoritmo žingsnyje visi mokymo pavyzdžiai paeiliui įvedami į tinklo įvestį, tikrosios tinklo išvesties vertės palyginamos su reikiamomis reikšmėmis ir apskaičiuojama klaida. Klaidos reikšmė ir klaidos paviršiaus gradientas

naudojamas svarstyklėms reguliuoti, po to visi veiksmai kartojami. Mokymosi procesas sustoja arba praėjus tam tikram epochų skaičiui, arba kai paklaida pasiekia tam tikrą mažą lygį, arba kai klaida nustoja mažėti.

Išsamiau panagrinėkime neuroninio tinklo apibendrinimo ir perkvalifikavimo problemas. Apibendrinimas – tai neuroninio tinklo gebėjimas tiksliai prognozuoti duomenis, kurie nepriklauso pradiniam mokymo rinkiniui. Per didelis pritaikymas yra per didelis pritaikymas, kai mokymo algoritmas trunka per ilgai, o tinklas yra per sudėtingas užduočiai arba turimų duomenų kiekiui.

Pademonstruokime apibendrinimo ir perkvalifikavimo problemas naudodamiesi tam tikros priklausomybės aproksimavimo ne neuroniniu tinklu, o daugianario pagalba, ir reiškinio esmė bus absoliučiai ta pati.

Polinominiai grafikai gali turėti skirtinga forma, ir kuo didesnis terminų laipsnis ir skaičius, tuo ši forma gali būti sudėtingesnė. Pradiniams duomenims galite pasirinkti daugianario kreivę (modelį) ir taip gauti esamos priklausomybės paaiškinimą. Duomenys gali būti triukšmingi, todėl negalima manyti, kad geriausias modelis tiksliai praeina per visus turimus taškus. Žemos eilės daugianomas gali geriau paaiškinti esamą priklausomybę, tačiau jis nėra pakankamai lanksti priemonė aproksimuoti duomenis, o polinomas aukšta tvarka gali būti pernelyg lankstus, bet tiksliai vadovausis duomenimis ir įgaus sudėtingą formą, neturinčią nieko bendra su realiais santykiais.

Neuroniniai tinklai susiduria su tais pačiais sunkumais. Tinklai su didelis skaičius svoriai modeliuojami sudėtingos funkcijos ir todėl yra linkę pervargti. Tinklai su nedideliu svorių skaičiumi gali būti nepakankamai lankstūs, kad būtų galima modeliuoti esamas priklausomybes. Pavyzdžiui, tinklas be paslėptų sluoksnių modeliuoja tik įprastą tiesinę funkciją.

Kaip pasirinkti teisingas laipsnis tinklo sudėtingumas? Beveik visada sudėtingesnis tinklas sukuria mažesnę klaidą, tačiau tai gali nereikšti geros kokybės modelį, bet apie tinklo perkvalifikavimą.

Sprendimas yra naudoti etaloninį kryžminį patvirtinimą. Tam rezervuojama dalis mokomosios imties, kuri naudojama ne tinklui apmokyti naudojant atgalinio skleidimo algoritmą, o nepriklausomam rezultato stebėjimui algoritmo metu. Darbo pradžioje treniruotėse ir įvyko tinklo klaida

valdymo rinkiniai bus tokie patys. Kai tinklas apmokomas, mokymo klaida mažėja, kaip ir valdymo rinkinio klaida. Jei valdymo klaida nustoja mažėti arba net pradeda didėti, tai rodo, kad tinklas pradėjo per daug aproksimuoti duomenis (pertreniruoti) ir mokymas turėtų būti sustabdytas. Jei taip atsitiks, reikia sumažinti paslėptų elementų ir (arba) sluoksnių skaičių, nes tinklas yra per galingas šiai užduočiai atlikti. Jei abi klaidos (mokymas ir kryžminis patvirtinimas) nepasiekia pakankamai mažo lygio, tada perkvalifikavimas natūraliai neįvyko, o tinklas, priešingai, nėra pakankamai galingas esamai priklausomybei modeliuoti.

Aprašytos problemos lemia tai, kad kada praktinis darbas Su neuroniniais tinklais tenka eksperimentuoti su daugybe skirtingų tinklų, kartais kiekvieną iš jų apmokyti kelis kartus ir lyginti rezultatus. Pagrindinis rezultato kokybės rodiklis yra valdymo klaida. Tuo pačiu metu, remiantis visos sistemos principu, iš dviejų tinklų, kurių valdymo paklaidos yra maždaug vienodos, prasminga pasirinkti paprastesnį.

Pakartotinių eksperimentų poreikis lemia tai, kad valdymo rinkinys pradeda vaidinti pagrindinį vaidmenį renkantis modelį ir tampa mokymosi proceso dalimi. Tai susilpnina jos vaidmenį kaip nepriklausomas kriterijus modelio kokybė. At didelis skaičius yra eksperimentai didelė tikimybė pasirinkti gerą tinklą, kuris suteikia geras rezultatas valdymo bloke. Tačiau norėdami galutiniam modeliui suteikti tinkamą patikimumą, jie dažnai (kai tai leidžia mokymo pavyzdžių apimtis) atlieka šiuos veiksmus: rezervuoja bandomąjį pavyzdžių rinkinį. Galutinis modelis išbandomas remiantis šio rinkinio duomenimis, siekiant užtikrinti, kad mokymo ir testų pavyzdžių rinkinių rezultatai yra tikri, o ne mokymosi proceso artefaktai. Žinoma, norint gerai atlikti savo vaidmenį, testų rinkinys turėtų būti naudojamas tik vieną kartą: pakartotinai panaudojus mokymosi procesui koreguoti, jis efektyviai virs valdymo rinkiniu.

Siekiant pagreitinti tinklo mokymo procesą, buvo pasiūlyta daugybė atgalinio sklaidos algoritmo modifikacijų, susijusių su įvairios funkcijos paklaidos, krypties ir žingsnių dydžių nustatymo procedūros.

1) Klaidos funkcijos:

Integralios klaidų funkcijos visame mokymo pavyzdžių rinkinyje;

Sveikųjų skaičių ir trupmeninių laipsnių klaidų funkcijos

2) Kiekvienos iteracijos žingsnio dydžio nustatymo procedūros

Dichotomija;

Inerciniai santykiai (žr. aukščiau);

3) Žingsnio krypties nustatymo tvarka.

Naudojant antros eilės išvestinių matricą (Niutono metodas);

Nuorodų naudojimas keliais etapais (partano metodas).

Griežtai kalbant, atgalinio sklaidos metodas yra greito gradiento skaičiavimo metodas, pagrįstas tinklo perskaičiavimo funkcijos ypatybėmis, kurios sumažina gradiento skaičiavimo sudėtingumą. Metodas naudoja tinklo išvestyje esančią klaidą, kad apskaičiuotų dalines išvesties, atsižvelgiant į paskutinio treniruojamų jungčių sluoksnio svorius, tada, naudojant paskutinio sluoksnio svorius ir tinklo klaidą, priešpaskutinio sluoksnio išvesties klaida yra nustatoma ir procesas kartojamas.

Algoritmo aprašymas

Atgalinis sklidimas taikomas daugiasluoksniams tinklams, kurių neuronai turi netiesiškumą su nuolatine išvestine, tokia kaip:

Šio tipo netiesiškumas yra patogus dėl išvestinės apskaičiavimo paprastumo:

Tinklui apmokyti naudojamos P poros signalų vektorių: įvesties vektorius I ir vektorius, kuris turėtų būti gautas tinklo D išėjime. paprastas atvejis, susideda iš N sluoksnių, o kiekvienas paskesnio sluoksnio neuronas jungtimis yra sujungtas su visais ankstesnio sluoksnio neuronais, svoriais w [n].

Esant tiesioginiam sklidimui, kiekvienam sluoksniui apskaičiuojamas (ir saugomas) bendras signalas sluoksnio išėjime (S [n]) ir signalas neurono išėjime. Taigi, signalas n-ojo sluoksnio i-ojo neurono įėjime:

Čia w (i,j) yra n-ojo sluoksnio jungčių svoriai. Neuronų išvesties signalas apskaičiuojamas taikant neurono netiesiškumą visam signalui.

Išvesties sluoksnio signalas x[N] laikomas tinklo O išvesties signalu.

Remiantis tinklo O išvesties signalu ir signalu D, kuris turėtų būti gautas tinklo išvestyje tam tikram įėjimui, apskaičiuojama tinklo klaida. Paprastai naudojamas vidutinis visų treniruočių rinkinio vektorių nuokrypio kvadratas:

Tinklui išmokyti naudojamas klaidos funkcijos gradientas per tinklo svorius. Atgalinio sklidimo algoritmas apima klaidos funkcijos gradiento apskaičiavimą klaidos „signalą paskleidus atgal“. Tada dalinė klaidos išvestinė, atsižvelgiant į jungties svorius, apskaičiuojama pagal formulę:

Čia d yra tinklo likutis, kuris išvesties sluoksniui apskaičiuojamas naudojant klaidos funkciją:

O paslėptiems sluoksniams - pagal ankstesnio sluoksnio neatitikimą:

Sigmoidinio netiesiškumo ir vidutinio kvadratinio nuokrypio kaip paklaidos funkcijos atveju:

Tikrasis tinklo mokymas susideda iš tokių svorio verčių radimo, kurios sumažina tinklo išėjimų paklaidą. Šiai problemai išspręsti yra daug gradientu arba gradientu pagrįstų metodų. Paprasčiausiu atveju tinklas treniruojamas naudojant nedidelius ryšio svorių žingsnius priešinga gradiento vektoriui kryptimi:

Šis mokymosi metodas vadinamas „gradiento nusileidimo optimizavimu“ ir neuroninių tinklų atveju dažnai laikomas atgalinio sklaidos metodo dalimi.

Klaidos atgalinio skleidimo algoritmo įgyvendinimas naudojant funkcijų aproksimacijos pavyzdį

Užduotis: Tegul yra argumentų reikšmių lentelė ( x i ) ir atitinkamos funkcijos reikšmės ( f(x i )) (ši lentelė galėjo atsirasti atliekant kažkokius analitinius skaičiavimus suteikta funkcija atliekant eksperimentą, siekiant nustatyti srovės priklausomybę nuo varžos in elektros tinklas, nustatant ryšį tarp saulės aktyvumas ir apsilankymų kardiologijos centre skaičius, tarp subsidijų ūkininkams sumos ir žemės ūkio produkcijos apimties ir kt.).

Matlab aplinkoje būtina sukurti ir išmokyti neuroninį tinklą aproksimuoti lentelėje nurodytą funkciją, i=1, 20. Sukurti programą, kuri realizuoja neuroninio tinklo aproksimacijos algoritmą ir atvaizduoja aproksimacijos rezultatus grafikų pavidalu.

Aproksimacija susideda iš to, kad naudodamiesi turima informacija apie f (x), galime apsvarstyti aproksimuojančią funkciją z (x), kuri tam tikra prasme yra artima f (x), leidžiančią atlikti atitinkamas operacijas ir gauti tokio pakeitimo paklaidos įvertinimas.

Aproksimacija paprastai reiškia kokios nors, kartais aiškiai nenurodytos, priklausomybės aprašymą arba ją reprezentuojančių duomenų rinkinį, naudojant kitą, dažniausiai paprastesnę ar vienodesnę priklausomybę. Dažnai duomenys pateikiami atskirų inkaro taškų pavidalu, kurių koordinates nurodo duomenų lentelė. Apytikslis rezultatas gali nepraeiti per mazgo taškus. Priešingai, interpoliacijos užduotis yra rasti duomenis netoli mazgo taškų. Šiuo tikslu naudojamos tinkamos funkcijos, kurių reikšmės mazginiuose taškuose sutampa su šių taškų koordinatėmis.

Užduotis. Matlab aplinkoje būtina sukurti ir išmokyti neuroninį tinklą, kad jis aproksimuotų lentelėje nurodytą funkciją (žr. 5 pav.).

5 pav. Funkcijų reikšmių lentelė Matlab matematinėje aplinkoje komandų lange rašome neuroninio tinklo kūrimo ir mokymo programos kodą.

Norėdami tai išspręsti, naudosime newff (.) funkciją – sukursime “klasikinį” daugiasluoksnį neuroninį tinklą su mokymu backpropagation metodu, t.y. sinapsės svoriai kinta atsižvelgiant į klaidos funkciją, nustatytas tikrosios ir teisingos neuroninio tinklo atsakymų skirtumas, sklinda priešinga kryptimi – signalo srauto link. Tinklas turės du paslėptus sluoksnius. Pirmame sluoksnyje yra 5 neuronai, antrame - 1. Pirmojo sluoksnio aktyvinimo funkcija yra "tansig" (sigmoidinė funkcija, grąžina išvesties vektorius, kurių reikšmės yra nuo -1 iki 1), antrojo - "purelin" ( tiesinė funkcija aktyvavimo, grąžina išvesties vektorius nepakeistus). Bus 100 treniruočių epochų. Mokymo funkcija "trainlm" - funkcija, kuri apmoko tinklą (naudojama pagal numatytuosius nustatymus, nes suteikia daugiausiai greitas mokymasis, bet reikia daug atminties).

Programos kodas:

P = nuliai (1, 20);

jei i = 1: 20 % masyvo sukūrimo P (i) = i*0,1; %įvestis (argumentas) pabaiga T= ; % input (funkcijos reikšmė) net = newff ([-1 2.09], ,("tansig" "purelin")); Neuroninio tinklo tinklo sukūrimas. TrainParam. epochos = 100; %nustatykite mokymo epochų skaičių net=train (net,P,T); %tinklo mokymas y = sim(net,P); %apmokytas tinklo apklausos skaičius(1);

sklypas (P,T,P,y"o"), tinklelis; %nubraižyti šaltinio duomenų ir neuroninio tinklo sugeneruotos funkcijos grafiką.

Neuroninio tinklo rezultatas.

Treniruotės rezultatas (žr. 2 pav.): grafike parodytas neuroninio tinklo mokymo laikas ir mokymo klaida. Šiame pavyzdyje neuroninis tinklas perėjo visas 100 epochų, palaipsniui mokydamasis ir mažindamas klaidas, pasiekdamas 10 -2,35 (0,00455531).

2 pav. Neuroninio tinklo mokymo rezultatas

Pradinių duomenų ir neuroninio tinklo generuojamos funkcijos grafikas (žr. 3 pav.): apskritimai žymi pradinius duomenis, o linija – neuroninio tinklo generuojamą funkciją. Toliau, naudodami gautus taškus, galite sudaryti regresiją ir gauti aproksimacijos lygtį (žr. 8 pav.). Naudojome kubinę regresiją, nes jos grafikas tiksliausiai eina per gautus taškus. Gauta lygtis atrodo taip:

y = 0,049x3 +0,88x 2 -0,006x+2,1.

Taigi matome, kad naudodami neuroninį tinklą galite greitai rasti funkciją, žinodami tik taškų, per kuriuos ji eina, koordinates.

3 pav. Pradinių duomenų ir neuroninio tinklo sugeneruotos funkcijos grafikas


4 pav. Aproksimacijos funkcijos grafikas

Tinklo mokymo tikslas yra sureguliuoti jo svorį taip, kad taikant tam tikrą įėjimų rinkinį būtų pasiektas reikiamas išėjimų rinkinys. Trumpumo dėlei šie įėjimų ir išėjimų rinkiniai bus vadinami vektoriais. Mokymo metu daroma prielaida, kad kiekvienam įvesties vektoriui yra suporuotas tikslinis vektorius, kuris nurodo reikiamą išvestį. Kartu jie vadinami treniruočių pora. Paprastai tinklas yra apmokytas daugybe porų.

Prieš pradedant treniruotę, visiems svoriams turi būti priskirtos nedidelės pradinės reikšmės, parinktos atsitiktinai. Tai užtikrina, kad tinklas nebus perpildytas dideliais svoriais ir apsaugo nuo daugelio kitų patologinių atvejų. Pavyzdžiui, jei visi svoriai pateikiami vienodai pradines vertes, o reikalingam funkcionavimui reikalingos nevienodos reikšmės, tada tinklas negalės mokytis.

Reikia mokyti atgalinio dauginimo tinklą

atlikti šias operacijas:

1. Iš mokymo rinkinio pasirinkite kitą treniruočių porą, pateikite įvesties vektorių į tinklo įvestį.

2. Apskaičiuokite tinklo išvestį.

3. Apskaičiuokite skirtumą tarp tinklo išvesties ir reikiamos išvesties (mokymo poros tikslinio vektoriaus)

4. Sureguliuokite tinklo svorį taip, kad klaida būtų kuo mažesnė.

5. Kartokite 1–4 veiksmus kiekvienam treniruočių rinkinio vektoriui, kol paklaida visame rinkinyje pasieks priimtiną lygį.

1 ir 2 žingsniais atliekamos operacijos yra panašios į tas, kurios atliekamos, kai tinklas jau yra apmokytas, t.y. pateikiamas įvesties vektorius ir apskaičiuojama gauta išvestis. Skaičiavimai atliekami sluoksnis po sluoksnio. 3 pav. pirmiausia apskaičiuojami j sluoksnio neuronų išėjimai, tada jie naudojami kaip k sluoksnio įėjimai, apskaičiuojami k sluoksnio neuronų išėjimai, kurie sudaro tinklo išėjimo vektorių.

3 veiksme kiekvienas tinklo išėjimas, kuris 3 pav. pažymėtas OUT, yra atimamas iš atitinkamo tikslinio vektoriaus komponento, kad būtų gauta klaida. Ši klaida naudojama 4 veiksme tinklo svoriams koreguoti, o svorių pokyčių ženklą ir dydį nustato mokymosi algoritmas (žr. toliau).

Pakankamai pakartojus šiuos keturis veiksmus, skirtumas tarp faktinių ir tikslinių išėjimų turėtų sumažėti iki priimtinos vertės, ir teigiama, kad tinklas išmoko. Dabar atpažinimui naudojamas tinklas ir svoriai nesikeičia.

1 ir 2 žingsniai gali būti vertinami kaip „perėjimas į priekį“, kai signalas sklinda tinkle nuo įvesties iki išvesties. 3, 4 žingsniai sudaro „atgalinį eigą“, čia apskaičiuotas klaidos signalas perduodamas atgal per tinklą ir naudojamas svoriams reguliuoti. Šie du leidimai dabar bus detalizuoti ir išreikšti matematiškesne forma.

Perėjimas į priekį. 1 ir 2 žingsniai gali būti išreikšti vektorinė forma taip: tiekiamas įvesties vektorius X o išvestis yra vektorius Y. Vektorinės įvesties-taikinio pora X Ir T yra paimtas iš treniruočių komplekto. Skaičiavimai atliekami naudojant vektorių X gauti išvesties vektorių Y.

Kaip matėme, daugiasluoksniuose tinkluose skaičiavimas atliekamas sluoksnis po sluoksnio, pradedant nuo sluoksnio, kuris yra arčiausiai įvesties. Kiekvieno neurono NET vertė pirmame sluoksnyje apskaičiuojama kaip svertinė neurono įvesties suma. Tada aktyvinimo funkcija F „suspaudžia“ NET ir kiekvienam to sluoksnio neuronui sukuria OUT reikšmę. Kai gaunamas sluoksnio išvesties rinkinys, jis tampa kito sluoksnio įvesties rinkiniu. Procesas kartojamas sluoksnis po sluoksnio, kol gaunamas galutinis tinklo išėjimų rinkinys.

Šis procesas gali būti išreikštas sutrumpinta forma, naudojant vektorinį žymėjimą. Svoriai tarp neuronų gali būti laikomi matrica W. Pavyzdžiui, svoris nuo 8 neurono 2 sluoksnyje iki 5 neurono 3 sluoksnyje žymimas w 8,5. Tada sluoksnio NET vektorius N gali būti išreikšta ne kaip produktų suma, o kaip produktas X Ir W. Vektorinėje žymėjime N= XW. Komponentiškai pritaikius F funkciją NET vektoriui N gaunamas išvesties vektorius APIE. Taigi tam tikram sluoksniui skaičiavimo procesas apibūdinamas tokia išraiška:

O=F( XW) (3)

Vieno sluoksnio išvesties vektorius yra kito sluoksnio įvesties vektorius.

Perdavimas atgal. Išvesties sluoksnio svorių reguliavimas. Kadangi kiekvienam išvesties sluoksnio neuronui yra nurodyta tikslinė vertė, svorių reguliavimas lengvai atliekamas naudojant modifikuotą delta taisyklę. Vidiniai sluoksniai vadinami „paslėptais sluoksniais“, o jų išvestis neturi tikslinių verčių, kurias būtų galima palyginti. Todėl mokytis tampa sunkiau.

Paskutinio sluoksnio lavinimas Fig. 2.4

Fig. 2.4 paveiksle parodytas mokymosi procesas vienam svoriui iš neurono p.

paslėptame sluoksnyje j į neuroną q išvesties sluoksnyje k. K sluoksnio neurono išvestis, atimta iš tikslinės reikšmės (Target), duoda klaidos signalą. Tai padauginama iš susitraukimo funkcijos išvestinės, apskaičiuotos tam 6 sluoksnio neuronui, ir taip gaunama reikšmė d.

Tada d padauginamas iš OUT vertės neurono j, iš kurio gaunamas svarstomas svoris. Šis produktas savo ruožtu padauginamas iš mokymosi greičio koeficiento h (dažniausiai nuo 0,01 iki 1,0), o rezultatas pridedamas prie svorio. Ta pati procedūra atliekama kiekvienam svoriui nuo neurono paslėptame sluoksnyje iki neurono išvesties sluoksnyje.

Šį skaičiavimą iliustruoja šios lygtys:

Dw pq, k = hd q, k OUT p, j (2,5)

w pq,k (n+1) = w pq, k (n) + Dw pq, k (2,6)

kur w pq, k (n) yra svorio nuo neurono h paslėptame sluoksnyje iki neurono q išvesties sluoksnyje reikšmė n veiksme (prieš pataisymą), atkreipkite dėmesį, kad indeksas k nurodo sluoksnį, kuriame šis svoris baigiasi , t.y., pagal šioje knygoje priimtą susitarimą, su kuriuo ji yra suvienyta; w pq, k (n+1) – svorio reikšmė žingsnyje n+1 (po korekcijos), d q, k – d reikšmė neuronui išvesties sluoksnyje k, OUT p, j – OUT reikšmė neuronui p paslėptas sluoksnis j.

Paslėptų sluoksnių svorių reguliavimas. Apsvarstykite vieną neuroną paslėptame sluoksnyje prieš išvesties sluoksnį. Eidamas į priekį, šis neuronas perduoda savo išvesties signalą išvesties sluoksnio neuronams per juos jungiančius svarmenis. Treniruotės metu šie svoriai veikia atvirkštine tvarka, perduodami d reikšmę iš išvesties sluoksnio atgal į paslėptą sluoksnį. Kiekvienas iš šių svorių padauginamas iš neurono, prie kurio jis yra prijungtas, d reikšmės išvesties sluoksnyje. Reikšmė d, reikalinga paslėpto sluoksnio neuronui, gaunama susumavus visus tokius sandaugus ir padauginus iš suspaudimo funkcijos išvestinės:

(Žr. 5 pav.) Gavus d reikšmę, svoriai, maitinantys pirmąjį paslėptą sluoksnį, gali būti koreguojami naudojant (5) ir (6) lygtis, kur indeksai modifikuojami pagal sluoksnį.

Vidinio sluoksnio lavinimas Fig. 2.5

Kiekvienam tam tikro paslėpto sluoksnio neuronui reikia apskaičiuoti d ir pakoreguoti visus su šiuo sluoksniu susijusius svorius. Šis procesas kartojamas sluoksnis po sluoksnio link įvesties, kol bus sureguliuoti visi svoriai.

Naudojant vektorinį žymėjimą, klaidų platinimo atgal operaciją galima parašyti daug kompaktiškiau. Išvesties sluoksnio reikšmių aibę d pažymėkime kaip D k, o išvesties sluoksnio svorių aibę kaip masyvą W k . Norint gauti Dj, išvesties sluoksnio d vektorių, pakanka šių dviejų operacijų:

1. Išvesties sluoksnio D k vektorių d padauginkite iš transponuotos svorio matricos W k, jungiančios paslėptą sluoksnį su išvesties sluoksniu.

2. Padauginkite kiekvieną gauto produkto komponentą iš atitinkamo paslėptame sluoksnyje esančio neurono suspaudimo funkcijos išvestinės.

Simboline žyma:

,

kur operatorius $ žymi vektorių komponentų sandaugą. O j yra j sluoksnio išvesties vektorius, o I yra vektorius, kurio visi komponentai yra lygūs 1.

Tinklo paralyžius. Tinklo treniruočių metu svorio vertės dėl korekcijos gali tapti labai didelės. Dėl to visi arba dauguma neuronų gali veikti labai greitai didelės vertės OUT, regione, kuriame suspaudimo funkcijos išvestinė yra labai maža. Kadangi mokymosi proceso metu grąžinama klaida yra proporcinga šiai išvestinei, mokymosi procesas gali praktiškai užstrigti. Žvelgiant iš teorinės perspektyvos, ši problema menkai suprantama. Paprastai to išvengiama sumažinus žingsnio dydį n, tačiau tai padidina treniruočių laiką. Siekiant išvengti paralyžiaus ar atsigauti nuo jo, buvo naudojamos įvairios euristikos, tačiau kol kas jas galima laikyti tik eksperimentinėmis.

Vietiniai minimumai. Backpropagation naudoja gradiento nusileidimo variaciją, t.y. juda žemyn klaidos paviršiumi, nuolat koreguodamas svorius link minimumo. Sudėtingo tinklo paklaidos paviršius yra labai tvirtas ir susideda iš kalvų, slėnių, raukšlių ir daubų didelėje erdvėje. Tinklas gali patekti į vietinis minimumas(seklus slėnis), kai šalia yra daug gilesnė žemuma. Vietiniame minimaliame taške visos kryptys nukreiptos aukštyn, o tinklas negali nuo jo pabėgti. Statistiniai mokymosi metodai gali padėti išvengti šios spąstos, tačiau jie yra lėti. Siūlomas metodas, kuris apjungia Kasha mašinos statistinius metodus su atgalinio sklaidos gradiento nusileidimu ir veda į sistemą, kuri randa visuotinį minimumą išsaugodama didelis greitis dauginimas atgal. Tai aptariama skyriuje. 5.

Žingsnio dydis. Kruopštus konvergencijos įrodymo tyrimas rodo, kad svorio pataisos laikomos be galo mažomis. Akivaizdu, kad tai praktiškai neįmanoma, nes tai veda į begalinį mokymosi kreivę. Žingsnio dydis turėtų būti laikomas baigtiniu, ir šiuo klausimu reikia pasikliauti tik patirtimi. Jei žingsnio dydis yra labai mažas, tada konvergencija yra per lėta, tačiau jei ji yra labai didelė, gali atsirasti paralyžius arba nuolatinis nestabilumas.

Laikinas nestabilumas. Jei tinklas išmoksta atpažinti raides, nėra prasmės mokytis B, jei A pamirštamas. Mokymosi procesas turėtų būti toks, kad tinklas būtų apmokytas visame mokymo rinkinyje, nepraleidžiant to, kas jau buvo išmokta. Konvergencijos įrodyme ši sąlyga yra įvykdyta, tačiau taip pat reikalaujama, kad prieš koreguojant svorius tinkle būtų pateikti visi treniruočių rinkinio vektoriai. Reikalingi svorių pokyčiai turi būti skaičiuojami visame komplekte, o tam reikia papildomos atminties; Po kelių tokių treniruočių ciklų svoriai susilygins iki minimalios paklaidos. Šis metodas gali būti nenaudingas, jei tinklas yra nuolat besikeičiančioje išorinėje aplinkoje, todėl tas pats vektorius negali pasikartoti antrą kartą. Tokiu atveju mokymosi procesas niekada negali susilieti, be tikslo klaidžioti ar beprotiškai svyruoti. Šia prasme atgalinis dauginimasis skiriasi nuo biologinių sistemų.



Ar jums patiko straipsnis? Pasidalinkite su draugais!