Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Televizoare (Smart TV)
  • Yandex a prezentat o nouă versiune de căutare bazată pe rețele neuronale. Yandex deschide tehnologia de învățare automată CatBoost

Yandex a prezentat o nouă versiune de căutare bazată pe rețele neuronale. Yandex deschide tehnologia de învățare automată CatBoost

Din punct de vedere istoric, rețelele neuronale artificiale, de-a lungul istoriei lor de peste jumătate de secol, au cunoscut atât perioade de urcușuri și coborâșuri rapide și o atenție sporită a publicului, cât și perioade de scepticism și indiferență care le-au înlocuit. În vremuri bune, oamenilor de știință și inginerilor li se pare că a fost găsită în sfârșit o tehnologie universală care poate înlocui oamenii în orice sarcină cognitivă. Asemenea ciupercilor după ploaie, apar diverse modele noi de rețele neuronale; între autorii lor, matematicieni profesioniști, există dispute intense cu privire la gradul mai mare sau mai mic de biologicitate al modelelor pe care le-au propus. Biologii profesioniști observă aceste discuții de pe margine, întrerupând periodic și exclamând „Da, nu același lucru se întâmplă în natura reală!” - și fără prea mult efect, deoarece matematicienii rețelelor neuronale îi ascultă pe biologi, de regulă, numai atunci când faptele biologilor sunt de acord cu propriile lor teorii. Cu toate acestea, în timp, se acumulează treptat un grup de sarcini, pe care rețelele neuronale funcționează sincer prost și entuziasmul oamenilor se răcește.

În zilele noastre, rețelele neuronale sunt din nou la apogeu datorită inventării metodei de preînvățare nesupravegheată bazată pe Restricted Bolzmann Machines (RBM), care face posibilă antrenarea rețelelor neuronale profunde (adică, cu extra-large, la ordin). de zeci de mii, număr de neuroni) și succesul rețelelor neuronale profunde în problemele practice de recunoaștere a vorbirii și a imaginilor. De exemplu, recunoașterea vorbirii în Android este implementată exact pe rețelele neuronale profunde. Nu se știe cât de mult va dura acest lucru și cât de bine se vor ridica rețelele neuronale profunde la înălțimea așteptărilor lor.
Între timp, în paralel cu toate disputele, tendințele și tendințele științifice, iese în evidență o comunitate de utilizatori ai rețelelor neuronale - ingineri-practicieni software care sunt interesați de aspectul aplicat al rețelelor neuronale, capacitatea lor de a învăța din datele colectate și de a rezolva probleme de recunoaștere. clar. Modelele relativ mici, bine concepute, de perceptron multistrat (MLP) și de rețea cu funcție de bază radială (RBF) fac față excelent multor probleme practice de clasificare și prognoză. Aceste rețele neuronale au fost descrise de multe ori, aș recomanda următoarele cărți, în ordinea simpatiei mele personale pentru ele: Osovsky, Bishop, Khaikin; există și cursuri bune despre Coursera și resurse similare.

Cu toate acestea, în ceea ce privește abordarea generală a utilizării rețelelor neuronale în practică, este fundamental diferită de abordarea obișnuită de dezvoltare deterministă „programat, funcționează, deci funcționează întotdeauna”. Rețelele neuronale sunt modele în mod inerent probabilistice, iar abordarea acestora ar trebui să fie complet diferită. Din păcate, mulți programatori începători în tehnologiile de învățare automată în general și rețelele neuronale în special fac erori de sistem atunci când lucrează cu ei, sunt frustrați și abandonează această afacere. Ideea de a scrie un adevărat tratat despre Habr a apărut după comunicarea cu utilizatori atât de dezamăgiți ai rețelelor neuronale - programatori excelenți, experimentați și încrezători în sine.

Iată lista mea de reguli și greșeli comune în utilizarea rețelelor neuronale.

1. Dacă este posibil să nu folosiți rețelele neuronale, nu le folosiți.
Rețelele neuronale fac posibilă rezolvarea problemei dacă este imposibil să propunem un algoritm prin vizualizarea multiplă (sau foarte multiplă) a datelor cu ochii noștri. De exemplu, dacă există o mulțime de date, acestea sunt neliniare, zgomotoase și/sau cu dimensiuni mari.

2. Complexitatea rețelelor neuronale ar trebui să fie adecvată complexității problemei.
Calculatoarele personale moderne (de exemplu, Core i5, 8 GB RAM) fac posibilă antrenarea rețelelor neuronale într-un timp confortabil pe mostre de zeci de mii de exemple, cu dimensiunile datelor de intrare de până la o sută. Eșantioanele mari reprezintă o provocare pentru rețelele neuronale profunde menționate mai sus, care sunt antrenate pe GPU-uri multiprocesor. Aceste modele sunt foarte interesante, dar nu sunt în centrul atenției acestui articol Habr.

3. Datele pentru instruire trebuie să fie reprezentative.
Eșantionul de formare ar trebui să diversifice pe deplin fenomenul descris, să includă diverse situații posibile. Este bine să ai multe date, dar numai asta nu ajută întotdeauna. În cercuri înguste, o glumă este răspândită atunci când un geolog vine la recunoaștere, îi pune o bucată de mineral în fața lui și cere să dezvolte un sistem de recunoaștere a unei astfel de substanțe pe baza acestuia. „Este posibil mai multe exemple de date?” - întreabă recunoaștetorul. "Cu siguranță!" – răspunde geologul, scoate un târnăcop și își mai desparte bucata de mineral în câteva bucăți. După cum înțelegeți, nu va fi de niciun folos dintr-o astfel de operațiune - un astfel de eșantion crescut nu conține informații noi.

4. Se amestecă proba.
După ce vectorii de date de intrare și de ieșire sunt colectați, dacă măsurătorile sunt independente unele de altele, schimbați ordinea vectorilor într-un mod arbitrar. Acest lucru este esențial pentru împărțirea corectă a eșantionului în Train / Test / Validare și toate metodele de antrenament „eșantion cu eșantion”.

5. Normalizați și centrați datele.
Pentru perceptronii multistrat și pentru multe alte modele, valorile datelor de intrare trebuie să se situeze în [-1; 1]. Înainte de a le trimite în rețeaua neuronală, scădeți media din date și împărțiți toate valorile la valoarea maximă.

6. Împărțiți proba în Train, Test și Validare.
Principala greșeală a începătorilor este aceea de a asigura eroarea minimă în funcționarea rețelei neuronale pe setul de antrenament, în același timp reantrenând-o ca naiba și apoi dorința de aceeași bună calitate pe date reale noi. Acest lucru este deosebit de ușor de făcut dacă datele sunt mici (sau sunt toate „dintr-o singură bucată”). Rezultatul poate fi foarte frustrant: rețeaua neuronală se va adapta la eșantion cât mai mult posibil și își va pierde performanța pe datele reale. Pentru a controla abilitățile de generalizare ale modelului dvs., împărțiți toate datele în trei mostre cu un raport de 70: 20: 10. Train on Train, verificând periodic calitatea modelului pe Test. Pentru o evaluare finală imparțială - Validare.
Tehnica de validare încrucișată, când Train și Test sunt formate de mai multe ori pe rând într-un mod arbitrar din aceleași date, poate fi dificilă și poate da o impresie falsă despre buna calitate a sistemului - de exemplu, dacă datele sunt preluate din surse diferite și acest lucru este critic. Utilizați validarea corectă!

7. Aplicați regularizarea.
Regularizarea este o tehnică care evită reantrenarea unei rețele neuronale în timpul antrenamentului, chiar dacă există puține date. Dacă găsiți o casetă de selectare cu acest cuvânt, asigurați-vă că o bifați. Un semn al unei rețele neuronale reeducate sunt valorile mari ale greutăților, de ordinul sutelor și miilor, o astfel de rețea neuronală nu va funcționa normal pe date noi care nu au fost văzute înainte

8. Nu este nevoie să reeducați rețeaua neuronală online.
Ideea de a reinstrui permanent o rețea neuronală pe baza noilor date primite este corectă în sine, în sistemele biologice reale, exact așa se întâmplă. Învățăm în fiecare zi și rareori înnebunim. Cu toate acestea, pentru rețelele neuronale artificiale convenționale în stadiul actual de dezvoltare tehnică, această practică este riscantă: rețeaua se poate reinstrui sau se poate adapta la cele mai recente date primite - și își pierde abilitățile de generalizare. Pentru ca sistemul să poată fi utilizat în practică, rețeaua neuronală trebuie: 1) să antreneze, 2) să testeze calitatea pe probe de testare și validare, 3) să aleagă o versiune de succes a rețelei, să-i stabilească greutățile și 4) să folosească cei instruiți. rețeaua neuronală în practică, ponderile în utilizarea procesului nu se schimbă.

9. Folosiți algoritmi noi de învățare: Levenberg-Marquardt, BFGS, Gradienți conjugați etc.
Sunt profund convins că implementarea învățării cu propagare inversă este datoria sacră a tuturor celor care lucrează cu rețele neuronale. Această metodă este cea mai simplă, relativ ușor de programat și vă permite să studiați bine procesul de învățare al rețelelor neuronale. Între timp, backpropagarea a fost inventată la începutul anilor 70 și a devenit populară la mijlocul anilor 80 ai secolului trecut, de atunci au apărut metode mai avansate care pot îmbunătăți semnificativ calitatea educației. Mai bine le folosești.

10. Antrenează rețele neuronale în MATLAB și în medii prietenoase similare.
Dacă nu sunteți un om de știință care dezvoltă noi metode de antrenament a rețelelor neuronale, ci un programator practic, nu v-aș recomanda să codificați singur procedura de antrenare a rețelelor neuronale. Există un număr mare de pachete software, în principal în MATLAB și Python, care vă permit să antrenați rețele neuronale, controlând în același timp procesul de învățare și testare folosind instrumente convenabile de vizualizare și depanare. Beneficiați de moștenirea umanității! Personal îmi place abordarea „învățarea în MATLAB cu o bibliotecă bună - implementarea manuală a modelului antrenat”, este destul de puternică și flexibilă. O excepție este pachetul STATISTICA, care conține metode avansate de antrenare a rețelelor neuronale și permite generarea acestora sub formă de cod de program C, care este convenabil pentru implementare.

În articolul următor, îmi propun să descriu în detaliu ciclul industrial complet de pregătire a unei rețele neuronale, care este utilizată pentru sarcini de recunoaștere într-un produs software comercial, pe baza principiilor descrise mai sus.

Noroc!

Literatură

Hinton G., Deng L., Yu D., Dahl G., Mohamed A., Jaitly N., Senior A., ​​​​Vanhoucke V., Nguyen P., Sainath T. și Kingsbury B. Deep Neural Networks for Acoustic Modelarea în recunoașterea vorbirii, IEEE Signal Processing Magazine, Vol. 29, nr. 6, 2012, pp. 82 - 97.
Ciresan D., Meier U., Masci J și Schmidhuber J. Multi-column Deep Neural Network for Traffic Sign Classification. Rețele neuronale, voi. 34, august 2012, pp. 333 - 338
S. Osovski. Rețele neuronale de prelucrare a informațiilor - banda. din poloneză. M .: Finanţe şi statistică, 2002. - 344p.
Episcopul C.M. Recunoașterea modelelor și învățarea automată. Springer, 2006 - 738 p.
S. Khaikin. Rețele neuronale: un curs complet. Williams, 2006.

Salutare tuturor!

În acest articol voi vorbi despre un nou mod confortabil de a programa în Python.

Acest lucru este mai degrabă ca a scrie articole (rapoarte / demonstrații / cercetare / exemple) decât a programa: puteți insera text explicativ obișnuit printre blocurile de cod Python. Rezultatul executării codului nu sunt doar numere și text (cum este cazul consolei în timpul lucrului standard cu Python), ci și grafice, diagrame, imagini ...

Exemple de documente pe care le puteți crea:

Arata bine? Doriți să creați aceleași documente? Atunci acest articol este pentru tine!

Rețelele neuronale sunt create și predate în principal în Python. Prin urmare, este foarte important să aveți o înțelegere de bază despre cum să scrieți programe în el. În acest articol, voi descrie pe scurt și clar conceptele de bază ale acestui limbaj: variabile, funcții, clase și module.

Materialul este destinat persoanelor care nu sunt familiarizate cu limbajele de programare.

Mai întâi trebuie să instalați Python. Apoi, trebuie să puneți într-un mediu confortabil pentru a scrie programe Python. Portalul este dedicat acestor doi pași.

Odată ce totul este instalat și configurat, sunteți gata să începeți.

Rețelele neuronale trebuie scrise într-un fel de limbaj de programare. Sunt multe, dar recomand (și folosesc în tutorial și articole) limbajul Python. De ce?

  1. Este foarte ușor de învățat.
  2. Un număr mare de biblioteci gata făcute
  3. Când te uiți la un program, vezi imediat algoritmul pe care îl implementează.
  4. Majoritatea specialiștilor în învățarea automată folosesc Python și majoritatea bibliotecilor sunt, de asemenea, create special pentru acest limbaj de programare.

În partea anterioară, am învățat cum să calculăm modificările semnalului la trecerea prin rețeaua neuronală. Ne-am familiarizat cu matricele, produsul lor și formulele simple derivate pentru calcule.

În partea a 6-a a traducerii, postez 4 secțiuni ale cărții deodată. Toate sunt dedicate unuia dintre cele mai importante subiecte din domeniul rețelelor neuronale - metoda backpropagation. Veți învăța cum să calculați eroarea tuturor neuronilor unei rețele neuronale pe baza doar eroarea finală a rețelei și greutățile conexiunilor.

Materialul este complex, așa că nu ezitați să vă adresați întrebările pe forum.

Puteți traduce.

Bucură-te de lectură!

În partea a 5-a a traducerii, citez 3 secțiuni conexe simultan.

În primul rând, vom calcula ieșirile rețelei neuronale cu două straturi cu propriile noastre mâini. Apoi ne vom familiariza cu matricele și produsul lor. Cu ajutorul cunoștințelor acumulate, vom deriva formule simple pentru calcularea transformărilor semnalului într-o rețea neuronală. Și în ultima secțiune, vom verifica formulele obținute în practică, numărând ieșirile unei rețele neuronale cu trei straturi.

Puteți traduce.

Bucură-te de lectură!

Partea 4 a traducerii este gata!

Terminăm de bătut în jurul tufișului și mergem direct la subiectul cărții - rețele neuronale.

În această parte a traducerii, ne vom uita la rețelele neuronale biologice și le vom compara cu computerele tradiționale. Apoi vom construi un model al unui neuron artificial și, în cele din urmă, vom merge direct la rețelele neuronale artificiale.

Puteți traduce.

Bucură-te de lectură!

A treia parte a traducerii!

Articolul nu este foarte lung. Acoperă doar o secțiune a cărții. Scopul este de a arăta că fiecare metodă are propriile limite. Articolul discută limitările clasificatorului liniar. Sunt introduse și conceptele de funcții logice și problema XOR.

Puteți traduce.

Bucură-te de lectură!

În acest articol voi vorbi despre un generator de muzică interesant care funcționează pe rețele neuronale. Generatorul se numește Amper. Cu ajutorul ei, orice persoană, chiar și foarte departe de a compune compoziții, poate crea independent o melodie unică și o poate folosi în propriile scopuri.

De exemplu, iată ce a dezvoltat rețeaua neuronală pentru mine.

  • Piton,
  • Învățare automată,
  • Tehnologii de căutare
  • Astăzi, Yandex și-a lansat propria bibliotecă CatBoost în sursă deschisă, dezvoltată ținând cont de mulți ani de experiență a companiei în domeniul învățării automate. Poate antrena în mod eficient modele pe date eterogene, inclusiv date greu de reprezentat ca numere (cum ar fi tipurile de cloud sau categoriile de produse). Codul sursă, documentația, benchmark-urile și instrumentele necesare au fost deja publicate pe GitHub sub licența Apache 2.0.

    CatBoost este o nouă metodă de învățare automată care stimulează gradientul. Este implementat în Yandex pentru a rezolva problemele de clasare, predicție și recomandări de construire. Mai mult, este deja aplicat în cooperare cu Organizația Europeană pentru Cercetare Nucleară (CERN) și clienții industriali Yandex Data Factory. Deci, prin ce diferă CatBoost de alți omologi open source? De ce boosting și nu o metodă de rețea neuronală? Cum este această tehnologie legată de deja binecunoscutul Matrixnet? Și unde sunt pisicile? Astăzi vom răspunde la toate aceste întrebări.

    Termenul de învățare automată datează din anii 1950. Acest termen înseamnă o încercare de a învăța un computer să rezolve probleme care sunt ușor pentru oameni, dar este dificil să oficializezi modalitatea de a le rezolva. Ca rezultat al învățării automate, un computer poate prezenta un comportament care nu a fost implicat în mod explicit în el. În lumea modernă, ne confruntăm cu roadele învățării automate de multe ori în fiecare zi, mulți dintre noi fără să știm. Este folosit pentru a construi feed-uri pe rețelele de socializare, liste de „produse similare” în magazinele online, la emiterea de împrumuturi de la bănci și la determinarea costului asigurării. Tehnologiile de învățare automată sunt folosite pentru a căuta chipuri în fotografii sau numeroase filtre foto. Pentru cei din urmă, apropo, se folosesc de obicei rețelele neuronale și despre ele sunt scrise atât de des încât poate exista o părere eronată că acesta este un „glonț de argint” pentru rezolvarea problemelor de orice complexitate. Dar acesta nu este cazul.

    Rețele neuronale sau creșterea gradientului

    De fapt, învățarea automată este foarte diferită: există multe metode diferite, iar rețelele neuronale sunt doar una dintre ele. O ilustrare în acest sens sunt rezultatele competițiilor de pe platforma Kaggle, unde diferite metode câștigă în diferite competiții, iar creșterea gradientului câștigă foarte mult.

    Rețelele neuronale rezolvă perfect anumite probleme - de exemplu, cele în care trebuie să lucrați cu date omogene. Datele omogene sunt, de exemplu, imagini, sunet sau text. În Yandex, acestea ne ajută să înțelegem mai bine interogările de căutare, să căutăm imagini similare pe Internet, să vă recunoaștem vocea în Navigator și multe altele. Dar acestea nu sunt toate sarcinile pentru învățarea automată. Există un întreg strat de provocări serioase care nu pot fi rezolvate doar de rețelele neuronale - au nevoie de creșterea gradientului. Această metodă este indispensabilă acolo unde există multe date, iar structura lor este eterogenă.

    De exemplu, dacă aveți nevoie de o prognoză meteo precisă, în care sunt luați în considerare un număr mare de factori (temperatură, umiditate, date radar, observații ale utilizatorilor și mulți alții). Sau dacă trebuie să clasați rezultate de căutare de înaltă calitate - acesta este ceea ce a determinat Yandex să-și dezvolte propria metodă de învățare automată.

    Matrixnet

    Primele motoare de căutare nu erau atât de sofisticate ca acum. De fapt, la început a fost doar o căutare de cuvinte - au fost atât de puține site-uri încât nu a existat prea multă concurență între ele. Apoi au fost mai multe pagini, trebuiau clasate. Au început să fie luate în considerare diverse complicații - frecvența cuvintelor, tf-idf. Apoi au fost prea multe pagini pe orice subiect, a avut loc prima descoperire importantă - au început să ia în considerare link-uri.

    Internetul a devenit curând important din punct de vedere comercial și au fost mulți escroci care încercau să păcălească algoritmii simpli care existau la acea vreme. Și a existat o a doua descoperire majoră - motoarele de căutare au început să-și folosească cunoștințele despre comportamentul utilizatorilor pentru a înțelege care pagini sunt bune și care nu.

    În urmă cu zece ani, mintea umană nu mai era suficientă pentru a-și da seama cum să ierarhească documentele. Probabil ați observat că numărul de rezultate găsite pentru aproape orice interogare este uriaș: sute de mii, adesea milioane de rezultate. Cele mai multe dintre ele sunt neinteresante, inutile, menționează cuvintele cererii doar întâmplător sau sunt în general spam. Pentru a răspunde la întrebarea dvs., trebuie să selectați instantaneu primele zece dintre toate rezultatele găsite. Scrierea unui program care face acest lucru cu o calitate acceptabilă a devenit dincolo de puterea unui programator uman. Următoarea tranziție a avut loc - motoarele de căutare au început să folosească în mod activ învățarea automată.

    În 2009, Yandex și-a introdus propria metodă Matrixnet bazată pe creșterea gradientului. Putem spune că clasamentul este ajutat de inteligența colectivă a utilizatorilor și de „înțelepciunea mulțimii”. Informațiile despre site-uri și comportamentul oamenilor sunt convertite în mulți factori, fiecare dintre aceștia fiind folosit de Matrixnet pentru a construi o formulă de clasare. De fapt, mașina scrie acum formula de clasare. Apropo, ca factori separați, folosim și rezultatele funcționării rețelelor neuronale (de exemplu, așa funcționează algoritmul Palekh, despre care anul trecut).

    O caracteristică importantă a Matrixnet este faptul că este rezistent la supraadaptare. Acest lucru vă permite să luați în considerare o mulțime de factori de clasare și, în același timp, să vă antrenați pe o cantitate relativ mică de date, fără a vă teme că aparatul va găsi modele inexistente. Alte metode de învățare automată vă permit fie să construiți formule mai simple, cu mai puțini factori, fie să aveți nevoie de un eșantion de antrenament mai mare.

    O altă caracteristică importantă a Matrixnet este că formula de clasare poate fi ajustată separat pentru clase destul de restrânse de interogări. De exemplu, îmbunătățiți calitatea căutării numai pentru interogările despre muzică. În același timp, clasamentul pentru restul claselor de solicitare nu se va deteriora.

    Matrixnet și meritele sale au stat la baza CatBoost. Dar de ce a trebuit să inventăm ceva nou?

    Aproape orice metodă modernă de creștere a gradientului funcționează cu numere. Chiar dacă aveți genuri de muzică, tipuri de nori sau culori ca intrare, atunci aceste date trebuie totuși descrise în limbajul numerelor. Acest lucru duce la o denaturare a esenței lor și la o potențială scădere a preciziei modelului.

    Să demonstrăm acest lucru cu un exemplu primitiv de catalog de produse într-un magazin. Bunurile sunt puțin legate între ele și nu există un astfel de model între ele care să le permită să fie comandate și să atribuie un număr semnificativ fiecărui produs. Prin urmare, în această situație, fiecărui produs i se atribuie pur și simplu un id ordinal (de exemplu, în conformitate cu programul de contabilitate al magazinului). Ordinea acestor numere nu înseamnă nimic, dar algoritmul va folosi această ordine și va trage concluzii false din ea.

    Un specialist în învățarea automată cu experiență poate veni cu o modalitate mai inteligentă de a converti caracteristicile categoriale în unele numerice, dar o astfel de preprocesare preliminară va duce la pierderea unor informații și va duce la o deteriorare a calității soluției finale.

    De aceea a fost important să învățăm mașina să lucreze nu doar cu numere, ci și cu categorii direct, tiparele între care se va identifica de la sine, fără „ajutorul” nostru manual. Și am proiectat CatBoost să funcționeze la fel de bine din cutie, atât cu funcții numerice cât și categoriale. Din acest motiv, arată o calitate mai mare a învățării atunci când se lucrează cu date eterogene decât soluțiile alternative. Poate fi folosit într-o mare varietate de domenii - de la bancar la industrie.

    Apropo, numele tehnologiei vine de la Categorical Boosting. Și nici o pisică nu a fost rănită în timpul dezvoltării.

    Benchmark-uri

    Putem vorbi mult timp despre diferențele teoretice ale bibliotecii, dar este mai bine să o arătăm în practică o dată. Pentru claritate, am comparat activitatea bibliotecii CatBoost cu omologii deschisi XGBoost, LightGBM și H20 pe un set de seturi de date publice. Și iată rezultatele (cu cât mai puține, cu atât mai bine): https://catboost.yandex/#benchmark

    Nu vrem să fim neîntemeiați, prin urmare, împreună cu bibliotecă, sunt postate în open source o descriere a procesului de comparare, codul de începere a comparării metodelor și un container cu versiunile folosite ale tuturor bibliotecilor. Orice utilizator poate repeta experimentul asupra lui sau asupra datelor sale.

    CatBoost în practică

    Noua metodă a fost deja testată pe serviciile Yandex. A fost folosit pentru a îmbunătăți rezultatele căutării, a clasifica feedul de recomandări Yandex.Zen și pentru a calcula prognozele meteo în tehnologia Meteum - și în toate cazurile s-a dovedit a fi mai bun decât Matrixnet. În viitor, CatBoost va funcționa și pe alte servicii. Nu ne vom opri aici - este mai bine să vă spunem imediat despre Large Hadron Collider (LHC).

    CatBoost a fost, de asemenea, utilizat în cooperare cu Organizația Europeană pentru Cercetare Nucleară. LHC operează detectorul LHCb, care este folosit pentru a studia asimetria materiei și a antimateriei în interacțiunile cu quarcii fermecătoare grele. Pentru a urmări cu exactitate diferitele particule detectate în experiment, există mai multe părți specifice în detector, fiecare dintre acestea determinând proprietățile speciale ale particulelor. În acest caz, cea mai dificilă sarcină este de a combina informațiile din diferite părți ale detectorului în cunoștințele cele mai precise și agregate despre particule. Aici intervine învățarea automată. Folosind CatBoost pentru a combina datele, oamenii de știință au reușit să îmbunătățească calitatea soluției finale. CatBoost a avut rezultate mai bune decât alte metode.

    Cum încep să folosesc CatBoost?

    Pentru a lucra cu CatBoost, trebuie doar să-l instalați pe computer. Biblioteca acceptă sistemele de operare Linux, Windows și macOS și este disponibilă în limbaje de programare Python și R. Yandex a dezvoltat, de asemenea, un program de vizualizare

    18.07.2017, mar, ora 15:53, ora Moscovei, Text: Vladimir Bakhur

    Biblioteca de învățare automată CatBoost cu sursă deschisă diferă de metodele tradiționale cu un algoritm de creștere a gradientului pentru antrenament flexibil pe date eterogene, inclusiv date non-numerice.

    Utilizarea flexibilă a datelor numerice și nenumerice

    Yandex a prezentat o nouă metodă de învățare automată CatBoost și a făcut biblioteca CatBoost disponibilă pentru toată lumea de pe GitHub sub licența Apache License 2.0. Tehnica vă permite să antrenați în mod eficient modele pe date eterogene, cum ar fi locația utilizatorului, istoricul operațiunilor și tipul de dispozitiv.

    Potrivit declarațiilor Yandex însuși, bibliotecile CatBoost sunt o alternativă la rețelele neuronale, care nu sunt potrivite pentru toate tipurile de sarcini reale de producție. În aceste condiții, algoritmul CatBoost oferă o performanță mai bună și rezultate de reantrenare mai consistente și o mai mare predictibilitate în ceea ce privește calitatea rezultatului final.

    „Yandex este implicat în învățarea automată de mulți ani, iar CatBoost a fost creat de cei mai buni specialiști în acest domeniu. Făcând biblioteca CatBoost open source, dorim să contribuim la progresul învățării automate”, a spus Mihail Bilenko, șeful Departamentului de Cercetare și Inteligență Mașină la Yandex. - Trebuie să spun că CatBoost este prima metodă rusă de învățare automată care a devenit disponibilă în Open Source. Sperăm că comunitatea de specialiști îl va aprecia și va ajuta să-l facă și mai bun.”

    După cum sa explicat pentru CNews în Yandex, metoda CatBoost este moștenitorul metodei de învățare automată Matrixnet, care este utilizată în aproape toate serviciile Yandex. Prin analogie cu Matrixnet, CatBoost folosește un mecanism de creștere a gradientului, care este foarte potrivit pentru lucrul cu date eterogene.

    Tehnica CatBoost este interesantă din cauza timpului de reeducare redus datorită utilizării unui algoritm de construire a modelului proprietar, care, la rândul său, diferă de schema standard de creștere a gradientului.

    Logo-ul proiectului CatBoost

    Spre deosebire de Matrixnet, care antrenează modele pe date numerice, CatBoost ia în considerare și date nenumerice, cum ar fi tipurile de cloud sau tipurile de clădiri. Anterior, astfel de date trebuiau traduse în numere, care puteau să-și schimbe esența și să afecteze acuratețea modelului.

    Aceste date pot fi acum utilizate în forma sa originală, ceea ce face ca CatBoost să arate o calitate mai bună a antrenamentului decât metodele similare de lucru cu date eterogene. Poate fi folosit într-o mare varietate de domenii - de la bancar la industrie.

    CatBoost poate fi rulat direct din linia de comandă sau puteți utiliza API-urile Python sau R, ușor de utilizat, cu instrumente pentru a analiza formulele și a vizualiza învățarea.

    După cum a explicat serviciul de presă al Yandex pentru CNews, CatBoost este rezultatul muncii pe termen lung a celor mai buni specialiști ai companiei, care a absorbit mulți ani de experiență a companiei în dezvoltarea de soluții de vârf în învățarea automată, cum ar fi Matrixnet. Făcând tehnologia disponibilă publicului, Yandex intenționează să aducă o contribuție semnificativă la dezvoltarea învățării automate și se așteaptă ca comunitatea de specialiști să aprecieze algoritmul și să-l ajute să-l îmbunătățească.

    Yandex intenționează să ofere sprijin continuu pentru proiect. După cum sa explicat în companie, sprijinul va fi exprimat în îmbunătățirea continuă a algoritmului, precum și în lucrul cu feedback de la utilizatorii tehnologiei.

    Comparație a algoritmilor de învățare automată (GitHub)

    Dezvoltatorii plănuiesc, de asemenea, să dezvolte tehnologia în cadrul companiei: acum o echipă separată lucrează la ea, care se angajează să o îmbunătățească și să o introducă într-un număr mai mare de servicii. Biblioteca de aplicații CatBoost va crește în timp. Deoarece tehnologia este pusă la dispoziția publicului, toate progresele vor fi imediat disponibile pentru toți utilizatorii. Având în vedere cantitatea și calitatea serviciilor Yandex și sarcinile non-triviale pe care le rezolvă, compania este încrezătoare că tehnologia va rămâne lider în clasa sa pentru o lungă perioadă de timp de acum încolo.

    Există diferite moduri de a lucra cu factori categoric în lumea de astăzi. Ele constau în preprocesarea inițială și transformarea lor în numere, explicate în Yandex.

    Cea mai eficientă metodă din punct de vedere practic este numărarea „contoarelor”, este folosită activ de concurenții de pe Kaggle, iar această metodă este folosită în deciziile câștigătoare. În soluțiile deschise existente, această metodă nu este utilizată, dar sunt folosite metode mai simple precum one-hot-encoding, de obicei funcționează mai rău. De exemplu, această preprocesare poate fi utilizată în algoritmul lightgbm.

    CatBoost folosește o muncă mai inteligentă cu factori categoric, unde statisticile asupra acestora nu sunt calculate în prealabil, ci în timpul antrenamentului, iar cele mai utile statistici sunt selectate pentru date și combinațiile acestora. Codificarea one-hot în CatBoost este, desigur, acceptată; pentru caracteristicile care au puține valori, uneori această metodă oferă un plus în calitate, explicat în Yandex.

    Particularitatea bibliotecilor CatBoost este că și acum, în epoca introducerii pe scară largă a tehnologiilor de învățare profundă, rețelele neuronale sunt departe de a fi potrivite pentru producția reală pentru toate tipurile de sarcini, iar în astfel de condiții, creșterea gradientului CatBoost oferă performanțe mai mari, stabilitate și predictibilitate în ceea ce privește calitatea rezultatului final.

    Aplicații practice

    CatBoost a fost deja testat pe serviciile Yandex. Ca parte a experimentului, a fost folosit pentru a îmbunătăți rezultatele căutării, pentru a clasifica feedul de recomandări Yandex.Zen și pentru a calcula prognozele meteo în tehnologia Meteum. În toate cazurile, tehnologia s-a dovedit a fi mai bună decât Matrixnet.

    În viitor, CatBoost va lucra la alte servicii, notează Yandex. Este, de asemenea, utilizat de echipa Yandex Data Factory în soluțiile lor pentru industrie, în special pentru optimizarea consumului de materii prime și predicția defectelor.

    CatBoost are deja experiență internațională: această metodă de învățare automată a fost implementată de Centrul European de Cercetare Nucleară (CERN) pentru a combina date din diferite părți ale detectorului LHCb.

    Datele colectate în timpul experimentului sunt procesate pentru coliziuni individuale folosind CatBoost la o rată de 40 de milioane pe secundă.

    Disponibilitatea CatBoost

    Pentru a lucra cu CatBoost, trebuie doar să-l instalați pe computer. Biblioteca acceptă sistemele de operare Linux, Windows și macOS și este disponibilă în limbajele de programare Python și R.

    Yandex a dezvoltat, de asemenea, un program de vizualizare CatBoost Viewer, care vă permite să monitorizați procesul de învățare pe grafice. Puteți descărca CatBoost și CatBoost Viewer pe GitHub.

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

    Introducere

    Învățarea automată este în prezent un domeniu în creștere rapidă a cercetării științifice. Acest lucru se datorează atât capacității de a colecta și prelucra datele mai rapid, mai ridicat, mai puternic, mai ușor și mai ieftin, cât și dezvoltării unor metode de identificare a legilor din aceste date, conform cărora au loc procese fizice, biologice, economice și de altă natură. În unele probleme, când o astfel de lege este dificil de determinat, se folosește învățarea profundă.

    Invatare profunda examinează metode de modelare a abstracțiilor la nivel înalt în date folosind un set de transformări neliniare secvențiale, care sunt de obicei reprezentate ca rețele neuronale artificiale. Astăzi, rețelele neuronale sunt utilizate cu succes pentru a rezolva probleme precum prognoza, recunoașterea modelelor, compresia datelor și o serie de altele.

    Relevanța subiectului învățării automate și, în special, a învățării profunde este confirmată de apariția regulată a articolelor pe această temă pe Habré: Acest articol este dedicat unei analize comparative a unor instrumente software de învățare profundă, dintre care foarte multe au a aparut recent. Aceste instrumente includ biblioteci software, extensii ale limbajelor de programare, precum și limbaje independente care permit utilizarea algoritmilor gata pregătiți pentru crearea și antrenamentul modelelor de rețele neuronale. Instrumentele de deep learning existente au funcționalități diferite și necesită niveluri diferite de cunoștințe și abilități din partea utilizatorului. Alegerea instrumentului potrivit este o sarcină importantă care vă permite să obțineți rezultatul dorit în cel mai scurt timp și cu mai puțin efort.

    Articolul oferă o scurtă prezentare generală a instrumentelor pentru proiectarea și formarea modelelor de rețele neuronale. Accentul este pus pe patru biblioteci: Caffe, Pylearn2, Torch și Theano. Sunt luate în considerare capacitățile de bază ale acestor biblioteci, sunt date exemple de utilizare a acestora. Calitatea și viteza bibliotecilor sunt comparate atunci când se construiesc aceleași topologii ale rețelelor neuronale pentru rezolvarea problemei de clasificare a cifrelor scrise de mână (setul de date MNIST este folosit ca eșantion de antrenament și de testare). Se încearcă, de asemenea, să se evalueze comoditatea utilizării bibliotecilor luate în considerare în practică.

    Setul de date MNIST

    În plus, baza de date de imagini cu cifrele scrise de mână MNIST () va fi utilizată ca set de date studiat. Imaginile din această bază de date au o rezoluție de 28x28 și sunt stocate în format de tonuri de gri. Numerele sunt centrate pe imagine. Întreaga bază de date este împărțită în două părți: training, constând din 50.000 de imagini, și testul - 10.000 de imagini.

    Software de învățare profundă

    Există multe instrumente software disponibile pentru rezolvarea problemelor de învățare profundă. În găsiți o comparație generală a funcționalității celor mai cunoscute, aici vă oferim informații generale despre unele dintre ele (). Primele șase biblioteci software implementează cea mai largă gamă de tehnici de învățare profundă. Dezvoltatorii oferă capabilități de a crea rețele neuronale complet conectate (FC NN), rețele neuronale convoluționale (CNN), autoencodere (AE) și mașini Boltzmann restricționate (RBM). Este necesar să acordați atenție bibliotecilor rămase. Deși au mai puține funcționalități, în unele cazuri simplitatea lor ajută la obținerea unor performanțe mai bune.

    Tabelul 1. Capacitățile software de învățare profundă

    # Nume Limba OC FC NN CNN AE RBM
    1 DeepLearnToolbox Matlab Windows, Linux + + + +
    2 Theano Piton Windows, Linux, Mac + + + +
    3 Pylearn2 Piton Linux, Vagrant + + + +
    4 Deepnet Piton Linux + + + +
    5 Deepmat Matlab ? + + + +
    6 Torță 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 + + - -

    Pe baza informațiilor și recomandărilor specialiștilor, au fost selectate patru biblioteci pentru o analiză ulterioară:, - unele dintre cele mai mature și complete din punct de vedere funcțional, și - utilizate pe scară largă de către comunitate. Fiecare bibliotecă este revizuită conform următorului plan:
    1. Scurte informații de referință.
    2. Caracteristici tehnice (OS, limbaj de programare, dependențe).
    3. Funcționalitate.
    4. Un exemplu de formare a unei rețele de tipul regresiei logistice.
    5. Antrenarea și utilizarea modelului construit pentru clasificare.
    După luarea în considerare a bibliotecilor listate, acestea sunt comparate pe o serie de configurații de rețea de testare.

    Biblioteca Caffe



    Dezvoltarea lui Caffe continuă din septembrie 2013. Dezvoltarea a început cu Yangqing Jia în timpul studiilor sale la Universitatea din California din Berkeley. De atunci, Caffe a fost susținut activ de Centrul de Viziune și Învățare Berkeley (BVLC) și de comunitatea de dezvoltatori de pe GitHub. Biblioteca este distribuită sub licența BSD 2-Clause.

    Caffe este implementat folosind limbajul de programare C++, există wrapper-uri în Python și MATLAB. Sistemele de operare acceptate oficial sunt Linux și OS X și există, de asemenea, un port neoficial pe Windows. Caffe folosește biblioteca BLAS (ATLAS, Intel MKL, OpenBLAS) pentru calcule vectoriale și matrice. Alături de aceasta, dependențele externe includ glog, gflags, OpenCV, protoBuf, boost, leveldb, nappy, hdf5, lmdb. Pentru a accelera calculele, Caffe poate fi rulat pe un GPU folosind capacitățile de bază ale tehnologiei CUDA sau biblioteca primitivă de învățare profundă cuDNN.

    Dezvoltatorii Caffe susțin capacitatea de a crea, antrena și testa rețele neuronale complet conectate și convoluționale. Datele de intrare și transformările sunt descrise de concept strat... În funcție de formatul de stocare, pot fi utilizate următoarele tipuri de straturi de date sursă:

    • DATE - definește stratul de date în format leveldb și lmdb.
    • HDF5_DATA - strat de date în format hdf5.
    • IMAGE_DATA este un format simplu care presupune că fișierul conține o listă de imagini cu o etichetă de clasă.
    • alte.
    Transformările pot fi specificate folosind straturi:
    • INNER_PRODUCT este un strat complet legat.
    • CONVOLUȚIE - Strat convoluțional.
    • POOLING - strat de pooling spațial.
    • Local Response Normalization (LRN) - Stratul de normalizare local.
    Alături de aceasta, la formarea transformărilor, pot fi utilizate diverse funcții de activare.
    • Partea pozitivă (Rectified-Linear Unit, ReLU).
    • Funcția sigmoidală (SIGMOID).
    • Tangenta hiperbolica (TANH).
    • Valoarea absolută (ABSVAL).
    • Exponentiație (PUTERE).
    • Funcția de probabilitate a logului normal binomial (BNLL).
    Ultimul strat al modelului rețelei neuronale ar trebui să conțină funcția de eroare. Biblioteca conține următoarele funcții:
    • Eroare pătrată medie (MSE).
    • Pierderea balamalei.
    • Funcția de pierdere logistică.
    • Pierdere de câștig de informații.
    • Pierderea entropiei în cruce sigmoidală.
    • Funcția Softmax. Generalizează entropia încrucișată sigmoidală la mai mult de două clase.
    În procesul de formare a modelelor se aplică diverse metode de optimizare. Dezvoltatorii Caffe oferă implementări pentru o serie de metode:

    În biblioteca Caffe, topologia rețelelor neuronale, datele inițiale și metoda de antrenament sunt stabilite folosind fișiere de configurare în format prototxt. Fișierul conține o descriere a datelor de intrare (antrenament și test) și a straturilor rețelei neuronale. Să luăm în considerare etapele construirii unor astfel de fișiere folosind exemplul rețelei de „regresie logistică” (). În cele ce urmează, vom presupune că fișierul se numește linear_regression.prototxt și se află în directorul exemple / mnist.
    Orez. 2. Structura rețelei neuronale

    Biblioteca Pylearn2


    Pylearn2 este o bibliotecă dezvoltată la laboratorul LISA de la Universitatea din Montreal din februarie 2011. Are aproximativ 100 de dezvoltatori pe GitHub. Biblioteca este distribuită sub licența BSD 3-Clause.

    Pylearn2 este implementat în Python, în prezent acceptă sistemul de operare Linux, de asemenea, este posibil să ruleze pe orice sistem de operare folosind o mașină virtuală, deoarece dezvoltatorii furnizează un wrapper configurat pentru un mediu virtual bazat pe Vagrant. Pylearn2 este un supliment pentru biblioteca Theano. Sunt necesare suplimentar PyYAML, PIL. Pentru a accelera calculele, Pylearn2 și Theano folosesc Cuda-convnet, care este implementat în C++ / CUDA, ceea ce oferă o creștere semnificativă a vitezei.

    Pylearn2 acceptă capacitatea de a crea rețele neuronale complet conectate și convoluționale, diferite tipuri de auto-encodere (Auto-encodere contractive, auto-encodere cu denoising) și mașini Boltzmann limitate (Gaussian RBM, Spike-and-Slab RBM). Sunt furnizate mai multe funcții de eroare: entropie încrucișată, log-probabilitate. Sunt disponibile următoarele metode de predare:

    • Coborâre în grad de lot (BGD)
    • Coborâre Stochastic Gradient (SGD).
    • Coborâre a gradientului conjugat neliniar (NCG).
    În biblioteca Pylearn2, rețelele neuronale sunt setate folosind descrierea lor din fișierul de configurare în format YAML. Fișierele YAML sunt o modalitate convenabilă și rapidă de a serializa obiecte, deoarece sunt proiectate folosind tehnici de programare orientate pe obiecte.

    Biblioteca Tortei


    Torch este o bibliotecă de calcul științific cu suport larg pentru algoritmii de învățare automată. Dezvoltat de Institutul de Cercetare Idiap, Universitatea din New York și NEC Laboratories America din 2000, distribuit sub licență BSD.

    Biblioteca este implementată în Lua folosind C și CUDA. Limbajul rapid de scripting Lua în combinație cu tehnologiile SSE, OpenMP, CUDA îi permit lui Torch să arate o viteză bună în comparație cu alte biblioteci. Sistemele de operare suportate în prezent sunt Linux, FreeBSD, Mac OS X. Modulele principale funcționează și pe Windows. Dependențele Torch includ imagemagick, gnuplot, nodejs, npm și mai multe pachete.

    Biblioteca constă dintr-un set de module, fiecare dintre acestea fiind responsabil pentru diferite etape de lucru cu rețelele neuronale. Deci, de exemplu, modulul nn oferă configurarea unei rețele neuronale (definirea straturilor și parametrii acestora), modul optim conține implementări ale diferitelor metode de optimizare utilizate pentru antrenament și gnuplot oferă capacitatea de a vizualiza date (trasare, afișare a imaginilor etc.). Instalarea modulelor suplimentare vă permite să extindeți funcționalitatea bibliotecii.

    Torch vă permite să creați rețele neuronale complexe folosind mecanismul containerului. Container este o clasă care combină componentele declarate ale unei rețele neuronale într-o singură configurație comună, care poate fi trecută ulterior procedurii de antrenament. O componentă de rețea neuronală poate fi nu numai straturi complet conectate sau convoluționale, ci și funcții de activare sau eroare, precum și containere gata făcute. Torch vă permite să creați următoarele straturi:

    • Strat complet conectat (liniar).
    • Funcții de activare: tangentă hiperbolică (Tanh), selectare minim (Min) sau maxim (Max), softmax-funcție (SoftMax) și altele.
    • Straturi convoluționale: Convoluție, Subsampling, MaxPooling, AveragePooling, LPPooling, SubtractiveNormalization.
    Funcții de eroare: eroare pătrată medie (MSE), entropie încrucișată (CrossEntropy), etc.

    În timpul antrenamentului, pot fi utilizate următoarele metode de optimizare:

    Să ne uităm la procesul de configurare a unei rețele neuronale în Torch. Mai întâi trebuie să declarați containerul, apoi să adăugați straturi la acesta. Ordinea în care sunt adăugate straturile este importantă deoarece ieșirea stratului (n-1) va fi intrarea stratului al n-lea.
    regresie = nn.Regresiune secvențială (): adăugați (nn.Linear (784,10)) regresie: adăugați (nn.SoftMax ()) pierdere = nn.ClassNLLCriterion ()
    Utilizarea și antrenarea unei rețele neuronale:

    1. Încărcarea datelor de intrare X. Funcția torch.load (path_to_ready_dset) permite încărcarea unui set de date pregătit în format text sau binar. De obicei, acesta este un tabel Lua format din trei câmpuri: dimensiune, date și etichete. Dacă nu există un set de date gata făcut, puteți utiliza funcțiile standard Lua (de exemplu, io.open (nume fișier [, mod])) sau funcții din pachetele bibliotecii Torch (de exemplu, image.loadJPG (nume fișier)).
    2. Determinarea răspunsului rețelei pentru intrarea X:
      Y = regresie: înainte (X)
    3. Calculul funcției de eroare E = pierdere (Y, T), în cazul nostru este funcția de probabilitate.
      E = pierdere: înainte (Y, T)
    4. Redarea gradienților conform algoritmului de backpropagation.
      dE_dY = pierdere: înapoi (Y, T) regresie: înapoi (X, dE_dY)
    Acum să punem totul împreună. Pentru a antrena o rețea neuronală în biblioteca Torch, trebuie să vă scrieți propriul ciclu de antrenament. În ea, declarați o funcție specială (închidere) care va calcula răspunsul rețelei, va determina valoarea erorii și va recalcula gradienții și trece această închidere la funcția de coborâre a gradientului pentru a actualiza greutățile rețelei.
    - Creați variabile speciale: greutățile rețelei neuronale și gradienții lor w, dE_dw = regresie: getParameters () local eval_E = funcția (w) dE_dw: zero () - Actualizați gradienți local Y = regresie: înainte (X) local E = pierdere: înainte (Y, T) local dE_dY = pierdere: înapoi (Y, T) regresie: înapoi (X, dE_dY) return E, dE_dw final - Apoi, în bucla de învățare, apelați optim.sgd (eval_E, w, optimState)
    unde optimState este parametrii de coborâre a gradientului (learningRate, impuls, weightDecay etc.). Ciclul de pregătire complet poate fi vizualizat.

    Este ușor de observat că procedura de declarare, ca și procedura de instruire, necesită mai puțin de 10 linii de cod, ceea ce vorbește despre ușurința de utilizare a bibliotecii. În același timp, biblioteca vă permite să lucrați cu rețele neuronale la un nivel destul de scăzut.

    Salvarea și încărcarea unei rețele instruite se realizează folosind funcții speciale:
    torch.save (cale, regresie) net = torch.load (cale)
    Odată încărcată, rețeaua poate fi folosită pentru clasificare sau formare suplimentară. Dacă trebuie să aflați cărei clase îi aparține elementul eșantion, atunci este suficient să traversați rețeaua și să calculați rezultatul:
    rezultat = net: înainte (eșantion)
    Exemple mai complexe pot fi găsite în tutorialele bibliotecii.

    Biblioteca Theano


    Theano este o extensie Python care vă permite să evaluați eficient expresiile matematice care conțin tablouri multidimensionale. Biblioteca și-a primit numele în onoarea numelui soției filosofului și matematicianului grec antic Pitagora - Feano (sau Teano). Theano este dezvoltat în laboratorul LISA pentru a sprijini dezvoltarea rapidă a algoritmilor de învățare automată.

    Biblioteca este implementată în Python și este acceptată pe sistemele de operare Windows, Linux și Mac OS. Theano include un compilator care traduce expresiile matematice scrise în Python în cod eficient C sau CUDA.

    Theano oferă un set de bază de instrumente pentru configurarea și formarea rețelelor neuronale. Este posibil să se implementeze rețele multistrat complet conectate (Multi-Layer Perceptron), rețele neuronale convoluționale (CNN), rețele neuronale recurente (RNN), autoencodere și mașini Boltzmann restricționate. Sunt furnizate, de asemenea, diverse funcții de activare, în special, sigmoidală, softmax-funcție, cross-entropie. Batch SGD este utilizat în timpul antrenamentului.

    Luați în considerare configurația unei rețele neuronale în Theano. Pentru comoditate, vom implementa clasa LogisticRegression (), care va conține variabile - parametrii de învățare W, b și funcții pentru lucrul cu aceștia - calcularea răspunsului rețelei (y = softmax (Wx + b)) și o funcție de eroare. Apoi, pentru a antrena rețeaua neuronală, creați funcția train_model. Pentru aceasta, este necesar să se descrie metodele care determină funcția de eroare, regula de calcul a gradienților, metoda de modificare a greutăților rețelei neuronale, dimensiunea și locația eșantionului mini-lot (imaginile în sine și răspunsurile). pentru ei). După definirea tuturor parametrilor, funcția este compilată și transmisă buclei de învățare.


    Orez. 3. Diagrama de clasă pentru implementarea unei rețele neuronale în Theano

    Implementarea programatică a clasei

    clasa LogisticRegression (obiect): def __init __ (self, input, n_in, n_out): # y = W * x + b # declara variabile, definește tipul, numărul de intrări și ieșiri self.W = theano.shared (# initialize initial greutăți cu zerouri valoare = numpy.zeros ((n_in, n_out), dtype = theano.config.floatX), nume = „W”, împrumut = True) self.b = theano.shared (valoare = numpy.zeros ((n_out) ,), dtype = theano.config.floatX), nume = "b", împrumut = True) # adăugați funcția de activare softmax, ieșire de rețea - variabila y_pred self.p_y_given_x = T.nnet.softmax (T.dot (input, self) .W) + self.b) self.y_pred = T.argmax (self.p_y_given_x, axa = 1) self.params = # definește funcția de eroare def negative_log_likelihood (self, y): return -T.mean (T.log (self.p_y_given_x )) # x - este alimentat la intrarea rețelei # setul de imagini (minibatch) este aranjat pe rânduri în matrice x # y - răspunsul rețelei la fiecare probă x = T.matrix ("x ") y = T.ivector ("y") # creați un model de regresie logistică fiecare imagine MNIST are o dimensiune de 28 * 28 clasificator = LogisticR egression (input = x, n_in = 28 * 28, n_out = 10) # valoarea funcției de eroare pe care încercăm să o minimizăm în timpul antrenamentului cost = classifier.negative_log_likelihood (y) # pentru a calcula gradienții, trebuie să apelați Funcția Theano - grad g_W = T .grad (cost = cost, wrt = clasificator.W) g_b = T.grad (cost = cost, wrt = clasificator.b) # definiți regulile pentru actualizarea ponderilor rețelei neuronale actualizări = [(clasificator) .W, classifier.W - learning_rate * g_W ), (classifier.b, classifier.b - learning_rate * g_b)] # compilați funcția de antrenament, ulterior va fi apelată în bucla de antrenament model_tren = theano.function (intrari =, outputs = cost, updates = updates, givens = (x : train_set_x, y: train_set_y))


    Pentru a salva și încărca rapid parametrii rețelei neuronale, puteți utiliza funcțiile din pachetul cPickle:
    import cPickle save_file = deschis ("cale", "wb") cPickle.dump (classifier.W.get_value (împrumut = True), save_file, -1) cPickle.dump (classifier.b.get_value (împrumut = True), save_file , -1) save_file.close () file = open ("cale") classifier.W.set_value (cPickle.load (save_file), borrow = True) classifier.b.set_value (cPickle.load (save_file), borrow = True )
    Este ușor de observat că procesul de creare a unui model și de determinare a parametrilor acestuia necesită scrierea unui cod voluminos și zgomotos. Biblioteca este de nivel scăzut. De remarcat flexibilitatea acestuia, precum și posibilitatea implementării și utilizării propriilor componente. Site-ul oficial al bibliotecii are un număr mare de materiale educaționale pe diverse teme.

    Compararea bibliotecilor pe exemplul problemei de clasificare a numerelor scrise de mână

    Infrastructura de testare

    În timpul experimentelor de evaluare a performanței bibliotecilor, a fost utilizată următoarea infrastructură de testare:
    1. Ubuntu 12.04, Intel Core i5-3210M la 2,5 GHz (experimente cu CPU).
    2. Ubuntu 14.04, Intel Core i5-2430M @ 2.4GHz + NVIDIA GeForce GT 540M (experimente GPU).
    3. GCC 4.8, NVCC 6.5.

    Topologii de rețea și parametri de antrenament

    Experimentele de calcul au fost efectuate pe rețele neuronale complet conectate și convoluționale cu următoarea structură:

    Toate greutățile au fost inițializate aleatoriu conform unei legi de distribuție uniformă în intervalul (−6 / (n_in + n_out), 6 / (n_in + n_out)), unde n_in, n_out sunt numărul de neuroni la intrarea și la ieșire a stratului , respectiv. Parametrii coborârii gradientului stocastic (SGD) sunt aleși egali cu următoarele valori: rata de învățare - 0,01, impuls - 0,9, scăderea greutății - 5e-4, dimensiunea lotului - 128, numărul maxim de iterații - 150.

    Rezultate experimentale

    Timpul de antrenament al rețelelor neuronale descrise mai devreme (,) folosind cele patru biblioteci considerate este prezentat mai jos (

    Top articole similare