Kiire juhend õppe ülekandmiseks ja selle rakendamiseks oma närvivõrgus

Näited piltide klassifitseerimise ja loomuliku keele töötlemise kohta

Saadaval ka hispaania keeles | También disponible en español

Hiljuti sügava õppe maailmas saavutatud suuri edusamme ei saa seletada ilma mitme teguri ühendamiseta, näiteks töötlemisriistade arendamine ja demokratiseerumine, uute platvormide ja raamistike kasutuselevõtt või mitmete võtete tulek närvirakkude parandamiseks võrgutreeningud. Kuid tõhususe või täpsuse osas leiame võtmeteguri, mis on revolutsiooniliselt muutnud arvuti visiooni või loodusliku keele töötlemise väljad. Selles artiklis selgitan, mis on siirdeõpe ja paar kasutusjuhtu.

Foto autor Doug Linstedt saidil Unsplash

Märkus. Enamiku sellest, mida ma siin ütlen, õppisin seda San Francisco ülikoolis Jeremy Howardi juhendatud kursusel Deep Learning for Coders.

Kui seisame silmitsi probleemiga, mille lahendamiseks on vaja kasutada masinõpet, ja otsustame kasutada sügavat närvivõrku, tuleb esimese ülesandena valida konkreetsele juhtumile kõige sobivam arhitektuur. Kui see disainilahenduse otsus on tehtud, seisame silmitsi selle parameetrite (kaalu ja kalde) lähtestamisega iga võrgu kihi kohta. Kuni viimase ajani oli kõige tavalisem protseduur nende parameetrite juhuslik lähtestamine väikeses vahemikus, et aidata mingil viisil algoritmi, mis vastutab nende väärtuste kohandamise eest koolitusprotsessis. Lähtepunktina pole see halb (alati parem kui nullida lähtestamine), kuid see oli alati teema, kus oli piisavalt arenguruumi.

Esimene suur kasusaaja: Computer Vision

Kujutage hetkeks ette, et seisame silmitsi pildi klassifitseerimise probleemiga, kuna peame vahet tegema kassitõugudel.

Brady kamp, ​​kassi versioon

Mis siis, kui meie võrgu parameetrite juhusliku initsialiseerimise asemel hakkame kasutama väärtusi, mis on saadud pärast sama baasarhitektuuri koolitamist tohutu hulga märgistatud piltidega, kus kassid olid juba olemas (muu hulgas)? Nii kantaksime omandatud teadmised üldisema ülesandena üle konkreetsele juhtumile ja me ei alustaks täiesti nullist.

Seda me saame, kui võtame kasutusele mudeleid, mida on eelnevalt koolitatud tohutu ImageNeti andmestiku kaudu, mis sisaldab praegu enam kui 14 miljonit pilti ja peaaegu 22 000 erinevat silti. Võib-olla kõige tuntum juhtum on ResNeti arhitektuur, ImageNet poolt 2015. aastal läbi viidud pildituvastuskonkursi võitja. Sama arhitektuuri ja samade parameetritega eelkoolituse saanud mudeli kasutamise fakt annab meie võrgule võimaluse palju asju ära tunda algusest peale, mis tähendab ka väga lühikest treeninguaega. ImageNeti andmete kasutamine lähtepunktina on tähendanud tohutut hüpet väljale Computer Vision.

ImageNeti andmete näidis

Nagu juba mainitud, teeme kõigepealt baasarhitektuuri valimise, mis sõltub konkreetsest lahendatavast probleemist ja meie teadmistest konkreetse stsenaariumi olemasolevate parimate olemasolevate tehnikate kohta (sellest teemast lähemalt hiljem artiklid). Me lähtestame selle arhitektuuri parameetrite väärtustega eelkoolitatud mudeli järgi, nii et meie lõpptulemused on paremad ja saavutatakse palju varem. Järgmine on väljundkihi eemaldamine baasarhitektuurist ja selle asemel täiendavate kihtide lisamine, et saaksime originaalmudeli retušeerida, et kohandada seda meie konkreetse juhtumiga.

Kassitõugude näites kasutame lähtepunktina ImageNeti andmetel eelnevalt koolitatud ResNeti mudelit; seejärel eemaldage väljundkiht, mis otsustab, kas meil on kass või kala (või midagi muud), ja lisage lõpuks lõppkihtide paar esialgse mudeli ülesande ümberorienteerimiseks, keskendudes kassitõugude klassifitseerimisele vastavalt täheldatud erinevustele nende vahel.

Näide (Mathworks)

Trikk, mille õppisin kursusel Fast.ai: siirdeõppe tulemusi saab tunduvalt parandada, kui koolitame oma mudelit algsete piltide vähendatud versioonidega ja pärast seda suuremate piltidega. Tulemusi on parandatud, kuna meie võrgu silmis näib see olevat erinev andmekogum. Seda tehnikat nimetatakse järkjärgulise suuruse muutmiseks ja see toimib minimaalse pildi suuruse korral 64x64 pikslit.

Närvivõrgu treenimisstrateegia koos siirdeõppega

Mis tahes võrgu treenimisel, kasutades ülekandeõpet, võime järgida peaaegu üldist protseduuri. Rakendame kaheastmelist strateegiat:

Esimeses etapis külmutame baasarhitektuuri kuuluvad parameetrid. Oleks natuke absurdne kohandada esimeste kihtide parameetreid samamoodi nagu äsja lisatud kihtidega, sest vaevalt parandame baasmudeli võimet tuvastada lihtsaid kujundeid, näiteks diagonaale või kalded (midagi, mille esimene kiht on juba saavutanud). Valime täiendava kihi parameetrite kohandamiseks sobiva õppimiskiiruse (mitte liiga kõrge, et vältida võnkumisi, ega liiga madal, et vältida igavesti ootamist). Treeningu aeg on väike, kuna kohandamiseks pole palju parameetreid; paarist ajastust (kõigi andmete täielikud iteratsioonid) peaks piisama.

Teises etapis proovime mudelit täpsemaks muutmise abil täiustada. Esimese asjana vabastame parameetrid aluskihtidest, et selle väärtusi pisut kohandada. Valime erinevate kihtide kaudu maksimaalse õppimiskiiruse vahemiku, nii et aluskihtide kaal vaevalt muutub, samas kui lõplikel kaalutel on suurem muutmisvaru (ehkki see on väiksem kui esimeses etapis). Treenime oma võrku rohkemateks ajastuteks; põhimõtteliselt seni, kuni valideerimisviga süveneb pidevalt.

Üleminekuõpe looduskeele töötlemiseks

Paar aastat tagasi loodusliku keele töötlemise valdkonnas (NLP) saavutatud drastiliste paranduste peamine põhjus oli ka siirdeõpe.

Lähtume eeldusest: tavaliselt on meie andmestik piiratud konkreetse ainega ja see ei ole piisavalt suur, et saaksime aru saada keele keerukusest.

2018. aastal avaldasid Jeremy Howard ja Sebastian Ruder paberi, milles tutvustatakse ULMFiT-i (Universal Language Model Fine-Tuning) - üldist meetodit siirdeõppe rakendamiseks mis tahes NLP-probleemile, tuues sellele väljale arvutivisiooni valdkonnas varem saavutatud edusamme. Tagajärg: parimad tulemused, mis on praeguseks nähtud (täpsusega 18–24%), on mitmes klassikalises andmekogumis, näiteks klassifitseerimisel IMDB filmide positiivseteks ja negatiivseteks.

Loodusliku keele töötlemine pole nii lihtne

Selle näite ja muude sarnaste probleemide jaoks võetavad sammud oleksid järgmised:

1. Valige lähtepunktiks eelkoolitatud mudel (või looge ja koolitage uus) üldisemas tekstülesandes. NLP-s kasutame nn keelemudelit, mis proovib näiteks ennustada järgmist sõna lauses, nagu näeme ennustavatel klaviatuuridel. See ülesanne nõuab põhjalikke teadmisi keelest ja ümbritsevast maailmast; n-grammistega töötamine (tavaliselt koos esinevad sõnad) ei ole lausete jätkamiseks vajaliku võime omandamiseks piisav. Aga ... mis juhtuks, kui rakendaksime süvaõpet, kasutades suuremat andmekogumit, näiteks suurt hunnikut artikleid, mis on võetud Vikipeediast? See tundub hea mõte! Järgmise sõna ennustamine ei ole meie lõpliku klassifitseerimise ülesande jaoks eriti kasulik, kuid selle saavutamisega omandame väga väärtuslikud teadmised keelest ja tegelikkusest, kus seda kasutatakse. Palju parem kui juhuslike parameetritega alustada, kas pole?

Seda esimest sammu ei korrata isegi siis, kui meie probleem või domeen muutub, kui sama keelt kasutatakse.

2. Täpsustage keelemudelit, kasutades ülekandeõpet, et luua uus, mis on hea järgmise sõna ennustamiseks, kuid meie konkreetse domeeni piires. sel juhul filmide arvustused. Toidame võrku oma andmekogumiga, mida nimetatakse ka sihtkorpuseks, ja rakendame märgistamist (teksti segmenteerimine minimaalseteks ühikuteks või märkideks), normaliseerimist ja numbrite vormistamist (ole ettevaatlik spetsiaalsete märkidega). Soovitatav on kasutada kõiki olemasolevaid andmeid, sealhulgas prooviproove; kuna nende silte (mida kasutatakse klassifitseerimisel) pole järgmise sõna ennustamiseks vaja. Ühendame kõik näidised ja reserveerime mudeli valideerimiseks näiteks 10% koguarvust.

Kogu mudelit pole vaja säilitada; sellest piisab kooderist, mis on see osa, mis keelt õppis (ja mitte see, mis genereerib järgmise sõna).

Siiani on meil nn iseseisvalt juhendatud õppimine, ilma et oleks vaja kasutada inimesega märgistatud proove, kuna andmekogum juba sisaldab neid. Meie puhul õpib mudel, kuidas filmiarvustusi kirjutatakse, isegi teadmata, kas need on positiivsed või negatiivsed.

3. Looge meie konkreetse ülesande jaoks konkreetne klassifikaator (positiivsete ja negatiivsete arvustuste eristamiseks), kandes üle eelmise õpitud mudeli (see mudel kehtib ka kõigi teiste samade andmete põhjal klassifitseerija kohta).

Pilt edastatud saidilt fast.ai

Esimeses etapis koolitame ainult lisatud kihte. Jätkame koolitust teises faasis, kuid kogu võrku korraga külmutamata, nagu piltide klassifitseerimise puhul; kõigepealt vabastame alusarhitektuuri viimased kihid ja koolitame seda mõnda aega ... siis avame veel mõned kihid ja koolitame veel natuke ... ja nii edasi, kuni see täielikult lahti külmutatakse ja treenime veel viimast korda.

Pärast seda punkti saadud mudel suudab juba tuvastada, kas arvustus on positiivne või negatiivne :)

Järeldus

Kui tegeleme piltide või tekstiga seotud masinõppe probleemiga, on meie närvivõrgu parameetrite lähtestamiseks alati mugav kaaluda Transfer Learning'i kasutamist.

Nendes väljades piiritletud probleemide lahendamiseks loeme paljude eelkoolitatud mudelitega, mis on meile väga kasulikud; peame valima ainult õige:

  • Arvuti visioon: PyTorchi, Kerase mudelid
  • Looduslik keele töötlemine: trafod ([*] BERT, GPT-2,…), ULMFiT jne.
Ernie, Elmo ja Bert

Siirdeõpe on suhteliselt uus tehnika, milles on eelmistes valdkondades arenguruumi (uued mudelid ilmuvad igal nädalal) ning mida mõnes teises veel uurida ja kasutada. See on kindlasti teema, mida tähelepanelikult jälgida ja mida tasub uurida, kui töötate närvivõrkudega :)

PS - vaadake neid Pythoni sülearvuteid, et saada Fastai abil täielikud näited: Kujutiste klassifikatsioon + IMDB ülevaateklassifikatsioon.

Loodan, et teile meeldis! Telli #yottabytes, nii et te ei jätaks selliseid artikleid nägemata :)