Stochastinis vs mini paketinis mokymas mašinomis mokytis naudojant „Tensorflow“ ir „python“

Paprasčiausiu terminu, stochastinis mokymas yra mokymas vienu atsitiktinai pasirinktu pavyzdžiu vienu metu, o mažos partijos treniruotės - treniruotės pagal dalį bendrų pavyzdžių.

Mini paketų dydžiai gali skirtis priklausomai nuo jūsų duomenų dydžio. Vėlesniame vadove aš jums parodysiu keletą geriausių mažos partijos dydžio pasirinkimo praktikų.

Pastaba: Mes ketiname įgyvendinti ir vizualizuoti šias treniruotes naudodami „Tensorflow“ ir „python“. Pradėkime nuo stochastinių treniruočių.

Stochastinis mokymas

Šiame pavyzdyje imsimės atsitiktinių skaičių iš normaliojo skirstinio, kurio vidurkis 1 ir standartinis nuokrypis yra 0,1. Tada mes atliksime paprastą tiesinę operaciją, ty padauginsime ją iš kintamojo W, tada tarp išvesties ir tikslo taikysime nuostolių funkciją (L2 norma), kuri šiame pavyzdyje bus nustatyta kaip pastovi 10.

Tada optimizuosime nuostolius naudodamiesi optimizavimo algoritmu. Optimizavimo algoritmai turi žinoti, kiek toli reikia žengti kiekvienoje iteracijoje. Šį atstumą kontroliuoja mokymosi greitis. Jei mūsų mokymosi greitis yra per didelis, mūsų algoritmas gali viršyti minimumą, o jei mūsų mokymosi greitis yra per mažas, mūsų algoritmas gali užtrukti per ilgai, kad susiliestų; tai susiję su nykstančia ir sprogstančia gradiento problema.

Žemiau esančiame kodekse mes mokysime savo modelį keletą kartų peržvelgti algoritmą. Spausdinsime atnaujintą rezultatą kas 20 kartų. Treniruodamiesi mes panaudosime stochastinio gradiento nusileidimo treniruotę, atsitiktinai parinkdami vertę iš įvesties ir taikinio, ir įpildami ją į grafiką.

„Tensorflow“ automatiškai apskaičiuos nuostolius ir atnaujins kintamąjį W, kad nuostoliai būtų kuo mažesni.
....................
#Paskutinių šešių spaudinių rezultatas
75 žingsnis W = [[0.]]
Nuostolis = [2.2099369]
# 80 žingsnis = [[0.]]
Nuostolis = [0,31921482]
# 85 žingsnis W = [[0.]]
Nuostolis = [0,51661664]
90 žingsnis W = [[0.]]
Nuostolis = [0,00483979]
95 veiksmas W = [[0.]]
Nuostolis = [2.0451872]
100 žingsnis W = [[0.]]
Nuostolis = [0,07890321]

„Mini-Batch“ treniruotės

Vykdydami mokymus mažomis partijomis, atlikite tuos pačius veiksmus, kaip aprašyta aukščiau, vienintelis pagrindinis skirtumas yra tas, kad mes naudosime treniruočių pavyzdžių grupes, o ne vieną. Čia mes pasirenkame siuntos dydį. Tai yra, kiek duomenų stebėjimas bus įtrauktas į skaičiavimo schemą kaip vieną kartą.

Toliau mes deklaruojame duomenis, kintamuosius ir placholders. Dėl partijos dydžio jas padarysime 2 matmenis.

Pirmasis aspektas išlaikys siuntos dydį, dabar mes jį nustatysime kaip „Nėra“. „Nėra“ čia yra tiesiog vietos žymeklis, kuris reiškia, kad ji vėliau gali priimti bet kurį aspektą, o antrasis aspektas yra ypatybių / taškų, kuriuos turi tam tikri duomenys, skaičius.

Ir galiausiai mes pridėsime savo operaciją prie diagramos.

Pastaba: operacija dabar bus matricos daugyba, o ne įprastinė daugyba, nes mes vektorizuojame kelis pavyzdžius vienu metu.

Atminkite, kad matricos dauginimas nėra komutacinis, todėl mes turime įvesti Tensorflow matmul () matricas teisinga tvarka.

Kadangi mes atnaujiname paketinį paketą, pasikeis mūsų praradimo funkcija (šiuo atveju L2 norma), nes turime vidutiniškai įvertinti kiekvieno paketo duomenų taško L2 nuostolius. Tai padarome apvyniodami įprastą L2 praradimo funkciją, naudodami funkciją „Tensorflow“ sumažinti_mean ():

Galiausiai mes apibrėžiame savo mokymo ciklą ir pakartojame mokymo žingsnį, kad optimizuotume algoritmą. Čia kaupsime nuostolius kas 20 intervalų sąraše, kad galėtume nubraižyti ir palyginti rezultatą su stochastiniais treniruotėmis.

....................
#Paskutinių penkių spaudinių rezultatas.
# 80 žingsnis = [[9.511334]]
Nuostolis = 2,1000686
# 85 žingsnis W = [[9.578172]]
Nuostolis = 1,021298
90 žingsnis W = [[9.592099]]
Nuostolis = 0,54921734
95 veiksmas W = [[9.635986]]
Nuostolis = 0,8693684
100 žingsnis W = [[9.696052]]
Nuostolis = 0,9552757

Norėdami pamatyti, kaip skiriasi abiejų treniruočių metodų konvergencija, nubraižysime mažos partijos nuostolius ir stochastinius nuostolius.

Aukščiau pateiktame sklype pastebėsite, kad mažos siuntos praradimas vyksta sklandžiai, o stochastinis siužetas yra daug triukšmingas.

Paprastai stochastinis mokymas gali lengvai išvengti vietinių minimumų dėl kiekvieno įvesties atsitiktinumo, tačiau paprastai reikia ilgesnio laiko susiliejimui, tuo tarpu mažų paketų mokymai greitai nustato minimumus, tačiau gali prireikti daugiau skaičiavimo galios, jei pasirinktas partijos dydis yra didelis. Vėliau pasidarysiu keletu patarimų, kaip pasirinkti geriausią partijos dydį.

Ten tu tai turi! Stochastinis vs mini paketinis mokymas

Šalutinė pastaba: Partijos mokymas yra tiesiog visų jūsų pavyzdžių mokymas vienu metu. Paprastai rekomenduojama, kai turite mažiau nei 1000 pavyzdžių.

Galite pamatyti visą „Jupyter“ šio ir kitų vadovėlių nešiojamąjį kompiuterį „github“

Nesivaržykite užduoti man klausimų - susiraskite mane „Twitter“, „Instagram“