Kostur neuronske mreže

Kostur neuronske mreže implementiran je kao dijete klase FloatingPoint. Osim osnovnih mogućnosti, ta neuronska mreža daje korisniku još neke dodatne. Dodani su i algoritmi za učenje težina, koji su, kao i svaki algoritam, derivati klase Algorithm.

Kako je ideja da se parametri svakog Genotipa učitaju preko xml datoteke, i u neuronskoj mreži koristi se identičan pristup. Ideja je da se parametri idu učitavati iz xml datoteke ako se neuronska mreža ide stvarati. Neuronsku mrežu moguće je spremiti u datoteku, kao i istu učitati iz datoteke.

Ime parametraOpis
structureStruktura mreže predstavljena cjelobrojnim vrijednostima odvojenim jednim razmakom, npr. 2 3 1.
biasDecimalni broj, dakle, korisnik ima mogućnost podešavanja te vrijednosti, postavljanje tog parametra na 0 uzrokovat će eliminaciju bias neurona.
error_calculationCijeli broj(1-10), predstavlja odabranu metodu računanja pogreške. Pogledati komentar u klasi NeuroSkeleton iznad atributa error za detaljnije objašnjenje.
tauDecimalni broj korišten jedino kod eksponencijalne metode izračunavanja greške.
weight_distributionRazdioba slučajne varijable kod generiranja težina. Najčešće je to jednolika razdioba. Više u odlomku o razdiobama.
weight_optimizationKod inicijalnog generiranja težina bitno je kakve se granice postave. Ako je ovaj parametar(cijeli broj) postavljen na 1, ovaj koncept se koristi i u polju weight_distribution jedino što je bitno jest sama distribucija(ne i parametri koji se proslijede unutra).
activationAktivacijska funkcija koja se koristi u neuronskoj mreži. Svaka ima svoj kod i parametre. Detalje je moguće proučiti u odlomku o aktivacijskim funkcijama. Umjesto koda, moguće je napisati riječ "regression" za strukturu (lin, sig..., lin) ili "classification" za strukturu (lin, sig..., sig).
load_pathPredstavlja putanju do datoteke iz koje će neuronska mreža biti učitana, npr. "C:\\Program Files\\neural_network.txt". Ako dođe do greške prilikom čitanja, poruka će se ispisati na izlaz za greške, a ostali parametri će se normalno učitati.
save_pathPredstavlja putanju do datoteke iz kamo će neuronska mreža biti zapisana, npr. "C:\\Program Files\\neural_network.txt". Ako dođe do greške prilikom zapisivanja, poruka će se ispisati na izlaz za greške. Pisanje se treba napraviti eksplicitno(dakle, ono nije obavezno i izvršit će se jedino ako to napravi sam korisnik – postoji metoda saveNetwork() u klasi NeuroSkeleton).

Aktivacijske funkcije

Aktivacijske su funkcije su modelirane sučeljem IFunction koje sadrži tri metode : double calculate(double arg), double calculateDerivation(double arg) i String getStringRepresentation(). Prva od navedenih metoda služi za izračunavanje vrijednosti aktivacijske funkcije(dakle, argument je težinska suma za odgovarajući neuron), druga računa derivaciju(argument te metode je također težinska suma, međutim, nekad se račun može pojednostaviti koristeći aktiviranu težinsku sumu – tad se mora proslijediti rezultat metode calculateDerivation(double arg), a to je slučaj kod svih aktivacijskih funkcija čija imena završavaju slovom O – SigmoidO i TanhO). Metoda getStringRepresentation() vraća znakovni oblik funkcije i koristi se u svrhu pohrane iste u xml datoteku. U tablici je dan primjer za svaku od navedenih.

Aktivacijska funkcijaFormulaDerivacijaKljučna riječ u XML datoteci
stepstep()
sigmoidsigmoid(a)
kosinuscos(a,b,c,d)
sinussin(a,b,c,d)
sinusna razdiobatrigonometric(a)
arkus tangensarctan(a)
tangens hiperbolnitanh(a)
linearnafull_linear(a,b)
polu-linearnapart_linear(a,b,c,d)
eksponencijalnaexp(a,b)
logaritamskalog(a,b)
Elliotovaelliot(a)
Gaussovagauss(a,b)

Većina je funkcija modelirana tako da budu razdiobe neke slučajne varijable, što će reći da su većinom monotono rastuće, kodomene im se protežu kroz interval [0,1] i derivabilne su u skoro svakoj točki. Neke funkcije imaju prekid. U toj točki se uzima vrijednost derivacije u točki lijevo/desno ili njihova aritmetička sredina. Parametri a, b, c, itd. su konkretne(decimalne) vrijednosti koje korisnik upisuje u xml datoteku.

Način korištenja u xml datoteci:

  1. mogućnost:

    kao vrijednost parametra activation napiše se riječ regression. Posljedica će biti struktura mreže gdje su skriveni slojevi modelirani aktivacijskom funkcijom sigmoid, dok će izlazi imati prijenosnu aktivaciju, tj. identitet(f(x) = x)

  2. mogućnost:

    kao vrijednost parametra activation napiše se riječ classification. Mreža će imati takvu strukturu gdje budu i skriveni i izlazni slojevi imali sigmoidalne aktivacijske funkcije

  3. mogućnost:

    koristi se forma ključne riječi koja specificira aktivacijsku funkciju za SVE neurone(uključujući i ulazne). Kod ovog pristupa prvo se napiše brojka 1, zatim #, i na kraju ključna riječ aktivacijske funkcije. Npr. izrazom "1#full_linear(1.0,0.0)" postavila bi se linearna funkcija kao aktivacija za sve neurone(naravno, bez navodnih znakova)

  4. mogućnost:

    koristi se forma ključne riječi koja specificira aktivacijsku funkciju za pojedine slojeve(UKLJUČUJUĆI I ULAZNI SLOJ). Prvo se napiše broj 2, slijedi #, i zatim slijede ključne riječi funkcija koje budu postavljene na sve neurone u pojedinom sloju. Npr. ako funkcija ima 3 sloja, mogli bismo koristiti izraz "2#full_linear(1.0,0.0)#sigmoid(1.2)#sigmoid(1.1)" za klasifikacijski tip neuronske mreže

  5. mogućnost:

    koristi se forma ključne riječi koja specificira aktivacijsku funkciju zasve neurone(UKLJUČUJUĆI I ULAZNE). Razlika između prethodnog pristupa i ovog je u tome što umjesto brojke 2 ide 3 i aktivacijske funkcije su specificirane za svaki neuron pojedinačno

Određivanje greške neuronske mreže

Kod algoritma backpropagation trebamo imati neku mjeru ocjene greške koju je mreža napravila generirajući manje ili više netočan podatak. Postoji više tipova grešaka, od kojih je najznačajnija metoda srednje kvadratno odstupanje(mean squared error). U xml datoteci koristi se samo indeks za navođenje metode ocjene greške.

Indeks korišten u ECF-uNazivMetoda računanja
1Mean Squared Error
2Itakura-Saito error
3Hellinger distance
4Exponential error
5Cross-entropy error
6Kullback-Leibler divergence
7generalized Kullback-Leibler divergence

Algoritam backpropagation

Kod učenja težina neuronske mreže imamo više izbora. Neki od njih su, svakako, backpropagation, genetički algoritam, simulirano kaljenje, roj čestica, itd.

Backpropagation je algoritam koji radi na principu gradijentnog spusta, što automatski znači da nije otporan na lokalne optimume, specifičnije, na lokalne minimume. U okviru za evolucijsko računanje(ECF-Evolutionary Computation Framework) ovaj algoritam implementiran je na način da nasljeđuje klasu Algorithm. Parametri koji se prenose preko xml datoteke su navedeni u sljedećoj tablici. Dakle prva tablica sadrži parametre algoritma backpropagation koji u svakoj epohi odvrti svaki uzorak nekoliko puta.

Ime parametraOpis
inertionDecimalni broj; predstavlja količinu tromosti koja za sobom povlači prethodni pomak u težini. Smisla ima jedino vrijednost iz intervala [0,1>.
learning_rateStopa učenja; predstavlja brzinu učenja. Postavljanje premale vrijednosti uzrokovat će presporo učenje, dok je divergencija moguća postavljanjem prevelike vrijednosti. Uglavnom je ovo neki vrlo mali decimalni broj.
iterations_per_sampleBroj iteracija po jednoj epohi. Treba paziti da mreža ne počne generalizirati zakonitosti.
epochsBroj epoha; predstavlja broj iteracija algoritma.
cv_typeBroj; 0 za isključenu cross-validaciju, 1 predstavlja k-fold podjelu, 2 uniformnu, 3 podjelu uzoraka prema nekoj razdiobi, 4 leave p out, a 5 korisnički definiranu cross-validaciju.
cv_distributionRazdioba korištena pri podjeli uzoraka na testne i validacijske. Ideja je da se uzorci sortiraju u polju (ili se ostave tako kako jesu) i iskoristi ova razdioba u podjeli. Korišteno kod tipa 4.
cv_kBroj koji određuje podjelu testnih uzoraka na testne i validacijske. Korišteno kod tipa 1.
cv_probabilityVjerojatnost da se uzorak označi kao testni. Korišteno kod tipa 2.
training_data_pathPut do datoteke u kojoj su definirani testni uzorci.

Druga inačica ovog algoritma zasniva se na ideji da se prvo odvrte svi uzorci i akumulira greška cijelog skupa uzoraka. Postupak se ponavlja dok se u jednom trenu ukupna greška ne spusti ispod korisnički definirane granice. Taj algoritam se zatim ponovi par puta(korisnik također definira taj parametar). U sljedećoj su tablici opisani parametri koji se koriste u toj inačici algoritma.

Ime parametraOpis
inertionDecimalni broj; predstavlja količinu tromosti koja za sobom povlači prethodni pomak u težini. Smisla ima jedino vrijednost iz intervala [0,1>.
learning_rateStopa učenja; predstavlja brzinu učenja. Postavljanje premale vrijednosti uzrokovat će presporo učenje, dok je divergencija moguća postavljanjem prevelike vrijednosti. Uglavnom je ovo neki vrlo mali decimalni broj.
error_limitDecimalni broj, najveća vrijednost greške koju mreža smije napraviti. Dok je greška veća od ove vrijednosti, epoha se vrti.
epochsBroj epoha; predstavlja broj iteracija algoritma.
cv_typeBroj; 0 za isključenu cross-validaciju, 1 predstavlja k-fold podjelu, 2 uniformnu, 3 podjelu uzoraka prema nekoj razdiobi, 4 leave p out, a 5 korisnički definiranu cross-validaciju.
cv_distributionRazdioba korištena pri podjeli uzoraka na testne i validacijske. Ideja je da se uzorci sortiraju u polju (ili se ostave tako kako jesu) i iskoristi ova razdioba u podjeli. Korišteno kod tipa 4.
cv_kBroj koji određuje podjelu testnih uzoraka na testne i validacijske. Korišteno kod tipa 1.
cv_probabilityVjerojatnost da se uzorak označi kao testni. Korišteno kod tipa 2.
training_data_pathPut do datoteke u kojoj su definirani testni uzorci.

Unakrsna validacija

Zbog mogućnosti pojave pretreniranosti modela strojnog učenja u okvir za evolucijsko računanje stavljena je opcija cross-validacije. Ona nije izvedena kao izvod klase Algorithm ni Genotype, već je modelirana klasom CrossValidation koja sadrži implementaciju metoda podjele uzoraka na one namijenjene procesu učenja i na testne. U tablici su navedeni načini podjele skupa uzoraka.

Tip cross-validacijeOpis
k-foldSkup od N uzoraka podijeli se na k podskupova. U svakom koraku algoritma učenja i-ti skup bit će testni, a ostali budu korišteni kod treniranja.
randomSkup uzoraka podijeli se slučajnim odabirom na trening uzorke i testne, gdje je probabilityTraining atribut u klasi CrossValidation kojeg korisnik može postaviti(inicijalna vrijednost je 0.8), a označuje vjerojatnost da će uzorak biti označen za trening.
distributedKoristi distribuciju neke(pogodno diskretne) razdiobe da bi se izabrali uzorci koji će biti svrstani u skup za trening.
leave-p-outParametar p kod leave-p-out unakrsne validacije.
customKorisniku je ostavljena mogućnost da implementira metodu customCrossValidation(TrainingSamples[] samples) kako bi na svoj način definirao zakonitost svrstavanja uzorka u skup za učenje/test.