U programskom jeziku C# napisati back-propagation algoritam za obuku veštačkih neuronskih mreža sa propagacijom signala unapred. Algoritam testirati na primeru “eksluzivno ili” problema sa 2 i 3 ulaza. Rešenje treba da je generično tako da se mogu konfigurisati brojevi slojeva neurona i broj neurona po slojevima. Neka funkcija neurona u skrivenim slojevima bude tangensni sigmoid, a linearna kod izlaznih neurona. Dobijene rezultate uporediti sa Matlab rešenjima. U postupak obuke uključiti momentum član.
Veštačke neuronske mreže
Neuronska mreža je jedan oblik implementacije sistema veštačke inteligencije, koji predstavlja sistem koji se sastoji od određenog broja međusobno povezanih čvorova koje nazivamo veštačkim neuronima. Telo neurona naziva se čvor ili jedinica. Svaki od neurona ima lokalnu memoriju u kojoj pamti podatke koje obrađuje. Podaci koji se ovim kanalima razmenjuju su obično numerički.
Arhitektura neuronske mreže predstavlja specifično povezivanje neurona u jednu celinu. Struktura neuronske mreže se razlikuje po broju slojeva. Prvi sloj se naziva ulazni, a poslednji izlazni, dok se slojevi između nazivaju skriveni slojevi. Najčešce ih ima tri. Prvi sloj, tj. ulazni je jedini sloj koji prima podatke iz spoljašnje sredine, sledeći (skriveni) prosleđuje relevantne podatke do trećeg (izlaznog) sloja. Na izlazu trećeg sloja dobijamo konačan rezultat. Složenije neuronske mreže imaju više skrivenih slojeva. Slojevi su međusobno potpuno povezani.
Slojevi komuniciraju tako što se izlaz svakog neurona iz prethodnog sloja povezuje sa ulazima svih neurona narednog sloja. Znači, svaki čvor ima nekoliko ulaza i jedan izlaz. Jačina veze kojom su neuroni povezani naziva se težinski faktor (weight).
Slika 1. Izgled jednoslojne neuronske mreže.
Značaj neuronskih mreža je u tome što mogu paralelno da obrađuju podatke, čije komponente su nezavisne jedne od drugih. Istovremeno radi više procesorskih jedinica, da bi rezultati njihove obrade prešli na sledeće jedinice (neurone). Procesorske jedinice u jednoj neuronskoj mreži su jednostavne i mogu obavljati samo jednu ili eventualno nekoliko računarskih operacija i međusobno su povezani tako da u jednoj neuronskoj mreži postoji mnogo više veza nego procesorskih jedinica. Broj ovih veza između neurona predstavlja snagu neuronske mreže. Neuronske mreže se koriste u situacijama kada nisu poznata pravila prema kojima bi bilo moguće dovesti u vezu ulazne i izlazne podatke iz željenog sistema.
Neuronske mreže se ne programiraju, već se treniraju, tako da je potrebno dosta vremena za njihovo obučavanje, pre nego što počnu da se koriste. Obučavanje se vrši tako što se ažuriraju težinski koeficijenti da bi se sledeći put dobio izlaz bliži zadatoj vrednosti. Kada se obučavanje završi, težinski koeficijenti ostaju isti i mreža se može primeniti za predviđeni zadatak.
Trening se sastoji iz toga da korisnik zadaje ulazne i izlazne vrednosti, a program pokušava da dobije odgovarajuću izlaznu vrednost. Pri tome program, u početku, pravi određene greške, a odgovarajućom promenom težinskih koeficijenata, smanjuje se razlika između dobijene i zadate izlazne vrednosti.
Funkcije neuronske mreže možemo, u određenoj meri, porediti sa funkcijom biološkog nervnog sistema. Međutim, iako je razvoj veštačkih neurona inspirisan biološkim nervnim ćelijama za potrebe računarskog sistema koji koriste neuronske mreže veza veštačkih i prirodnih (bioloških) neurona nema naročitog značaja.
Neuronske mreže možemo klasifikovati prema:
- Broju slojeva (jednoslojne i višeslojne)
- Vrsti veza između neurona
- Vrsti obučavanja neuronskih mreža
- Smeru prostiranja informacija (feedforward (nepovratne) i feedback (povratne))
- Vrsti podataka
Neuronska mreža se može realizovati na dva načina:
- Hardverska realizacija: fizičko povezivanje čvorova
- Softverska realizacija: logičko (virtuelno) povezivanje čvorova
Od otkrića neuronskih mreža, postalo je moguće rešavanje niza problema koji pre toga nisu bili rešivi klasičnim sredstvima računarske tehnike.
Primeri primene:
- obrada senzorskih signala
- prepoznavanje oblika
- obrada slike i mašinska vizija
- inspekcijski poslovi u industriji
- robotika i automatsko upravljanje
- raspoznavanje i sinteza govora
- obrada znanja
- finansijske i bankarske primene
- prepoznavanje štampanih tekstova
- prepoznavanje rukom pisanih tekstova
- medicinska dijagnostika
- vojne i policijske primene
- prognoza vremena
- telekomunikacije i računarstvo
Back-propagation algoritam i generalizovano Delta pravilo
Ovo je najčešće upotrebljavan algoritam obuke feed-forward NM koji vrši obučavanje na osnovu skupa ulazno/izlaznih parova – obučavajući skup:
{ (x1,d1), (x2,d2), … (xP,dP) }
xi = [xi1 xi2 … xin] – vektor ulaznih podataka
di = [di1 di2 … dim] – vektor izlaznih podataka
Ako se posmatra NM sa jednim skrivenim slojem, i težine koje pripadaju izlaznom sloju su W, a skrivenom V, tada se postupkom minimizacije funkcije E dobija:
gde je: δok greška vezana za izlazni sloj, Vj vrsta iz matrice V, a y – vektor izlaza neurona skrivenog sloja.
Princip izvršanja BP algoritma
- Inicijalizuju se težine W i V na slučajne male vrednosti
- Postavi se ulaz x i izračunaju se izlazi neurona u skrivenom sloju y i izlazi neurona izlaznog sloja o
- Izračuna se greška Ep
- Odrede se “delte” δok i δyj (“delta” propagira u nazad – back-propagation)
- Koriguju se težine u izlaznom sloju wj
- Koriguju se težine u skrivenom sloju vj
- Uzme se naredni ulaz i nastavi od koraka 2.
- Nakon upotrebljenih svih elemenata obučavajudeg skupa izračuna se ukupna greša E i uporedi sa zadanim Emax
- Ako je E < Emax mreža je obučena, inače se nastavlja od koraka 2, gde se na ulaz mreže ponovo dovodi prvi elemenat obučavajućeg skupa
Osobine BP algoritma
- sporo konvergira
- sporo radi za veliki broj težina (>>1000)
- ograničen je samo na feed-forward mreže
- dobar je za generalizaciju, ali loš za učenje specifičnih slučajeva
- obučavanje višeslojne feed-forward NM je NP kompletan problem, gde broj računanja raste sa veličinom problema brže od bilo kog konačnog stepena neke odgovarajuće mere
Ubrzanje konvergencije BP algoritma
- Ubaciti “momentum član”
- Izlaze skalirati i svesti na interval [-0.5, +0.5]
- Linijski tražiti u pravcu gradijenta
- Upotrebiti neku od metoda promenljive metrike
- Ubaciti “trešenje mreže” – ako algoritam “zaglavi” u lokalnom minimumu, težinama dodati male vrednosti
- Ulaze mreže ne birati uniformno, već na osnovu odstupanja izlaza. Npr., treba ubaciti faktore prilagođenja uz svaki ulazni vektor i njegovu vrednost povećavati kada E raste, a smanjivati kada E opada
Aplikacija u C#
Aplikacija je pisana u programskom okruženju Microsoft Visual Studio 2008, Visual C#.NET. Početak obučavanje mreže se počinje tako što se u kod programa direktno upišu svi parovi obučavajučeg skupa, što je prikazano na Slici 2.
Slika 2.Unos obučavajućeg skupa.
Prikaz na slici 2. pokazuje kako je unet obučavajući skup onako kao što je zadatkom zadato, odnosno za ekskluzivu ili funkciju sa 2 ulaza.
Nakon čuvanja obučavajućeg skupa u kod i njegovog izvršavanja odnosno pokretanja aplikacije otvara se prozor prikazan na Slici 3.
Slika 3. Izgled aplikacije.
Opcije koje korisnik može da podešava direktno iz aplikacije su sledeće:
- Maksimalni broj iteracija
- Faktor učenja (learning rate)
- Maksimalna greška
- Momentum član
- Broj skrivenih slojeva
- Broj neurona po svakom sloju
- Rezoluciju prikaza iteracija i greške tokom obučavanja
Nakon podešavanja parametara i pritiskom na dugme Obuči NM, aplikacija ispisuje veličinu greške tokom obučavanja na desnom delu aplikacije, što daje korisniku pregled kako se greška smanjivala tokom trajanja obuke. Vrednosti težinskih matrica i matrica bijasa nenuronske mreže aplikacija čuva u svojim promenljivima, što je prikazano na Slici 4.
Slika 4. Prikaz matrica težina i matrica bijasa
Obučavanje mreže u Matlab-u
Obučavanje neuronske mreže ovim putem je veoma slično kao i aplikcaiji u C#. Prvo se u kod unese obučavajući skup i parametri eps i eta (tačnost računanja i koeficient brzine obučavanja) kao na Slici 5.
Slika 5. Unos ulaznih parametara.
Posle unosa se izvrši Matlab kod i kao rezultat se dobija dijagram greške tokom obučavanja, što je prikazano na Slici 6.
Slika 6. Izgled dijagrama greške tokom obuke.
Vrednosti težina i bijasa se nalaze u promenljivama W1,B1,W2,B2,.. itd..
Slika 7. Izlani podaci.
Poređenje rezultata
Koristeći iste ulazne parametre, iste obučavajuće skupove, isti broj skrivenih slojeva i broj neurona po sloju pokrenućemo obučavenje u obe aplikaciji i uporediti rezultate. Ovo ćemo uraditi u dva različita slučaja.
Slučaj 1: EX ILI funkcija sa 2 ulaza i 2 skrivena sloja (3, 2 neurona po sloju)
Matlab: greška=0,002 , broj iteracija=293 C#: greška=0,003 , broj iteracija=105
Slučaj 2: EX ILI funkcija sa 3 ulaza, 2 skrivena sloja (3, 2 neurona po sloju)
Matlab: greška=0,0098 , broj iteracija=136 C#: greška=0,005 , broj iteracija=193
Zaključak
Obučavanje veštačkih neuronskih mreža je moguće obavljati i pomoću drugih algoritama u nekom drugom programskom okruženju, npr. prethodno prikazanom Visual C# – u. Greške i broj iteracija dobijene testiranjem su približne kao kod algoritma rađenom u Matlab-u, s tim da su u Matlab-u greške malo manje. Pored ovoga i dijagram je blaži, odnosno bez većih iskakanja što pokazuje veću pouzdanost i tačnost algoritama pisanih u Matlab-u. Krajnji utisak ostavlja dokazanu prednost Matlab algoritma u odnosu na algoritam pisan u C# – u.
Napomena: Učestvovanjem u nagradnoj igri Automatika.rs zadržava pravo objavljivanja teksta i nakon završetka nagradne igre. Takođe ne snosimo troškove eventualno nastale štete zbog krivo objavljenih ili pogrešno napisanih tekstova. Za istinitost tekstova, vlasništvo nad autorskim pravima, na fotografije ili tekstove koji se koriste, a preuzeti su s drugih web stranica odgovara isključivo vlasnik teksta.