Jaster111
U sva 3 algoritma imaš nekoliko koraka
- odabir uzorka
- forward pass (uvrstiš uzorak u mrežu)
- backward pass (računaš gradijente)
- akumulacija gradijenta (npr. dodavanje u neku listu)
- rezolucija gradijenta (ako si dosegao neki prag)
U ovoj vježbi nećeš nužno imati akumulaciju gradijenta jer ti sve stane u memoriju. Možeš računati da nakon svakog prolaza dosegneš prag i ideš u rezoluciju gradijenta i ažuriranje težina.
Stohastički
- (na neku shemu) odabireš uzorak kao jednu oznaku
- provrtiš ga kroz mrežu
- izračunaš gradijent uz rezultat i oznaku
- akumuliraš gradijent
- odmah ga riješiš, dakle gradijent ti je samo taj koji si izračunao
- ažuriraš težine po već ustanovljenim pravilima
Grupni (batch)
- (na neku shemu) odabireš uzorak kao n oznaka
- provrtiš sve u komadu (npr. ako si tako složio da se izvršava), ili uzorak po uzorak
- računaš gradijent
- ako je sve bilo u komadu dobit ćeš tenzor oblika (n, dimenzije gradijenta…)
- ako si vrtio stvari uzorak po uzorak onda ćeš imati n izračuna gradijenta, tj. neku listu s n tenzora dimenzija gradijenta
- akumulaciju gradijenta imaš ak si vrtio uzorak po uzorak - u tom slučaju to ti je samo dodavanje u neku listu prije nego što ažuriraš težine; ako računaš n uzoraka odjednom onda ćeš ionako sve imati u nekom tenzoru odjednom
- sad kad si izračunao sve gradijente koje trebaš ih razriješiš - ovo znači da ćeš sve te zasebne gradijente, bili oni u listi ili u jednom tenzoru spljoštiti nekom akumulacijskom funkcijom - npr. aritmetičkom sredinom, sumom… Vjv. aritmetičnom sredinom da ti veličina n ne utječe na normu gradijenta
- npr. ako imaš tenzor [[1], [2], [3]] (recimo da su ti gradijenti vektori duljine 1), to bi išlo u [2] ili [6], ovisno jel uprosječuješ ili sumiraš
- ako si vrtio uzorak po uzorak i imaš listu gradijenata [1, 2, 3], to će ti ići u 2 ili 6, isto ovisno jel uprosječivanje ili sumiranje
- ažuriraš težine s tim gradijentom kojeg si spljoštio, kao da je on neki kojeg si dobio s 1 uzorkom
Obični GD
- uzorak su ti sve oznake u skupu za treniranje
- kao i iznad, možeš ih provrtiti u komadu ako imaš vektoriziranu implementaciju, a možeš i oznaku po oznaku
- računanje gradijenta, akumulacija i rezolucija su analogni kao i za grupni GD, samo što ti je veličina grupe cijeli skup za treniranje
- na isti način jednom kad si razriješio gradijent u oblik koji se može primijeniti na težini, ažuriraš težine
Što se tiče uzorkovanja n uzoraka, to možeš raditi po redu ili nasumično. Pravi SGD nema garanciju da će uopće proći kroz sve uzorke. U svakoj epohi možeš promiješati redoslijed uzoraka. Isto tako, možeš po njima ići po redu.
Što je najbolje? Pa, vjerojatno da ih u svakoj epohi izmiješaš i da ideš po redu. Tad si siguran da si prošao sve uzorke tijekom učenja, ali isto da inicijalni redoslijed podataka ne utječe na performanse mreže, bar ne sam po sebi.