ANN V2.3 - Program za obučavanje neuronskih mreža

Autor: Velibor Ilić

Kratak opis: Program za obučavanje neuronskih mreža na zadatom trening skupu. ANN koristi neuronske mreže sa backpropagation algoritmom obučavanja. Program je rađen kao prateći materijal magistarskog rada "Obučavanje neuronskih mreža za prepoznavanje ćiriličnih slova".

Abstract: Program ANN is used to train neural networks patterns from training set.
ANN is based on the backpropagation neural networks. ANN is developed as addition to masters thesis "Training neural networks for recognition Cyrillic letters".

Programski jezik: Delphi 5

Operativni sistem: Windows 95, 98, NT

Datum izrade: © Avgust 1998-Juli 2000

Free Download!!! ANN V2.3 (ann.zip 463Kb)


      Velibor Ilic

Sadržaj
Hardverski zahtevi
Softverski zahtevi
Lista fajlova
Objektna realizacija neuronske mreže
Force Learn algoritam (učenje oblika sa najvećom greškom)
Verzije programa
Primeri

Program ANN služi za obučavanje generisanje i obučavanje neuronskih mreža sa backpropagation algoritmom obučavanja.

Neuronske mreže se mogu uspešno primenjivati na mnogim zadacima koji su ljudima jednostavni i prirodni, ali se na računarima veoma teško implementiraju klasičnim metodama. Zbog mogućnosti učenja na skupu primera, generalizacije i prikupljanja znanja u novim situacijama, one su odlične za rad koji zahteva adaptivne kontrolisane sisteme. Postoje brojne prednosti neuronskih mreža nad tradicionalnim računarskim sistemima kao na primer: neuronske mreže mogu uspešno da obrađuju podatke sa određenim nivoom šuma, mogu da pretrpe delimična oštećenja a pri tome da nastave da funkcionišu pravilno. Čovek koji rešava probleme putem neuronskih mreža ne mora poznavati složene matematičke i logičke funkcije koje povezuju ulazne i izlazne podatke, kao što bi morao da zna da taj isti problem rešava klasičnim programiranjem. Da bi se mreža obučila da ispravno prepoznaje neke vrednosti, dovoljno je na odgovarajući način mreži predstaviti problem i obučiti je na reprezentativnom skupu podataka (trening skupu), a mreža će, ukoliko je to moguće, pronaći odgovarajuće rešenje, tj. funkciju koja povezuje ulazne i izlazne podatke. Na žalost, još uvek ne postoje razrađene tehnike za očitavanje znanja iz obučene neuronske mreže, kao što je to slučaj sa ekspertnim sistemima, gde se relativno lako mogu tumačiti pravila iz baze znanja. Neuronske mreže i klasične metode rešavanja problema (programiranja) nisu tehnike koje se međusobno isključuju.
Neuronske mreže treba posmatrati kao proširenje mogućnosti današnjih računara.

Iako se pristupi rešavanja problema kod neuronskih mreža i klasičnim programiranjem potpuno razlikuju, ova dva pristupa se međusobno nadopunjuju, kao što je i prikazano u programu (OCR) za prepoznavanje teksta. U ovom programu neuronsku mrežu možemo posmatrati kao crnu kutiju (nepoznatu složenu logičku funkciju). Klasičnim programiranjem se na ulaz mreže dovodi matrica koja predstavlja slovo koje želimo da identifikujemo. Nakon prolaska kroz matricu očitava se vrednost na izlazu mreže i klasičnom IF naredbom određujemo koje je slovo bilo dovedeno na ulaz matrice. Ukoliko neuronsku mrežu posmatramo na ovaj način, kao modul tj. objekat, programeri bi mogli jednostavno koristiti neuronske mreže u svojim programima bez prevelikog teoretskog znanja o načinu rada neuronskih mreža. Neuronske mreže bi u takvim programima omogućile veću fleksibilnost i mogućnost doobučavanja u realnim uslovima.

Realizovani program za obučavanje neuronskih mreža (ANN V2.3) je univerzalan i mogao bi se upotrebiti za rešavanje niza problema koji se mogu predstaviti u pogodnom obliku a ne samo na problem prepoznavanja ćiriličnih slova. U radu treba posebno istaći force learn algoritam, kojim se postižu značajni rezultati u skraćivanju obučavanja. Takođe, ovaj algoritam povećava verovatnoću da će se neuronska mreža uspešno obučiti. Program koji je razvijen tokom izrade ovog rada (OCR) je izrađen u eksperimentalne svrhe, kao pratnja ovog rada. Da bi ovaj program prerastao u pravu komercijalnu verziju, bilo bi potrebno unaprediti ga i poboljšati pojedine delove u sledećim pravcima. Program bi funkcionisao mnogo efikasnije ukoliko bi se usavršio algoritam za izdvajanje slova iz slike. Takođe bi bilo dobro da se ugrade opcije za korigovanje nagiba slike (ukoliko se tekst nalazi pod nekim uglom), razni filteri za pročišćavanje slike i bolje razdvajanje slova od pozadine, kao i funkcije za prepoznavanje kolona, tabela. Ova verzija programa ne prepoznaje velika i mala slova, što bi u komercijalnoj verziji trebalo doraditi. Postojeći program bi se mogao veoma lako preraditi za prepoznavanje latiničnih slova ili nekih drugih znakova/simbola. Savremeni programi za prepoznavanje teksta imaju ugrađenu podršku za skener, tako da se slike mogu preuzimati direktno sa skenera. Program za prepoznavanje teksta bi se mogao poboljšati integrisanim sistemom za ispravljanje nepravilnih reči (spell checker) i eventualno sistemom za gramatičku proveru reči u rečenici. I pored ovih navedenih nedostataka, realizovani program pokazuje dobre rezultate pri prepoznavanju teksta.

Hardverski zahtevi
Minimalna hardverska konfiguracija potrebna za korišćenje programa za obučavanje neuronskih mreža:
  • PC računar baziran na procesoru klase Intel Pentium 100 ili jačem,
  • najmanje 16 megabajta RAM memorije,
  • floppy disk jedinica od 3,5" ili 5,25" inča,
  • hard disk sa oko 40 MB slobodnog prostora (program za prepoznavanje teksta zauzima 0.5 MB prostora na hard disku, a ostali prostor je potreban za fajlove koji se generišu u toku rada programa).
Softverski zahtevi
Program zahteva da na računaru bude instaliran operativni sistem Microsoft Windows 95 ili noviji.

Lista fajlova
Za obučavanje neuronska mreža koristi sledeće fajlove:
ANN.EXE Program za obučavanje neuronskih mreža.
Ostali fajlovi se nalaze u poddirektorijumu DATA i imaju sledeće značenje:
*.INI Preko ovog fajla se postavlja konfiguracija neuronske mreže, kao i parametri za praćenje obučavanja.
*.INP Podaci kojima se neuronska mreža obučava da ih prepoznaje (ulazi).
*.OUT Podaci koji se očekuju na izlazu neuronske mreže.
*.NET Ovaj fajl nastaje snimanjem svih važnih koeficijenata mreže. U njemu se nalaze stanja threshold i težinskih koeficijenata svakog od neurona koji se nalazi u mreži.
Fajlovi za praćenje obučavanja neuronske mreže.
Generišu se tokom obučavanja neuronske mreže.
*.ERR Fajlovi sa ekstenzijom *.ERR omogućuju praćenje kretanja grešaka tokom obučavanja neuronske mreže
*.LOG Preko ovih fajlova se može pratiti kretanje greške na svakom od izlaza neuronske mreže za svaki od oblika na ulazu.

Objektna realizacija neuronske mreže
Program za obučavanje neuronskih mreža je razvijen primenom objektne metodologije. Prilikom izrade programa razvijeni su sledeći objekti:
  • niz (Tniz)
  • neuron (Tneuron)
  • neuronska mreža (Tmreza)
Ovi objekti se lako mogu upotrebiti i za razvoj drugih programa u kojima bi se iskoristile dobre osobine neuronskih mreža. (primer OCR V1.1)

Force learn algoritam
Neuronska mreža se obučava tako što se iz trening skupa na ulaz dovode podaci. Na izlazu mreže se dobijeni rezultati upoređuju sa očekivanim i koriguju težinski koeficijenti u cilju smanjivanja greške. Postupak se ponavlja sve dok greška na izlazu ne bude manja od dozvoljene. Uobičajeni način obučavanja podrazumeva da se iz trening skupa podaci predstavljaju mreži konstantnim redosledom od prvog ka poslednjem podatku.

Prilikom obučavanja neuronskih mreža može se desiti da se greška na izlazu mreže za pojedine ulazne podatke povećava umesto da se smanjuje. Kada se greška poveća na 100% često se dešava da mreža koja se nađe u takvom stanju ne može da popravi grešku čak i posle relativno velikog broja iteracija. Takođe je interesantno da mreža može veoma brzo naučiti da ispravno prepoznaje neke ulazne podatke, dok je za neke druge potreban veoma veliki broj iteracija. Idealno bi bilo da se greške ravnomerno smanjuju tokom obučavanja do željenih vrednosti.

U ovom programu za obučavanje neuronskih mreža prvi put je upotrebljena metoda nazvana Force learn kojom se neuronska mreža obučava samo oblicima iz obučavajućeg skupa kod kojih se javlja najveća greška. Da bi se obezbedilo ravnomernije obučavanje, tj. da se izbegne situacija da se mreža za neke ulaze obučava brže od ostalih, upotrebljena je sledeća taktika. Mreža se obučava samo ulaznim podacima kod koji se pojavljuje najveća greška.

U prethodnoj iteraciji se beleži greška najlošijeg ulaza (maksimalna greška) u promenljivu Granica. Na ulaze mreže se redom dovode vrednosti iz obučavajućeg skupa i ispituje se razlika između dobivenih i željenih rezultata (Pat_Err), ali se korigovanje parametara vrši samo za one ulazne podatke koji imaju rezultate približne najlošijim rezultatima iz prethodne iteracije.
if pat_err>=(granica-(granicax0.20))

Najbolji rezultati su se pokazali ako se uzme opseg 10-20% najlošijih rezultata. Radi postizanja boljih rezultata pri obučavanju, ovaj algoritam se može koristiti kombinovan sa algoritmom slučajnog redosleda biranja uzoraka iz obučavajućeg skupa (Random). U slučajevima kada se na srednjem sloju nalazi minimalan broj neurona, dešavalo se da je mrežu takve konfiguracije moguće uspešno obučiti samo primenom Force Learn algoritma.

Glavni motiv za izradu Force Learn algoritma bio je postizanje veće sigurnosti prilikom obučavanja mreže, ali je njegovom primenom postignut još jedan veoma važan efekat, a to je skraćivanje vremena i smanjivanje broja iteracija potrebnih za obučavanje mreže.

Force learn algoritam se pokazao naročito uspešnim u situacijama u kojima normalnim redosledom obučavanja procenat tačnih izlaza dostiže neku vrednost od oko 95-99% i dalje veoma slabo raste ili gotovo da ne raste. Takođe, u toj situaciji maksimalna greška dostiže vrednost približno 1 a prosečna greška opada veoma polako. U ovakvoj situaciji, da bi se mreža u potpunosti obučila potrebno je upotrebiti neuporedivo veći broj iteracija u odnosu na već upotrebljen broj. Upotrebom force learn algoritma se izbegavaju ovakve situacije, pošto maksimalna greška mnogo brže opada nego kada se primenjuju uobičajeni načini obučavanja.

Verzije programa
Prva verzija programa ANN V1.0 je realizovana za DOS operativni sistem na programskom jeziku Pascal. Naredne verzije su rađene pod Windows-om na programskom jeziku Delphi.

Verzija 1.0 realizovana je na programskom jeziku Borland Pascal 7.0 (DOS verzija).

  • Nezavisno od izvršnog fajla, preko spoljnih fajlova (*.INI, *.INP,*.OUT) se može menjati konfiguracija mreže i samim tim program se može primenjivati za rešavanje širokog spektara problema.
  • Praćenje toka obučavanja pomoću *.LOG fajlova.
  • Program je realizovan objektno tako da se može lako integrisati u druge programe.
  • Poseduje mogućnost procene vremena do kraja obučavanja.
Verzija ANN V2.0 je realizovana na programskom jeziku Delphi 3.0. Razlike u odnosu na prethodnu verziju:
  • Omogućen je rad sa većim mrežama (više neurona po sloju i veći trening skup).
  • Optimizovan je algoritam za obučavanje mreže.
  • Povećana je brzina obučavanja za više od 7 puta.
  • Dodat je algoritam za selektivno učenje (Force Learn).
  • Dodata je opcija Shake za izbacivanje mreže iz ravnoteže.
  • Omogućeno je vizuelno praćenje proteklog broja iteracija preko progres bara.
Verzija ANN V2.1 je realizovana na programskom jeziku Delphi 4.0. Razlike u odnosu na prethodnu verziju programa.:
  • Poboljšan je pristup memoriji, primenom dinamičkih nizova umesto pointera. Primenom novije tehnike pristupanja memoriji ostvaren je znatan napredak u brzini.
  • Povećana je brzina obučavanja u odnosu na verziju V2.0 za više od 8 puta a u odnosu na verziju V1.0 za više od 60 puta
  • Dodata je opcija Random Learn.
  • Pored *.LOG fajlova, sada se greška može detaljnije pratiti u *.ERR fajlovima.
  • Dodato je grafičko predstavljanje podataka (Show Graph).
  • Dodat je prozor za prikazivanje parametara mreže (View Options).
  • Dodata je opcija za zaustavljanje ako je postignuta zadovoljavajuća tačnost.
  • Omogućeno je vizuelno praćenje podataka za maksimalnu i srednju grešku i procenat izlaza sa zadovoljavajućom tačnošću preko progres bara.
Verzija ANN V.2.2 je realizovana na programskom jeziku Delphi 5.0 Razlike u odnosu na prethodnu verziju programa.
  • Moguće je pratiti promene težinskih koeficijenata preko fajlova sa ekstenzijom
Od prve verzije programa postignut veliki napredak u brzini obučavanja. Samim prelaskom na novije programske jezike ostvaren je veliki napredak u brzini. Razlozi za napredak u brzini leže u optimizaciji koda i primeni force learn metoda učenja. S obzirom da program izračunavanja vrši iterativno, veoma je bitno upotrebiti najoptimalniji redosled računskih operacija.

Primeri
Programa obučavanje neuronskih mreža testiran je na više primera neki od njih su:
  • funkcija XOR
  • predstavljanje logičkih funkcija
  • prepoznavanje oblika
  • prepoznavanje položaja
  • prepoznavanje brojeva
  • prepoznavanje slova
  • klasifikacija intervala brojeva
Program ANN je upotrebljen prilikom obučavanje neuronske mreže koja se koristi u programu za prepoznavanje ćirilčnih slova (OCR).

Konfiguracija mreže je sledeća:
Troslojna neuronska mreža sa backpropagation algoritmom obučavanja.
Broj neurona na ulaznom sloju (broj ulaza): 12x12 = 144
Broj neurona na srednjem sloju: 35
Broj neurona na izlaznom sloju (broj izlaza): 5
Broj primera kojima se mreža obučava: 1590 (30 slova u više varijanti)

Obučavanje je vršeno na trening skupu od 1590 slova. Da bi se dobio toliko veliki skup ulazno-izlaznih podataka, napisan je program koji automatski izdvaja slovo po slovo sa slike i pravi fajlove u odgovarajućem formatu za obučavanje mreže. Za obučavanje ove mreže korišćeni su fontovi: Arial, Times New Roman i Courier New. Slova su pisana u oblicima normalno (Normal), ukošeno (Italic), i podebljano (Bold). Takođe su upotrebljene tri veličine fonta koje su zatim skaliranjem svedene na veličinu 12x12. Za sve tipove slova su korišćena velika i mala slova.

Pri obučavanju su upotrebljene metode obučavanja Random i Force learn.

Vreme potrebno za obučavanje mreže iznosi 02:12:53 sati bez prekida na računaru Celeron 333. Da bi se mreža obučila, bilo je potrebno 667 iteracija. Maksimalna greška je iznosila 0.098874 a prosečna greška je iznosila 0.00573.

Free Download!!! ANN V2.3 (ann.zip 463Kb)