Neuroniniai tinklai ir gilus mokymasis: ateitis arti. Giluminio mokymosi apribojimai ir ateitis

Artėjanti išmaniųjų robotų revoliucija buvo prognozuojama kiekvieną dešimtmetį nuo šeštojo dešimtmečio. Tačiau tai niekada neįvyko. Pažanga šioje srityje dirbtinis intelektas vyko neaiškiai, kartais nuobodžiai, daugeliui entuziastų sukeldamas nusivylimą. Akivaizdūs laimėjimai – kompiuteris Deep Blue, kurį dešimtojo dešimtmečio viduryje sukūrė IBM ir 1997 m. įveikė Garį Kasparovą šachmatų rungtyje, arba elektroninio vertėjo pasirodymas dešimtojo dešimtmečio pabaigoje – labiau tikėtina, kad tai buvo „apytikrių“ skaičiavimų rezultatas, o ne žmogaus suvokimo mechanizmų perkėlimas į kompiuterinius procesus.skaičiavimai.

Tačiau nusivylimo ir nesėkmės istorija dabar kardinaliai keičiasi. Vos prieš dešimt metų kompiuterinio matymo ir objektų atpažinimo algoritmai galėjo identifikuoti sferą ar dėžutę paprastame fone. Dabar jie gali atskirti žmonių veidus taip gerai, kaip žmonės, net esant sudėtingam natūraliam fonui. Prieš šešis mėnesius „Google“ išleido išmaniesiems telefonams skirtą programą, kuri gali išversti tekstą iš daugiau nei 20 užsienio kalbų, skaityti žodžius iš nuotraukų, kelio ženklų ar ranka rašytą tekstą!

Visa tai tapo įmanoma po to, kai paaiškėjo, kad kai kurios senos idėjos neuroninių tinklų srityje, jei šiek tiek modifikuotos pridedant „gyvenimas“, t.y. Žmogaus ir gyvūno suvokimo detalių projektavimas gali duoti stulbinantį rezultatą, kurio niekas nesitikėjo. Šį kartą dirbtinio intelekto revoliucija atrodo išties tikra.

Neuroninių tinklų tyrimai mašininio mokymosi srityje daugeliu atvejų visada buvo skirti naujų metodų, skirtų įvairių tipų duomenims atpažinti, paieškai. Taigi, prie fotoaparato prijungtas kompiuteris, naudodamas vaizdo atpažinimo algoritmą, prastos kokybės nuotraukoje turi gebėti atskirti žmogaus veidą, arbatos puodelį ar šunį. Tačiau istoriškai neuroninių tinklų naudojimas šiems tikslams buvo susijęs su dideliais sunkumais. Net ir nedidelei sėkmei pasiekti reikėjo žmogaus įsikišimo – programai padedantys žmonės atpažįsta svarbias vaizdo ypatybes, pavyzdžiui, vaizdo ribas ar paprastas geometrines figūras. Esami algoritmai negalėjo išmokti to padaryti patys.

Situacija kardinaliai pasikeitė, nes buvo sukurtas vadinamasis neuroniniai tinklai su giliu mokymusi, kuri dabar gali analizuoti vaizdą beveik taip pat efektyviai kaip žmogus. Tokie neuroniniai tinklai naudoja prastos kokybės vaizdą kaip įvestį į pirmojo lygio „neuronus“, kurie vėliau perduoda „vaizdą“ netiesiniais ryšiais į kito lygio neuronus. Po tam tikro mokymo aukštesnio lygio „neuronai“ gali naudoti abstraktesnius vaizdo aspektus, kad juos atpažintų. Pavyzdžiui, jie gali naudoti tokias detales kaip vaizdo kraštinės arba jo vietos erdvėje ypatybės. Nuostabu, kad tokie tinklai gali išmokti įvertinti svarbiausias vaizdo ypatybes be žmogaus pagalbos!

Puikus neuroninių tinklų panaudojimo su giluminiu mokymusi pavyzdys yra identiškų objektų, nufotografuotų iš skirtingų kampų ar skirtingomis pozomis (jei kalbame apie žmogų ar gyvūną), atpažinimas. Algoritmai, kurie naudoja skenavimą po pikselį, „mano“, kad žiūri į du skirtingus vaizdus, ​​o „protingi“ neuroniniai tinklai „supranta“, kad žiūri į tą patį objektą. Ir atvirkščiai – dviejų skirtingų veislių šunų atvaizdus, ​​nufotografuotus ta pačia poza, ankstesni algoritmai galėjo suvokti kaip to paties šuns nuotraukas. Giliai besimokantys neuroniniai tinklai gali atpažinti vaizdų detales, padedančias atskirti gyvūnus.

Giluminio mokymosi metodų, pažangių neurologijos žinių ir šiuolaikinių kompiuterių galios derinys atveria dirbtinio intelekto perspektyvas, kurių dar negalime įvertinti. Tiesa jau akivaizdu, kad protas gali turėti ne tik biologinę prigimtį.

Gilus mokymasis keičia darbo su tekstais paradigmą, tačiau tai sukelia skaičiavimo lingvistų ir duomenų mokslininkų skepticizmą. Neuroniniai tinklai yra galingas, bet trivialus mašininio mokymosi įrankis.

03.05.2017 Dmitrijus Ilvovskis, Jekaterina Černiak

Neuroniniai tinklai leidžia tekstuose rasti paslėptus ryšius ir šablonus, tačiau šių ryšių negalima aiškiai pateikti. Neuroniniai tinklai, nors ir galingi, yra gana trivialus įrankis, sukeliantis skepticizmą tarp įmonių, kuriančių pramoninius sprendimus duomenų analizės srityje, ir tarp pirmaujančių skaičiavimo lingvistų.

Bendras susižavėjimas neuroninių tinklų technologijomis ir giluminiu mokymusi neaplenkė kompiuterinės lingvistikos – automatinio tekstų apdorojimo natūralia kalba. Neseniai vykusiose Kompiuterinės lingvistikos asociacijos ACL, pagrindinio šios srities mokslinio forumo, konferencijose didžioji dalis pranešimų buvo skirta neuroninių tinklų naudojimui tiek sprendžiant jau žinomas problemas, tiek tiriant naujas, kurių nepavyktų išspręsti naudojant standartą. mašininio mokymosi įrankiai. Padidėjęs kalbininkų dėmesys neuroniniams tinklams yra dėl kelių priežasčių. Neuroninių tinklų naudojimas, pirma, žymiai pagerina kai kurių standartinių teksto ir sekų klasifikavimo problemų sprendimo kokybę, antra, sumažina darbo intensyvumą dirbant tiesiogiai su tekstais ir, trečia, leidžia spręsti naujas problemas (pavyzdžiui, sukurti pokalbį). botai). Tuo pačiu metu neuroniniai tinklai negali būti laikomi visiškai savarankišku kalbinių problemų sprendimo mechanizmu.

Pirmas darbas gilus mokymasis(gilus mokymasis) siekia XX amžiaus vidurį. 1940-ųjų pradžioje Warrenas McCullochas ir Walteris Pittsas pasiūlė formalų žmogaus smegenų modelį – dirbtinį neuroninį tinklą, o kiek vėliau Frankas Rosenblattas apibendrino savo darbą ir sukūrė neuroninio tinklo modelį kompiuteryje. Pirmasis darbas, susijęs su neuroninių tinklų mokymu, naudojant atgalinio skleidimo algoritmą, datuojamas septintajame dešimtmetyje (algoritmas apskaičiuoja numatymo paklaidą ir sumažina ją naudodamas stochastinio optimizavimo metodus). Tačiau paaiškėjo, kad nepaisant smegenų modeliavimo idėjos grožio ir elegancijos, „tradicinių“ neuroninių tinklų lavinimas užtrunka ilgai, o klasifikavimo rezultatai mažuose duomenų rinkiniuose yra palyginami su rezultatais, gautais naudojant paprastesnius metodus. , pavyzdžiui, palaikymo vektorinės mašinos (SVM). ). Dėl to neuroniniai tinklai buvo pamiršti 40 metų, tačiau šiandien jie vėl tapo paklausūs dirbant su dideliais kiekiais nestruktūrizuotų duomenų, vaizdų ir tekstų.

Formaliu požiūriu neuroninis tinklas yra nukreiptas tam tikros architektūros grafikas, kurio viršūnės arba mazgai vadinami neuronai. Pirmajame grafiko lygyje yra įvesties mazgai, paskutiniame – išvesties mazgai, kurių skaičius priklauso nuo užduoties. Pavyzdžiui, norint suskirstyti į dvi klases, vienas arba du neuronai gali būti dedami į tinklo išvesties sluoksnį; klasifikuojant į k klases, galima įdėti k neuronų. Visi kiti neuroninio tinklo grafiko lygiai paprastai vadinami paslėptais sluoksniais. Visi viename lygyje esantys neuronai yra sujungti kraštais su visais kito lygio neuronais, kiekvienas kraštas turi svorį. Kiekvienam neuronui priskiriama aktyvinimo funkcija, modeliuojanti biologinių neuronų veiklą: jie „tyli“, kai įvesties signalas silpnas, o jo vertei viršijus tam tikrą slenkstį, užsidega ir perduoda įvesties reikšmę toliau tinkle. Neuroninio tinklo lavinimo iš pavyzdžių (ty iš objekto teisingų atsakymų porų) užduotis yra rasti kraštinių svorius, kurie geriausiai nuspėja teisingus atsakymus. Akivaizdu, kad būtent architektūra – neuroninio tinklo grafo struktūros topologija – yra svarbiausias jo parametras. Nors dar nėra oficialaus „giliųjų tinklų“ apibrėžimo, visuotinai pripažįstama, kad visi neuroniniai tinklai, susidedantys iš daugybės sluoksnių arba turintys „nestandartinius“ sluoksnius (pavyzdžiui, kuriuose yra tik pasirinktos jungtys arba naudojami rekursija su kitais sluoksniai) laikomi giliais.

Kol kas sėkmingiausio neuroninių tinklų panaudojimo pavyzdys – vaizdo analizė, tačiau neuroninių tinklų technologijos kardinaliai pakeitė ir darbą su tekstiniais duomenimis. Jei anksčiau kiekvienas teksto elementas (raidė, žodis ar sakinys) turėjo būti aprašomas naudojant daugybę skirtingo pobūdžio požymių (morfologinių, sintaksinių, semantinių ir kt.), tai dabar daugelyje užduočių sudėtingų aprašymų poreikis išnyksta. Neuroninių tinklų technologijų teoretikai ir praktikai dažnai kalba apie „vaizdavimo mokymąsi“ – neapdorotame tekste, išskaidytame tik į žodžius ir sakinius, neuroninis tinklas sugeba rasti priklausomybes ir šablonus bei savarankiškai sudaryti ypatybių erdvę. Deja, tokioje erdvėje žmogus nieko nesupras – treniruočių metu neuroninis tinklas kiekvienam teksto elementui priskiria vieną tankų vektorių, susidedantį iš tam tikrų skaičių, vaizduojančių atrastus „gilius“ ryšius. Dėmesys dirbant su tekstu pereina nuo funkcijų poaibio konstravimo ir išorinių žinių bazių paieškos prie duomenų šaltinių parinkimo ir tekstų žymėjimo tolimesniam neuroninio tinklo mokymui, kuriam, palyginti su standartiniais metodais, reikia žymiai daugiau duomenų. Būtent dėl ​​poreikio naudoti didelius duomenų kiekius ir dėl prasto aiškinimo bei nenuspėjamumo neuroniniai tinklai nėra paklausūs realiose pramoninio masto programose, skirtingai nuo kitų nusistovėjusių mokymosi algoritmų, tokių kaip atsitiktiniai miškai ir paramos vektorinės mašinos. Nepaisant to, neuroniniai tinklai naudojami daugelyje automatinio teksto apdorojimo užduočių (1 pav.).

Vienas iš populiariausių neuroninių tinklų pritaikymo būdų yra žodžių, susijusių su paskirstymo semantikos sritimi, vektorių konstravimas: manoma, kad žodžio reikšmę galima suprasti pagal jo konteksto reikšmę, iš aplinkinių žodžių. Iš tiesų, jei nesame susipažinę su žodžiu esančiame tekste žinoma kalba, dažniausiai galime atspėti jo reikšmę. Žodžių vektoriai tarnauja kaip matematinis žodžio reikšmės modelis: eilutės didelėje „žodžio konteksto“ matricoje, sudarytoje iš gana didelio tekstų korpuso. Kaimyniniai žodžiai, žodžiai, įtraukti į tą pačią sintaksinę ar semantinę konstrukciją su duotu žodžiu ir pan. atsižvelgiant į kontekstą), bet dažniau naudojamas teigiamos porinės tarpusavio informacijos koeficientas (Positive Pointwise Mutual Information, PPMI), kuris parodo, kiek neatsitiktinis buvo žodžio atsiradimas tam tikrame kontekste. Tokios matricos gana sėkmingai gali būti naudojamos žodžių klasterizavimui arba ieškant žodžių, kurie savo prasme yra artimi paieškos žodžiui.

2013 m. Tomas Mikolov paskelbė straipsnį, kuriame pasiūlė naudoti neuroninius tinklus žodžių vektoriams lavinti, tačiau mažesniam matmeniui: naudojant eilutes (žodį, kontekstus), buvo išmokytas paprasčiausios architektūros neuroninis tinklas, o išvestyje – kiekvienas. žodžiui buvo priskirtas 300 elementų vektorius. Paaiškėjo, kad tokie vektoriai geriau perteikia semantinį žodžių artumą. Pavyzdžiui, ant jų galite apibrėžti reikšmių sudėjimo ir atėmimo aritmetines operacijas ir gauti tokias lygtis: „Paryžius - Prancūzija + Rusija = Maskva“; "Karalius - vyras + moteris = karalienė". Arba suraskite papildomą žodį serijoje „obuolys, kriaušė, vyšnia, kačiukas“. Darbe buvo pristatytos dvi architektūros, skip-gram ir CBOW (Continuous Bag of Words), bendru pavadinimu word2vec. Kaip vėliau parodyta , word2vec yra ne kas kita, kaip žodžio konteksto matricos faktorizavimas su PPMI svoriais. Dabar įprasta „word2vec“ priskirti paskirstymo semantikai, o ne giliajam mokymuisi, tačiau pradinis postūmis sukurti šį modelį buvo neuroninio tinklo naudojimas. Be to, paaiškėjo, kad word2vec vektoriai yra patogus žodžio reikšmės atvaizdavimas, kuris gali būti įvestas į giluminius neuroninius tinklus, naudojamus teksto klasifikavimui.

Teksto klasifikavimo užduotis yra viena aktualiausių rinkodaros specialistams, ypač kai reikia analizuoti vartotojų nuomonę ar požiūrį į prekę ar paslaugą, todėl mokslininkai nuolat stengiasi gerinti jos sprendimo kokybę. Tačiau nuomonės analizė yra sakinių, o ne tekstų klasifikavimo užduotis – teigiamoje apžvalgoje vartotojas gali parašyti vieną ar du neigiamus sakinius, taip pat svarbu mokėti juos atpažinti ir analizuoti. Gerai žinomas sunkumas klasifikuojant sakinius yra dėl kintamo įvesties ilgio – kadangi tekstų sakiniai gali būti savavališko ilgio, neaišku, kaip juos pateikti neuroninio tinklo įvestis. Vienas iš būdų yra pasiskolintas iš vaizdų analizės srities ir apima konvoliucinių neuroninių tinklų (CNN) naudojimą (2 pav.).

Konvoliucinio neuroninio tinklo įvestis yra sakinys, kuriame kiekvienas žodis jau pavaizduotas vektoriumi (vektorių vektoriumi). Paprastai iš anksto paruošti word2vec modeliai naudojami žodžiams kaip vektoriams pavaizduoti. Konvoliucinis neuroninis tinklas susideda iš dviejų sluoksnių: „gilaus“ konvoliucijos sluoksnio ir įprasto paslėpto sluoksnio. Konvoliucijos sluoksnis, savo ruožtu, susideda iš filtrų ir „subsampling“ sluoksnio. Filtras yra neuronas, kurio įvestis formuojama naudojant langus, kurie juda tekste ir paeiliui pasirenka tam tikrą skaičių žodžių (pvz., „trys“ ilgio langas atrinks pirmuosius tris žodžius, žodžius nuo antrojo iki ketvirto, nuo trečio iki penkto ir pan.) . Filtro išvestyje susidaro vienas vektorius, kuris sujungia visus į jį įtrauktų žodžių vektorius. Tada subimties sluoksnyje sugeneruojamas vienas vektorius, atitinkantis visą pasiūlymą, kuris apskaičiuojamas kaip visų išvesties filtrų vektorių komponentų maksimumas. Konvoliucinius neuroninius tinklus lengva išmokyti ir įdiegti. Jiems mokyti naudojamas standartinis atgalinio skleidimo algoritmas, o dėl to, kad filtrų svoriai pasiskirstę tolygiai (i-to žodžio svoris iš lango vienodas bet kuriam filtrui), parametrų skaičius konvoliucinis neuroninis tinklas yra mažas. Kompiuterinės lingvistikos požiūriu konvoliuciniai neuroniniai tinklai yra galingas klasifikavimo įrankis, kuris, tačiau, neturi jokios kalbinės intuicijos, o tai labai apsunkina algoritmų klaidų analizę.

Sekos klasifikavimas – tai užduotis, kurioje kiekvienam žodžiui reikia priskirti vieną etiketę: morfologinė analizė (kiekvienam žodžiui priskiriama kalbos dalis), vardinių objektų išskyrimas (nustatymas, ar kiekvienas žodis yra asmens vardo, geografinio pavadinimo ir kt.) ir tt Klasifikuojant sekas, naudojami metodai, kurie atsižvelgia į žodžio kontekstą: jei ankstesnis žodis yra asmens vardo dalis, dabartinis taip pat gali būti vardo dalis, bet mažai tikėtina, kad jis bus vardo dalis. organizacijos pavadinimas. Šį reikalavimą praktiškai įgyvendinti padeda pasikartojantys neuroniniai tinklai, praplečiantys praėjusio amžiaus pabaigoje pasiūlytų kalbos modelių idėją. Klasikinis kalbos modelis numato tikimybę, kad žodis i atsiras po žodžio i-1. Kalbos modeliai taip pat gali būti naudojami nuspėti kitą žodį: koks žodis greičiausiai pasirodys po šio?

Norint išmokyti kalbos modelius, reikalingi dideli korpusai – kuo didesnis mokymo korpusas, tuo daugiau žodžių porų modelis „pažįsta“. Neuroninių tinklų naudojimas kalbos modeliams kurti sumažina saugomų duomenų kiekį. Įsivaizduokime paprastą tinklo architektūrą, kurioje įvedami žodžiai i-2 ir i-1, o išvestyje neuroninis tinklas numato žodį i. Atsižvelgiant į paslėptų sluoksnių skaičių ir juose esančių neuronų skaičių, apmokytas tinklas gali būti saugomas kaip tankios santykinai mažo matmens matricos. Kitaip tariant, vietoj mokomojo korpuso ir visų žodžių porų jame gali būti saugomos tik kelios matricos ir unikalių žodžių sąrašas. Tačiau toks neuroninės kalbos modelis neleidžia atsižvelgti į ilgus ryšius tarp žodžių. Šią problemą išsprendžia pasikartojantys neuroniniai tinklai (3 pav.), kuriuose paslėpto sluoksnio vidinė būsena ne tik atnaujinama po to, kai į įvestį patenka naujas žodis, bet ir perkeliama į kitą žingsnį. Taigi, paslėptas pasikartojančio tinklo sluoksnis priima dviejų tipų įvestis: paslėpto sluoksnio būseną ankstesniame žingsnyje ir naują žodį. Jei pasikartojantis neuroninis tinklas apdoroja sakinį, tada paslėptos būsenos leidžia įsiminti ir perduoti ilgus sakinių ryšius. Buvo ne kartą eksperimentiškai patikrinta, kad pasikartojantys neuroniniai tinklai atsimena subjekto lytį sakinyje ir, generuodami sakinį, pasirenka teisingus įvardžius (ji - ji, jis - jo), tačiau aiškiai parodo, kaip tiksliai tokia informacija yra saugoma sakinyje. neuroninis tinklas arba kaip jis naudojamas , vis dar nepavyko.

Pasikartojantys neuroniniai tinklai taip pat naudojami teksto klasifikavimui. Šiuo atveju tarpinių žingsnių išėjimai nenaudojami, o paskutinė neuroninio tinklo išvestis grąžina numatytą klasę. Šiandien dvikrypčiai (paslėptą būseną perduodantys ne tik „į dešinę“, bet ir „į kairę“) pasikartojantys tinklai, paslėptame sluoksnyje turintys kelias dešimtis neuronų, tapo standartiniu įrankiu sprendžiant teksto ir sekų klasifikavimo problemas, kaip taip pat teksto generavimą ir iš esmės pakeitė kitus algoritmus .

Pasikartojančių neuroninių tinklų kūrimas tapo Seq2seq tipo architektūromis, susidedančiomis iš dviejų sujungtų pasikartojančių tinklų, kurių vienas yra atsakingas už įvesties atvaizdavimą ir analizę (pavyzdžiui, klausimo ar sakinio viena kalba), o antrasis – už generavimą. išvestis (atsakymas ar sakinys kita kalba) . Seq2seq tinklai yra šiuolaikinių klausimų ir atsakymų sistemų, pokalbių robotų ir mašininio vertimo sistemų pagrindas.

Be konvoliucinių neuroninių tinklų, teksto analizei naudojami vadinamieji autokoderiai, kurie naudojami, pavyzdžiui, efektams sukurti vaizdams Photoshop ar Instagram programoje ir rado pritaikymą lingvistikoje matmenų mažinimo (ieškant projekcijos) problemą. vektoriaus, vaizduojančio tekstą į žemesnio matmens erdvę). Projekcija į dvimatę erdvę leidžia pavaizduoti tekstą kaip tašką plokštumoje ir leidžia vizualiai pavaizduoti tekstų rinkinį kaip taškų rinkinį, tai yra, tai yra išankstinės analizės priemonė prieš sugrupuojant ar klasifikuojant. tekstų. Skirtingai nuo klasifikavimo užduoties, matmenų mažinimo užduotis neturi aiškių kokybės kriterijų, tačiau vaizdai, gauti naudojant automatinius kodavimo įrenginius, atrodo gana „įtikinamai“. Matematiniu požiūriu autokoderis yra neprižiūrimas neuroninis tinklas, kuris išmoksta tiesinę funkciją f(x) = x ir susideda iš dviejų dalių: kodavimo ir dekoderio. Kodavimo įrenginys yra tinklas su keliais paslėptais sluoksniais su mažėjančiu neuronų skaičiumi. Dekoderis yra panašus tinklas su didėjančiu neuronų skaičiumi. Juos jungia paslėptas sluoksnis, kuriame yra tiek neuronų, kiek turėtų būti matmenų naujoje žemesnio matmens erdvėje, ir būtent šis sluoksnis yra atsakingas už matmenų mažinimą. Kaip ir konvoliuciniai neuroniniai tinklai, autokoderis neturi jokios kalbinės interpretacijos, todėl jį galima laikyti ne analitiniu, o inžineriniu įrankiu.

Nepaisant įspūdingų rezultatų, neuroninis tinklas negali būti laikomas savarankišku įrankiu teksto analizei (kalbos modelių paieškai), juo labiau tekstui suprasti. Taip, neuroniniai tinklai leidžia rasti paslėptus ryšius tarp žodžių ir atrasti šablonus tekstuose, tačiau kol šie ryšiai nebus pateikti interpretuojama forma, neuroniniai tinklai išliks gana trivialiais mašininio mokymosi įrankiais. Be to, gilus mokymasis dar nėra paklausus pramoniniuose analitiniuose sprendimuose, nes reikalauja nepagrįstų duomenų paruošimo išlaidų ir rezultatų nenuspėjamumo. Netgi mokslininkų bendruomenė kritikuoja bandymus neuroninius tinklus paversti universalia priemone. 2015 m. Chrisas Manningas, Stenfordo skaičiavimo lingvistikos grupės vadovas ir ACL prezidentas, aiškiai išdėstė neuroninių tinklų pritaikomumą. Į jį įtraukė teksto klasifikavimo, sekos klasifikavimo ir matmenų mažinimo užduotis. Tačiau dėl gilaus mokymosi rinkodaros ir populiarinimo dėmesys pačiai kompiuterinei lingvistikai ir jos naujoms programoms išaugo.

Literatūra

  1. Tomas Mikolov ir kt. al. Efektyvus žodžių vaizdų vektorinėje erdvėje įvertinimas, arxiv.org. URL: http://arxiv.org/pdf/1301.3781.pdf
  2. Levy Omer, Yoav Goldberg, Ido Dagan. Paskirstymo panašumo su žodžių įterpimo pamokomis gerinimas. Kompiuterinės lingvistikos asociacijos sandoriai 3. - 2015. - P. 211–225. URL: https://www.transacl.org/ojs/index.php/tacl/article/view/570/124 (prieigos data: 2017-05-18).
  3. Pavelas Velikhovas. Mašininis mokymasis natūralios kalbos supratimui // Open Systems.DBMS. - 2016. - Nr.1. - P.18–21. URL: (prieigos data: 2017-05-18).
  4. Christopheris Manningas. Kompiuterinė lingvistika ir gilus mokymasis. Kompiuterinė lingvistika. – 2016 m. URL: http://www.mitpressjournals.org/doi/full/10.1162/COLI_a_00239#.WQH8MBhh2qA (prieigos data: 2017-05-18).

Dmitrijus Ilvovskis ([apsaugotas el. paštas]) - Tarptautinės intelektualių sistemų ir struktūrinės analizės laboratorijos darbuotojas, Jekaterina Černiak ([apsaugotas el. paštas]) - Nacionalinio tyrimų universiteto Aukštosios ekonomikos mokyklos (Maskva) Informatikos fakulteto Tęstinio mokymo centro mokytoja. Darbas atliktas pagal Nacionalinio mokslo universiteto aukštosios ekonomikos mokyklos Pagrindinių tyrimų programą.



“ (Įgulos leidiniai).

Straipsnis skirtas žmonėms, kurie jau turi didelę giluminio mokymosi patirtį (pavyzdžiui, tiems, kurie jau perskaitė šios knygos 1-8 skyrius). Manoma, kad yra daug žinių.

Gilus mokymasis: geometrinis vaizdas

Pats nuostabiausias gilaus mokymosi dalykas yra tai, koks jis paprastas. Prieš dešimt metų niekas negalėjo įsivaizduoti, kokių nuostabių rezultatų pasieksime sprendžiant mašininio suvokimo problemas, naudodami paprastus parametrinius modelius, treniruojamus nuo gradiento. Dabar paaiškėjo, kad viskas, ko mums reikia, yra užtektinai didelis apmokyti parametriniai modeliai užtektinai didelis mėginių skaičius. Kaip Feynmanas kartą pasakė apie Visatą: Tai nėra sudėtinga, tiesiog yra daug».

Giluminiame mokyme viskas yra vektorius, ty taškas V geometrinė erdvė. Modelio įvesties duomenys (tai gali būti tekstas, vaizdai ir t.t.) ir jo taikiniai pirmiausia yra „vektorizuojami“, tai yra verčiami į tam tikrą pradinę vektorinę erdvę kaip įvestis ir tikslinę vektorinę erdvę kaip išvestis. Kiekvienas gilaus mokymosi modelio sluoksnis atlieka vieną paprastą geometrinę transformaciją duomenims, kurie praeina per jį. Kartu modelio sluoksnių grandinė sukuria vieną labai sudėtingą geometrinę transformaciją, suskaidytą į keletą paprastų. Šia sudėtinga transformacija bandoma transformuoti įvesties duomenų erdvę į kiekvieno taško tikslinę erdvę. Transformacijos parametrus lemia sluoksnių svoriai, kurie nuolat atnaujinami atsižvelgiant į modelio našumą šiuo metu. Pagrindinė geometrinės transformacijos savybė yra ta, kad ji turi būti skiriasi, tai yra, turėtume sugebėti sužinoti jo parametrus per gradiento nusileidimą. Intuityviai tai reiškia, kad geometrinis keitimas turi būti sklandus ir nenutrūkstamas – tai svarbus apribojimas.

Visą šios sudėtingos geometrinės transformacijos taikymo įvesties duomenims procesą galima vizualizuoti 3D formatu, vaizduojant žmogų, bandantį išvynioti popierinį rutulį: suglamžytas popieriaus rutulys yra įvairių įvesties duomenų, su kuriais modelis pradeda dirbti, įvairovė. Kiekvienas žmogaus judesys su popieriniu kamuoliuku yra tarsi paprasta geometrinė transformacija, kurią atlieka vienas sluoksnis. Visa išskleidžiamų gestų seka yra sudėtinga viso modelio transformacija. Giluminio mokymosi modeliai yra matematinės mašinos, leidžiančios atskleisti sudėtingą daugiamačių duomenų įvairovę.

Tai gilaus mokymosi magija: vertės pavertimas vektoriais, geometrinėmis erdvėmis, o tada palaipsniui mokomasi sudėtingų geometrinių transformacijų, kurios vieną erdvę paverčia kita. Viskas, ko reikia, yra pakankamai didelės erdvės, kad būtų galima perteikti visą pradiniuose duomenyse esančių ryšių spektrą.

Giluminio mokymosi apribojimai

Problemų, kurias galima išspręsti naudojant šią paprastą strategiją, spektras yra beveik begalinis. Ir vis dėlto daugelis iš jų vis dar nepasiekiami dabartinių giluminio mokymosi metodų – net nepaisant to, kad yra daugybė rankiniu būdu anotuotų duomenų. Tarkime, pavyzdžiui, galite surinkti duomenų rinkinį iš šimtų tūkstančių – net milijonų – produktų vadybininkų parašytų programinės įrangos funkcijų aprašymų anglų kalba, taip pat atitinkamus ataskaitinius metus, kuriuos sukūrė inžinierių komandos, kad atitiktų šiuos reikalavimus. Net ir turėdami šiuos duomenis, negalite išmokyti gilaus mokymosi modelio tiesiog perskaityti produkto aprašymą ir sugeneruoti atitinkamą kodų bazę. Tai tik vienas iš daugelio pavyzdžių. Apskritai viskas, kas reikalauja samprotavimų, pavyzdžiui, programavimas ar mokslinio metodo taikymas, ilgalaikis planavimas, algoritminio stiliaus duomenų manipuliavimas, yra už gilaus mokymosi modelių galimybių ribų, nesvarbu, kiek duomenų jiems metate. Netgi neuroninio tinklo išmokymas atlikti rūšiavimo algoritmą yra neįtikėtinai sudėtinga užduotis.

Priežastis ta, kad gilaus mokymosi modelis yra „tik“ paprastų, nenutrūkstamų geometrinių transformacijų grandinė, kurios vieną vektorinę erdvę paverčia kita. Viskas, ką ji gali padaryti, tai paversti vieną duomenų rinkinį X į kitą rinkinį Y, su sąlyga, kad yra galimas nuolatinis transformavimas iš X į Y, kurį galima išmokti, ir prieinamumas. tankus mėginių rinkinys X:Y transformacijos kaip mokymo duomenys. Taigi, nors gilaus mokymosi modelis gali būti laikomas programos tipu, dauguma programų negali būti išreikštos kaip gilaus mokymosi modeliai- daugeliui problemų arba nėra praktiškai tinkamo dydžio giluminio neuroninio tinklo, kuris išspręstų problemą, arba jei toks yra, tai gali būti nemokoma, tai yra, atitinkama geometrinė transformacija gali būti per sudėtinga arba nėra tinkamų duomenų jai išmokyti.

Esamų gilaus mokymosi metodų mastelio padidinimas – pridedant daugiau sluoksnių ir naudojant daugiau mokymo duomenų – kai kurias iš šių problemų galima sušvelninti tik paviršutiniškai. Tai neišspręs svarbesnės problemos, kad giluminio mokymosi modeliai yra labai riboti tuo, ką jie gali reprezentuoti, ir kad daugumos programų negalima išreikšti kaip nuolatinį geometrinį duomenų rinkinių keitimą.

Mašininio mokymosi modelių antropomorfizavimo rizika

Viena iš labai realių šiuolaikinio AI pavojų yra klaidingas giluminio mokymosi modelių veikimo aiškinimas ir jų galimybių perdėjimas. Pagrindinis žmogaus proto bruožas yra „žmogaus psichikos modelis“, mūsų polinkis projektuoti tikslus, įsitikinimus ir žinias apie mus supančius dalykus. Besišypsančio veido piešinys ant akmens staiga padaro mus „laimingus“ – protiškai. Taikant giluminį mokymąsi, tai, pavyzdžiui, reiškia, kad jei galime daugiau ar mažiau sėkmingai išmokyti modelį generuoti tekstinius paveikslėlių aprašymus, tada esame linkę manyti, kad modelis „supranta“ vaizdų turinį, taip pat sugeneruotus aprašymus. Tada labai nustembame, kai dėl nedidelio nukrypimo nuo treniruočių duomenyse pateiktų vaizdų rinkinio modelis pradeda generuoti absoliučiai absurdiškus aprašymus.

Tai ypač akivaizdu „priešingų pavyzdžiuose“, kurie yra gilaus mokymosi tinklo įvesties duomenų pavyzdžiai, kurie specialiai atrinkti, kad būtų neteisingai klasifikuojami. Jau žinote, kad įvesties duomenų erdvėje galite atlikti gradiento kilimą, kad generuotumėte pavyzdžius, kurie maksimaliai suaktyvina, pavyzdžiui, tam tikrą konvoliucinio neuroninio tinklo filtrą – tai yra vizualizacijos technikos, kurią aptarėme 5 skyriuje (pastaba: knygos). „Deep Learning with Python“) , kaip ir Deep Dream algoritmas iš 8 skyriaus. Panašiai, naudodami gradiento kilimą, galite šiek tiek pakeisti vaizdą, kad maksimaliai padidintumėte tam tikros klasės klasės numatymą. Jei nufotografuosime pandą ir pridėsime „gibono“ gradientą, galime priversti neuroninį tinklą priskirti tą pandą gibonui. Tai parodo ir šių modelių trapumą, ir didžiulį skirtumą tarp įvesties ir išvesties transformacijos, kuria vadovaujasi, ir mūsų pačių žmogaus suvokimo.

Apskritai gilaus mokymosi modeliai nesupranta įvesties duomenų, bent jau ne žmogiškąja prasme. Mūsų pačių vaizdų, garsų, kalbos supratimas grindžiamas mūsų, kaip žmonių – kaip materialių žemiškų būtybių, sensomotorine patirtimi. Mašininio mokymosi modeliai neturi prieigos prie tokios patirties ir todėl negali „suprasti“ mūsų įvesties duomenų jokiu žmogaus būdu. Anotuodami daugybę pavyzdžių, kuriuos reikia mokyti savo modeliams, mes priverčiame juos išmokti geometrinės transformacijos, kuri redukuoja duomenis iki žmogaus sąvokų tam konkrečiam pavyzdžių rinkiniui, tačiau ši transformacija yra tik supaprastintas mūsų proto pirminio modelio eskizas. sukurta iš mūsų patirties, nes kūno veiksniai yra tarsi silpnas atspindys veidrodyje.

Kaip mašininio mokymosi praktikas, visada turėkite tai omenyje ir niekada nepakliūkite į spąstus manydami, kad neuroniniai tinklai supranta atliekamą užduotį – jie to nesupranta, bent jau ne taip, kaip mums būtų prasminga. Jie buvo apmokyti atlikti kitokią, daug konkretesnę užduotį nei ta, kuriai mes norime juos mokyti: tiesiog transformuoti įvesties mokymosi modelius į tikslinius mokymosi modelius, taškas į tašką. Parodykite jiems viską, kas skiriasi nuo treniruočių duomenų, ir jie suges pačiais absurdiškiausiais būdais.

Vietinis apibendrinimas prieš kraštutinį apibendrinimą

Atrodo, kad yra esminių skirtumų tarp tiesioginio geometrinio perėjimo nuo įvesties iki išvesties, kurį atlieka gilaus mokymosi modeliai, ir žmonių mąstymo bei mokymosi būdo. Tai ne tik tai, kad žmonės mokosi iš savo kūno patirties, o ne apdorodami mokymo pavyzdžių rinkinį. Be mokymosi procesų skirtumų, esminių skirtumų yra ir pagrindinių įsitikinimų prigimtyje.

Žmonės gali daug daugiau nei tiesioginį stimulą paversti tiesiogine reakcija, pavyzdžiui, neuroniniu tinklu ar galbūt vabzdžiu. Žmonės mintyse laiko sudėtingus, abstrakčius esamos situacijos, savęs ir kitų žmonių modelius ir gali naudoti šiuos modelius įvairioms galimoms ateities prognozėms ir ilgalaikiam planavimui. Jie sugeba derinti žinomas sąvokas, kad įsivaizduotų tai, ko niekada anksčiau nežinojo – pavyzdžiui, nupieštų arklį su džinsais arba įsivaizduotų, ką darytų loterijoje. Gebėjimas mąstyti hipotetiškai, išplėsti savo psichinės erdvės modelį toli už tai, ką mes tiesiogiai patyrėme, tai yra gebėjimas daryti abstrakcijos Ir samprotavimus, ko gero, lemiamas žmogaus pažinimo bruožas. Aš tai vadinu „galutiniu apibendrinimu“: gebėjimu prisitaikyti prie naujų, niekada anksčiau nepatirtų situacijų naudojant mažai duomenų arba jų visai nėra.

Tai visiškai prieštarauja gilaus mokymosi tinklų veiklai, kurią pavadinčiau „vietiniu apibendrinimu“: įvesties duomenų pavertimas išvesties duomenimis greitai nebetenka prasmės, jei nauji įvesties duomenys net šiek tiek skiriasi nuo tų, su kuriais susidūrė treniruočių metu. Apsvarstykite, pavyzdžiui, atitinkamų raketos, kuri turėtų nusileisti Mėnulyje, paleidimo parametrų problemą. Jei šiai užduočiai naudotumėte neuroninį tinklą, prižiūrimą ar apmokytą, jums reikės pateikti tūkstančius ar milijonus skrydžio trajektorijų, tai yra, jums reikės sukurti tankus pavyzdžių rinkinysįvesties reikšmių erdvėje, kad sužinotumėte, kaip patikimai transformuotis iš įvesties reikšmių erdvės į išvesties reikšmių erdvę. Priešingai, žmonės gali panaudoti abstrakcijos galią kurdami fizinius modelius – raketų mokslą – ir rasti tikslų sprendimą, kuris vos keliais bandymais nuves raketą į Mėnulį. Lygiai taip pat, jei sukurtumėte neuroninį tinklą, skirtą valdyti žmogaus kūną ir norite, kad jis išmoktų saugiai vaikščioti per miestą, nepatrenkiant automobilio, tinklas turėtų mirti daugybę tūkstančių kartų įvairiose situacijose. padarytų išvadą, kad automobiliai yra pavojingi ir sugenda. tinkamą elgesį jų išvengti. Jei jis būtų perkeltas į naują miestą, tinklas turėtų iš naujo išmokti didžiąją dalį to, ką žinojo. Kita vertus, žmonės gali išmokti saugaus elgesio niekada nemirdami – vėlgi, dėl abstrakčios hipotetinių situacijų modeliavimo galios.

Taigi, nepaisant mūsų pažangos mašininio suvokimo srityje, mes vis dar labai toli nuo žmogaus lygio AI: mūsų modeliai gali tik veikti lokalus apibendrinimas, prisitaikant prie naujų situacijų, kurios turi būti labai artimos praeities duomenims, o žmogaus protas yra pajėgus kraštutinis apibendrinimas, greitai prisitaikantis prie visiškai naujų situacijų ar planuojantis toli į ateitį.

išvadas

Štai ką reikia atsiminti: kol kas vienintelė tikroji gilaus mokymosi sėkmė yra galimybė išversti X erdvę į Y erdvę naudojant nuolatinę geometrinę transformaciją, atsižvelgiant į didelį žmogaus anotuotų duomenų kiekį. Tai darant gerai reiškia revoliucinį visos pramonės pažangą, tačiau žmogaus lygmens AI dar toli.

Norėdami pašalinti kai kuriuos iš šių apribojimų ir pradėti konkuruoti su žmogaus smegenimis, turime atsisakyti tiesioginės įvesties į išvestį konversijos ir pereiti prie samprotavimus Ir abstrakcijos. Kompiuterinės programos gali būti tinkamas pagrindas abstrakčiai modeliuoti įvairias situacijas ir sąvokas. Jau anksčiau sakėme (pastaba: Deep Learning with Python), kad mašininio mokymosi modelius galima apibrėžti kaip „programas, kurios mokosi“; šiuo metu galime parengti tik siaurą ir specifinį visų galimų programų pogrupį. Bet kas, jei galėtume mokyti kiekvieną programą moduliniu būdu ir kartotiniu būdu? Pažiūrėkime, kaip mes galime ten patekti.

Gilaus mokymosi ateitis

Atsižvelgiant į tai, ką žinome apie giluminio mokymosi tinklus, jų apribojimus ir dabartinę tyrimų būklę, ar galime numatyti, kas nutiks vidutiniu laikotarpiu? Štai keletas mano asmeninių minčių šiuo klausimu. Turėkite omenyje, kad aš neturiu krištolinio rutulio prognozėms, todėl daugelis to, ko tikiuosi, gali neišsipildyti. Tai visiška spekuliacija. Dalinuosi šiomis prognozėmis ne todėl, kad tikiuosi, kad jos visiškai išsipildys ateityje, o todėl, kad jos įdomios ir pritaikomos dabarčiai.

Kalbant apie aukštą lygį, čia yra pagrindinės sritys, kurias laikau perspektyviomis:

  • Modeliai priartės prie bendrosios paskirties kompiuterinių programų, sukurtų ant daug turtingesnių primityvų nei mūsų dabartiniai diferencijuojami sluoksniai – taigi mes gausime samprotavimus Ir abstrakcijos, kurio nebuvimas yra esminė dabartinių modelių silpnybė.
  • Atsiras naujų mokymosi formų, kurios leis tai padaryti įmanomą ir leis modeliams nutolti nuo tiesiog skirtingų transformacijų.
  • Modeliams reikės mažiau kūrėjo indėlio – nuolat sukti rankenėles neturėtų būti jūsų darbas.
  • Bus daugiau, sistemingai pakartotinai naudojamos išmoktos funkcijos ir architektūros; meta-mokymosi sistemos, pagrįstos daugkartinio naudojimo ir modulinėmis rutinomis.
Be to, atkreipkite dėmesį, kad šios aplinkybės netaikomos konkrečiai prižiūrimam mokymuisi, kuris vis dar yra mašininio mokymosi pagrindas – jie taip pat taikomi bet kokiai mašininio mokymosi formai, įskaitant mokymąsi neprižiūrimą, prižiūrimą mokymąsi ir mokymąsi sustiprinant. Iš esmės nesvarbu, iš kur kilusios jūsų etiketės ar kaip atrodo jūsų mokymosi ciklas; šios skirtingos mašininio mokymosi šakos yra tiesiog skirtingi tos pačios konstrukcijos aspektai.

Taigi pirmyn.

Modeliai kaip programos

Kaip minėjome anksčiau, būtinas transformacinis vystymasis, kurio galima tikėtis mašininio mokymosi srityje, yra perėjimas nuo modelių, kurie veikia tik modelio atpažinimas ir gali tik lokalus apibendrinimas, modeliams, galintiems abstrakcijos Ir samprotavimus kad gali pasiekti galutinis apibendrinimas. Visos dabartinės AI programos su pagrindiniais argumentais yra sunkiai užkoduotos žmonių programuotojų: pavyzdžiui, programos, kurios remiasi paieškos algoritmais, manipuliavimu grafikais, formalia logika. Pavyzdžiui, „DeepMind“ programoje „AlphaGo“ didžiąją dalį ekrane esančio „žvalgybos“ suprojektuoja ir užkoduoja profesionalūs programuotojai (pavyzdžiui, Monte Karlo medžio paieška); Mokymasis iš naujų duomenų vyksta tik specializuotuose submoduliuose – vertybių tinkluose ir politikos tinkluose. Tačiau ateityje tokios AI sistemos galėtų būti apmokytos visiškai be žmogaus įsikišimo.

Kaip tai pasiekti? Paimkime gerai žinomą tinklo tipą: RNN. Svarbu tai, kad RNN turi šiek tiek mažiau apribojimų nei grįžtamojo ryšio neuroniniai tinklai. Taip yra todėl, kad RNN yra šiek tiek daugiau nei paprastos geometrinės transformacijos: tai yra geometrinės transformacijos, kurios nuolat vykdoma for kilpoje. For ciklo laiką nurodo kūrėjas: tai yra įmontuota tinklo prielaida. Natūralu, kad RNN vis dar yra ribotas, ką jie gali pavaizduoti, daugiausia todėl, kad kiekvienas jų atliktas žingsnis vis dar yra diferencijuota geometrinė transformacija ir dėl to, kaip jie žingsnis po žingsnio perduoda informaciją per taškus ištisinėje geometrinėje erdvėje (būsenos vektoriai). Dabar įsivaizduokite neuroninius tinklus, kurie būtų „padauginti“ programavimo primityvais taip pat, kaip ir kilpų, bet ne tik vieną užkoduotą kilpą su susiūta geometrine atmintimi, bet didelį programavimo primityvų rinkinį, kurį modelis galėtų laisvai pasiekti. išplėsti savo galimybes, apdorojimo galimybes, pvz., filialus, sakinius, kintamųjų kūrimą, ilgalaikės atminties disko saugyklą, rūšiavimo operatorius, pažangias duomenų struktūras, pvz., sąrašus, grafikus, maišos lenteles ir daug daugiau. Programų erdvė, kurią gali atstovauti toks tinklas, bus daug platesnė, nei gali išreikšti esami giluminio mokymosi tinklai, o kai kurios iš šių programų gali pasiekti geresnę apibendrinimo galią.

Trumpai tariant, mes nutolsime nuo to, kad, viena vertus, turime „kietai koduotą algoritminį intelektą“ (ranka parašyta programinė įranga), kita vertus, „išlavintą geometrinį intelektą“ (gilus mokymasis). Vietoj to, mes turėsime formalių algoritminių modulių, suteikiančių galimybes, mišinį samprotavimus Ir abstrakcijos, ir geometriniai moduliai, suteikiantys galimybes neformali intuicija ir modelio atpažinimas. Visa sistema bus apmokyta be žmogaus įsikišimo arba be jo.

Susijusi AI sritis, kuri, mano manymu, netrukus gali pasiekti didelių pažangų programinės įrangos sintezė, ypač neuroninės programinės įrangos sintezė. Programų sintezė susideda iš automatinio paprastų programų generavimo naudojant paieškos algoritmą (galbūt genetinę paiešką, kaip ir genetiniame programavime), siekiant ištirti didelę galimų programų erdvę. Paieška sustabdoma, kai randama programa, kuri atitinka reikiamas specifikacijas, dažnai pateikiamas kaip įvesties-išvesties porų rinkinys. Kaip matote, tai labai panašu į mašininį mokymąsi: „mokymo duomenys“ pateikiami kaip įvesties-išvesties poros, randame „programą“, atitinkančią įvesties transformaciją į išvestis ir galinčią apibendrinti naujus įvestis. Skirtumas tas, kad vietoj treniruočių parametrų reikšmių sunkiai užkoduotoje programoje (neuroniniame tinkle) generuojame šaltinis per atskirą paieškos procesą.

Tikrai tikiuosi, kad per ateinančius kelerius metus vėl bus daug susidomėjimo šia sritimi. Visų pirma tikiuosi abipusio įsiskverbimo į susijusias giluminio mokymosi ir programinės įrangos sintezės sritis, kuriose ne tik generuosime programas bendrosios paskirties kalbomis, bet ir kursime neuroninius tinklus (geometrinių duomenų apdorojimo gijas), papildyta turtingas algoritminių primityvų rinkinys, pvz., kilpoms, ir daugelis kitų. Tai turėtų būti daug patogiau ir naudingiau nei tiesioginis šaltinio kodo generavimas ir žymiai praplės problemų, kurias galima išspręsti naudojant mašininį mokymąsi, sritį – programų erdvę, kurias galime generuoti automatiškai, turėdami atitinkamus mokymo duomenis. Simbolinio AI ir geometrinio AI mišinys. Šiuolaikiniai RNN gali būti laikomi istoriniais tokių hibridinių algoritminių-geometrinių modelių protėviais.


Brėžinys: Apmokoma programa vienu metu remiasi geometriniais primityvais (modelio atpažinimas, intuicija) ir algoritminiais primityvais (argumentacija, paieška, atmintis).

Be atgalinio dauginimo ir skirtingų sluoksnių

Jei mašininio mokymosi modeliai taps panašesni į programas, vargu ar jie bus diferencijuojami – be abejo, tos programos vis tiek naudos ištisinius geometrinius sluoksnius kaip paprogrames, kurios išliks diferencijuojamos, tačiau bendras modelis nebus. Dėl to atgalinio sklidimo naudojimas svorio vertėms koreguoti fiksuotame, sunkiai užkoduotame tinkle ateityje gali likti nepageidautinas mokymo modelių metodas – bent jau jis neturėtų apsiriboti vien šiuo metodu. Turime išsiaiškinti, kaip efektyviausiai išmokyti nediferencijuojamas sistemas. Dabartiniai metodai apima genetinius algoritmus, „evoliucines strategijas“, tam tikrus sustiprinimo mokymosi metodus, ADMM (kintamos krypties Lagranžo daugiklių metodą). Natūralu, kad gradiento nusileidimas išliks – informacija apie gradientą visada bus naudinga optimizuojant diferencijuojamas parametrines funkcijas. Tačiau mūsų modeliai neabejotinai taps ambicingesni nei tik diferencijuojamos parametrinės funkcijos, todėl automatizuotam jų kūrimui („mokymui“ „mašininio mokymosi“) reikės daugiau nei atgalinio propagavimo.

Be to, atgalinis platinimas turi nuo galo iki galo sistemą, kuri yra tinkama išmokti gerų sujungtų transformacijų, tačiau yra gana neefektyvi skaičiavimo požiūriu, nes ne iki galo išnaudoja giliųjų tinklų moduliškumą. Norint padidinti bet ko efektyvumą, yra vienas universalus receptas: įvesti moduliškumą ir hierarchiją. Taigi, patį atgalinį propagavimą galime padaryti efektyvesnį, įvesdami atsietus mokymosi modulius su tam tikru sinchronizavimo mechanizmu, organizuotu hierarchiniu būdu. Ši strategija iš dalies atsispindi naujausiame „DeepMind“ darbe apie „sintetinius gradientus“. Netolimoje ateityje tikiuosi daug, daug daugiau darbo šia kryptimi.

Galima įsivaizduoti ateitį, kai pasauliniu mastu nediferencijuojami modeliai (bet su diferencijuojamomis dalimis) mokysis – augs – naudodami veiksmingą paieškos procesą, kuriame netaikomi gradientai, o diferencijuojamos dalys mokysis dar greičiau, naudodamos gradientus, naudojant kai kurias efektyvesnes atgalinio dauginimo versijas.

Automatizuotas mašininis mokymasis

Architektūros ateityje modeliai bus kuriami mokantis, o ne rašomi ranka inžinierių. Gauti modeliai automatiškai suporuojami su gausesniu primityvų ir į programas panašių mašininio mokymosi modelių rinkiniu.

Šiais laikais didžiąją laiko dalį giluminio mokymosi sistemos kūrėjas be galo modifikuoja duomenis naudodamas Python scenarijus, tada ilgą laiką praleidžia derindamas giliojo mokymosi tinklo architektūrą ir hiperparametrus, kad gautų veikiantį modelį arba net puikų modelį, jei kūrėjas. yra toks ambicingas. Nereikia nė sakyti, kad tai nėra pati geriausia padėtis. Tačiau AI gali padėti ir čia. Deja, duomenų apdorojimo ir paruošimo dalis yra sunkiai automatizuojama, nes tam dažnai reikia domeno žinių ir aiškaus, aukšto lygio supratimo, ko kūrėjas nori pasiekti. Tačiau hiperparametrų derinimas yra paprasta paieškos procedūra, ir šiuo atveju mes jau žinome, ką kūrėjas nori pasiekti: tai lemia neuroninio tinklo praradimo funkcija, kurią reikia derinti. Dabar jau tapo įprasta diegti pagrindines AutoML sistemas, kurios pasirūpina didžiąja modelio nustatymų koregavimu. Pats įrengiau vieną, kad laimėčiau Kaggle konkursą.

Paprasčiausiu lygiu tokia sistema tiesiog pakoreguotų sluoksnių skaičių krūvoje, jų tvarką ir elementų arba filtrų skaičių kiekviename sluoksnyje. Paprastai tai daroma naudojant tokias bibliotekas kaip Hyperopt, apie kurią mes kalbėjome 7 skyriuje (pastaba: knygos „Gilus mokymasis naudojant Python“). Tačiau galite eiti daug toliau ir pabandyti išmokti tinkamą architektūrą nuo nulio, taikydami minimalius apribojimus. Tai įmanoma, pavyzdžiui, naudojant sustiprinimo mokymąsi arba naudojant genetinius algoritmus.

Kita svarbi AutoML kūrimo kryptis – modelių architektūros mokymas kartu su modelių svoriais. Mokydamiesi modelį nuo nulio, kiekvieną kartą išbandome šiek tiek skirtingas architektūras, o tai yra labai neefektyvu, todėl tikrai galinga AutoML sistema valdys architektūrų evoliuciją, o modelio ypatybės bus derinamos naudojant mokomuosius duomenis, taip pašalinant visas skaičiavimo išlaidas. Kai rašau šias eilutes, panašūs metodai jau pradėti taikyti.

Kai visa tai pradės vykti, mašininio mokymosi sistemų kūrėjai neliks be darbo – jie pereis į aukštesnį vertės grandinės lygį. Jie pradės dėti daug daugiau pastangų kurdami sudėtingas nuostolių funkcijas, kurios iš tikrųjų atspindi verslo tikslus, ir giliai supras, kaip jų modeliai veikia skaitmenines ekosistemas, kuriose jie veikia (pavyzdžiui, klientai, kurie naudoja modelių prognozes ir generuoja duomenis jos mokymas) – problemos, kurias dabar gali sau leisti svarstyti tik didžiausios įmonės.

Mokymasis visą gyvenimą ir pakartotinis modulinių rutinų naudojimas

Jei modeliai taps sudėtingesni ir bus sukurti remiantis turtingesniais algoritminiais primityvais, dėl šio padidėjusio sudėtingumo reikės intensyvesnio pakartotinio užduočių naudojimo, o ne kiekvieną kartą, kai turėsime naują užduotį ar naują duomenų rinkinį, treniruoti modelį nuo nulio. Galiausiai daugelyje duomenų rinkinių nėra pakankamai informacijos, kad būtų galima sukurti naują sudėtingą modelį nuo nulio, todėl reikės naudoti informaciją iš ankstesnių duomenų rinkinių. Kaskart atsivertęs naują knygą anglų kalbos neišmoksite iš naujo – tai būtų neįmanoma. Be to, mokymo modeliai nuo nulio dėl kiekvienos naujos problemos yra labai neveiksmingi, nes dabartinės ir anksčiau iškilusios problemos labai sutampa.

Be to, pastaraisiais metais ne kartą buvo pastebėta, kad to paties modelio mokymas atlikti kelias laisvai susijusias užduotis pagerina jo našumą. kiekvienoje iš šių užduočių. Pavyzdžiui, išmokus tą patį neuroninį tinklą versti iš anglų į vokiečių ir iš prancūzų į italų kalbą, bus sukurtas geresnis modelis kiekvienoje iš šių kalbų porų. Mokant vaizdų klasifikavimo modelį kartu su vaizdų segmentavimo modeliu, turinčiu vieną konvoliucinę bazę, bus sukurtas modelis, kuris geriau atliks abi užduotis. Ir taip toliau. Tai gana intuityvu: visada yra kažkokia informacija, kuri sutampa tarp šių dviejų iš pažiūros skirtingų užduočių, todėl bendras modelis turi prieigą prie daugiau informacijos apie kiekvieną atskirą užduotį nei modelis, kuris buvo išmokytas atlikti tik tą konkrečią užduotį.

Tai, ką mes iš tikrųjų darome, kai pakartotinai naudojame modelį skirtingoms užduotims, yra naudoti iš anksto paruoštus svorius modeliams, kurie atlieka įprastas funkcijas, pvz., vizualinių funkcijų ištraukimą. Praktiškai tai matėte 5 skyriuje. Tikiuosi, kad ateityje bus plačiai naudojama bendresnė šios technikos versija: naudosime ne tik anksčiau išmoktas funkcijas (submodelių svarmenis), bet ir modelių architektūras bei mokymo procedūras. Kai modeliai taps panašesni į programas, pradėsime juos naudoti pakartotinai paprogramės, kaip ir funkcijos ir klasės įprastomis programavimo kalbomis.

Pagalvokite, kaip šiandien atrodo programinės įrangos kūrimo procesas: kai inžinierius išsprendžia tam tikrą problemą (pavyzdžiui, HTTP užklausas Python), jis supakuoja ją kaip abstrakčią biblioteką pakartotiniam naudojimui. Ateityje su panašia problema susidūrę inžinieriai tiesiog ieško esamų bibliotekų, jas atsisiunčia ir naudoja savo projektuose. Taip pat ateityje meta-mokymosi sistemos galės surinkti naujas programas, sijodamos per pasaulinę aukšto lygio daugkartinio naudojimo blokų biblioteką. Jei sistema pradės kurti panašias kelių skirtingų užduočių eigas, ji išleis „abstrakčią“ daugkartinio naudojimo versiją ir išsaugos ją visuotinėje bibliotekoje. Šis procesas atvers galimybę abstrakcijos, būtinas komponentas norint pasiekti „galutinį apibendrinimą“: galima sakyti, kad rutina, kuri bus naudinga daugeliui užduočių ir sričių, „abstrahuoja“ kai kuriuos sprendimų priėmimo aspektus. Atrodo, kad šis „abstrakcijos“ apibrėžimas nėra abstrakcijos sąvoka kuriant programinę įrangą. Šios procedūros gali būti geometrinės (gilaus mokymosi moduliai su iš anksto paruoštais atvaizdais) arba algoritminės (arčiau bibliotekų, su kuriomis dirba šiuolaikiniai programuotojai).

Brėžinys: Meta-mokymosi sistema, kuri gali greitai sukurti konkrečioms užduotims skirtus modelius, naudojant daugkartinio naudojimo primityvus (algoritminius ir geometrinius), ir taip pasiekti „galutinį apibendrinimą“.

Rezultatas: ilgalaikė vizija

Trumpai tariant, štai mano ilgalaikė mašininio mokymosi vizija:
  • Modeliai taps panašesni į programas ir turės galimybių, kurios gerokai apims nuolatines geometrines šaltinio duomenų transformacijas, su kuriomis dabar dirbame. Galbūt šios programos bus daug artimesnės abstrakčiams mentaliniams modeliams, kuriuos žmonės laiko apie savo aplinką ir save, ir dėl savo algoritminės prigimties jos galės stipriau apibendrinti.
  • Visų pirma, modeliai bus maišomi algoritminiai moduliai su formaliais samprotavimais, ieškojimais, abstrakcijos gebėjimais – ir geometriniai moduliai su neformalia intuicija ir modelio atpažinimu. AlphaGo (sistema, kuriai reikėjo intensyvaus rankinio programavimo ir architektūros) yra ankstyvas pavyzdys, kaip gali atrodyti simbolinio ir geometrinio AI sujungimas.
  • Jie bus augti automatiškai (o ne ranka parašytas programuotojų), naudojant modulines dalis iš pasaulinės daugkartinio naudojimo programų bibliotekos – bibliotekos, kuri išsivystė asimiliuojant didelio našumo modelius iš tūkstančių ankstesnių problemų ir duomenų rinkinių. Kai metalo mokymosi sistema nustato įprastus problemų sprendimo būdus, jie konvertuojami į daugkartinio naudojimo rutinas – panašiai kaip šiuolaikinio programavimo funkcijos ir klasės – ir pridedami prie pasaulinės bibliotekos. Taip pasiekiamas gebėjimas abstrakcijos.
  • Pasaulinė biblioteka ir susijusi modelių auginimo sistema galės pasiekti tam tikrą į žmogų panašų „galutinį apibendrinimą“: susidūrusi su nauja užduotimi, nauja situacija, sistema galės surinkti naują darbo modelį šiai užduočiai. labai mažai duomenų dėl: 1) turtingų į programas panašių primityvų, kurie gerai apibendrina ir 2) didelę patirtį sprendžiant panašias problemas. Lygiai taip pat, kaip žmonės gali greitai išmokti naujo sudėtingo vaizdo žaidimo, nes jie turi ankstesnės patirties su daugeliu kitų žaidimų ir dėl to, kad ankstesnės patirties modeliai yra abstraktūs ir panašūs į programą, o ne tiesiog paverčia stimulą veiksmu.
  • Iš esmės ši nuolat besimokanti modelio kūrimo sistema gali būti interpretuojama kaip stiprus dirbtinis intelektas. Tačiau nesitikėkite, kad įvyks kažkokia išskirtinė roboto apokalipsė: tai gryna fantazija, gimusi iš ilgo sąrašo gilių nesusipratimų, susijusių su intelekto ir technologijų supratimu. Tačiau šiai kritikai čia ne vieta.

Šiandien grafikas yra vienas iš priimtiniausių būdų apibūdinti modelius, sukurtus mašininio mokymosi sistemoje. Šiuos skaičiavimo grafikus sudaro neuronų viršūnės, sujungtos sinapsės briaunomis, kurios apibūdina ryšius tarp viršūnių.

Skirtingai nuo skaliarinio centrinio ar vektorinės grafikos procesoriaus, IPU, naujo tipo procesorius, skirtas mašininiam mokymuisi, leidžia sudaryti tokius grafikus. Kompiuteris, skirtas manipuliuoti grafikais, yra ideali mašina grafikų modeliams, sukurtiems naudojant mašininį mokymąsi, apskaičiuoti.

Vienas iš paprasčiausių būdų apibūdinti mašininio intelekto procesą yra jį vizualizuoti. Graphcore kūrėjų komanda sukūrė tokių vaizdų, kurie rodomi IPU, kolekciją. Jis pagrįstas Poplar programine įranga, kuri vizualizuoja dirbtinio intelekto darbą. Šios bendrovės mokslininkai taip pat išsiaiškino, kodėl giliesiems tinklams reikia tiek daug atminties ir kokie yra problemos sprendimo būdai.

Poplar apima grafikos kompiliatorių, kuris buvo sukurtas nuo pat pradžių, kad standartines mašininio mokymosi operacijas paverstų labai optimizuotu IPU programos kodu. Tai leidžia rinkti šiuos grafikus tuo pačiu principu, kaip renkami POPNN. Bibliotekoje yra įvairių viršūnių tipų rinkinys, skirtas apibendrinti primityvai.

Grafikai yra paradigma, kuria grindžiama visa programinė įranga. Poplar, grafikai leidžia apibrėžti skaičiavimo procesą, kai viršūnės atlieka operacijas, o briaunos apibūdina ryšį tarp jų. Pavyzdžiui, jei norite pridėti du skaičius, galite apibrėžti viršūnę su dviem įvestimis (skaičiais, kuriuos norite pridėti), kai kuriais skaičiavimais (funkcija, skirta pridėti du skaičius) ir išvestį (rezultatą).

Paprastai operacijos su viršūnėmis yra daug sudėtingesnės nei aukščiau aprašytame pavyzdyje. Jie dažnai apibrėžiami mažomis programomis, vadinamomis kodavimo rinkiniais (kodiniais pavadinimais). Grafinė abstrakcija yra patraukli, nes ji nedaro prielaidų apie skaičiavimo struktūrą ir suskaido skaičiavimus į komponentus, kuriuos IPU gali naudoti veikdamas.

Poplar naudoja šią paprastą abstrakciją, kad sukurtų labai didelius grafikus, kurie vaizduojami kaip vaizdai. Programinės įrangos generavimas grafiką reiškia, kad galime pritaikyti jį pagal konkrečius skaičiavimus, kurių reikia norint užtikrinti efektyviausią IPU išteklių naudojimą.

Kompiliatorius paverčia standartines mašininio mokymosi sistemose naudojamas operacijas į labai optimizuotą IPU programos kodą. Grafikų sudarytojas sukuria tarpinį skaičiavimo grafiko vaizdą, kuris yra įdiegtas viename ar keliuose IPU įrenginiuose. Kompiliatorius gali rodyti šį skaičiavimo grafiką, todėl programa, parašyta neuroninio tinklo sistemos lygiu, rodo skaičiavimo grafiko, kuris veikia IPU, vaizdą.


Viso AlexNet treniruočių ciklo grafikas pirmyn ir atgal

Poplar grafikos kompiliatorius AlexNet aprašymą pavertė 18,7 milijono viršūnių ir 115,8 milijono briaunų skaičiavimo grafiku. Aiškiai matomas grupavimas yra stipraus ryšio tarp procesų kiekviename tinklo sluoksnyje rezultatas, kai ryšys tarp sluoksnių yra lengvesnis.

Kitas pavyzdys yra paprastas visiškai prijungtas tinklas, apmokytas MNIST, paprastas kompiuterinės vizijos duomenų rinkinys, savotiškas „labas, pasauli“ mašininio mokymosi srityje. Paprastas tinklas, skirtas tyrinėti šį duomenų rinkinį, padeda suprasti diagramas, kurias valdo Poplar programos. Integruodama grafų bibliotekas su tokiomis sistemomis kaip TensorFlow, bendrovė pateikia vieną iš paprasčiausių būdų, kaip naudoti IPU mašininio mokymosi programose.

Sukūrus grafiką naudojant kompiliatorių, jį reikia vykdyti. Tai įmanoma naudojant Graph Engine. ResNet-50 pavyzdys parodo jo veikimą.


ResNet-50 grafikas

ResNet-50 architektūra leidžia kurti giluminius tinklus iš pasikartojančių skaidinių. Procesorius turi tik vieną kartą apibrėžti šias dalis ir vėl jas iškviesti. Pavyzdžiui, conv4 lygio klasteris vykdomas šešis kartus, bet tik vieną kartą susietas su grafiku. Vaizdas taip pat parodo konvoliucinių sluoksnių formų įvairovę, nes kiekvienas turi grafiką, sudarytą pagal natūralią skaičiavimo formą.

Variklis sukuria ir valdo mašininio mokymosi modelio vykdymą naudodamas kompiliatoriaus sugeneruotą grafiką. Įdiegtas „Graph Engine“ stebi programų naudojamus IPU arba įrenginius ir į juos reaguoja.

ResNet-50 paveikslėlyje rodomas visas modelis. Šiame lygyje sunku nustatyti ryšius tarp atskirų viršūnių, todėl verta žiūrėti į padidintus vaizdus. Žemiau pateikiami kai kurie neuroninio tinklo sluoksnių skyrių pavyzdžiai.

Kodėl giliesiems tinklams reikia tiek daug atminties?

Dideli atminties pėdsakai yra vienas didžiausių giliųjų neuroninių tinklų iššūkių. Tyrėjai bando kovoti su ribotu DRAM įrenginių pralaidumu, kurį šiuolaikinės sistemos turi naudoti, kad saugotų daugybę svorių ir aktyvavimų giliame neuroniniame tinkle.

Architektūra buvo sukurta naudojant procesoriaus lustus, skirtus nuosekliam apdorojimui ir DRAM optimizavimui didelio tankio atminčiai. Šių dviejų įrenginių sąsaja yra kliūtis, dėl kurios ribojamas pralaidumas ir padidėja energijos suvartojimas.

Nors dar neturime visiško supratimo apie žmogaus smegenis ir jų veikimą, paprastai suprantama, kad didelės atskiros atminties saugyklos nėra. Manoma, kad ilgalaikės ir trumpalaikės atminties funkcija žmogaus smegenyse yra įterpta į neuronų + sinapsių struktūrą. Net paprasti organizmai, tokie kaip kirminai, kurių nervinė smegenų struktūra yra šiek tiek daugiau nei 300 neuronų, turi tam tikrą atminties funkciją.

Atminties kūrimas įprastuose procesoriuose yra vienas iš būdų apeiti atminties kliūties problemą, atrakinant didžiulį pralaidumą ir sunaudojant daug mažiau energijos. Tačiau lustinė atmintis yra brangi ir nėra skirta tikrai dideliems atminties kiekiams, kurie yra prijungti prie procesorių ir GPU, šiuo metu naudojamų giliesiems neuroniniams tinklams mokyti ir diegti.

Taigi naudinga pažvelgti į tai, kaip atmintis šiandien naudojama procesoriuose ir GPU pagrįstose gilaus mokymosi sistemose, ir paklausti savęs: kodėl jiems reikalingi tokie dideli atminties saugojimo įrenginiai, kai žmogaus smegenys puikiai veikia ir be jų?

Neuroniniams tinklams reikia atminties, kad būtų galima saugoti įvesties duomenis, svorius ir aktyvinimo funkcijas, kai įvestis sklinda per tinklą. Mokymosi metu įvesties aktyvinimas turi būti palaikomas tol, kol jis gali būti naudojamas išvesties gradientų klaidoms apskaičiuoti.

Pavyzdžiui, 50 sluoksnių ResNet tinklas turi apie 26 milijonus svorio parametrų ir apskaičiuoja 16 milijonų išankstinių aktyvavimų. Jei kiekvienam svoriui ir aktyvinimui saugoti naudojate 32 bitų plūdę, tam reikės apie 168 MB vietos. Naudodami mažesnę tikslumo vertę šiems svoriams ir aktyvinimams saugoti, šį saugojimo poreikį galėtume sumažinti perpus ar net keturis kartus.

Didelė atminties problema kyla dėl to, kad GPU remiasi duomenimis, pateikiamais kaip tankūs vektoriai. Todėl jie gali naudoti vieną instrukcijų giją (SIMD), kad pasiektų didelį skaičiavimo tankį. CPU naudoja panašius vektorinius vienetus didelio našumo skaičiavimui.

GPU sinapsės plotis yra 1024 bitai, todėl jie naudoja 32 bitų slankiojo kablelio duomenis, todėl dažnai padalija juos į lygiagrečią mini 32 pavyzdžių paketą, kad sukurtų 1024 bitų duomenų vektorius. Šis požiūris į vektorių lygiagretumą padidina aktyvinimų skaičių 32 kartus ir vietinės saugyklos, kurios talpa didesnė nei 2 GB, poreikį.

GPU ir kitos mašinos, skirtos matricinei algebrai, taip pat apkraunamos atmintis dėl svorių ar neuroninio tinklo aktyvavimo. GPU negali efektyviai atlikti mažų posūkių, naudojamų giliuose neuroniniuose tinkluose. Todėl transformacija, vadinama „redukcija“, naudojama konvertuoti šias konvoliucijas į matricos matricos dauginimą (GEMM), kurias GPU gali efektyviai apdoroti.

Papildoma atmintis taip pat reikalinga įvesties duomenims, laikinoms reikšmėms ir programos instrukcijoms saugoti. Atminties naudojimo matavimas treniruojant ResNet-50 naudojant aukščiausios klasės GPU parodė, kad tam reikia daugiau nei 7,5 GB vietinės DRAM.

Kai kas gali manyti, kad mažesnis skaičiavimo tikslumas gali sumažinti reikalingos atminties kiekį, tačiau taip nėra. Perjungdami duomenų reikšmes į pusę tikslumo svoriams ir aktyvinimams, užpildysite tik pusę SIMD vektoriaus pločio, išeikvodami pusę turimų skaičiavimo išteklių. Norėdami tai kompensuoti, kai perjungiate nuo visiško tikslumo prie pusės tikslumo GPU, turėsite padvigubinti mini partijos dydį, kad būtų pakankamai duomenų lygiagretumo, kad būtų galima naudoti visus turimus skaičiavimus. Taigi, norint pereiti prie mažesnio tikslumo svorio ir aktyvinimo GPU, vis tiek reikia daugiau nei 7,5 GB laisvos prieigos dinaminės atminties.

Kadangi reikia saugoti tiek daug duomenų, tiesiog neįmanoma jų visų sutalpinti į GPU. Kiekvienas konvoliucinio neuroninio tinklo sluoksnis turi išsaugoti išorinės DRAM būseną, įkelti kitą tinklo sluoksnį ir įkelti duomenis į sistemą. Dėl to ir taip riboto pralaidumo išorinės atminties sąsaja patiria papildomą naštą nuolat perkraunant svarstykles ir kaupiant bei atkuriant aktyvinimo funkcijas. Tai žymiai sutrumpina treniruočių laiką ir žymiai padidina energijos sąnaudas.

Yra keletas būdų, kaip išspręsti šią problemą. Pirma, tokias operacijas kaip aktyvinimo funkcijos galima atlikti „vietoje“, leidžiant įvesties duomenis perrašyti tiesiai į išvestį. Tokiu būdu esama atmintis gali būti naudojama pakartotinai. Antra, atminties pakartotinio naudojimo galimybę galima gauti analizuojant duomenų priklausomybę tarp operacijų tinkle ir tos pačios atminties paskirstymą operacijoms, kurios šiuo metu jos nenaudoja.

Antrasis metodas yra ypač efektyvus, kai kompiliavimo metu galima išanalizuoti visą neuroninį tinklą, kad būtų sukurta fiksuota paskirstyta atmintis, nes atminties valdymo išlaidos sumažinamos beveik iki nulio. Paaiškėjo, kad šių metodų derinys gali du ar tris kartus sumažinti neuroninio tinklo atminties naudojimą.
Trečiąjį reikšmingą metodą neseniai atrado „Baidu Deep Speech“ komanda. Jie taikė įvairias atminties taupymo technologijas, kad 16 kartų sumažintų aktyvinimo funkcijų atminties suvartojimą, o tai leido apmokyti tinklus su 100 sluoksnių. Anksčiau, turėdami tą patį atminties kiekį, jie galėjo apmokyti tinklus su devyniais sluoksniais.

Atminties ir apdorojimo išteklių sujungimas į vieną įrenginį turi didelį potencialą pagerinti konvoliucinių neuroninių tinklų, taip pat kitų mašininio mokymosi formų, našumą ir efektyvumą. Galima daryti kompromisus tarp atminties ir skaičiavimo išteklių, kad būtų pasiektas sistemos funkcijų ir našumo balansas.

Neuroniniai tinklai ir kitų mašininio mokymosi metodų žinių modeliai gali būti laikomi matematiniais grafikais. Šiuose grafikuose sukoncentruotas didžiulis lygiagretumas. Lygiagretus procesorius, sukurtas išnaudoti lygiagretumą diagramose, nesiremia mini paketu ir gali žymiai sumažinti reikalingos vietos saugyklos kiekį.

Dabartiniai tyrimų rezultatai parodė, kad visi šie metodai gali žymiai pagerinti neuroninių tinklų veikimą. Šiuolaikiniai GPU ir CPU turi labai ribotą vidinę atmintį, iš viso tik kelis megabaitus. Naujos procesorių architektūros, specialiai sukurtos mašininiam mokymuisi, subalansuoja atmintį ir lustinį skaičiavimą, užtikrindamos reikšmingus našumo ir efektyvumo patobulinimus, palyginti su šiuolaikiniais procesoriais ir GPU.

Šiandien daug kalbama ir rašoma apie dirbtinius neuroninius tinklus tiek didelių duomenų, tiek mašininio mokymosi kontekste, tiek už jo ribų. Šiame straipsnyje priminsime šios sąvokos prasmę, dar kartą apibūdinsime jos taikymo sritį, taip pat pakalbėsime apie svarbų požiūrį, susijusį su neuroniniais tinklais - gilų mokymąsi, apibūdinsime jo koncepciją, taip pat privalumus. ir trūkumai konkrečiais naudojimo atvejais.

Kas yra neuroninis tinklas?

Kaip žinote, neuroninio tinklo (NN) sąvoka kilusi iš biologijos ir yra šiek tiek supaprastintas žmogaus smegenų struktūros modelis. Tačiau nesigilinkime į gamtos mokslų lauką – paprasčiausias būdas yra įsivaizduoti neuroną (įskaitant dirbtinį) kaip savotišką juodąją dėžę su daugybe įvesties skylių ir vienu išėjimu.

Matematiškai dirbtinis neuronas transformuoja įvesties signalų (poveikių) vektorių X į išėjimo signalų Y vektorių, naudodamas funkciją, vadinamą aktyvinimo funkcija. Ryšyje (dirbtinis neuroninis tinklas - ANN) veikia trijų tipų neuronai: įvestis (informacijos gavimas iš išorinio pasaulio - mus dominančių kintamųjų reikšmės), išvestis (norimų kintamųjų grąžinimas - pavyzdžiui, prognozės). , arba valdymo signalus), taip pat tarpinius neuronus, atliekančius tam tikras vidines („paslėptas“) funkcijas. Taigi klasikinis ANN susideda iš trijų ar daugiau neuronų sluoksnių, o antrajame ir vėlesniuose sluoksniuose („paslėptame“ ir išvestyje) kiekvienas elementas yra prijungtas prie visų ankstesnio sluoksnio elementų.

Svarbu prisiminti grįžtamojo ryšio sąvoką, kuri lemia ANN struktūros tipą: tiesioginis signalo perdavimas (signalai nuosekliai eina iš įvesties sluoksnio per paslėptą sluoksnį ir patenka į išvesties sluoksnį) ir pasikartojančią struktūrą, kai tinkle yra jungčių atgal. , nuo tolimesnių iki artimesnių neuronų). Visos šios sąvokos sudaro būtiną minimalią informaciją norint pereiti į kitą ANN supratimo lygį - neuroninio tinklo mokymą, jo metodų klasifikavimą ir kiekvieno iš jų veikimo principų supratimą.

Neuroninių tinklų mokymas

Nereikėtų pamiršti, kodėl apskritai naudojamos tokios kategorijos – antraip kyla pavojus įklimpti į abstrakčią matematiką. Tiesą sakant, dirbtiniai neuroniniai tinklai suprantami kaip tam tikrų praktinių problemų sprendimo metodų klasė, tarp kurių pagrindinės yra modelių atpažinimo, sprendimų priėmimo, aproksimavimo ir duomenų suspaudimo problemos, taip pat mums įdomiausios klasterių analizės problemos. ir prognozavimas.

Nepuldami į kitą kraštutinumą ir nesigilindami į ANN metodų veikimo detales kiekvienu konkrečiu atveju, priminkime, kad bet kokiomis aplinkybėmis tai yra neuroninio tinklo gebėjimas mokytis (su mokytoju arba „savarankiškai). “), tai yra pagrindinis dalykas sprendžiant praktines problemas.

Apskritai ANN mokymas yra toks:

  1. įvesties neuronai gauna kintamuosius („dirgiklius“) iš išorinės aplinkos;
  2. pagal gautą informaciją keičiasi laisvieji neuroninio tinklo parametrai (veikia tarpiniai neuronų sluoksniai);
  3. Dėl neuroninio tinklo struktūros pokyčių tinklas kitaip „reaguoja“ į informaciją.

Tai yra bendras neuroninio tinklo lavinimo algoritmas (prisiminkime Pavlovo šunį - taip, būtent tai yra vidinis sąlyginio reflekso formavimo mechanizmas - ir iškart pamirškime: juk mūsų kontekstas apima operavimą techninėmis sąvokomis ir pavyzdžiais).

Akivaizdu, kad universalaus mokymosi algoritmo nėra ir, greičiausiai, negali būti; Konceptualiai mokymosi metodai skirstomi į prižiūrimą mokymąsi ir neprižiūrimą mokymąsi. Pirmasis algoritmas daro prielaidą, kad kiekvienam įvesties („mokymosi“) vektoriui yra reikalinga išvesties („tikslinio“) vektoriaus reikšmė – taigi šios dvi reikšmės sudaro mokymo porą, o visas tokių porų rinkinys yra treniruočių rinkinys. Neprižiūrimo mokymosi atveju mokymo rinkinys susideda tik iš įvesties vektorių – ir ši situacija yra labiau tikėtina realaus gyvenimo požiūriu.

Gilus mokymasis

Gilaus mokymosi sąvoka nurodo skirtingą klasifikaciją ir reiškia vadinamųjų giliųjų struktūrų, kurios apima kelių lygių neuroninius tinklus, mokymą. Paprastas pavyzdys iš vaizdų atpažinimo srities: reikia išmokyti mašiną atpažinti vis abstraktesnius bruožus kitų abstrakčių bruožų atžvilgiu, tai yra nustatyti ryšį tarp viso veido, akių ir burnos išraiškos ir galiausiai matematiškai spalvotų pikselių sankaupas. Taigi giliame neuroniniame tinkle kiekvienas ypatybių lygis turi savo sluoksnį; Akivaizdu, kad tokio „koloso“ mokymui reikalinga atitinkama tyrėjų patirtis ir techninės įrangos lygis. Sąlygos, palankios giliajam nervų mokymuisi, susidarė tik 2006 m., o po aštuonerių metų galime kalbėti apie revoliuciją, kurią šis metodas sukėlė mašininiame mokyme.

Taigi, visų pirma, mūsų straipsnio kontekste verta atkreipti dėmesį į tai: gilus mokymasis daugeliu atvejų nėra žmogaus prižiūrimas. Tai reiškia, kad šis metodas apima neuroninio tinklo mokymą be mokytojo. Tai yra pagrindinis „gilaus“ metodo privalumas: prižiūrimas mašininis mokymasis, ypač giliųjų struktūrų atveju, reikalauja milžiniškų laiko ir darbo sąnaudų. Kita vertus, gilus mokymasis yra požiūris, kuris modeliuoja (ar bent jau bando apytiksliai suderinti) žmogaus abstraktų mąstymą, o ne juo naudojasi.

Idėja, kaip įprasta, nuostabi, tačiau požiūrio kelyje iškyla gana natūralių problemų – pirmiausia, išplaukiančių iš jos pretenzijų į universalumą. Tiesą sakant, nors giluminio mokymosi metodai pasiekė didelę sėkmę vaizdų atpažinimo srityje, tas pats natūralios kalbos apdorojimas vis dar kelia daug daugiau klausimų nei atsakymų. Akivaizdu, kad per artimiausius n metų vargu ar pavyks sukurti „dirbtinį Leonardo Da Vinci“ ar net – bent jau! - „dirbtinis homo sapiens“.

Tačiau dirbtinio intelekto tyrinėtojai jau susiduria su etikos klausimu: kiekviename save gerbiančiame mokslinės fantastikos filme nuo „Terminatoriaus“ iki „Transformerių“ išsakomos baimės nebeatrodo juokingos (šiuolaikinius sudėtingus neuroninius tinklus jau galima laikyti tikėtinu modeliuoti vabzdžio smegenų darbą!), tačiau šiuo metu jie akivaizdžiai nereikalingi.

Ideali technologinė ateitis mums atrodo kaip laikmetis, kai žmogus galės didžiąją dalį savo galių perduoti mašinai – arba bent jau galės leisti jai palengvinti didelę jo intelektualinio darbo dalį. Gilaus mokymosi koncepcija yra vienas žingsnis šios svajonės link. Kelias į priekį ilgas, bet jau dabar aišku, kad neuroniniai tinklai ir visi su jais susiję besivystantys požiūriai laikui bėgant gali įgyvendinti mokslinės fantastikos rašytojų siekius.



Atsitiktiniai straipsniai

Aukštyn