Strādājam ar neironu tÄ«kliem: pārbaudes saraksts problēmu novērÅ”anai

Strādājam ar neironu tÄ«kliem: pārbaudes saraksts problēmu novērÅ”anai

Programmatisko produktu kods maŔīnmācīŔanās jomā bieži ir sarežģīts un diezgan pārsteidzoÅ”s. Kļūdu atklāŔana un novērÅ”ana ir resursietilpÄ«gs uzdevums. Pat visvienkārŔākās neironu tÄ«klas ar tieÅ”o savienojumu prasa nopietnu pieeju tÄ«kla arhitektÅ«rai, svaru inicializācijai un tÄ«kla optimizācijai. Pat neliela kļūda var novest pie nepatÄ«kamām problēmām.

Šis raksts ir veltīts jūsu neironu tīklu atkļūdoŔanas algoritmam.

Skillbox iesaka: Praktiskais kurss Python izstrādātājs no nulles.

Atgādinām: visiem Ā«HabrĀ» lasÄ«tājiem — atlaide 10 000 rubļu reÄ£istrējoties jebkurā Skillbox kursā ar promo kodu Ā«HabrĀ».

Algoritms sastāv no pieciem posmiem:

  • vienkārÅ”s sākums;
  • zaudējumu apstiprināŔana;
  • starpposmu rezultātu un savienojumu pārbaude;
  • parametru diagnostika;
  • darbÄ«bas kontrolēŔana.

Ja jums kaut kas Ŕķiet interesantāks par citām daļām, varat tūlīt pāriet uz Ŕiem posmiem.

VienkārŔs sākums

Neironu tÄ«klu ar sarežģītu arhitektÅ«ru, regulāru un mācÄ«bu ātruma plānotāju ir grÅ«tāk atkļūdot nekā parasto. Mēs Å”eit nedaudz krāpjām, jo Å”is punkts ir netieÅ”i saistÄ«ts ar atkļūdoÅ”anu, taču tas joprojām ir svarÄ«gs ieteikums.

VienkārŔa sākuma būtība ir vienkārŔotas modeļa izveide un tās apmācība uz vienu datu kopu (punktu).

Vispirms izveidojam vienkārŔotu modeli

Lai ātri sāktu, izveidojam nelielu tīklu ar vienu slēpto slāni un pārbaudām, vai viss darbojas pareizi. Tad pakāpeniski sarežģījam modeli, pārbaudot katru jauno struktūras aspektu (papildu slāni, parametru utt.), un virzāmies tālāk.

Apmācām modeli uz vienas datu kopas (punkta)

Kā ātru jūsu projekta darbības pārbaudi varat izmantot mācībām vienu vai divas datu vietas, lai apstiprinātu, vai sistēma darbojas pareizi. Neironu tīklam jāparāda 100% precizitāte mācībās un pārbaudēs. Ja tas tā nav, tad vai nu modelis ir pārāk mazs, vai arī jums jau ir kļūda.

Pat ja viss ir labi, sagatavojiet modeli nepiecieŔamā laika gaidīŔanai pirms doŔanās tālāk.

Zaudējumu novērtējums

Zaudējumu novērtēŔana ir galvenais veids, kā precizēt modeļa veiktspēju. Jums jānodroÅ”ina, ka zaudējums atbilst uzdevumam, un ka zaudējumu funkcijas tiek novērtētas pareizā skalā. Ja izmantojat vairāk nekā viena veida zaudējumus, pārliecinieties, ka visi tie ir vienādā kārtÄ«bā un pareizi sakalibruoti.

Ir svarÄ«gi pievērst uzmanÄ«bu sākotnējiem zaudējumiem. Pārbaudiet, cik tuvu faktiskais rezultāts ir gaidāmajam, ja modelis sāk darboties ar nejauÅ”u pieņēmumu. Andrej Karpaty darbā piedāvā sekojoÅ”o: ā€žPārliecinieties, ka saņemat rezultātu, kas ir gaidāms, uzsākot darbu ar nelielu parametru skaitu. Labāk ir uzreiz pārbaudÄ«t datu zaudējumu (iestatot regulāriÅ”anas pakāpi uz nulli). Piemēram, CIFAR-10 ar Softmax klasifikatoru mēs gaidām, ka sākotnējie zaudējumi bÅ«s 2.302, jo gaidāmā izkliedētā varbÅ«tÄ«ba ir 0.1 katram klasei (jo ir 10 klases), un Softmax zaudējums ir negatÄ«vā logaritmiskais varbÅ«tÄ«bas attiecÄ«bas precÄ«zajai klasei, kas ir –ln (0.1) = 2.302ā€.

Binarajam piemēram tiek veikts lÄ«dzÄ«gs aprēķins katrai klasei. Piemēram, ir dati: 20% 0 un 80% 1. Gaidāmie sākotnējie zaudējumi bÅ«s lÄ«dz –0.2ln (0.5) –0.8ln (0.5) = 0.693147. Ja rezultāts ir lielāks par 1, tas var norādÄ«t uz to, ka neirotÄ«klam nav lÄ«dzsvarotas svars, vai dati nav normalizēti.

Pārbaudām starpposma rezultātus un savienojumus

NeirotÄ«kla atkļūdoÅ”anai ir svarÄ«gi saprast iekŔējos procesus tÄ«klā un atseviŔķu starpposma slāņu lomu, jo tie ir saistÄ«ti. Å eit ir tipiskas kļūdas, ar kurām jÅ«s varat saskarties:

  • nepareizi izteikumi gradientu atjaunināŔanai;
  • svara atjauninājumi netiek piemēroti;
  • iznÄ«kstoÅ”i vai eksplodējoÅ”i gradienti (exploding gradients).

Ja gradienta vērtÄ«bas ir nulles, tas nozÄ«mē, ka mācīŔanās ātrums optimizētājā ir pārāk zems, vai arÄ« jÅ«s esat sastapuÅ”ies ar nepareizu izteikumu gradienta atjaunināŔanai.

Turklāt vajadzētu uzraudzīt aktivizācijas funkciju, svaru un katra slāņa atjauninājumus. Piemēram, parametru (svaru un noviržu) atjauninājumu apjomam jābūt 1-e3.

Pastāv parādÄ«ba, kas iegÅ«st nosaukumu ā€œDying ReLUā€ vai ā€žiznÄ«kstoÅ”a gradienta problēmaā€, kad ReLU neironi izvada nulli pēc liela negatÄ«va vērtÄ«bas (bias) atvieglināŔanas svaram. Å ie neironi vairs nekad netiks aktivizēti nevienā datu vietā.

JÅ«s varat izmantot gradienta pārbaudi, lai identificētu Ŕīs kļūdas, apgÅ«stot gradientu, izmantojot numurisku pieeju. Ja tas ir tuvu aprēķinātajiem gradientiem, tad atpakaļizplatīŔana ir Ä«stenota pareizi. Lai izveidotu gradienta pārbaudi, iepazÄ«stieties ar Å”iem lieliskajiem resursiem no CS231. Å”eit un Å”eit, kā arÄ« ar mācÄ«bu stundu no EndrjÅ« Nga (Andrew Nga) Å”ajā tēmā.

Faizans Å eiks norāda trÄ«s galvenās metodes neironu tÄ«kla vizualizēŔanai:

  • PriekÅ”izvērtēŔanas — vienkārÅ”as metodes, kas rāda mums apmācÄ«tā modeļa kopējo struktÅ«ru. Tās ietver atsauksmju formas vai filtrus atseviŔķiem neironu tÄ«kla slāņiem un parametru katrā slānÄ«.
  • Pamatotas uz aktivizācijām. Tajās mēs dekodējam atseviŔķu neironu vai neironu grupu aktivizācijas, lai izprastu viņu funkcijas.
  • Pamatotas uz gradientiem. Å Ä«s metodes mēdz manipulēt ar gradientiem, kas veidojas, ejot uz priekÅ”u un atpakaļ mācÄ«bu modeļa procesā (iekļaujot svarÄ«guma kartes un klases aktivizācijas kartes).

Ir vairāki noderÄ«gi rÄ«ki atseviŔķu slāņu aktivizāciju un savienojumu vizualizēŔanai, piemēram, ConX un Tensorboard.

Strādājam ar neironu tÄ«kliem: pārbaudes saraksts problēmu novērÅ”anai

Parametru diagnostika

Neironu tÄ«klos ir daudz parametru, kas mijiedarbojas savā starpā, kas apgrÅ«tina optimizāciju. Patiess Ŕī sadaļa ir aktÄ«vu pētÄ«jumu priekÅ”mets speciālistiem, tāpēc zemāk minētie ieteikumi bÅ«tu jāuzskata tikai par padomiem, sākumpunktiem, no kuriem var sākt.

Partijas lielums (batch size) — ir jābÅ«t pietiekami lielam, lai iegÅ«tu precÄ«zus gradientu kļūdas novērtējumus, bet pietiekami mazam, lai stohastiskais gradienta nolaiÅ”anās (SGD) varētu sakārtot jÅ«su tÄ«klu. Mazie partiju izmēri izraisÄ«s ātru konverÄ£enci trokŔņa dēļ mācÄ«bu procesā un vēlāk radÄ«s grÅ«tÄ«bas optimizācijā. Detalizētāk par to ir aprakstÄ«ts Å”eit.

MācÄ«bu ātrums — pārāk zems nov brings pie lēnas konverÄ£ences vai risku iestrēgt lokālajās minimumos. Tajā paŔā laikā augstāks mācÄ«bu ātrums radÄ«s optimizācijas sadalÄ«jumu, jo jÅ«s riskējat "izlekt" pāri dziļai, bet Å”aurai funkcionālajai zudumam. Mēģiniet izmantot plānoÅ”anas ātrumu, lai to samazinātu neironu tÄ«kla mācÄ«bu procesā. CS231n kursā. ir ir liels sadaļa, kas veltÄ«ta Å”ai problēmai.

Gradientu apgrieÅ”ana— gradientu apgrieÅ”ana parametru laikā atpakaļejoÅ”ajā izplatīŔanā pēc maksimālās vērtÄ«bas vai ierobežojoŔās normas. Noder, lai risinātu problēmas ar jebkuriem lidojoÅ”iem gradientiem, ar kuriem varat saskarties treÅ”ajā punktā.

Pakotņu normalizācija — tiek izmantota, lai normalizētu katra slāņa ieejas datus, kas ļauj atrisināt iekŔējā kovariāta svārstīŔanās problēmu. Ja izmantojat Dropout un Batch Normalization kopā, iepazÄ«stieties ar Å”o rakstu.

Stohastiskais gradienta kritums (SGD) — ir vairāki SGD veidi, kas izmanto impulsu, pielāgojamas mācÄ«bu ātrumus un Nesterova metodi. Tomēr nevienam no tiem nav acÄ«mredzama priekÅ”rocÄ«ba attiecÄ«bā uz mācīŔanās efektivitāti vai vispārināŔanu (detalizēta informācija Å”eit).

Regulāraizācija — ir izŔķiroÅ”a nozÄ«me vispārÄ«gās modeļa izveidē, jo tā pievieno sodu par modeļa sarežģītÄ«bu vai ekstremālām parametru vērtÄ«bām. Tas ir veids, kā samazināt modeļa dispersiju, nepalielinot tā novirzi. Vairāk detalizētas informācijas — Å”eit.

Lai visu novērtētu pats, jāatspējo regulāraizācija un jānoskaidro gradientu zaudējumu datu patstāvīgi.

DroŔība — vēl viena metode jÅ«su tÄ«kla sakārtoÅ”anai, lai novērstu pārslodzi. MācÄ«bu laikā droŔība tiek veikta tikai ar neirona aktÄ«vās uzturēŔanas varbÅ«tÄ«bu p (hiperparametrs) vai tā nulles iestatīŔanu citādi. Rezultātā tÄ«kls katrai mācÄ«bu partijai izmanto citu parametru apakÅ”kopu, samazinot konkrētu parametru izmaiņas, kas kļūst dominējoÅ”i.

SvarÄ«gi: ja izmantojat gan droŔību, gan pakotņu normalizāciju, esiet uzmanÄ«gi ar Å”o operāciju secÄ«bu vai pat to koplietojumu. Viss Å”is joprojām tiek aktÄ«vi apspriests un papildināts. Å eit ir divas svarÄ«gas diskusijas par Å”o tēmu uz Stackoverflow un Arxiv.

Darba kontrole

Runā par darba procesu un eksperimentu dokumentēŔanu. Ja nekas netiek dokumentēts, var tikt aizmirsts, piemēram, kāda mācīŔanās ātruma vai klaÅ”u svars tiek izmantots. Pateicoties uzraudzÄ«bai, iepriekŔējos eksperimentus var viegli apskatÄ«t un reproducēt. Tas ļauj samazināt dublējoÅ”o eksperimentu skaitu.

Tomēr roku dokumentēŔana var kļūt par sarežģītu uzdevumu lielā darba apjoma dēļ. Å eit palÄ«gā nāk tādi rÄ«ki kā Comet.ml, kas palÄ«dz automātiski reÄ£istrēt datu kopas, koda izmaiņas, eksperimentu vēsturi un ražot modeļus, tostarp svarÄ«go informāciju par jÅ«su modeli (hiperparametri, modeļa snieguma rādÄ«tāji un informācija par vidi).

Neironu tÄ«kli var bÅ«t diezgan jutÄ«gi pret nelielām izmaiņām, kas var novest pie modeļa veiktspējas samazināŔanās. Darba uzraudzÄ«ba un dokumentēŔana ir pirmais solis, ko vajadzētu veikt, lai standartizētu vidi un modelēŔanu.

Strādājam ar neironu tÄ«kliem: pārbaudes saraksts problēmu novērÅ”anai

Ceru, ka Ŕis ieraksts var kļūt par sākumpunktu, no kura sāksiet sava neironu tīkla atkļūdoŔanu.

Skillbox iesaka:

Avots: habr.com

Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem šŸ”„ Iegādājieties uzticamu tÄ«mekļa hostingu ar DDoS aizsardzÄ«bu, VPS VDS serveriem | ProHoster