Ako niste upoznati sa računom, ∂f (x)/∂x će vjerovatno izgledati prilično strano. Ovaj izraz možete interpretirati kao “kako se mijenja f (x) ako mijenjam x?” Ovo će biti korisno jer možemo postaviti pitanja poput “Kako se funkcija troška mijenja kada promijenim ovaj parametar? Da li povećava ili smanjuje funkciju troškova?” u potrazi za optimalnim parametrima.
Početak je jednostavan
Da bismo shvatili kako koristiti gradijentno spuštanje u treningu neuronske mreže, počnimo sa najjednostavnijom neuronskom mrežom: jednim ulaznim neuronom, jednim neuronom skrivenog sloja i jednim izlaznim neuronom.
Da bih pokazao potpuniju sliku onoga što se dešava, proširio sam svaki neuron da pokaže 1) linearnu kombinaciju ulaza i težina i 2) aktivaciju ove linearne kombinacije. Lako je uočiti da je korak prosljeđivanja naprosto niz funkcija gdje se izlaz jednog od njih unosi kao ulaz u sljedeći.
Definisanje “dobrih” performansi u neuronskoj mreži
Hajde da definišemo našu funkciju troškova samo kao kvadrat greške.
J (θ) = 1/2 (y − a (3)) 2
J (θ) = 1/2 (y − a (3)) 2
Postoji mnoštvo funkcija troškova koje možemo koristiti, ali za ovu neuralnu mrežu kvadratna greška će funkcionisati sasvim dobro.
Zapamtite, želimo da procjenimo rezultate našeg modela u odnosu na ciljani izlaz u pokušaju da minimiziramo razliku između ova dva modela.
Odnos težine na funkciju troškova
Da bi se smanjila razlika između izlaza naše neuronske mreže i ciljnog izlaza, moramo znati kako se performanse modela mijenjaju u odnosu na svaki parametar u našem modelu. Drugim riječima, moramo definirati odnos (čitaj: djelomični derivat) između naše funkcije troška i svake težine. Zatim možemo te težine ažurirati u iterativnom procesu koristeći gradijentno silazak.
Pogledajmo prvo (J (θ) ∂θ2∂J (θ) ∂θ2. Imajte na umu sledeću cifru dok napredujemo.
Uzmimo trenutak da ispitamo kako možemo izraziti odnos između J (θ) J (θ) i θ2θ2. Zapazite kako je θ2θ2 ulaz za z (3) z (3), koji je ulaz u (3) a (3), koji je ulaz za J (θ) J (θ). Kada pokušavamo da izračunamo derivat ove vrste, možemo koristiti rješenje lanca.
Podsjećamo, pravilo lanca navodi:
Radi jasnoće, ažurirao sam naš neuronski mrežni dijagram kako bih vizuelizovao ove lance. Uvjerite se da ste zadovoljni ovim procesom prije nego što nastavite.
Dodavanje složenosti
Pokušajmo ovaj isti pristup na malo složenijem primjeru. Sada ćemo pogledati neuralnu mrežu sa dva neurona u našem ulaznom sloju, dva neurona u jednom skrivenom sloju i dva neurona u našem izlaznom sloju. Za sada ćemo zanemariti neurone prednapona koji nedostaju iz ulaznih i skrivenih slojeva.
Uzmimo trenutak da pređemo preko oznake koju ću koristiti tako da možete pratiti zajedno sa ovim dijagramima. Superskript (1) označava sloj u kojem je objekat i indeks označava na koji neuron se pozivamo u datom sloju. Na primjer a (2) 1a1 (2) je aktivacija prvog neurona u drugom sloju. Za vrijednosti parametara θθ volim ih čitati kao naljepnicu – prva vrijednost označava na koji se neuron unosi u sljedećem sloju, a druga vrijednost označava od kojeg se neurona šalje informacija. Na primjer, θ (2) 21θ21 (2) se koristi za slanje ulaza u 2. neuron, od prvog neurona u sloju 2. Gornji sloj koji označava sloj odgovara mjestu odakle dolazi ulaz. Ova notacija je konzistentna sa matričnom reprezentacijom o kojoj smo govorili u mojoj poruci o predstavljanju neuronskih mreža.
Proširimo ovu mrežu da bismo otkrili svu matematiku koja se dešava.
Ovako izgleda matematika ovog:
Možemo sljedeći parametar iskoristiti da bi ovo jednostavnije zapisali:
Odavdje dobijemo:
Ovo se sve može i unazad uraditi, a za više detalja pogledajte: