Si të konfiguroni telefonat inteligjentë dhe PC. Portali informativ
  • në shtëpi
  • Windows 8
  • Rrjetet nervore, këshilla "të këqija". Yandex hap teknologjinë e mësimit të makinerive CatBoost

Rrjetet nervore, këshilla "të këqija". Yandex hap teknologjinë e mësimit të makinerive CatBoost

Yandex ka prezantuar një algoritëm të ri kërkimi të bazuar në rrjetet nervore. Sipas ekspertëve, kjo duhet të ndihmojë kompaninë të rrisë hendekun e saj me konkurrentin e saj kryesor - Google në tregun rus.

Holding rus i internetit Yandex ka prezantuar një algoritëm të ri kërkimi të bazuar në rrjetet nervore. Kjo u njoftua nga kreu i shërbimit të rëndësisë së shërbimit Alexander Safronov. Algoritmi i ri, i quajtur "Korolev", kërkon jo vetëm me fjalë kyçe, por edhe me kuptim, dhe përgjigje më të sakta u jepen pyetjeve komplekse, shpjegoi një përfaqësues i Yandex.

Në vitin 2016, Yandex zbatoi algoritmin Palekh, i cili në kohë reale përputhet me kuptimin e një kërkese të rrallë dhe unike dhe titullin e një faqe në internet, edhe nëse ato nuk kanë fjalë kyçe të zakonshme. Për shembull, nëse kërkoni për një fotografi ku qielli po rrotullohet, motori i kërkimit do të jetë në gjendje të kthejë pikturën e Van Gogh-ut "Nata me yje". Për dallim nga Palekh, Korolev është në gjendje të analizojë të gjithë faqen, si dhe kuptimin e kërkesave që përdoruesit e tjerë i ndjekin asaj.

Andrey Styskin, kreu i drejtimit të kërkimit të Yandex, dha një shembull tjetër të një pyetjeje komplekse: "një film për hapësirën ku një baba komunikon me vajzën e tij në sekonda". Në këtë rast, pyetja nuk përmban fjalë kyçe, por algoritmi i kërkimit është në gjendje të kuptojë se po flasim për filmin "Interstellar", thotë Styskin.

Sipas përfaqësuesve të shërbimit, rrjeti nervor është i aftë të mësojë vetë, kështu që sa më shumë përdorues të kërkojnë në një motor kërkimi, aq më të sakta do të jenë rezultatet. Platforma e hapur e Crowdsourcing Yandex.Toloka, e lançuar në vitin 2014, do të përdoret për testim. Në fakt, ky është një shërbim ku çdokush mund të marrë pjesë në testimin e produkteve Yandex, t'u japë atyre vlerësime dhe të lërë komente. Kjo i lejon kompanisë të përmirësojë shërbimet e saj, dhe përdoruesit marrin shpërblime monetare për këtë. Aktualisht, Yandex.Toloka ka mbi 1 milion përdorues të regjistruar.

“Problemi me rrjetet nervore ishte se ato ishin shumë të ngadalta dhe nuk mund të përdoreshin kur punonin me sasi të mëdha teksti në kohë reale,” thotë Igor Ashmanov, themeluesi dhe partneri menaxhues i Ashmanov & Partners. "Nëse Yandex ishte vërtet në gjendje të tërhiqte rrjetet nervore për të indeksuar të gjithë vëllimin e Runetit, kjo është interesante, ky është një përparim mjaft serioz nga pikëpamja teknologjike." Se sa do ta përmirësojë algoritmi i ri cilësinë e kërkimit dhe nëse do ta përmirësojë atë në parim, mbetet për t'u analizuar, tha Ashmanov.

Konkurrenti kryesor i Yandex, Google, sipas kreut të Ashmanov dhe Partners, ende nuk ka njoftuar zyrtarisht futjen e rrjeteve nervore në algoritmet e tij të kërkimit. "Google mund të përballojë të rregullojë faktorët e renditjes ndryshe dhe të eksperimentojë në këtë fushë për më gjatë pa futur teknologji të reja në kërkim, thjesht sepse kompania ka më shumë programues dhe burime," vuri në dukje eksperti.


Arrini dhe parakaloni

Sipas analistit të VTB Capital, Vladimir Bespalov, versioni i ri i motorit rus të kërkimit është një hap drejt mbajtjes së pjesës së Yandex në treg. "Aplikacioni i përditësuar celular" Search ", një algoritëm i ri i motorit të kërkimit - e gjithë kjo duhet të ndihmojë Yandex të stabilizohet dhe të rrisë pjesën e tij në tregun e kërkimit," thotë eksperti. - Efekti nuk do të ndihet menjëherë, por rënia e pyetjeve të kërkimit në terma afatgjatë mund të ketë një efekt më pak të dobishëm në performancën e ardhshme. Kërkimi është produkti kryesor i Yandex, të ardhurat kryesore të kompanisë janë reklamat, të cilat janë të lidhura me kërkimin.

Vendimi i Shërbimit Federal të Antimonopolit mund të ndihmojë Yandex të ruajë pozicionet e tij në kërkimin celular, kujton Bespalov. Në prill të këtij viti, departamenti hyri në një marrëveshje miqësore me konkurrentin kryesor të kompanisë ruse në tregun e kërkimit - Google. Sipas tij, gjigandi amerikan i internetit do të rishikojë marrëveshjet me prodhuesit e telefonave inteligjentë Android në Rusi dhe do t'i lejojë përdoruesit të zgjedhin shërbimet alternative të kërkimit të Google si ato kryesore në pajisjet e tyre.

Sipas rezultateve të tremujorit të dytë të këtij viti, pjesa e Yandex në tregun e kërkimit në Rusi arriti në 54.3%, siç raportoi Yandex N.V. (kompania mëmë e Yandex) në raportin e saj financiar me një lidhje me shërbimin e saj analitik Yandex.Radar. Që nga 31 korriku, sipas Yandex.Radar, Google zinte 40.36% të motorëve të kërkimit në Rusi. Sipas LiveInternet, mesatarisht gjatë tre muajve të fundit Yandex ishte lider në mesin e motorëve të kërkimit me një pjesë prej 51.1%, ndërsa Google kishte 43.9%. Yandex N.V. nuk zbulon të ardhurat nga kërkimi, por kërkimi dhe drejtimi i portalit i sollën kompanisë 20,135 miliardë rubla, që është 22% më shumë se në të njëjtën periudhë të 2016-ës.

"Versioni i mëparshëm revolucionar i kërkimit Matrixnet lejoi Yandex të shkëputej nga Google dhe të rriste pjesën e tij me pothuajse 10 pikë përqindjeje. Për gjysmë viti. Ky është një shembull i qartë se si përdorimi i teknologjive përparimtare çon në rezultate të dukshme biznesi edhe në një treg kaq kompleks si ai i kërkimit, "thotë Alexander Laryanovsky, partner menaxhues i shkollës në internet Skyeng dhe ish-drejtor i zhvillimit ndërkombëtar në Yandex.

Sipas Tatiana Danielyan, Zëvendës Drejtoreshë për Kërkimin dhe Zhvillimin e Grupit të Kompanive ABBYY, prezantimi i algoritmeve të reja të kërkimit mund të ndryshojë renditjen (rendin e shfaqjes së faqeve në rezultatet e kërkimit). Megjithatë, kjo do të luajë një plus për vetë faqet, thotë ajo: "Përdoruesit do të vizitojnë më shpesh faqe që përputhen vërtet me kërkesat e tyre dhe konvertimi i faqeve mund të rritet ndjeshëm."

Këtë herë vendosa të studioj rrjetet nervore. Unë kam qenë në gjendje të marr aftësitë bazë në këtë çështje gjatë verës dhe vjeshtës së 2015. Me aftësi bazë, dua të them që unë mund të ndërtoj vetë një rrjet të thjeshtë nervor nga e para. Ju mund të gjeni shembuj në depot e mia në GitHub. Në këtë artikull, unë do të jap disa sqarime dhe do të ndaj burime që mund t'ju duken të dobishme për t'u eksploruar.

Hapi 1. Neuronet dhe metoda kthyese

Pra, çfarë është një rrjet nervor? Le të presim me këtë dhe të merremi me një neuron fillimisht.

Një neuron është si një funksion: merr disa vlera si hyrje dhe kthen një.

Rrethi më poshtë tregon një neuron artificial. Merr 5 dhe kthen 1. Hyrja është shuma e tre sinapseve të lidhura me neuronin (tre shigjeta në të majtë).

Në anën e majtë të figurës, ne shohim 2 vlera hyrëse (jeshile) dhe një kompensim (të theksuar në kafe).

Të dhënat hyrëse mund të jenë paraqitje numerike të dy vetive të ndryshme. Për shembull, kur krijoni një filtër të padëshiruar, ato mund të nënkuptojnë praninë e më shumë se një fjalë me SHKRONJA KAPITALE dhe praninë e fjalës "viagra".

Vlerat e hyrjes shumëzohen me të ashtuquajturat "pesha" të tyre, 7 dhe 3 (të theksuara me blu).

Tani shtojmë vlerat që rezultojnë me kompensimin dhe marrim një numër, në rastin tonë 5 (të theksuara me të kuqe). Ky është hyrja e neuronit tonë artificial.

Pastaj neuroni kryen një lloj llogaritjeje dhe nxjerr një vlerë dalëse. Ne morëm 1 sepse vlera sigmoide e rrumbullakosur në pikën 5 është 1 (më shumë për këtë funksion më vonë).

Nëse do të ishte një filtër spam, fakti i daljes 1 do të nënkuptonte që teksti u shënua si spam nga neuroni.

Ilustrim i rrjetit nervor nga Wikipedia.

Nëse kombinoni këto neurone, ju merrni një rrjet nervor të drejtpërdrejtë - procesi shkon nga hyrja në dalje, përmes neuroneve të lidhura nga sinapset, si në foton në të majtë.

Hapi 2. Sigmoid

Pasi të keni shikuar udhëzimet nga Welch Labs, është mirë të shikoni javën e katërt të kursit të Coursera-s për Rrjetet Neurale të Mësimit të Makinerisë për t'ju ndihmuar të kuptoni se si funksionojnë ato. Kursi është shumë i thellë në matematikë dhe bazohet në Octave, dhe unë preferoj Python. Për shkak të kësaj, unë i anashkalua ushtrimet dhe mblodha të gjitha njohuritë e nevojshme nga video.

Sigmoidi thjesht harton vlerën tuaj (përgjatë boshtit horizontal) në një interval nga 0 në 1.

Prioriteti i parë për mua ishte të studioja sigmoidin, pasi ai figuronte në shumë aspekte të rrjeteve nervore. Dija tashmë diçka për të nga java e tretë e kursit të mësipërm, kështu që pashë videon nga atje.

Por vetëm videot nuk do t'ju çojnë shumë larg. Për një kuptim të plotë, vendosa ta kodoj vetë. Kështu që fillova të shkruaj një implementim të një algoritmi të regresionit logjistik (i cili përdor një sigmoid).

U desh një ditë e tërë dhe nuk kishte gjasa që rezultati të ishte i kënaqshëm. Por nuk ka rëndësi, sepse kuptova se si funksionon gjithçka. Ju mund të shihni kodin.

Ju nuk keni pse ta bëni vetë, pasi kërkon njohuri të veçanta - gjëja kryesore është që të kuptoni se si funksionon sigmoidi.

Hapi 3. Metoda e përhapjes së pasme

Të kuptuarit se si funksionon një rrjet nervor nga hyrja në dalje nuk është aq e vështirë. Është shumë më e vështirë të kuptohet se si një rrjet nervor trajnohet në grupet e të dhënave. Parimi që përdora quhet

18.07.2017, e martë, 15:53, koha e Moskës, Teksti: Vladimir Bakhur

Biblioteka e mësimit të makinerive CatBoost me burim të hapur ndryshon nga metodat tradicionale me një algoritëm të rritjes së gradientit për trajnime fleksibël mbi të dhëna heterogjene, duke përfshirë të dhëna jo numerike.

Përdorimi fleksibël i të dhënave numerike dhe jo numerike

Yandex prezantoi një metodë të re të mësimit të makinerive CatBoost dhe e bëri bibliotekën CatBoost të disponueshme për të gjithë në GitHub nën licencën Apache License 2.0. Teknika ju lejon të trajnoni në mënyrë efektive modelet mbi të dhëna heterogjene si vendndodhja e përdoruesit, historia e operacioneve dhe lloji i pajisjes.

Sipas deklaratave të vetë Yandex, bibliotekat CatBoost janë një alternativë ndaj rrjeteve nervore, të cilat nuk janë të përshtatshme për të gjitha llojet e detyrave reale të prodhimit. Në këto kushte, algoritmi CatBoost siguron performancë më të mirë dhe rezultate më të qëndrueshme rikualifikimi dhe parashikueshmëri më të lartë për sa i përket cilësisë së rezultatit përfundimtar.

"Yandex është përfshirë në mësimin e makinerive për shumë vite dhe CatBoost u krijua nga specialistët më të mirë në këtë fushë. Duke e bërë bibliotekën CatBoost me burim të hapur, ne duam të kontribuojmë në avancimin e mësimit të makinerive, "tha Mikhail Bilenko, Shef i Departamentit të Inteligjencës dhe Kërkimit të Makinerisë në Yandex. - Duhet të them që CatBoost është metoda e parë ruse e mësimit të makinerive që u bë e disponueshme në Open Source. Shpresojmë që komuniteti i specialistëve ta vlerësojë dhe të ndihmojë në përmirësimin e tij.”

Siç shpjegoi CNews në Yandex, metoda CatBoost është trashëgimtari i metodës së mësimit të makinerive Matrixnet, e cila përdoret pothuajse në të gjitha shërbimet Yandex. Për analogji me Matrixnet, CatBoost përdor një mekanizëm të rritjes së gradientit, i cili është i përshtatshëm për të punuar me të dhëna heterogjene.

Teknika CatBoost është interesante për shkak të kohës së reduktuar të rikualifikimit për shkak të përdorimit të një algoritmi ndërtimi të modelit të pronarit, i cili, nga ana tjetër, ndryshon nga skema standarde e rritjes së gradientit.

Logoja e projektit CatBoost

Ndryshe nga Matrixnet, i cili trajnon modelet mbi të dhënat numerike, CatBoost gjithashtu merr parasysh të dhënat jonumerike, si llojet e reve kompjuterike ose llojet e ndërtesave. Më parë, të dhëna të tilla duhej të përktheheshin në numra, të cilët mund të ndryshonin thelbin e tyre dhe të ndikonin në saktësinë e modelit.

Këto të dhëna tani mund të përdoren në formën e tyre origjinale, gjë që e bën CatBoost të tregojë cilësi më të mirë të trajnimit sesa metoda të ngjashme për të punuar me të dhëna heterogjene. Mund të aplikohet në një gamë të gjerë fushash - nga banka në industri.

CatBoost mund të ekzekutohet direkt nga linja e komandës, ose mund të përdorni Python ose R API-të miqësore për përdoruesit me mjete për të analizuar formulat dhe për të vizualizuar të mësuarit.

Siç shpjegoi shërbimi për shtyp i Yandex për CNews, CatBoost është rezultat i një pune afatgjatë të specialistëve më të mirë të kompanisë, e cila ka thithur përvojën shumëvjeçare të kompanisë në zhvillimin e zgjidhjeve kryesore në mësimin e makinerive, siç është Matrixnet. Duke e vënë teknologjinë në dispozicion të publikut, Yandex synon të japë një kontribut të rëndësishëm në zhvillimin e mësimit të makinerive dhe pret që komuniteti i specialistëve të vlerësojë algoritmin dhe të ndihmojë në përmirësimin e tij.

Yandex planifikon të ofrojë mbështetje të vazhdueshme për projektin. Siç shpjegohet në kompani, mbështetja do të shprehet në përmirësimin e vazhdueshëm të algoritmit, si dhe punën me reagimet nga përdoruesit e teknologjisë.

Krahasimi i Algoritmeve të Mësimit të Makinerisë (GitHub)

Zhvilluesit gjithashtu planifikojnë të zhvillojnë teknologjinë brenda kompanisë: tani një ekip i veçantë po punon për të, i cili është i angazhuar në përmirësimin dhe futjen e saj në një numër më të madh shërbimesh. Biblioteka e aplikacioneve CatBoost do të rritet me kalimin e kohës. Meqenëse teknologjia është vënë në dispozicion të publikut, i gjithë përparimi do të jetë menjëherë i disponueshëm për të gjithë përdoruesit. Duke marrë parasysh sasinë dhe cilësinë e shërbimeve Yandex dhe detyrat jo të parëndësishme që ato zgjidhin, kompania ka besim se teknologjia do të mbetet lider në klasën e saj për një kohë të gjatë në vazhdim.

Sot në botë ka mënyra të ndryshme për të punuar me faktorë kategorikë. Ato konsistojnë në parapërpunimin fillestar dhe kthimin e tyre në numra, shpjegohet në Yandex.

Metoda më efektive nga pikëpamja praktike është numërimi i "counters", përdoret në mënyrë aktive nga konkurrentët në Kaggle, dhe kjo metodë përdoret në vendimet fituese. Në zgjidhjet ekzistuese të hapura, kjo metodë nuk përdoret, por përdoren metoda më të thjeshta si kodimi me një nxehtësi, ato zakonisht funksionojnë më keq. Për shembull, ky parapërpunim mund të përdoret në algoritmin lightgbm.

CatBoost përdor punë më inteligjente me faktorë kategorikë, ku statistikat mbi to nuk llogariten paraprakisht, por gjatë trajnimit, dhe statistikat më të dobishme zgjidhen për të dhënat dhe kombinimet e tyre. Natyrisht që mbështetet gjithashtu edhe kodimi i vetëm në CatBoost; për karakteristikat që kanë pak vlera, ndonjëherë kjo metodë jep një plus në cilësi, shpjegohet në Yandex.

Një veçori e bibliotekave CatBoost është se edhe tani, në epokën e adoptimit të gjerë të teknologjive të mësimit të thellë, rrjetet nervore nuk janë të përshtatshme për prodhim real për të gjitha llojet e detyrave, dhe në kushte të tilla, rritja e gradientit CatBoost siguron performancë më të lartë, stabilitet dhe parashikueshmëria për sa i përket cilësisë së rezultatit përfundimtar.

Aplikime praktike

CatBoost tashmë është testuar në shërbimet Yandex. Si pjesë e eksperimentit, ai u përdor për të përmirësuar rezultatet e kërkimit, për të renditur furnizimin e rekomandimeve të Yandex.Zen dhe për të llogaritur parashikimet e motit në teknologjinë Meteum. Në të gjitha rastet, teknologjia doli të ishte më e mirë se Matrixnet.

Në të ardhmen, CatBoost do të punojë në shërbime të tjera, vëren Yandex. Përdoret gjithashtu nga ekipi i Yandex Data Factory në zgjidhjet e tyre për industrinë, veçanërisht për optimizimin e konsumit të lëndës së parë dhe parashikimin e defekteve.

CatBoost tashmë ka përvojë ndërkombëtare: kjo metodë e mësimit të makinerive u zbatua nga Qendra Evropiane për Kërkime Bërthamore (CERN) për të kombinuar të dhëna nga pjesë të ndryshme të detektorit LHCb.

Të dhënat e mbledhura gjatë eksperimentit përpunohen për përplasje individuale duke përdorur CatBoost me një shpejtësi prej 40 milionë në sekondë.

Disponueshmëria e CatBoost

Për të punuar me CatBoost, thjesht duhet ta instaloni në kompjuterin tuaj. Biblioteka mbështet sistemet operative Linux, Windows dhe macOS dhe është e disponueshme në gjuhët e programimit Python dhe R.

Yandex ka zhvilluar gjithashtu një program vizualizimi CatBoost Viewer, i cili ju lejon të monitoroni procesin e të mësuarit në grafikë. Mund të shkarkoni CatBoost dhe CatBoost Viewer në GitHub.

Dmitry Kruchinin, Evgeny Dolotov, Valentina Kustikova, Pavel Druzhkov, Kirill Kornyakov

Prezantimi

Mësimi i makinerisë është aktualisht një zonë kërkimore shkencore me rritje të shpejtë. Kjo është për shkak të aftësisë për të mbledhur dhe përpunuar të dhëna më shpejt, më të lartë, më të fortë, më të lehtë dhe më lirë, dhe për zhvillimin e metodave për identifikimin e ligjeve nga këto të dhëna, sipas të cilave zhvillohen procese fizike, biologjike, ekonomike dhe të tjera. Në disa probleme, kur një ligj i tillë është i vështirë për t'u përcaktuar, përdoret mësimi i thellë.

Të mësuarit e thellë shqyrton metodat për modelimin e abstraksioneve të nivelit të lartë në të dhëna duke përdorur një grup transformimesh jolineare vijuese, të cilat zakonisht përfaqësohen si rrjete nervore artificiale. Sot, rrjetet nervore përdoren me sukses për të zgjidhur probleme të tilla si parashikimi, njohja e modelit, kompresimi i të dhënave dhe një sërë të tjerash.

Rëndësia e temës së të mësuarit të makinerive dhe, në veçanti, të mësuarit e thellë konfirmohet nga paraqitja e rregullt e artikujve mbi këtë temë në Habré: Ky artikull i kushtohet një analize krahasuese të disa mjeteve softuerike të të mësuarit të thellë, nga të cilat shumë kanë u shfaq së fundmi. Këto mjete përfshijnë bibliotekat e softuerit, zgjerimet e gjuhëve të programimit, si dhe gjuhë të pavarura që lejojnë përdorimin e algoritmeve të gatshme për krijimin dhe trajnimin e modeleve të rrjeteve nervore. Mjetet ekzistuese të mësimit të thellë kanë funksione të ndryshme dhe kërkojnë nivele të ndryshme njohurish dhe aftësish nga përdoruesi. Zgjedhja e mjetit të duhur është një detyrë e rëndësishme që ju lejon të arrini rezultatin e dëshiruar në kohën më të shkurtër dhe me më pak përpjekje.

Artikulli ofron një përmbledhje të shkurtër të mjeteve për dizajnimin dhe trajnimin e modeleve të rrjeteve nervore. Fokusi është në katër biblioteka: Caffe, Pylearn2, Torch dhe Theano. Shqyrtohen aftësitë themelore të këtyre bibliotekave, jepen shembuj të përdorimit të tyre. Cilësia dhe shpejtësia e bibliotekave krahasohen kur ndërtohen të njëjtat topologji të rrjeteve nervore për zgjidhjen e problemit të klasifikimit të shifrave të shkruara me dorë (baza e të dhënave MNIST përdoret si një mostër trajnimi dhe testimi). Gjithashtu është bërë një përpjekje për të vlerësuar lehtësinë e përdorimit të bibliotekave në shqyrtim në praktikë.

Të dhënat e MNIST

Më tej, baza e të dhënave e imazheve të shifrave të shkruara me dorë MNIST () do të përdoret si grupi i të dhënave në studim. Imazhet në këtë bazë të dhënash kanë një rezolucion prej 28x28 dhe ruhen në formatin gri. Numrat janë të përqendruar në imazh. E gjithë baza e të dhënave është e ndarë në dy pjesë: trajnim, i përbërë nga 50,000 imazhe, dhe test - 10,000 imazhe.

Softuer i të mësuarit të thellë

Ka shumë mjete softuerike në dispozicion për zgjidhjen e problemeve të të mësuarit të thellë. Në ju mund të gjeni një krahasim të përgjithshëm të funksionalitetit të më të famshmëve, këtu japim informacione të përgjithshme për disa prej tyre (). Gjashtë bibliotekat e para të softuerit zbatojnë gamën më të gjerë të teknikave të të mësuarit të thellë. Zhvilluesit ofrojnë aftësi për të krijuar rrjete nervore plotësisht të lidhura (FC NN), rrjete nervore konvolucionale (CNN), autoenkoder (AE) dhe makina Boltzmann të kufizuar (RBM). Është e nevojshme t'i kushtohet vëmendje bibliotekave të mbetura. Edhe pse kanë më pak funksionalitet, në disa raste thjeshtësia e tyre ndihmon për të arritur performancë më të mirë.

Tabela 1. Aftësitë e softuerit të të mësuarit të thellë

# Emri Gjuhe OC FC NN CNN AE RBM
1 DeepLearnToolbox Matlab Windows, Linux + + + +
2 Theano Python Windows, Linux, Mac + + + +
3 Pylearn2 Python Linux, Vagrant + + + +
4 Deepnet Python Linux + + + +
5 Deepmat Matlab ? + + + +
6 Pishtari Lua, C Linux, Mac OS X, iOS, Android + + + +
7 Darch R Windows, Linux + - + +
8 Caff e C ++, Python, Matlab Linux, OS X + + - -
9 nnForge C ++ Linux + + - -
10 CXXNET C ++ Linux + + - -
11 Cuda-convnet C ++ Linux, Windows + + - -
12 Cuda CNN Matlab Linux, Windows + + - -

Bazuar në informacionin dhe rekomandimet e specialistëve, katër biblioteka u zgjodhën për shqyrtim të mëtejshëm:, - disa nga bibliotekat më të pjekura dhe më të kompletuara funksionalisht dhe - të përdorura gjerësisht nga komuniteti. Çdo bibliotekë rishikohet sipas planit të mëposhtëm:
  1. Informacion i shkurtër referencë.
  2. Karakteristikat teknike (OS, gjuha e programimit, varësitë).
  3. Funksionaliteti.
  4. Një shembull i formimit të një rrjeti të llojit të regresionit logjistik.
  5. Trajnimi dhe përdorimi i modelit të ndërtuar për klasifikim.
Pas shqyrtimit të bibliotekave të listuara, ato krahasohen në një numër konfigurimesh të rrjetit testues.

Biblioteka e kafenesë



Zhvillimi i Caffe ka vazhduar që nga shtatori 2013. Zhvillimi filloi me Yangqing Jia gjatë studimeve të tij në Universitetin e Kalifornisë në Berkeley. Që atëherë, Caffe është mbështetur në mënyrë aktive nga Qendra e Vizionit dhe Mësimit Berkeley (BVLC) dhe komuniteti i zhvilluesve në GitHub. Biblioteka shpërndahet nën licencën BSD 2-Clause.

Caffe zbatohet duke përdorur gjuhën e programimit C ++, ka mbështjellës në Python dhe MATLAB. Sistemet operative të mbështetura zyrtarisht janë Linux dhe OS X, dhe ekziston gjithashtu një port jozyrtar në Windows. Caffe përdor bibliotekën BLAS (ATLAS, Intel MKL, OpenBLAS) për llogaritjet e vektorit dhe matricës. Së bashku me këtë, varësitë e jashtme përfshijnë glog, gflags, OpenCV, protoBuf, boost, leveldb, nappy, hdf5, lmdb. Për të shpejtuar llogaritjet, Caffe mund të ekzekutohet në një GPU duke përdorur aftësitë thelbësore të teknologjisë CUDA ose bibliotekën primitive të mësimit të thellë cuDNN.

Zhvilluesit e kafesë mbështesin aftësinë për të krijuar, trajnuar dhe testuar rrjete nervore plotësisht të lidhura dhe konvolucionale. Të dhënat hyrëse dhe transformimet përshkruhen nga koncepti avokat... Në varësi të formatit të ruajtjes, mund të përdoren llojet e mëposhtme të shtresave të të dhënave burimore:

  • DATA - përcakton shtresën e të dhënave në format leveldb dhe lmdb.
  • HDF5_DATA - shtresa e të dhënave në formatin hdf5.
  • IMAGE_DATA është një format i thjeshtë që supozon se skedari përmban një listë imazhesh me një etiketë klase.
  • tjera.
Transformimet mund të specifikohen duke përdorur shtresat:
  • INNER_PRODUCT është një shtresë plotësisht e lidhur.
  • KONVOLUCION - Shtresë konvolucionale.
  • POOLING - shtresa e bashkimit hapësinor.
  • Normalizimi i përgjigjes lokale (LRN) - Shtresa e normalizimit lokal.
Së bashku me këtë, gjatë formimit të transformimeve, mund të përdoren funksione të ndryshme aktivizimi.
  • Pjesa pozitive (Njësia e korrigjuar-lineare, ReLU).
  • Funksioni sigmoidal (SIGMOID).
  • Tangjentja hiperbolike (TANH).
  • Vlera absolute (ABSVAL).
  • Eksponentimi (POWER).
  • Funksioni binomial normal log probabiliteti (BNLL).
Shtresa e fundit e modelit të rrjetit nervor duhet të përmbajë funksionin e gabimit. Biblioteka përmban funksionet e mëposhtme:
  • Gabim mesatar katror (MSE).
  • Humbja e menteshës.
  • Funksioni i humbjes logjistike.
  • Humbje e fitimit të informacionit.
  • Humbja e entropisë kryq sigmoide.
  • Funksioni Softmax. Përgjithëson entropinë kryq sigmoidale në më shumë se dy klasa.
Në procesin e modeleve të trajnimit, aplikohen metoda të ndryshme optimizimi. Zhvilluesit e Caffe ofrojnë zbatime për një sërë metodash:

Në bibliotekën Caffe, topologjia e rrjeteve nervore, të dhënat fillestare dhe metoda e trajnimit vendosen duke përdorur skedarët e konfigurimit në formatin prototxt. Skedari përmban një përshkrim të të dhënave hyrëse (trajnim dhe test) dhe shtresa të rrjetit nervor. Le të shqyrtojmë fazat e ndërtimit të skedarëve të tillë duke përdorur shembullin e rrjetit të "regresionit logjistik" (). Në vijim, do të supozojmë se skedari quhet linear_regression.prototxt dhe ndodhet në drejtorinë shembuj / mnist.
Oriz. 2. Struktura e rrjetit nervor

Biblioteka Pylearn2


Pylearn2 është një bibliotekë e zhvilluar në laboratorin LISA në Universitetin e Montrealit që nga shkurti 2011. Ka rreth 100 zhvillues në GitHub. Biblioteka shpërndahet nën licencën BSD 3-Klause.

Pylearn2 është implementuar në Python, aktualisht ai mbështet sistemin operativ Linux, është gjithashtu e mundur të ekzekutohet në çdo sistem operativ duke përdorur një makinë virtuale, sepse zhvilluesit ofrojnë një mbështjellës të konfiguruar për një mjedis virtual të bazuar në Vagrant. Pylearn2 është një shtesë për bibliotekën Theano. Kërkohet gjithashtu PyYAML, PIL. Për të shpejtuar llogaritjet, Pylearn2 dhe Theano përdorin Cuda-convnet, i cili zbatohet në C ++ / CUDA, i cili jep një rritje të konsiderueshme të shpejtësisë.

Pylearn2 mbështet aftësinë për të krijuar rrjete nervore plotësisht të lidhura dhe konvolucionale, lloje të ndryshme të koduesve automatikë (Encoders Auto Contractive, Auto-Encoders Denoising) dhe makina të kufizuara Boltzmann (RBM Gaussian, RBM spike-and-slab). Ofrohen disa funksione gabimi: ndër-entropia, log-gjasa. Metodat e mëposhtme të mësimdhënies janë në dispozicion:

  • Zbritja e gradientit në grup (BGD)
  • Zbritja Stochastic Gradient (SGD).
  • Zbritja e gradientit të konjuguar jolinear (NCG).
Në bibliotekën Pylearn2, rrjetet nervore vendosen duke përdorur përshkrimin e tyre në skedarin e konfigurimit në formatin YAML. Skedarët YAML janë një mënyrë e përshtatshme dhe e shpejtë për të serializuar objektet, sepse ato janë krijuar duke përdorur teknika programimi të orientuara nga objekti.

Biblioteka e pishtarëve


Torch është një bibliotekë kompjuterike shkencore me mbështetje të gjerë për algoritmet e mësimit të makinerive. Zhvilluar nga Instituti i Kërkimeve Idiap, Universiteti i Nju Jorkut dhe NEC Laboratories America që nga viti 2000, i shpërndarë nën licencën BSD.

Biblioteka zbatohet në Lua duke përdorur C dhe CUDA. Gjuha e shpejtë e skriptimit Lua në kombinim me teknologjitë SSE, OpenMP, CUDA lejojnë Torch të tregojë shpejtësi të mirë në krahasim me bibliotekat e tjera. Sistemet operative të mbështetura aktualisht janë Linux, FreeBSD, Mac OS X. Modulet kryesore funksionojnë edhe në Windows. Varësitë e pishtarit përfshijnë paketa imagemagick, gnuplot, nodejs, npm dhe më shumë.

Biblioteka përbëhet nga një grup modulesh, secila prej të cilave është përgjegjëse për faza të ndryshme të punës me rrjetet nervore. Kështu, për shembull, moduli nn siguron konfigurimin e një rrjeti nervor (përkufizimi i shtresave dhe parametrat e tyre), moduli optimale përmban implementime të metodave të ndryshme të optimizimit të përdorura për trajnim, dhe gnuplot ofron mundësinë e vizualizimit të të dhënave (komplotimi, shfaqja e imazheve, etj.). Instalimi i moduleve shtesë ju lejon të zgjeroni funksionalitetin e bibliotekës.

Torch ju lejon të krijoni rrjete komplekse nervore duke përdorur mekanizmin e kontejnerit. Enëështë një klasë që kombinon komponentët e deklaruar të një rrjeti nervor në një konfigurim të përbashkët, i cili më vonë mund të kalojë në procedurën e trajnimit. Një komponent i rrjetit nervor mund të jetë jo vetëm shtresa plotësisht e lidhur ose konvolucionale, por edhe funksione aktivizimi ose gabimi, si dhe kontejnerë të gatshëm. Pishtari ju lejon të krijoni shtresat e mëposhtme:

  • Shtresa plotësisht e lidhur (lineare).
  • Funksionet e aktivizimit: tangjenta hiperbolike (Tanh), zgjedhja e minimumit (Min) ose maksimal (Max), funksioni softmax (SoftMax) dhe të tjera.
  • Shtresat konvolucionale: Konvolution, SubSampling, MaxPooling, AveragePooling, LPPooling, SubtractiveNormalization.
Funksionet e gabimit: gabimi mesatar katror (MSE), entropia kryq (CrossEntropy), etj.

Gjatë trajnimit, mund të përdoren metodat e mëposhtme të optimizimit:

Le të shohim procesin e konfigurimit të një rrjeti nervor në Torch. Së pari ju duhet të deklaroni enën, pastaj shtoni shtresa në të. Rendi në të cilin shtohen shtresat është i rëndësishëm sepse dalja e shtresës së (n-1) do të jetë hyrja e shtresës së n-të.
regresioni = nn. Regresioni vijues (): shtoni (nn.Linear (784,10)) regresioni: shtoni (nn.SoftMax ()) humbja = nn.KlasaNLLCriterion ()
Përdorimi dhe trajnimi i një rrjeti nervor:

  1. Ngarkimi i të dhënave hyrëse X. Funksioni torch.load (path_to_ready_dset) lejon ngarkimin e një grupi të dhënash të përgatitur në tekst ose format binar. Në mënyrë tipike, kjo është një tabelë Lua e përbërë nga tre fusha: madhësia, të dhënat dhe etiketat. Nëse nuk ka grup të dhënash të gatshme, mund të përdorni funksionet standarde të gjuhës Lua (për shembull, io.open (emri i skedarit [, modaliteti])) ose funksionet nga paketat e bibliotekës Torch (për shembull, image.loadJPG (emri i skedarit )).
  2. Përcaktimi i përgjigjes së rrjetit për hyrjen X:
    Y = regresion: përpara (X)
  3. Llogaritja e funksionit të gabimit E = humbje (Y, T), në rastin tonë është funksioni i gjasave.
    E = humbje: përpara (Y, T)
  4. Renderimi i gradientëve sipas algoritmit të përhapjes së pasme.
    dE_dY = humbje: prapa (Y, T) regresioni: prapa (X, dE_dY)
Tani le t'i bashkojmë gjithçka. Për të trajnuar një rrjet nervor në bibliotekën Torch, duhet të shkruani ciklin tuaj të trajnimit. Në të, deklaroni një funksion të veçantë (mbyllje) që do të llogarisë përgjigjen e rrjetit, do të përcaktojë vlerën e gabimit dhe do të rillogarisë gradientët dhe do t'ia kalojë këtë mbyllje funksionit të zbritjes së gradientit për të përditësuar peshat e rrjetit.
- Krijo variabla të veçanta: peshat e rrjetit nervor dhe gradientët e tyre w, dE_dw = regresion: getParameters () local eval_E = funksion (w) dE_dw: zero () - Përditëso gradientët lokal Y = regresion: përpara (X) lokal E = humbje: përpara (Y, T) lokal dE_dY = humbje: prapa (Y, T) regresioni: prapa (X, dE_dY) kthimi E, dE_dw fund - Më pas, në ciklin e të mësuarit, thirrni optim.sgd (eval_E, w, optimState)
ku OptimState është parametrat e zbritjes së gradientit (Shkalla e mësimit, momenti, pesha Decay, etj.). Cikli i plotë i trajnimit mund të shihet.

Është e lehtë të shihet se procedura e deklarimit, si procedura e trajnimit, merr më pak se 10 rreshta kodi, gjë që flet për lehtësinë e përdorimit të bibliotekës. Në të njëjtën kohë, biblioteka ju lejon të punoni me rrjete nervore në një nivel mjaft të ulët.

Ruajtja dhe ngarkimi i një rrjeti të trajnuar kryhet duke përdorur funksione të veçanta:
pishtar.ruaj (rrugë, regresion) net = pishtar.ngarkoj (rrugë)
Pasi të jetë ngarkuar, rrjeti mund të përdoret për klasifikim ose trajnim shtesë. Nëse duhet të zbuloni se cilës klasë i përket elementi i mostrës, atëherë mjafton të përshkoni rrjetin dhe të llogarisni daljen:
rezultat = neto: përpara (shembull)
Shembuj më kompleksë mund të gjenden në tutorialet e bibliotekës.

Biblioteka Theano


Theano është një shtrirje Python që ju lejon të vlerësoni në mënyrë efikase shprehjet matematikore që përmbajnë vargje shumëdimensionale. Biblioteka mori emrin e saj për nder të emrit të gruas së filozofit dhe matematikanit të lashtë Grek Pythagoras - Feano (ose Teano). Theano është zhvilluar në laboratorin LISA për të mbështetur zhvillimin e shpejtë të algoritmeve të mësimit të makinerive.

Biblioteka është implementuar në Python dhe mbështetet në sistemet operative Windows, Linux dhe Mac OS. Theano përfshin një përpilues që përkthen shprehjet matematikore të shkruara në Python në kod efikas C ose CUDA.

Theano ofron një grup bazë mjetesh për konfigurimin dhe trajnimin e rrjetit nervor. Është e mundur të zbatohen rrjete të lidhura plotësisht me shumë shtresa (Perceptron me shumë shtresa), rrjete nervore konvolucionale (CNN), rrjete nervore të përsëritura (Rrjetet nervore të përsëritura, RNN), autoenkoderë dhe makina të kufizuara Boltzmann. Ofrohen gjithashtu funksione të ndryshme aktivizimi, në veçanti, funksioni sigmoidal, softmax, ndër-entropia. Batch SGD përdoret gjatë trajnimit.

Merrni parasysh konfigurimin e një rrjeti nervor në Theano. Për lehtësi, ne do të zbatojmë klasën LogisticRegression (), e cila do të përmbajë variabla - parametrat e të mësuarit W, b dhe funksionet për të punuar me ta - llogaritjen e përgjigjes së rrjetit (y = softmax (Wx + b)) dhe një funksion gabimi. Më pas, për të trajnuar rrjetin nervor, krijoni funksionin train_model. Për të, është e nevojshme të përshkruhen metodat që përcaktojnë funksionin e gabimit, rregulli për llogaritjen e gradientëve, metodën për ndryshimin e peshave të rrjetit nervor, madhësinë dhe vendndodhjen e kampionit mini-grua (vetë imazhet dhe përgjigjet për ata). Pas përcaktimit të të gjithë parametrave, funksioni kompilohet dhe kalon në ciklin e të mësuarit.


Oriz. 3. Diagrami i klasës për zbatimin e një rrjeti nervor në Theano

Zbatimi programor i klasës

klasa LogisticRegresion (objekt): def __init __ (vetë, input, n_in, n_out): # y = W * x + b # deklaroni variablat, përcaktoni llojin, numrin e hyrjeve dhe daljeve vetë.W = theano.shared (# inicializoj inicialet pesha me vlerë zero = numpy.zeros ((n_in, n_out), dtype = theano.config.floatX), emri = "W", hua = e vërtetë) vet.b = theano.shared (vlera = numpy.zero ((n_out ,), dtype = theano.config.floatX), emri = "b", hua = E vërtetë) # shtoni funksionin e aktivizimit softmax, dalje në rrjet - variabli y_pred self.p_y_given_x = T.nnet.softmax (T.dot (hyrje, vetë .W) + vet.b) self.y_pred = T.argmax (self.p_y_given_x, boshti = 1) self.params = # define funksionin e gabimit def negative_log_mundësia (vetë, y): kthe -T.mean (T.log (self.p_y_given_x )) # x - futet në hyrjen e rrjetit # grupi i imazheve (minibatch) është rregulluar në rreshta në matricën x # y - përgjigja e rrjetit për çdo mostër x = T.matrix ("x ") y = T.ivector ("y") # krijoni një model të regresionit logjistik secila imazh MNIST ka një madhësi 28 * 28 klasifikues = LogisticR egresioni (hyrje = x, n_in = 28 * 28, n_out = 10) # vlera e funksionit të gabimit që po përpiqemi të minimizojmë gjatë trajnimit kosto = classifier.negative_log_lihood (y) # për të llogaritur gradientët, duhet të telefononi Funksioni Theano - grad g_W = T .grad (kosto = kosto, wrt = klasifikues. W) g_b = T.grad (kosto = kosto, wrt = klasifikues.b) # përcakton rregullat për përditësimin e peshave të rrjetit nervor përditësimet = [( classifier.W, classifier.W - Learning_rate * g_W ), (classifier.b, classifier.b - Learning_rate * g_b)] # përpiloni funksionin e trajnimit, më vonë do të thirret në ciklin e trajnimit train_model = theano.function (inputet = , outputet = kosto, përditësimet = përditësimet, të dhëna = (x : train_set_x, y: train_set_y))


Për të ruajtur dhe ngarkuar shpejt parametrat e rrjetit nervor, mund të përdorni funksione nga paketa cPickle:
importoni cPickle save_file = hapur ("rrugë", "wb") cPickle.dump (klasifier.W.get_value (hua = e vërtetë), save_file, -1) cPickle.dump (classifier.b.get_value (huazim = e vërtetë), save_file , -1) save_file.close () file = hapur ("rrugë") klasifikues.W.set_value (cPickle.load (save_file), huazim = E vërtetë) classifier.b.set_value (cPickle.load (save_file), huazoj = E vërtetë )
Është e lehtë të shihet se procesi i krijimit të një modeli dhe përcaktimi i parametrave të tij kërkon shkrimin e një kodi voluminoz dhe të zhurmshëm. Biblioteka është e nivelit të ulët. Duhet të theksohet fleksibiliteti i tij, si dhe mundësia e zbatimit dhe përdorimit të komponentëve të tij. Faqja zyrtare e bibliotekës ka një numër të madh materialesh edukative për tema të ndryshme.

Krahasimi i bibliotekave në shembullin e problemit të klasifikimit të numrave të shkruar me dorë

Infrastruktura e testimit

Gjatë eksperimenteve për të vlerësuar performancën e bibliotekave, u përdor infrastruktura e mëposhtme e testimit:
  1. Ubuntu 12.04, Intel Core i5-3210M @ 2.5 GHz (eksperimente CPU).
  2. Ubuntu 14.04, Intel Core i5-2430M @ 2.4 GHz + NVIDIA GeForce GT 540M (eksperimente GPU).
  3. GCC 4.8, NVCC 6.5.

Topologjitë e rrjetit dhe parametrat e trajnimit

Eksperimentet llogaritëse u kryen në rrjete nervore plotësisht të lidhura dhe konvolucionale të strukturës së mëposhtme:

Të gjitha peshat u inicializuan rastësisht sipas një ligji uniform të shpërndarjes në rangun (−6 / (n_in + n_out), 6 / (n_in + n_out)), ku n_in, n_out janë numri i neuroneve në hyrje dhe dalje të shtresës , respektivisht. Parametrat e zbritjes stokastike të gradientit (SGD) zgjidhen të barabartë me vlerat e mëposhtme: shkalla e të mësuarit - 0,01, momenti - 0,9, zvogëlimi i peshës - 5e-4, madhësia e grupit - 128, numri maksimal i përsëritjeve - 150.

Rezultatet eksperimentale

Koha e trajnimit për rrjetet nervore të përshkruara më parë (,) duke përdorur katër bibliotekat e konsideruara është paraqitur më poshtë (

Historikisht, rrjetet nervore artificiale, gjatë historisë së tyre më shumë se gjysmë shekullore, kanë përjetuar të dyja periudhat e ngritjes së shpejtë dhe vëmendjes së shtuar të publikut, si dhe periudhat e skepticizmit dhe indiferencës që i zëvendësuan ato. Në kohë të mira, shkencëtarëve dhe inxhinierëve u duket se më në fund është gjetur një teknologji universale që mund të zëvendësojë njerëzit në çdo detyrë njohëse. Ashtu si kërpudhat pas shiut, shfaqen modele të ndryshme të reja të rrjeteve nervore; midis autorëve të tyre, matematikanëve profesionistë, ka mosmarrëveshje intensive për shkallën më të madhe ose më të vogël të biologjisë së modeleve që ata propozuan. Biologët profesionistë i vëzhgojnë këto diskutime nga mënjanë, duke i thyer periodikisht dhe duke thirrur "Po, e njëjta gjë nuk ndodh në natyrën reale!" - dhe pa shumë efekt, pasi matematikanët e rrjeteve nervore dëgjojnë biologët, si rregull, vetëm kur faktet e biologëve pajtohen me teoritë e tyre. Sidoqoftë, me kalimin e kohës, gradualisht grumbullohet një grup detyrash, në të cilat rrjetet nervore funksionojnë sinqerisht dobët dhe entuziazmi i njerëzve ftohet.

Këto ditë, rrjetet nervore janë përsëri në zenitin e tyre falë shpikjes së metodës së para-mësimit të pambikëqyrur bazuar në Makinat e kufizuara Bolzmann (RBM), e cila bën të mundur trajnimin e rrjeteve nervore të thella (d.m.th., me shumë të mëdha, sipas porosisë dhjetëra mijëra, numri i neuroneve) dhe suksesi i rrjeteve të thella nervore në problemet praktike të njohjes së të folurit dhe imazhit. Për shembull, njohja e të folurit në Android zbatohet pikërisht në rrjetet nervore të thella. Nuk dihet se sa do të zgjasë kjo dhe sa mirë rrjetet nervore të thella do të përmbushin pritjet e tyre.
Ndërkohë, paralelisht me të gjitha mosmarrëveshjet, tendencat dhe tendencat shkencore, spikat një komunitet përdoruesish të rrjeteve nervore - inxhinierë-praktikues softuerësh që janë të interesuar për aspektin e aplikuar të rrjeteve nervore, aftësinë e tyre për të mësuar nga të dhënat e mbledhura dhe për të zgjidhur problemet e njohjes. Modelet e zhvilluara mirë, relativisht të vogla të Perceptronit me shumë shtresa (MLP) dhe rrjetit të funksionit bazë radikal (RBF) janë të shkëlqyera në shumë probleme praktike të klasifikimit dhe parashikimit. Këto rrjete nervore janë përshkruar shumë herë, unë do të rekomandoja librat e mëposhtëm, sipas simpatisë sime personale për to: Osovsky, Peshkopi, Khaikin; ka edhe kurse të mira për Coursera dhe burime të ngjashme.

Megjithatë, për sa i përket qasjes së përgjithshme për përdorimin e rrjeteve nervore në praktikë, ajo është thelbësisht e ndryshme nga qasja e zakonshme e zhvillimit determinist "programuar, funksionon, prandaj funksionon gjithmonë". Rrjetet nervore janë në thelb modele probabiliste dhe qasja ndaj tyre duhet të jetë krejtësisht e ndryshme. Fatkeqësisht, shumë programues fillestarë në teknologjitë e mësimit të makinerive në përgjithësi dhe në rrjetet nervore në veçanti bëjnë gabime të sistemit kur punojnë me ta, zhgënjehen dhe braktisin këtë biznes. Ideja për të shkruar një traktat të vërtetë mbi Habr lindi pas komunikimit me përdorues të tillë të zhgënjyer të rrjeteve nervore - programues të shkëlqyeshëm, me përvojë dhe vetëbesim.

Këtu është lista ime e rregullave dhe gabimeve të zakonshme në përdorimin e rrjeteve nervore.

1. Nëse është e mundur të mos përdorni rrjete nervore, mos i përdorni ato.
Rrjetet nervore bëjnë të mundur zgjidhjen e problemit nëse është e pamundur të propozohet një algoritëm me shikim të shumëfishtë (ose shumë të shumëfishtë) të të dhënave me sytë tanë. Për shembull, nëse ka shumë të dhëna, ato janë jolineare, të zhurmshme dhe/ose me dimensione të larta.

2. Kompleksiteti i rrjeteve neurale duhet të jetë adekuat me kompleksitetin e problemit.
Kompjuterët personalë modernë (për shembull, Core i5, 8 GB RAM) bëjnë të mundur trajnimin e rrjeteve nervore në një kohë të rehatshme në mostra prej dhjetëra mijëra shembujsh, me dimensione të të dhënave hyrëse deri në njëqind. Mostrat e mëdha janë një sfidë për rrjetet e thella nervore të përmendura më sipër, të cilat janë trajnuar në GPU me shumë procesorë. Këto modele janë shumë interesante, por janë jashtë fokusit të këtij artikulli Habr.

3. Të dhënat për trajnim duhet të jenë përfaqësuese.
Mostra e trajnimit duhet të diversifikojë plotësisht dhe të diversifikojë fenomenin e përshkruar, të përfshijë situata të ndryshme të mundshme. Është mirë të kesh shumë të dhëna, por vetëm kjo nuk ndihmon gjithmonë. Në qarqe të ngushta, një shaka është e përhapur kur një gjeolog vjen tek njohësi, i vendos një copë minerali përpara dhe kërkon të zhvillojë një sistem për njohjen e një substance të tillë bazuar në të. "A është e mundur më shumë shembuj të të dhënave?" - pyet njohësi. "Sigurisht!" - përgjigjet gjeologu, nxjerr një kazmë dhe e ndan pjesën e tij të mineralit në disa pjesë të tjera. Siç e kuptoni, nuk do të ketë asnjë përdorim nga një operacion i tillë - një mostër e tillë e rritur nuk mbart ndonjë informacion të ri.

4. Përzieni kampionin.
Pasi të mblidhen vektorët e të dhënave hyrëse dhe dalëse, nëse matjet janë të pavarura nga njëra-tjetra, ndryshoni rendin e vektorëve në mënyrë arbitrare. Kjo është kritike për ndarjen e saktë të kampionit në Train / Test / Validation dhe të gjitha metodat e trajnimit "shembull për mostër".

5. Normalizoni dhe përqendroni të dhënat tuaja.
Për perceptronet me shumë shtresa dhe për shumë modele të tjera, vlerat e të dhënave hyrëse duhet të jenë brenda [-1; 1]. Para se t'i dërgoni ato në rrjetin nervor, zbritni mesataren nga të dhënat dhe ndani të gjitha vlerat me vlerën maksimale.

6. Ndani kampionin në Train, Test dhe Validation.
Gabimi kryesor i fillestarëve është të sigurojnë gabimin minimal në funksionimin e rrjetit nervor në grupin e trajnimit, në të njëjtën kohë duke e ritrajnuar atë si ferr dhe më pas të dëshirojnë të njëjtën cilësi të mirë në të dhëna të reja reale. Kjo është veçanërisht e lehtë për t'u bërë nëse të dhënat janë të vogla (ose janë të gjitha "nga një copë"). Rezultati mund të jetë shumë zhgënjyes: rrjeti nervor do të përshtatet me mostrën sa më shumë që të jetë e mundur dhe do të humbasë performancën në të dhënat reale. Për të kontrolluar aftësitë përgjithësuese të modelit tuaj, ndani të gjitha të dhënat në tre mostra me një raport 70: 20: 10. Train on Train, duke kontrolluar periodikisht cilësinë e modelit në Test. Për një vlerësim përfundimtar të paanshëm - Vleresimi.
Teknika e verifikimit të kryqëzuar, kur Train dhe Test formohen disa herë me radhë në mënyrë arbitrare nga të njëjtat të dhëna, mund të jetë mashtruese dhe të japë një përshtypje të rreme për cilësinë e mirë të punës së sistemit - për shembull, nëse të dhënat merren nga burime të ndryshme dhe kjo është kritike. Përdorni vërtetimin e saktë!

7. Aplikoni rregullimin.
Rregullimi është një teknikë që shmang rikualifikimin e një rrjeti nervor gjatë trajnimit, edhe nëse ka pak të dhëna. Nëse gjeni një kuti me këtë fjalë, sigurohuni që ta kontrolloni. Shenjë e një rrjeti nervor të ritrajnuar janë vlerat e mëdha të peshave, të rendit të qindra e mijërave, një rrjet i tillë nervor nuk do të funksionojë normalisht në të dhëna të reja që nuk janë parë më parë.

8. Nuk ka nevojë të ritrajnoni rrjetin nervor në internet.
Ideja e rikualifikimit të përhershëm të një rrjeti nervor gjatë gjithë kohës në të dhëna të reja hyrëse është e saktë në vetvete, në sistemet reale biologjike kjo është pikërisht ajo që ndodh. Ne mësojmë çdo ditë dhe rrallë çmendemi. Sidoqoftë, për rrjetet e zakonshme nervore artificiale në fazën aktuale të zhvillimit teknik, kjo praktikë është e rrezikshme: rrjeti mund të rikualifikohet ose përshtatet me të dhënat më të fundit të marra - dhe të humbasë aftësitë e tij përgjithësuese. Në mënyrë që sistemi të përdoret në praktikë, rrjeti nervor duhet: 1) të trajnojë, 2) të testojë cilësinë në mostrat e testimit dhe vërtetimit, 3) të zgjedhë një version të suksesshëm të rrjetit, të rregullojë peshat e tij dhe 4) të përdorë të trajnuarit rrjeti nervor në praktikë, peshat në procesin e përdorimit nuk ndryshojnë.

9. Përdorni algoritme të reja mësimore: Levenberg-Marquardt, BFGS, Gradientet e konjuguara etj.
Jam thellësisht i bindur se zbatimi i të mësuarit pas përhapjes është detyra e shenjtë e kujtdo që punon me rrjetet nervore. Kjo metodë është më e thjeshta, relativisht e lehtë për t'u programuar dhe ju lejon të studioni mirë procesin e të mësuarit të rrjeteve nervore. Ndërkohë, përhapja e pasme u shpik në fillim të viteve '70 dhe u bë e njohur në mesin e viteve '80 të shekullit të kaluar, që atëherë janë shfaqur metoda më të avancuara që mund të përmirësojnë ndjeshëm cilësinë e arsimit. Përdorni më mirë ato.

10. Trajnoni rrjetet nervore në MATLAB dhe mjedise të ngjashme miqësore.
Nëse nuk jeni një shkencëtar që zhvillon metoda të reja të trajnimit të rrjeteve nervore, por një programues praktik, nuk do të rekomandoja vetë kodimin e procedurës për trajnimin e rrjeteve nervore. Ka një numër të madh paketash softuerësh, kryesisht në MATLAB dhe Python, që ju lejojnë të trajnoni rrjetet nervore, duke kontrolluar procesin e të mësuarit dhe testimit duke përdorur mjete të përshtatshme vizualizimi dhe korrigjimi. Përfitoni nga trashëgimia e njerëzimit! Mua personalisht më pëlqen qasja “të mësuarit në MATLAB me një bibliotekë të mirë - zbatimi i modelit të trajnuar me dorë”, është mjaft i fuqishëm dhe fleksibël. Përjashtim bën paketa STATISTICA, e cila përmban metoda të avancuara për trajnimin e rrjeteve nervore dhe lejon që ato të gjenerohen në formën e kodit të programit C, i cili është i përshtatshëm për zbatim.

Në artikullin vijues, planifikoj të përshkruaj në detaje ciklin e plotë industrial të përgatitjes së një rrjeti nervor, i cili përdoret për detyra njohjeje në një produkt softuer tregtar, bazuar në parimet e përshkruara më sipër.

Paç fat!

Letërsia

Hinton G., Deng L., Yu D., Dahl G., Mohamed A., Jaitly N., Senior A., ​​Vanhoucke V., Nguyen P., Sainath T. dhe Kingsbury B. Deep Neural Networks for Acoustic Modelimi në njohjen e të folurit, IEEE Signal Processing Magazine, Vol. 29, Nr. 6, 2012, fq. 82-97.
Ciresan D., Meier U., Masci J dhe Schmidhuber J. Rrjeti nervor i thellë me shumë kolona për klasifikimin e shenjave të trafikut. Neural Networks, vëll. 34, gusht 2012, f. 333 - 338
S. Osovsky. Rrjetet nervore për përpunimin e informacionit - korsi. nga polonishtja. M .: Financa dhe statistika, 2002. - 344 f.
Peshkopi C.M. Njohja e modelit dhe mësimi i makinerisë. Springer, 2006 - 738 f.
S. Khaikin. Rrjetet nervore: një kurs i plotë. Williams, 2006.

Artikujt kryesorë të lidhur