Darbas su neuroniniais tinklais: derinimo kontrolinis sąrašas

Darbas su neuroniniais tinklais: derinimo kontrolinis sąrašas

Mašininio mokymosi programinės įrangos produktų kodas dažnai yra sudėtingas ir gana painus. Klaidų aptikimas ir pašalinimas yra daug išteklių reikalaujanti užduotis. Net ir paprasčiausias grįžtamieji neuroniniai tinklai reikalauja rimto požiūrio į tinklo architektūrą, svorių inicijavimą ir tinklo optimizavimą. Maža klaida gali sukelti nemalonių problemų.

Šis straipsnis yra apie neuroninių tinklų derinimo algoritmą.

„Skillbox“ rekomenduoja: Praktinis kursas Python kūrėjas nuo nulio.

Primename: visiems „Habr“ skaitytojams – 10 000 rublių nuolaida užsiregistravus į bet kurį „Skillbox“ kursą naudojant „Habr“ reklamos kodą.

Algoritmas susideda iš penkių etapų:

  • lengvas startas;
  • nuostolių patvirtinimas;
  • tarpinių rezultatų ir jungčių tikrinimas;
  • parametrų diagnostika;
  • darbo kontrolė.

Jei kažkas jums atrodo įdomesnis nei kiti, galite nedelsdami pereiti prie šių skyrių.

Lengva pradžia

Neuroninį tinklą su sudėtinga architektūra, reguliavimu ir mokymosi greičio planuokliu derinti sunkiau nei įprastą. Mes čia šiek tiek gudraujame, nes pats punktas netiesiogiai susijęs su derinimu, tačiau tai vis tiek yra svarbi rekomendacija.

Paprasta pradžia yra sukurti supaprastintą modelį ir išmokyti jį pagal vieną duomenų rinkinį (tašką).

Pirmiausia sukuriame supaprastintą modelį

Norėdami greitai pradėti, sukuriame nedidelį tinklą su vienu paslėptu sluoksniu ir patikriname, ar viskas veikia tinkamai. Tada palaipsniui komplikuojame modelį, tikrindami kiekvieną naują jo struktūros aspektą (papildomą sluoksnį, parametrą ir pan.), ir judame toliau.

Mes mokome modelį pagal vieną duomenų rinkinį (tašką).

Norėdami greitai patikrinti savo projektą, galite naudoti vieną ar du duomenų taškus mokymui, kad įsitikintumėte, ar sistema veikia tinkamai. Neuroninis tinklas turi parodyti 100% tikslumą mokymo ir testavimo metu. Jei taip nėra, modelis yra per mažas arba jau turite klaidą.

Net jei viskas gerai, prieš tęsdami paruoškite modelį vienai ar kelioms epochoms.

Nuostolių įvertinimas

Nuostolių įvertinimas yra pagrindinis būdas patobulinti modelio veikimą. Turite užtikrinti, kad nuostoliai atitiktų problemą ir kad nuostolių funkcijos būtų įvertintos teisinga skale. Jei naudojate daugiau nei vieną nuostolių tipą, įsitikinkite, kad jie visi yra tos pačios eilės ir tinkamai nustatyti.

Svarbu atkreipti dėmesį į pradinius nuostolius. Patikrinkite, kiek tikrasis rezultatas yra artimas laukiamam rezultatui, jei modelis prasidėjo atsitiktiniu spėjimu. IN Andrejaus Karpathy darbas siūlo:: „Įsitikinkite, kad gaunate rezultatą, kurio tikitės, kai pradedate nuo nedidelio skaičiaus parametrų. Geriau iš karto patikrinti duomenų praradimą (nustačius reguliarumo laipsnį į nulį). Pavyzdžiui, CIFAR-10 su Softmax klasifikatoriumi, tikimės, kad pradinis nuostolis bus 2.302, nes numatoma difuzinė tikimybė yra 0,1 kiekvienai klasei (nes yra 10 klasių), o Softmax nuostolis yra neigiama logaritminė teisingos klasės tikimybė. kaip − ln (0.1) = 2.302.

Dvejetainiame pavyzdyje panašus skaičiavimas tiesiog atliekamas kiekvienai klasei. Štai, pavyzdžiui, duomenys: 20% 0 ir 80% 1. Tikėtinas pradinis nuostolis bus iki –0,2ln (0,5) –0,8ln (0,5) = 0,693147. Jei rezultatas yra didesnis nei 1, tai gali reikšti, kad neuroninio tinklo svoriai nėra tinkamai subalansuoti arba duomenys nėra normalizuoti.

Tikrinami tarpiniai rezultatai ir jungtys

Norint derinti neuroninį tinklą, būtina suprasti tinkle vykstančių procesų dinamiką ir atskirų tarpinių sluoksnių, kai jie yra sujungti, vaidmenį. Štai dažniausios klaidos, su kuriomis galite susidurti:

  • neteisingos gradle atnaujinimų išraiškos;
  • svorio atnaujinimai netaikomi;
  • sprogstantys gradientai.

Jei gradiento reikšmės yra nulinės, tai reiškia, kad mokymosi greitis optimizavimo priemonėje yra per lėtas arba kad susiduriate su neteisinga gradiento atnaujinimo išraiška.

Be to, būtina stebėti kiekvieno sluoksnio aktyvinimo funkcijų reikšmes, svorius ir atnaujinimus. Pavyzdžiui, parametrų atnaujinimų mastas (svoriai ir poslinkiai) turėtų būti 1-e3.

Yra reiškinys, vadinamas „Dying ReLU“ arba „nykstančio gradiento problema“, kai ReLU neuronai išves nulį, sužinoję didelę neigiamą jo svorių poslinkio reikšmę. Šie neuronai niekada nebeišleidžiami jokiame duomenų taške.

Galite naudoti gradiento tikrinimą, kad nustatytumėte šias klaidas, apytiksliai įvertindami gradientą naudodami skaitinį metodą. Jei jis yra artimas apskaičiuotiems gradientams, tada sklaida atgal buvo įgyvendinta teisingai. Norėdami sukurti gradiento patikrinimą, peržiūrėkite šiuos puikius išteklius iš CS231 čia и čiaTaip pat pamoka Andrew Nga šia tema.

Faizan šeichas nurodo tris pagrindinius neuroninio tinklo vizualizavimo būdus:

  • Preliminarūs yra paprasti metodai, parodantys bendrą mokomo modelio struktūrą. Tai apima atskirų neuroninio tinklo sluoksnių formų arba filtrų išvestį ir kiekvieno sluoksnio parametrus.
  • Aktyvinimo pagrindu. Juose mes iššifruojame atskirų neuronų ar neuronų grupių aktyvacijas, kad suprastume jų funkcijas.
  • Remiantis gradientais. Šie metodai linkę manipuliuoti gradientais, kurie susidaro iš modelio mokymo pirmyn ir atgal eigos (įskaitant ryškumo žemėlapius ir klasės aktyvinimo žemėlapius).

Yra keletas naudingų įrankių atskirų sluoksnių aktyvinimams ir jungimams vizualizuoti, pvz. ConX и Tenzoro lenta.

Darbas su neuroniniais tinklais: derinimo kontrolinis sąrašas

Parametrų diagnostika

Neuroniniai tinklai turi daug parametrų, kurie sąveikauja tarpusavyje, o tai apsunkina optimizavimą. Tiesą sakant, šis skyrius yra aktyvių specialistų tyrimų objektas, todėl žemiau pateikti pasiūlymai turėtų būti laikomi tik patarimais, atskaitos taškais, kuriais remiantis galima kurti.

Pakuotės dydis (partijos dydis) – jei norite, kad paketo dydis būtų pakankamai didelis, kad būtų gauti tikslūs klaidų gradiento įverčiai, bet pakankamai mažas, kad stochastinis gradiento nusileidimas (SGD) sureguliuotų tinklą. Maži partijų dydžiai sukels greitą konvergenciją dėl triukšmo mokymo proceso metu ir vėliau optimizavimo sunkumų. Tai aprašyta išsamiau čia.

Mokymosi norma - per žema sukels lėtą konvergenciją arba riziką įstrigti vietiniuose minimumuose. Tuo pačiu metu didelis mokymosi greitis sukels optimizavimo skirtumus, nes rizikuojate peršokti gilią, bet siaurą praradimo funkcijos dalį. Pabandykite naudoti greičio planavimą, kad sumažintumėte jį treniruodami neuroninį tinklą. Atnaujinta su CS231n šiai problemai skirta didelė dalis.

Gradiento kirpimas  — parametrų gradientų apkarpymas atgalinio dauginimo metu esant didžiausiai vertei arba ribinei normai. Naudinga šalinant bet kokius sprogstančius gradientus, su kuriais galite susidurti trečiame punkte.

Partijos normalizavimas - naudojamas normalizuoti kiekvieno sluoksnio įvesties duomenis, o tai leidžia išspręsti vidinio kovariacinio poslinkio problemą. Jei kartu naudojate Dropout ir Batch Norma, peržiūrėkite šį straipsnį.

Stochastinis gradiento nusileidimas (SGD) — yra keletas SGD atmainų, kurios naudoja impulsą, adaptyvų mokymosi greitį ir Nesterovo metodą. Tačiau nė vienas iš jų neturi aiškaus pranašumo tiek mokymosi efektyvumo, tiek apibendrinimo požiūriu (detales cia).

Reguliavimas - yra labai svarbus kuriant apibendrinamą modelį, nes pridedama nuobauda už modelio sudėtingumą arba kraštutines parametrų vertes. Tai būdas sumažinti modelio dispersiją žymiai nepadidinant jo šališkumo. Daugiau išsami informacija – čia.

Norėdami patys viską įvertinti, turite išjungti reguliavimą ir patys patikrinti duomenų praradimo gradientą.

Iškritimas yra dar vienas būdas supaprastinti tinklą, kad būtų išvengta spūsčių. Treniruotės metu iškritimas vykdomas tik išlaikant neurono aktyvumą su tam tikra tikimybe p (hiperparametras) arba priešingu atveju nustatant jį į nulį. Dėl to tinklas kiekvienai mokymo partijai turi naudoti skirtingą parametrų poaibį, o tai sumažina tam tikrų parametrų pokyčius, kurie tampa dominuojančiais.

Svarbu: jei naudojate ir iškritimo, ir paketinio normalizavimą, būkite atsargūs dėl šių operacijų tvarkos arba net naudodami jas kartu. Visa tai vis dar aktyviai diskutuojama ir papildoma. Štai dvi svarbios diskusijos šia tema „Stackoverflow“. и archyvas.

Darbo kontrolė

Tai apie darbo eigos ir eksperimentų dokumentavimą. Jei nieko nedokumentuojate, galite pamiršti, pavyzdžiui, koks mokymosi tempas ar klasės svoriai naudojami. Dėl valdymo galite lengvai peržiūrėti ir atkurti ankstesnius eksperimentus. Tai leidžia sumažinti pasikartojančių eksperimentų skaičių.

Tačiau rankinis dokumentavimas gali tapti sudėtinga užduotimi, kai atliekama didelė darbo apimtis. Čia atsiranda įrankiai, pvz., Comet.ml, padedantys automatiškai registruoti duomenų rinkinius, kodo pakeitimus, eksperimentinę istoriją ir gamybos modelius, įskaitant pagrindinę informaciją apie modelį (hiperparametrus, modelio našumo metriką ir aplinkos informaciją).

Neuroninis tinklas gali būti labai jautrus mažiems pokyčiams, todėl modelio našumas sumažės. Savo darbo stebėjimas ir dokumentavimas yra pirmas žingsnis, kurį galite atlikti norėdami standartizuoti savo aplinką ir modeliavimą.

Darbas su neuroniniais tinklais: derinimo kontrolinis sąrašas

Tikiuosi, kad šis įrašas gali būti atspirties taškas norint pradėti derinti savo neuroninį tinklą.

„Skillbox“ rekomenduoja:

Šaltinis: www.habr.com

Добавить комментарий