Rekurrentne närvivõrk
Mall:Keeletoimeta Rekurrentne närvivõrk (RNN) on tehisnärvivõrkude klass, kus ühendused sõlmede vahel moodustavad suunatud graafi mööda jada. See võimaldab närvivõrgul ära tunda mustreid andmejadades. Erinevalt pärilevivõrkudest saab RNN kasutada oma sisemist olekut (mälu), et töödelda sisendite järjendeid. See muudab need kasutatavaks toimingutes nagu segmenteerimata ja ühendatud käekirja tuvastamine[1] või kõnetuvastus.[2]
Mõistet "rekurrentne närvivõrk" kasutatakse valimatult, et viidata kahele laiale liigile sarnase üldise struktuuriga närvivõrkudele, millest üks on lõpliku siirdega ja teine on piiramatu siirdega. Mõlemad neist väljendavad ajalist dünaamilist käitumist.[3] Lõpliku siirdega rekurrentne võrk on tsükliteta suunatud graaf, mille saab kirja panna ja asendada rangelt pärilevivõrguga, samas piiramatu siirdega rekurrentne võrk on suunatud tsükleid sisaldav graaf, mida ei ole võimalik asendada pärilevivõrguga.
Nii lõpliku siirdega kui ka piiramatu siirdega rekurrentsed võrgud võivad omada lisaks veel salvestatud olekut, mis võib olla otsese närvivõrgu kontrolli all. Salvestatud olek võib olla ka asendatud teise võrgu või graafiga, kui see sisaldab ajalisi viivitusi või tagasisideahelaid. Sellised kontrollitud olekud on üks osa tüüpides LSTM ja GRU.
Ajalugu
Rekurrentsed närvivõrgud töötati välja 1980. aastatel. Hopfieldi võrgud avastas John Hopfield 1982. aastal.[4]
LSTM
Pika lühiajalise mälu (ingl long short term memory, edaspidi LSTM) võrgud avastati Hochreiteri ja Schmidhuberi poolt 1997. aastal ja saavutati mitmeid täpsusrekordeid mitmes rakendusvaldkonnas.[5] 2007. aasta paiku tegi LSTM murrangulisi samme kõnetuvastuses, edestades traditsioonilisi mudeleid teatud kõnetuvastusrakendustes.[6] 2009. aastal oli LSTM võrk esimene RNN, mis võitis mustrituvastuskonkursi, saades esimesi kohti konkurssidel segmenteerimata käekirja tuvastamises.[7] 2014. aastal kasutas Hiina otsingumootor Baidu CTC (ingl Connectionist Temporal Classification) treenitud RNN-i, et murda Switchboard Hub5'00 kõnetuvastuse võrdlusalus, kasutamata lisaks ühtegi traditsioonilist kõne töötlemise meetodit.
LSTM parandas ka suure sõnavaraga kõnetuvastust ja kõnesünteesi,[8] seda kasutati Google'i Androidis.[9] 2015. aastal tegi Google'i kõnetuvastus teadaolevalt suure, 49% hüppe, kasutades CTC-treenitud LSTM-i, mida kasutas Google'i häälotsing.[10]
LSTM purustas rekordeid, parandades masintõlget[11], keele modelleerimist ja mitmekeelset keeletöötlust. LSTM võrgud koos konvolutsiooniliste närvivõrkudega (CNN) täiustasid ka automaatset pildi pealkirjastamist.
Arhitektuur
Järgnevalt on välja toodud kaks populaarset rekurrentse närvivõrgu arhitektuuri.
Tavaline rekurrentne närvivõrk
Tavaline RNN koosneb kolmest kihist: sisend-, peidetud rekurrentne ja väljundkiht. Sisendkihil on sisendsõlme. Sisend koosneb vektorite jadast läbi aja {}. Sisendsõlmede ühendused on defineeritud kaalude maatriksis . Peidetud kiht koosneb rekurrentsetest sõlmedest, millel on vähemalt üks tagasileviühendus. Peidetud kihis on sõlme, mis on omavahel ühendatud läbi aja rekurrentsete ühendustega. Peidetud kiht defineerib süsteemi oleku ehk mälu:
, kus
,
on peidetud kihi aktivatsioonifunktsioon ja on peidetud sõlmede kaaluvektor. Peidetud kiht on ühendatud väljundkihti kaalutud ühendustega . Väljundkihil on sõlme , mis arvutatakse nii:
, kus
on aktivatsioonifunktsioon ja on väljundkihi kaalude vektor.
Neid samme korratakse järjestikku üle aja

Juhendamisega õppe jaoks diskreetses ajas, andmejadad reaalarvuliste väärtustega sisendvektoritest antakse sisendsõlmedele ükshaaval. Igal ajajärgul arvutab iga mittesisendsõlm oma praeguse aktivatsiooni mittelineaarse funktsioonina kõikidest temasse ühenduvate ühikute aktivatsioonide kaalutud summast. Näiteks kui sisendjada on kõnesignaal, mis vastab räägitud numbrile, siis tahetud lõppväljund jada lõpus võib olla silt, mis klassifitseerib numbri.
Iga jada tekitab vea, mille suurus arvuliselt on kõikide võrgu poolt arvutatud aktivatsioonide kõrvalekallete summa vastavatest tahetud signaalidest. Mitmeid jadasid sisaldava treeninghulga puhul on viga võrdne kõigi individuaalsete jadade vigade summaga.
Pikk lühiajaline mälu (LSTM)

LSTM on süvaõppesüsteem, mis väldib haihtuva gradiendi probleemi (ingl vanishing gradient problem). LSTM on tavaliselt täiendatud rekurrentsete lülitustega, mida kutsutakse unustuslülitusteks.[13] LSTM takistab tagasilevivigade haihtumist või plahvatamist. Selle asemel saavad vead voolata läbi piiramata arvu virtuaalsete kihtide. Nii saab LSTM õppida ülesanded[14], mis nõuavad mälestusi ja sündmusi, mis juhtusid tuhandeid või isegi miljoneid diskreetseid ajajärke varem. Probleemi spetsiifilist LSTM sarnast topoloogiat saab edasi arendada.[15] LSTM töötab isegi siis, kui oluliste sündmuste vahel on pikk aeg ning palju muid sündmusi ja suudab käsitleda signaale, mis hõlmavad väikese ja suure sagedusega komponente.
LSTM suudab õppida ära tundma kontekstitundlikke keeli erinevalt varasematest mudelitest, mis põhinesid Markovi peitmudelil ja muudel sarnastel kontseptidel.[16]
Teegid
- Apache Singa
- Caffe – loodud Berkeley Vision and Learning Centeri (BVLC) poolt. See toetab nii CPU-d kui ka GPU-d. Välja töötatud C++-is ning omab Pythoni ja MATLAB-i pakendeid.
- Chainer – esimene stabiilne süvaõppe teek. Täielikult Python, CPU ja GPU tugi, hajus treenimine.
- Deeplearning4j – süvaõpe Javas ja Scalas multi-GPU toega Sparkis. Üldine süvaõppeteek JVM jaoks, töötab C++ teadusliku andmetöötlusmootori peal. Võimaldab luua enda tehtud kihte. Integreeritav Hadoopi ja Kafkaga.
- Dynet – dünaamiline närvivõrkude toolkit.
- Keras – kõrgtaseme teek, lihtsalt kasutatav API, pakendab paljusid teisi süvaõppeteeke.
- Microsoft Cognitive Toolkit
- MXNet – tänapäevane avatud lähtekoodiga süvaõpperaamistik, mida kasutatakse, et treenida ja luua süvanärvivõrke.
- pytorch – tensorid ja dünaamilised närvivõrgud Pythonis tugeva GPU kiirendusega.
- TensorFlow – Apache 2.0 litsentsiga Theano-sarnane teek, CPU, GPU ja Google'i patenteeritud TPU toega.[17]
- Torch (www.torch.ch) – teaduslik andmetöötlusraamistik, millel on lai masinõppe algoritmide tugi, kirjutatud C ja Lua keeltes. Peamine autor on Ronan Collobert ja praegu kasutatakse Facebook AI Reaserch ja Twitteri poolt.
- Theano – süvaõppe teek Pythonile, API ühildub suuresti populaarse NumPy teegiga. Lubab kasutajatel kirjutada sümboolseid matemaatilisi võrrandeid, luues ise automaatselt nende tuletised, nii et kasutaja ei pea ise kodeerima gradiente või tagasilevi. Need sümboolsed võrrandid kompileeritakse automaatselt CUDA koodi, et saaks kasutada kiiret GPU implementatsiooni.
Rakendused
Rekurrentsete närvivõrkude rakendusi:
- masintõlge;
- robotikontroll;[18]
- aegridade ennustamine;[19]
- kõnetuvastus;[20][21][22]
- aegridade anomaaliate avastamine;[23]
- rütmi õppimine;[24]
- muusikakompositsioon;[25]
- grammatika õppimine;[26][27][28]
- käekirjatuvastus;[29][30]
- inimese tegevustuvastus;[31]
- valgu homoloogia tuvastamine;[32]
- valkude subtsellulaarse lokaliseerimise prognoosimine;[33]
- mitu ennustusülesannet äriprotsesside juhtimise valdkonnas.[34]
Viited
- ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimega9aUzKon ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegasak2014on ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegadq1eUon ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegaschmidhuber1993on ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegalstmon ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegafernandez2007keywordon ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegagraves20093on ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegafan2015on ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegazen2015on ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegasak2015on ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegasutskever2014on ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegarecentadva2018on ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegagers2002on ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegaschmidhuber2015on ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegabayer2009on ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegatdtc6on ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegaOvgEWon ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegaK2utson ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegaaC8CSon ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimega95Pnwon ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegaGY9xyon ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegagraves2013on ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegaQWcDxon ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegapeephole2002on ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegaJjjvson ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegatbiZPon ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegapeepholeLSTMon ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegafkMjvon ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegavztDjon ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegaCGqsUon ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimega5w8nPon ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegaDCX3kon ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegas5fXron ilma tekstita. - ↑ Viitamistõrge: Vigane
<ref>-silt. Viide nimegaL9Iqnon ilma tekstita.