Programavimas

Kas yra gilus mokymasis? Algoritmai, imituojantys žmogaus smegenis

Apibrėžtas gilus mokymasis

Gilus mokymasis yra mašininio mokymosi forma, modeliuojanti duomenų modelius kaip sudėtingus, daugiasluoksnius tinklus. Kadangi gilus mokymasis yra pats bendriausias problemos modeliavimo būdas, jis gali išspręsti sunkias problemas - tokias kaip kompiuterio matymas ir natūralios kalbos apdorojimas, kurios pralenkia ir įprastą programavimą, ir kitas mašininio mokymosi technikas.

Gilus mokymasis gali ne tik duoti naudingų rezultatų, kai nesiseka su kitais metodais, bet ir sukurti tikslesnius modelius nei kiti metodai, ir gali sutrumpinti laiką, reikalingą naudingam modeliui sukurti. Tačiau norint išmokti giluminio mokymosi modelių reikia daug skaičiavimo galios. Kitas giluminio mokymosi trūkumas yra sunkumas aiškinant giluminio mokymosi modelius.

Apibūdinanti giluminio mokymosi ypatybė yra ta, kad mokomas modelis turi ne vieną paslėptas sluoksnis tarp įvesties ir išvesties. Daugumoje diskusijų gilus mokymasis reiškia giliųjų neuroninių tinklų naudojimą. Tačiau yra keletas algoritmų, kurie įgyvendina gilų mokymąsi, naudodami kitokius paslėptus sluoksnius, ne tik nervinius tinklus.

Gilus mokymasis ir mašininis mokymasis

Minėjau, kad gilus mokymasis yra forma mašininis mokymasis. Nurodysiu ne gilų mašininį mokymąsi kaip klasikinis mašininis mokymasis, kad atitiktų įprastą vartojimą.

Apskritai klasikiniai mašininio mokymosi algoritmai veikia daug greičiau nei giliųjų mokymosi algoritmai; klasikinio modelio mokymui dažnai pakaks vieno ar daugiau procesorių. Gilaus mokymosi modeliams dažnai reikia aparatinės įrangos greitintuvų, tokių kaip GPU, TPU ar FPGA, kad būtų galima mokytis, taip pat diegti masto. Be jų modelių mokymas užtruktų kelis mėnesius.

Esant daugeliui problemų, kai kurie klasikiniai mašininio mokymosi algoritmai sukurs „pakankamai gerai“ modelį. Kalbant apie kitas problemas, klasikiniai mašininio mokymosi algoritmai praeityje neveikė labai gerai.

Gilaus mokymosi programos

Yra daugybė problemų pavyzdžių, kuriems šiuo metu reikia giliai mokytis, kad būtų sukurti geriausi modeliai. Natūralios kalbos apdorojimas (NLP) yra geras.

2016 m. Rudenį „Google Translate“ išvesties kokybė anglų-prancūzų, anglų-kinų ir anglų-japonų kalbų poroms staiga smarkiai pagerėjo - nuo žodžių salotų kūrimo iki sakinių, artimų profesionaliam žmogaus vertimui, kokybės. Užkulisiuose įvyko tai, kad „Google Brain“ ir „Google Translate“ komandos atnaujino „Google Translate“ nuo senų frazėmis pagrįstų statistinių mašininio vertimo algoritmų (vienos rūšies klasikinio mašininio mokymosi) naudojimo iki gilaus neuroninio tinklo, mokomo naudojant žodžių įterpimus, naudojant „Google“ „TensorFlow“ sistemą. .

Tai nebuvo lengvas projektas. Prireikė daugelio doktorantūros lygio mokslininkų mėnesių darbo su modeliais ir tūkstančių GPU savaičių mokant modelius. Tai taip pat paskatino „Google“ sukurti naujos rūšies mikroschemą - „Tensor Processing Unit“ (TPU), skirtą vykdyti neuroninius tinklus „Google Translate“.

Be kalbos vertimo problemos, kurią sprendžia „Google Translate“, pagrindinės NLP užduotys apima automatinį apibendrinimą, bendros nuorodos sprendimą, diskurso analizę, morfologinį segmentavimą, įvardijamo objekto atpažinimą, natūralios kalbos generavimą, natūralios kalbos supratimą, kalbos dalies žymėjimą, nuotaiką analizė ir kalbos atpažinimas.

Kitas geras giluminio mokymosi taikymo pavyzdys yra įvaizdžio klasifikavimas. Kadangi gyvi organizmai vaizdus apdoroja savo regos žieve, daugelis tyrinėtojų žinduolių regos žievės architektūrą laikė neuroninių tinklų, skirtų atpažinti vaizdą, modeliu. Biologiniai tyrimai siekia 1950-uosius.

Proveržis neuroninio tinklo regėjimo srityje buvo Yanno LeCuno 1998 m. LeNet-5, septynių lygių, konvoliucinis neuroninis tinklas (CNN) atpažinti ranka rašomus skaitmenis, suskaitmenintus 32x32 pikselių vaizduose. Norint išanalizuoti didesnės raiškos vaizdus, ​​„LeNet-5“ tinklą reikėtų išplėsti į daugiau neuronų ir daugiau sluoksnių.

Geriausi šių dienų giliųjų vaizdų klasifikavimo modeliai gali nustatyti įvairius objektų katalogus HD raiška ir spalvotais. Be grynųjų giliųjų neuronų tinklų (DNN), kartais žmonės naudoja hibridinius regėjimo modelius, kurie gilų mokymąsi sujungia su klasikiniais mašininio mokymosi algoritmais, atliekančiais konkrečias užduotis.

Kitos regėjimo problemos, be pagrindinio vaizdo klasifikavimo, kurios buvo išspręstos giliai mokantis, yra vaizdų klasifikavimas su lokalizavimu, objektų aptikimas, objektų segmentavimas, vaizdo stiliaus perkėlimas, vaizdo spalvinimas, vaizdo rekonstrukcija, super skiriamoji geba ir vaizdų sintezė.

Vaizdų klasifikaciją galima išplėsti iki vaizdo įrašų klasifikavimo, išskiriant atskirus vaizdo įrašo kadrus ir klasifikuojant kiekvieną kadrą. Aptikti objektai vaizdo klipuose gali būti stebimi nuo kadro iki kadro.

Pasak Goodfellow, Bengio ir Courville, rašiusių 2016 m., Giluminis mokymasis buvo sėkmingai naudojamas numatant, kaip molekulės sąveikaus, kad padėtų farmacijos įmonėms kurti naujus vaistus, ieškoti subatominių dalelių ir automatiškai analizuoti mikroskopo vaizdus, ​​naudojamus konstruojant. 3D smegenų žemėlapis.

Gilus neuroninių tinklų mokymasis

„Dirbtinių“ neuroninių tinklų idėjos siekia 1940 m. Esminė samprata yra ta, kad dirbtinių neuronų tinklas, pastatytas iš tarpusavyje susijusių slenksčio jungiklių, gali išmokti atpažinti modelius taip pat, kaip tai daro gyvūno smegenys ir nervų sistema (įskaitant tinklainę).

Atspaudimas

Mokymasis giliuose neuroniniuose tinkluose vyksta stiprinant ryšį tarp dviejų neuronų, kai treniruotės metu abu aktyvūs vienu metu. Šiuolaikinėje neuroninių tinklų programinėje įrangoje dažniausiai padidėja ryšių tarp neuronų svorio vertės, naudojant vadinamąją taisyklę klaidos pasiskirstymas, atrama arba BP.

Neuronai

Kaip modeliuojami neuronai? Kiekvienas turi sklidimo funkciją, kuri transformuoja sujungtų neuronų išvestis, dažnai su svertine suma. Sklidimo funkcijos išvestis pereina į aktyvinimo funkciją, kuri suveikia, kai jos įvestis viršija ribinę vertę.

Aktyvinimo funkcijos

1940-aisiais ir 1950-aisiais dirbtiniai neuronai naudojo pakopinio aktyvavimo funkciją ir buvo vadinami perceptronai. Šiuolaikiniai neuroniniai tinklai gali sakyk jie naudoja perceptronus, tačiau iš tikrųjų jie turi sklandaus aktyvavimo funkcijas, tokias kaip logistinė arba sigmoidinė funkcija, hiperbolinė liestinė ir ištaisytasis tiesinis vienetas (ReLU). „ReLU“ paprastai yra geriausias pasirinkimas greitai konvergencijai, nors treniruočių metu „miršta“ neuronai, jei mokymosi lygis nustatytas per aukštai.

Aktyvinimo funkcijos išvestis gali būti perduodama išvesties funkcijai papildomai formuoti. Tačiau dažnai išvesties funkcija yra tapatybės funkcija, o tai reiškia, kad aktyvavimo funkcijos išvestis perduodama pasroviui prijungtiems neuronams.

Neuroninio tinklo topologijos

Dabar, kai žinome apie neuronus, turime sužinoti apie įprastas nervų tinklo topologijas. „Feed-forward“ tinkle neuronai yra suskirstyti į skirtingus sluoksnius: vieną įvesties sluoksnį, bet kokį paslėptų apdorojimo sluoksnių skaičių ir vieną išvesties sluoksnį, o kiekvieno sluoksnio išėjimai eina tik į kitą sluoksnį.

Persiuntimo tinkle su sparčiuoju ryšiu kai kurie ryšiai gali pereiti per vieną ar daugiau tarpinių sluoksnių. Pasikartojančiuose neuroniniuose tinkluose neuronai gali daryti įtaką sau tiesiogiai arba netiesiogiai per kitą sluoksnį.

Mokymai

Prižiūrimas neuroninio tinklo mokymasis atliekamas kaip ir bet kuris kitas mašininis mokymasis. Pateikiate tinklą su treniruočių duomenų grupėmis, palyginate tinklo išvestį su norima išvestimi, sugeneruojate klaidų vektorių ir pritaikote korekcijas tinklui pagal klaidų vektorių. Treniruočių duomenų partijos, kurios yra paleidžiamos kartu prieš taikant pataisas, vadinamos epochomis.

Tiems, kurie domisi išsamia informacija, užpakalinis pasiskirstymas naudoja klaidos (arba sąnaudų) funkcijos gradientą, atsižvelgiant į modelio svorį ir šališkumą, kad surastų teisingą kryptį ir sumažintų klaidą. Korekcijų taikymą kontroliuoja du dalykai: optimizavimo algoritmas ir mokymosi greičio kintamasis, kuris paprastai turi būti mažas, kad būtų užtikrinta konvergencija ir išvengta negyvų ReLU neuronų.

Optimizatoriai

Neuroninių tinklų optimizatoriai paprastai naudoja tam tikros formos gradiento nusileidimo algoritmą, kad paskatintų dauginimąsi, dažnai su mechanizmu, padedančiu išvengti įstrigimo vietiniuose minimumuose, pavyzdžiui, atsitiktinai parinktų mini partijų optimizavimas (stochastinis gradiento nusileidimas) ir pagreitį gradiento pataisymai. Kai kurie optimizavimo algoritmai taip pat pritaiko modelio parametrų mokymosi rodiklius, žiūrėdami į gradiento istoriją (AdaGrad, RMSProp ir Adam).

Kaip ir visuose mašininiuose mokymuose, turite patikrinti neuroninio tinklo prognozes pagal atskirą patvirtinimo duomenų rinkinį. To nedarydami rizikuojate sukurti neuroninius tinklus, kurie tik įsimena savo įnašus, užuot išmokę būti apibendrintais prognozuotojais.

Tikri DNN

Gilus neuroninis tinklas realiai problemai gali turėti virš 10 paslėptų sluoksnių. Jo topologija gali būti paprasta arba gana sudėtinga.

Kuo daugiau sluoksnių tinkle, tuo daugiau savybių jis gali atpažinti. Deja, kuo daugiau tinklo sluoksnių, tuo ilgiau reikės skaičiuoti ir tuo sunkiau bus treniruotis.

Gilaus mokymosi algoritmai

Kaip jau minėjau anksčiau, labiausiai giliai mokomasi giliųjų nervų tinkluose. Mašinos regėjimui dažnai naudojami konvoliuciniai neuroniniai tinklai (CNN). Natūraliai kalbai ir kitam sekos apdorojimui dažnai naudojami pasikartojantys neuroniniai tinklai (RNN), kaip ir „Long Short-Term Memory“ (LSTM) tinklai bei dėmesiu pagrįsti neuroniniai tinklai. Atsitiktiniai miškai, taip pat žinomi kaip atsitiktinių sprendimų miškai, kurie nėra neuroniniai tinklai, yra naudingi įvairioms klasifikavimo ir regresijos problemoms spręsti.

CNN neuroniniai tinklai

Konvoliuciniai neuroniniai tinklai paprastai naudoja konvoliucinius, kaupimo, ReLU, visiškai sujungtus ir praradimo sluoksnius, kad imituotų regimąją žievę. Konvoliucinis sluoksnis iš esmės apima daugelio mažų sutampančių regionų integralus. Sujungimo sluoksnis atlieka nelinijinio mažinimo pavyzdį. „ReLU“ sluoksniuose taikoma nesočioji aktyvavimo funkcija f (x) = maks. (0, x). Visiškai sujungtame sluoksnyje neuronai turi ryšius su visais ankstesnio sluoksnio aktyvavimais. Praradimo sluoksnis apskaičiuoja, kaip tinklo mokymas baudžia nuokrypį tarp numatomų ir tikrų etikečių, klasifikavimui naudojant „Softmax“ arba kryžminės entropijos nuostolių funkciją, o regresijai - Euklido nuostolių funkciją.

RNN, LSTM ir dėmesiu pagrįsti neuroniniai tinklai

Perduodamuose neuroniniuose tinkluose informacija iš įvesties, per paslėptus sluoksnius, teka į išvestį. Tai apriboja tinklą tuo pačiu metu nagrinėjant vieną valstybę.

Pasikartojančiuose neuroniniuose tinkluose informacija vyksta per ciklą, o tai leidžia tinklui prisiminti paskutinius ankstesnius išėjimus. Tai leidžia analizuoti sekas ir laiko eiles. RNN turi dvi bendras problemas: sprogstantys nuolydžiai (lengvai fiksuojami užspaudžiant nuolydžius) ir nykstantys nuolydžiai (ne taip lengva nustatyti).

LSTM sistemose tinklas gali pamiršti (suskirstyti) ankstesnę informaciją arba ją prisiminti, abiem atvejais keisdamas svorį. Tai veiksmingai suteikia LSTM tiek ilgalaikę, tiek trumpalaikę atmintį ir išsprendžia nykstančią gradiento problemą. LSTM gali susidoroti su šimtų praeities įvesties sekomis.

Dėmesio moduliai yra apibendrinti vartai, taikantys svorį įvesties vektoriui. Hierarchinis neuroninis dėmesio koduotojas naudoja kelis dėmesio modulių sluoksnius, kad galėtų susidoroti su dešimtimis tūkstančių praeities duomenų.

Atsitiktiniai miškai

Kita gilaus mokymosi algoritmo rūšis - ne gilus neuroninis tinklas - yra atsitiktinis miškas arba atsitiktinių sprendimų miškas. Atsitiktinis miškas yra sukonstruotas iš daugelio sluoksnių, tačiau vietoj neuronų jis sudaromas iš sprendimų medžių ir pateikia atskirų medžių prognozių statistinį vidurkį (klasifikavimo režimą arba regresijos vidurkį). Atsitiktinių miškų atsitiktinių imčių aspektai yra „bootstrap“ kaupimo naudojimas (dar žinomas kaip maišas) atskiriems medžiams ir imant atsitiktinius požymių pogrupius.

Gilaus mokymosi pagrindai

Nors galėtumėte rašyti gilaus mokymosi programas vadovaudamiesi pirmaisiais principais, kur kas efektyviau naudoti gilaus mokymosi sistemas, ypač atsižvelgiant į tai, kad jos buvo optimizuotos naudoti su GPU ir kitais greitintuvais. Ryškiausias pagrindas yra „TensorFlow“, kuris atsirado „Google“. Palanki „TensorFlow“ aukšto lygio API yra „Keras“, kuri taip pat gali būti naudojama kartu su kitomis „back-end“ sistemomis.

„Facebook“ ir kitų „PyTorch“ yra stipri alternatyva „TensorFlow“ ir turi skirtumą palaikyti dinaminius neuroninius tinklus, kuriuose tinklo topologija gali keistis iš epochos į epochą. „Fastai“ yra aukšto lygio trečiosios šalies API, kuri naudoja „PyTorch“ kaip antrinę programą.

„MXNet“ iš „Amazon“ ir kitų yra dar viena stipri alternatyva „TensorFlow“, teigdama, kad jos mastelis yra geresnis. „Gluon“ yra pageidaujama aukšto lygio imperatyvi „MXNet“ API.

„Chainer“ iš „IBM“, „Intel“ ir kitų buvo tam tikra prasme „PyTorch“ įkvėpėjas, turėdamas omenyje tai, kad jis apibrėžia neuroninį tinklą vykdydamas ir palaiko dinaminius neuroninius tinklus.

Nors visi aukščiau paminėti rėmai pirmiausia yra „Python“, „Deeplearning4j“ (DL4J), kilęs iš „Skymind“, o dabar - „Apache“ projektas, pirmiausia yra „Java“ ir „Scala“. DL4J yra suderinamas su „Apache Spark“ ir „Hadoop“.

Iš pradžių ONNX buvo pasiūlyta kaip atvira keičiamų AI modelių ekosistema. Dabar ONNX be keitimosi failo formato turi ir vykdymo laiką.

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