Programmēšana

Kas ir dziļa mācīšanās? Algoritmi, kas atdarina cilvēka smadzenes

Definēta dziļa mācīšanās

Dziļa mācīšanās ir mašīnmācīšanās forma, kas modelē datu modeļus kā sarežģītus, daudzslāņu tīklus. Tā kā dziļa mācīšanās ir visizplatītākais problēmas modelēšanas veids, tā var atrisināt sarežģītas problēmas - piemēram, datora redzi un dabiskās valodas apstrādi -, kas pārspēj gan parasto programmēšanu, gan citas mašīnmācīšanās metodes.

Padziļināta mācīšanās ne tikai var dot noderīgus rezultātus, ja citas metodes neizdodas, bet arī var izveidot precīzākus modeļus nekā citas metodes, un var samazināt lietderīgā modeļa izveidošanai nepieciešamo laiku. Tomēr dziļu mācību modeļu apmācībai ir nepieciešams liels skaitļošanas jauda. Vēl viens padziļinātas mācīšanās trūkums ir grūtības interpretēt dziļas mācīšanās modeļus.

Dziļās mācīšanās raksturīgā iezīme ir tā, ka apmācāmajam modelim ir vairāk nekā viens slēptais slānis starp ieeju un izeju. Lielākajā daļā diskusiju dziļa mācīšanās nozīmē dziļu neironu tīklu izmantošanu. Tomēr ir daži algoritmi, kas dziļu mācīšanos īsteno, izmantojot neironu tīklus, izmantojot cita veida slēptos slāņus.

Dziļa mācīšanās pret mašīnmācīšanos

Es minēju, ka dziļa mācīšanās ir forma mašīnmācīšanās. Es atsaucēšos uz padziļinātu mašīnmācīšanos kā klasiskā mašīnmācīšanās, lai atbilstu kopējai lietošanai.

Parasti klasiskie mašīnmācīšanās algoritmi darbojas daudz ātrāk nekā dziļi mācīšanās algoritmi; klasiskā modeļa apmācībai bieži pietiks ar vienu vai vairākiem centrālajiem procesoriem. Padziļinātu mācību modeļiem apmācībai, kā arī izvietošanai mērogā bieži nepieciešami aparatūras paātrinātāji, piemēram, GPU, TPU vai FPGA. Bez viņiem modeļu apmācība prasītu mēnešus.

Daudzu problēmu gadījumā daži klasiskās mašīnmācīšanās algoritmi radīs “pietiekami labu” modeli. Citu problēmu gadījumā klasiskie mašīnmācīšanās algoritmi agrāk nav strādājuši šausmīgi labi.

Dziļu mācību lietojumi

Ir daudzi problēmu piemēri, kuriem šobrīd ir nepieciešama dziļa mācīšanās, lai izveidotu labākos modeļus. Dabas valodas apstrāde (NLP) ir laba.

2016. gada rudenī Google Translate izejas kvalitāte angļu-franču, angļu-ķīniešu un angļu-japāņu valodu pāriem pēkšņi krasi uzlabojās, sākot no vārdu salātu veidošanas līdz teikumu ražošanai, kas ir tuvu cilvēka profesionāla tulkojuma kvalitātei. Aizkulisēs notika tas, ka Google Brain un Google Translate komandas atjaunoja Google tulkotāju no veco frāzu statistikas mašīntulkošanas algoritmu (viena veida klasiskās mašīnmācīšanās) izmantošanas uz dziļa neironu tīkla izmantošanu, kas apmācīts ar vārdu iegulšanām, izmantojot Google TensorFlow ietvaru. .

Tas nebija viegls projekts. Daudzu doktora līmeņa pētnieku darbs ar modeļiem prasīja vairākus mēnešus, bet modeļu apmācība - tūkstošiem GPU nedēļu. Tas arī pamudināja Google izveidot jauna veida mikroshēmu - Tensor Processing Unit (TPU), lai Google tīklā plaši vadītu neironu tīklus.

Papildus valodas tulkošanas problēmai, kuru risina Google tulkotājs, galvenie NLP uzdevumi ietver automātisku apkopošanu, līdzreferences izšķirtspēju, diskursa analīzi, morfoloģisko segmentēšanu, nosaukto entītiju atpazīšanu, dabiskās valodas ģenerēšanu, dabiskās valodas izpratni, runas daļēju marķēšanu, noskaņojumu analīze un runas atpazīšana.

Vēl viens labs dziļo mācību piemērošanas piemērs ir attēlu klasifikācija. Tā kā dzīvie organismi apstrādā attēlus ar savu redzes garozu, daudzi pētnieki ir izmantojuši zīdītāju vizuālās garozas arhitektūru kā neironu tīklu modeli, kas paredzēti attēlu atpazīšanai. Bioloģiskie pētījumi meklējami pagājušā gadsimta 50. gados.

Izrāviens neironu tīkla redzes laukā bija Yann LeCun 1998. gada LeNet-5, septiņu līmeņu konvolucionālais neironu tīkls (CNN), lai atpazītu ar roku rakstītus ciparus, kas digitalizēti 32x32 pikseļu attēlos. Lai analizētu augstākas izšķirtspējas attēlus, LeNet-5 tīkls būtu jāpaplašina, iekļaujot vairāk neironu un vairāk slāņu.

Mūsdienu labākie dziļo attēlu klasifikācijas modeļi var identificēt dažādus objektu katalogus ar augstas izšķirtspējas krāsu. Papildus tīriem dziļajiem neironu tīkliem (DNN) dažreiz cilvēki izmanto hibrīdus redzes modeļus, kas apvieno dziļu mācīšanos ar klasiskajiem mašīnmācīšanās algoritmiem, kas veic noteiktus apakšuzdevumus.

Citas redzes problēmas bez pamata attēlu klasifikācijas, kas ir atrisinātas, padziļināti mācoties, ietver attēlu klasifikāciju ar lokalizāciju, objektu noteikšanu, objektu segmentēšanu, attēla stila pārsūtīšanu, attēla krāsošanu, attēla rekonstrukciju, attēla superizšķirtspēju un attēlu sintēzi.

Attēlu klasifikāciju var paplašināt līdz video klasifikācijai, no videoklipa iegūstot atsevišķus kadrus un klasificējot katru kadru. Videoklipos konstatētos objektus var izsekot no kadra uz kadru.

Saskaņā ar Goodfellow, Bengio un Courville teikto, kas rakstīja 2016. gadā, dziļa mācīšanās ir veiksmīgi izmantota, lai prognozētu molekulu mijiedarbību, lai palīdzētu farmācijas uzņēmumiem izstrādāt jaunas zāles, meklēt subatomiskās daļiņas un automātiski parsēt mikroskopa attēlus, kas izmantoti konstrukcijai cilvēka smadzeņu trīsdimensiju karte.

Padziļināta neironu tīklu mācīšanās

Idejas par “mākslīgiem” neironu tīkliem meklējamas 1940. gados. Būtiskais jēdziens ir tāds, ka mākslīgo neironu tīkls, kas izveidots no savstarpēji savienotiem sliekšņa slēdžiem, var iemācīties atpazīt modeļus tāpat kā dzīvnieku smadzenes un nervu sistēma (ieskaitot tīkleni).

Atbalstīšana

Mācīšanās dziļajos neironu tīklos notiek, nostiprinot saikni starp diviem neironiem, kad abi treniņa laikā darbojas vienlaikus. Mūsdienu neironu tīkla programmatūrā tas visbiežāk ir saistīts ar neironu savienojumu svara vērtību palielināšanu, izmantojot likumu, ko sauc kļūdu pavairošana, backprop vai BP.

Neironi

Kā tiek modelēti neironi? Katram no tiem ir pavairošanas funkcija, kas pārveido savienoto neironu izvadi, bieži vien ar svērto summu. Pavairošanas funkcijas izeja pāriet uz aktivizācijas funkciju, kas tiek aktivizēta, kad tās ievade pārsniedz sliekšņa vērtību.

Aktivizācijas funkcijas

1940. un 1950. gados mākslīgie neironi izmantoja pakāpju aktivācijas funkciju un tika izsaukti perceptrons. Mūsdienu neironu tīkli var saki viņi izmanto perceptronus, bet tiem faktiski ir vienmērīgas aktivizācijas funkcijas, piemēram, loģistikas vai sigmoīdā funkcija, hiperboliskā pieskare un labotā lineārā vienība (ReLU). ReLU parasti ir labākā izvēle ātrai konverģencei, lai gan mācību laikā neironi “mirst” apmācības laikā, ja mācību līmenis ir iestatīts pārāk augsts.

Aktivizācijas funkcijas izeja var pāriet uz izvades funkciju papildu veidošanai. Tomēr bieži vien izejas funkcija ir identitātes funkcija, tas nozīmē, ka aktivācijas funkcijas izeja tiek nodota pakārtotajiem savienotajiem neironiem.

Neironu tīkla topoloģijas

Tagad, kad mēs zinām par neironiem, mums jāapgūst kopējās nervu tīkla topoloģijas. Pārraides tīklā neironi tiek sakārtoti atsevišķos slāņos: viens ievades slānis, jebkurš slēpto apstrādes slāņu skaits un viens izvades slānis, un katra slāņa izejas nonāk tikai nākamajā slānī.

Pārraides tīklā ar īsceļu savienojumiem daži savienojumi var pāriet pāri vienam vai vairākiem starpslāņiem. Atkārtotos neironu tīklos neironi var sevi ietekmēt vai nu tieši, vai netieši, izmantojot nākamo slāni.

Apmācība

Neironu tīkla uzraudzīta mācīšanās tiek veikta tāpat kā jebkura cita mašīnmācīšanās. Jūs prezentējat tīklu ar apmācības datu grupām, salīdziniet tīkla izvadi ar vēlamo izvadi, ģenerējat kļūdu vektoru un koriģējat tīklu, pamatojoties uz kļūdu vektoru. Apmācību datu partijas, kas tiek palaistas kopā pirms korekciju piemērošanas, sauc par laikmetiem.

Tiem, kurus interesē detaļas, aizmugurējā pavairošana izmanto kļūdas (vai izmaksu) funkcijas gradientu attiecībā pret modeļa svaru un aizspriedumiem, lai atklātu pareizo virzienu, lai samazinātu kļūdu. Korekciju piemērošanu kontrolē divas lietas: optimizācijas algoritms un mācīšanās ātruma mainīgais, kam parasti jābūt mazam, lai garantētu konverģenci un izvairītos no mirušu ReLU neironu radīšanas.

Optimizētāji

Neironu tīklu optimizētāji parasti izmanto kaut kādu gradienta nolaišanās algoritmu, lai vadītu pavairošanu, bieži vien ar mehānismu, kas palīdz izvairīties no iestrēgšanas vietējos minimumos, piemēram, nejauši izvēlētu mini-partiju (Stohastiskā gradienta nolaišanās) optimizēšana un pielietošana impulss gradienta labojumi. Daži optimizācijas algoritmi arī pielāgo modeļa parametru mācīšanās ātrumu, aplūkojot gradienta vēsturi (AdaGrad, RMSProp un Adam).

Tāpat kā visu mašīnmācīšanās gadījumā, jums jāpārbauda neironu tīkla prognozes, izmantojot atsevišķu validācijas datu kopu. To nedarot, jūs riskējat izveidot neironu tīklus, kas tikai iegaumē viņu ieguldījumu, nevis iemācās būt vispārēji pareģotāji.

Īsti DNN

Dziļam neironu tīklam reālai problēmai var būt 10 slēpti slāņi uz augšu. Tās topoloģija varētu būt vienkārša vai diezgan sarežģīta.

Jo vairāk slāņu tīklā, jo vairāk raksturlielumu tas var atpazīt. Diemžēl, jo vairāk slāņu tīklā, jo ilgāk būs nepieciešams aprēķināt, un jo grūtāk būs apmācīt.

Dziļu mācību algoritmi

Kā jau minēju iepriekš, visvairāk dziļa mācīšanās notiek ar dziļiem neironu tīkliem. Mašīnas redzamībai bieži izmanto konvolucionālos neironu tīklus (CNN). Dabiskās valodas un citu secību apstrādei bieži tiek izmantoti atkārtoti neironu tīkli (RNN), tāpat kā ilgtermiņa īslaicīgās atmiņas (LSTM) tīkli un uz uzmanību balstīti neironu tīkli. Random Forests, kas pazīstams arī kā Random Decision Forests, kas nav neironu tīkli, ir noderīgi virknei klasifikācijas un regresijas problēmu.

CNN neironu tīkli

Konvolucionālie neironu tīkli vizuālās garozas simulēšanai parasti izmanto konvolucionālos, apvienošanas, ReLU, pilnībā savienotos un zaudēšanas slāņus. Konvolucionārais slānis pamatā ņem daudzu mazu reģionu, kas pārklājas, integrālus. Apvienošanas slānis veic nelineāras paraugu noņemšanas veidu. ReLU slāņi izmanto nepiesātinošo aktivizācijas funkciju f (x) = max (0, x). Pilnībā savienotā slānī neironiem ir savienojumi ar visām iepriekšējā slāņa aktivizācijām. Zaudējumu slānis aprēķina, kā tīkla apmācība soda par novirzi starp prognozētajām un patiesajām etiķetēm, klasifikācijai izmantojot funkciju Softmax vai cross-entropy loss, vai regresijai - Eiklida zaudējumu funkciju.

RNN, LSTM un uz uzmanību balstīti neironu tīkli

Neironu tīklos, kas virzās uz priekšu, informācija plūst no ievades caur slēptajiem slāņiem uz izeju. Tas ierobežo tīkla darbību vienlaicīgi ar vienu valsti.

Atkārtotos neironu tīklos informācija apritē caur cilpu, kas ļauj tīklam atcerēties pēdējos iepriekšējos rezultātus. Tas ļauj analizēt secības un laika rindas. RNN ir divas kopīgas problēmas: eksplodējoši gradienti (viegli fiksējami, piestiprinot gradientus) un pazūdošie gradienti (nav tik viegli salabojami).

LSTM tīklā abos gadījumos tīkls spēj aizmirst (aizvērt) iepriekšējo informāciju vai atcerēties to, mainot svaru. Tas efektīvi nodrošina LSTM gan ilgtermiņa, gan īstermiņa atmiņu un atrisina pazūdošā gradienta problēmu. LSTM var tikt galā ar simtiem iepriekšējo ievadu secībām.

Uzmanības moduļi ir vispārināti vārti, kas pieliek svaru ievades vektoram. Hierarhisks neirālās uzmanības kodētājs izmanto vairākus uzmanības moduļu slāņus, lai tiktu galā ar desmitiem tūkstošu iepriekšējo ievadi.

Izlases meži

Cits dziļas mācīšanās algoritmu veids - nevis dziļš neironu tīkls - ir Random Forest jeb Random Decision Forest. Nejaušs mežs tiek veidots no daudziem slāņiem, bet neironu vietā tas tiek veidots no lēmumu kokiem, un tas dod statistisko vidējo rādītāju (klasifikācijas režīms vai regresijas vidējais lielums) no atsevišķu koku prognozēm. Randomizēto mežu nejaušinātie aspekti ir sāknēšanas siksnas apvienošana (arī soma) atsevišķiem kokiem un ņemot nejaušas pazīmju apakškopas.

Dziļi mācību ietvari

Kaut arī jūs varētu rakstīt dziļu mācību programmas pēc pirmajiem principiem, daudz efektīvāk ir izmantot dziļas mācīšanās ietvarus, īpaši ņemot vērā, ka tie ir optimizēti lietošanai ar GPU un citiem akseleratoriem. Izcilākais ietvars ir TensorFlow, kura izcelsme ir Google. TensorFlow labvēlīgā augsta līmeņa API ir Keras, kuru var izmantot arī ar citām aizmugures sistēmām.

PyTorch no Facebook un citiem ir spēcīga alternatīva TensorFlow, un tam ir atšķirība atbalstīt dinamiskus neironu tīklus, kuros tīkla topoloģija var mainīties no laikmeta uz citu. Fastai ir augsta līmeņa trešās puses API, kas kā aizmuguri izmanto PyTorch.

MXNet no Amazon un citiem ir vēl viena spēcīga alternatīva TensorFlow, apgalvojot par labāku mērogojamību. Gluon ir vēlamā augsta līmeņa obligātā API MXNet.

Chainer no IBM, Intel un citiem dažos veidos bija PyTorch iedvesmas avots, ņemot vērā, ka tas nosaka neironu tīklu pēc palaišanas un atbalsta dinamiskos neironu tīklus.

Lai gan visi iepriekš minētie ietvari galvenokārt ir Python, Deeplearning4j (DL4J), kas sākotnēji bija Skymind un tagad Apache projekts, galvenokārt ir Java un Scala. DL4J ir saderīgs ar Apache Spark un Hadoop.

ONNX sākotnēji tika piedāvāts kā atvērta ekosistēma maināmiem AI modeļiem. ONNX tagad papildus apmaiņas faila formātam ir izpildlaiks.

$config[zx-auto] not found$config[zx-overlay] not found