Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Windows 8
  • Neuronske mreže, "loši" savjeti. Yandex otvara CatBoost tehnologiju mašinskog učenja

Neuronske mreže, "loši" savjeti. Yandex otvara CatBoost tehnologiju mašinskog učenja

Yandex je predstavio novi algoritam pretraživanja zasnovan na neuronskim mrežama. Prema mišljenju stručnjaka, ovo bi trebalo pomoći kompaniji da poveća svoj jaz za svojim glavnim konkurentom - Googleom na ruskom tržištu.

Ruski internet holding Yandex predstavio je novi algoritam pretraživanja zasnovan na neuronskim mrežama. To je saopštio šef službe za relevantnost usluga Aleksandar Safronov. Novi algoritam, nazvan "Korolev", pretražuje ne samo po ključnim riječima, već i po značenju, a precizniji odgovori daju se na složena pitanja, objasnio je predstavnik Yandexa.

Yandex je 2016. implementirao Palekh algoritam, koji u realnom vremenu odgovara značenju rijetkog i jedinstvenog zahtjeva i naslovu web stranice, čak i ako nemaju uobičajene ključne riječi. Na primjer, ako tražite sliku na kojoj se nebo uvija, pretraživač će moći vratiti Van Goghovu sliku Zvjezdana noć. Za razliku od Palekha, Korolev može analizirati cijelu stranicu, kao i značenje zahtjeva koje drugi korisnici slijede na nju.

Andrey Styskin, šef Yandexovog smjera pretraživanja, dao je još jedan primjer složenog upita: "film o svemiru u kojem otac komunicira sa svojom kćerkom kroz sekunde." U ovom slučaju upit ne sadrži ključne riječi, ali je algoritam pretraživanja u mogućnosti da otkrije da je riječ o filmu "Interstellar", kaže Styskin.

Prema riječima predstavnika servisa, neuronska mreža je sposobna za samoučenje, pa što više korisnika pretražuje u tražilici, rezultati će biti precizniji. Za testiranje će se koristiti otvorena crowdsourcing platforma Yandex.Toloka, pokrenuta 2014. godine. Zapravo, ovo je usluga u kojoj svako može sudjelovati u testiranju Yandex proizvoda, dati im ocjene i ostaviti komentare. Ovo omogućava kompaniji da poboljša svoje usluge, a korisnici za to dobijaju novčanu nagradu. Trenutno Yandex.Toloka ima preko 1 milion registrovanih korisnika.

„Problem sa neuronskim mrežama bio je u tome što su bile veoma spore i nisu se mogle koristiti kada se radi sa ogromnim količinama teksta u realnom vremenu“, kaže Igor Ašmanov, osnivač i upravljački partner kompanije Ashmanov & Partners. "Ako je Yandex zaista uspio privući neuronske mreže da indeksiraju cijeli volumen Runeta, ovo je zanimljivo, ovo je prilično ozbiljan proboj sa tehnološke tačke gledišta." Koliko će novi algoritam poboljšati kvalitet pretrage i da li će ga u principu poboljšati, ostaje da se analizira, rekao je Ašmanov.

Glavni konkurent Yandexa, Google, prema riječima čelnika Ashmanova i partnera, još uvijek nije službeno najavio uvođenje neuronskih mreža u svoje algoritme pretraživanja. „Gugl si može priuštiti da drugačije prilagodi faktore rangiranja i duže eksperimentiše u ovoj oblasti bez uvođenja novih tehnologija u pretragu, jednostavno zato što kompanija ima više programera i resursa“, primetio je stručnjak.


Sustići i prestići

Prema riječima analitičara VTB Capitala Vladimira Bespalova, nova verzija ruskog pretraživača je korak ka zadržavanju Yandexovog udjela na tržištu. "Ažurirana mobilna aplikacija" Search ", novi algoritam tražilice - sve bi to trebalo pomoći Yandexu da se stabilizira i poveća svoj udio na tržištu pretraživanja", kaže stručnjak. - Efekat se neće osetiti odmah, ali smanjenje upita za pretragu na duži rok može imati manje povoljan efekat na buduće performanse. Pretraga je glavni proizvod Yandexa, glavni prihod kompanije je oglašavanje, koje je vezano za pretragu."

Odluka Federalne antimonopolske službe može pomoći Yandexu da zadrži svoje pozicije u mobilnoj pretrazi, podsjeća Bespalov. U aprilu ove godine, odjel je sklopio prijateljski sporazum sa glavnim konkurentom ruske kompanije na tržištu pretraživanja - Googleom. Prema njegovim riječima, američki internet gigant će revidirati ugovore sa proizvođačima Android pametnih telefona u Rusiji i omogućiti korisnicima da odaberu alternativne usluge Google pretraživanja kao glavne na svojim uređajima.

Prema rezultatima drugog kvartala ove godine, Yandexov udio na tržištu pretraživanja u Rusiji iznosio je 54,3%, kako je objavio Yandex N.V. (matična kompanija Yandex-a) u svom finansijskom izvještaju s vezom do vlastite analitičke usluge Yandex.Radar. Od 31. jula, prema Yandex.Radar, Google je zauzimao 40,36% pretraživača u Rusiji. Prema podacima LiveInterneta, Yandex je u prosjeku u protekla tri mjeseca bio lider među pretraživačima sa udjelom od 51,1%, dok je Google imao 43,9%. Yandex N.V. ne otkriva prihode od pretrage, ali je pretraživanje i smjer portala donio kompaniji 20,135 milijardi rubalja, što je 22% više nego u istom periodu 2016. godine.

“Prethodna revolucionarna verzija Matrixnet pretrage omogućila je Yandexu da se odvoji od Gugla i poveća svoj udio za skoro 10 postotnih poena. Za pola godine. Ovo je jasan primjer kako korištenje revolucionarnih tehnologija dovodi do očiglednih poslovnih rezultata čak i na tako složenom tržištu kao što je pretraživanje “, kaže Alexander Laryanovsky, menadžerski partner online škole Skyeng i bivši direktor međunarodnog razvoja u Yandexu.

Prema riječima Tatiane Danielyan, zamjenice direktora za istraživanje i razvoj grupe kompanija ABBYY, uvođenje novih algoritama pretraživanja može promijeniti rangiranje (redoslijed prikazivanja sajtova u rezultatima pretrage). Međutim, to će biti plus za same stranice, kaže ona: "Korisnici će češće posjećivati ​​stranice koje zaista odgovaraju njihovim zahtjevima, a konverzija web stranica može se značajno povećati."

Ovaj put sam odlučio da proučavam neuronske mreže. Uspio sam steći osnovne vještine po ovom pitanju tokom ljeta i jeseni 2015. Pod osnovnim vještinama mislim da mogu sam izgraditi jednostavnu neuronsku mrežu od nule. Možete pronaći primjere u mojim spremištima na GitHubu. U ovom članku ću dati neka pojašnjenja i podijeliti resurse koje bi vam mogle biti korisne za istraživanje.

Korak 1. Neuroni i metoda napredovanja

Dakle, šta je neuronska mreža? Sačekajmo s tim i prvo se pozabavimo jednim neuronom.

Neuron je poput funkcije: uzima nekoliko vrijednosti kao ulaz i vraća jednu.

Krug ispod označava umjetni neuron. Dobija 5 i vraća 1. Ulaz je zbir tri sinapse povezane s neuronom (tri strelice lijevo).

Na lijevoj strani slike vidimo 2 ulazne vrijednosti (zeleno) i pomak (označeno smeđom).

Ulazni podaci mogu biti numerički prikazi dva različita svojstva. Na primjer, kada kreirate filter za neželjenu poštu, oni mogu značiti prisustvo više od jedne riječi u VELIKIM SLOVIMA i prisustvo riječi “vijagra”.

Ulazne vrijednosti se množe sa njihovim takozvanim "težinama", 7 i 3 (označeno plavom bojom).

Sada dodamo rezultirajuće vrijednosti s pomakom i dobijemo broj, u našem slučaju 5 (istaknut crvenom bojom). Ovo je ulaz našeg umjetnog neurona.

Tada neuron izvodi neku vrstu proračuna i daje izlaznu vrijednost. Imamo 1 jer zaokružena sigmoidna vrijednost u tački 5 je 1 (više o ovoj funkciji kasnije).

Da je u pitanju filter za neželjenu poštu, činjenica izlaza 1 značila bi da je neuron tekst označio kao neželjenu poštu.

Ilustracija neuronske mreže sa Wikipedije.

Ako kombinujete ove neurone, dobijate direktnu neuronsku mrežu - proces ide od ulaza do izlaza, preko neurona povezanih sinapsama, kao na slici levo.

Korak 2. Sigmoid

Nakon što pogledate Welch Labs tutorijale, dobra je ideja da pogledate četvrtu sedmicu Courserinog kursa neuronskih mreža za mašinsko učenje kako biste lakše razumjeli kako funkcioniraju. Kurs je veoma dubok u matematici i baziran je na Octave, a ja više volim Python. Zbog toga sam preskočio vježbe i iz video zapisa izvukao sva potrebna znanja.

Sigmoid jednostavno preslikava vašu vrijednost (duž horizontalne ose) u raspon od 0 do 1.

Prvi prioritet za mene je bio proučavanje sigmoida, kao što je on prisutan u mnogim aspektima neuronskih mreža. Znao sam nešto o njoj već od treće sedmice gore navedenog kursa, pa sam odatle pogledao video.

Ali sami video zapisi neće vas daleko odvesti. Radi potpunog razumijevanja, odlučio sam ga sam kodirati. Tako sam počeo pisati implementaciju algoritma logističke regresije (koji koristi sigmoid).

Trajao je cijeli dan, a malo je vjerovatno da je rezultat bio zadovoljavajući. Ali nema veze, jer sam shvatio kako sve funkcioniše. Možete vidjeti kod.

Ne morate to učiniti sami, jer to zahtijeva posebno znanje - glavna stvar je da razumijete kako funkcionira sigmoid.

Korak 3. Metoda razmnožavanja unazad

Razumijevanje kako funkcionira neuronska mreža od ulaza do izlaza nije tako teško. Mnogo je teže razumjeti kako se neuronska mreža trenira na skupovima podataka. Princip koji sam koristio se zove

18.07.2017, uto, 15:53 ​​po moskovskom vremenu, Tekst: Vladimir Bakhur

CatBoost biblioteka za mašinsko učenje otvorenog koda razlikuje se od tradicionalnih metoda sa algoritmom za povećanje gradijenta za fleksibilnu obuku na heterogenim podacima, uključujući nenumeričke podatke.

Fleksibilna upotreba numeričkih i nenumeričkih podataka

Yandex je predstavio novu metodu mašinskog učenja CatBoost i učinio je CatBoost biblioteku dostupnom svima na GitHubu pod licencom Apache License 2.0. Tehnika vam omogućava da efikasno trenirate modele na heterogenim podacima kao što su lokacija korisnika, istorija operacija i tip uređaja.

Prema izjavama samog Yandexa, CatBoost biblioteke su alternativa neuronskim mrežama, koje nisu prikladne za sve vrste stvarnih proizvodnih zadataka. Pod ovim uslovima, CatBoost algoritam obezbeđuje bolje performanse i konzistentnije rezultate ponovne obuke i veću predvidljivost u smislu kvaliteta krajnjeg rezultata.

„Yandex se već dugi niz godina bavi mašinskim učenjem, a CatBoost su kreirali najbolji stručnjaci u ovoj oblasti. Čineći CatBoost biblioteku otvorenim kodom, želimo da doprinesemo unapređenju mašinskog učenja,'' rekao je Mikhail Bilenko, šef odjela za mašinsku inteligenciju i istraživanje u Yandexu. - Moram reći da je CatBoost prva ruska metoda mašinskog učenja koja je postala dostupna u otvorenom kodu. Nadamo se da će zajednica stručnjaka to cijeniti i pomoći da bude još bolje."

Kako je CNews objasnio u Yandexu, CatBoost metoda je nasljednik Matrixnet metode mašinskog učenja, koja se koristi u gotovo svim Yandex servisima. Po analogiji sa Matrixnetom, CatBoost koristi mehanizam za povećanje gradijenta, koji je vrlo pogodan za rad sa heterogenim podacima.

CatBoost tehnika je zanimljiva zbog smanjenog vremena ponovne obuke zbog upotrebe vlasničkog algoritma za izgradnju modela, koji se, zauzvrat, razlikuje od standardne šeme za pojačavanje gradijenta.

Logo projekta CatBoost

Za razliku od Matrixneta, koji obučava modele na numeričkim podacima, CatBoost također uzima u obzir nenumeričke podatke, kao što su tipovi oblaka ili tipovi zgrada. Ranije su takvi podaci morali biti prevedeni u brojke, što je moglo promijeniti njihovu suštinu i utjecati na tačnost modela.

Ovi podaci se sada mogu koristiti u svom originalnom obliku, što čini da CatBoost pokazuje bolji kvalitet obuke od sličnih metoda za rad sa heterogenim podacima. Može se primijeniti u raznim oblastima - od bankarstva do industrije.

CatBoost se može pokrenuti direktno iz komandne linije ili možete koristiti prilagođene Python ili R API-je sa alatima za analizu formula i vizualizaciju učenja.

Kako je CNews-u objasnila press služba Yandexa, CatBoost je rezultat dugogodišnjeg rada najboljih stručnjaka kompanije, koji je apsorbirao dugogodišnje iskustvo kompanije u razvoju vodećih rješenja u mašinskom učenju, kao što je Matrixnet. Čineći tehnologiju javno dostupnom, Yandex namjerava dati značajan doprinos razvoju mašinskog učenja i očekuje da će zajednica stručnjaka cijeniti algoritam i pomoći da bude još bolji.

Yandex planira pružiti stalnu podršku projektu. Kako objašnjavaju u kompaniji, podrška će se izraziti u stalnom unapređenju algoritma, kao i radu sa povratnim informacijama korisnika tehnologije.

Poređenje algoritama mašinskog učenja (GitHub)

Programeri planiraju i razvoj tehnologije unutar kompanije: sada na njoj radi poseban tim koji se bavi unapređenjem i uvođenjem u veći broj servisa. Biblioteka CatBoost aplikacija će se vremenom povećavati. Budući da je tehnologija javno dostupna, sav napredak će odmah biti dostupan svim korisnicima. S obzirom na količinu i kvalitet Yandex usluga i netrivijalne zadatke koje rješavaju, kompanija je uvjerena da će tehnologija još dugo ostati lider u svojoj klasi.

U današnjem svijetu postoje različiti načini rada sa kategoričkim faktorima. Oni se sastoje od početne predobrade i pretvaranja u brojeve, objašnjava Yandex.

Najefikasnija metoda sa praktične tačke gledišta je brojanje "kontri", aktivno ga koriste takmičari na Kaggleu, a ovaj metod se koristi u pobjedničkim odlukama. U postojećim otvorenim rješenjima ova metoda se ne koristi, ali se koriste jednostavnije metode kao što je one-hot-encoding, koje obično lošije rade. Na primjer, ova predobrada se može koristiti u lightgbm algoritmu.

CatBoost koristi inteligentniji rad sa kategoričkim faktorima, pri čemu se statistika o njima ne izračunava unapred, već tokom treninga, a najkorisnije statistike se biraju za podatke i njihove kombinacije. One-hot kodiranje u CatBoostu je naravno takođe podržano; za karakteristike koje imaju malo vrijednosti, ponekad ova metoda daje plus u kvaliteti, objašnjeno u Yandexu.

Karakteristika CatBoost biblioteka je da čak i sada, u eri široko rasprostranjenog usvajanja tehnologija dubokog učenja, neuronske mreže nisu prikladne za stvarnu proizvodnju za sve vrste zadataka, a u takvim uslovima CatBoost gradijentno pojačavanje obezbeđuje veće performanse, stabilnost i predvidljivost u smislu kvaliteta konačnog rezultata.

Praktične primjene

CatBoost je već testiran na Yandex servisima. Kao dio eksperimenta, korišten je za poboljšanje rezultata pretraživanja, rangiranje feeda preporuka Yandex.Zen-a i za izračunavanje vremenske prognoze u Meteum tehnologiji. U svim slučajevima, tehnologija se pokazala boljom od Matrixneta.

U budućnosti će CatBoost raditi na drugim servisima, napominje Yandex. Također ga koristi tim Yandex Data Factory u svojim rješenjima za industriju, posebno za optimizaciju potrošnje sirovina i predviđanje kvarova.

CatBoost već ima međunarodno iskustvo: ovu metodu mašinskog učenja implementirao je Evropski centar za nuklearna istraživanja (CERN) za kombinovanje podataka iz različitih delova LHCb detektora.

Podaci prikupljeni tokom eksperimenta se obrađuju za pojedinačne sudare koristeći CatBoost brzinom od 40 miliona u sekundi.

CatBoost dostupnost

Da biste radili sa CatBoostom, samo ga trebate instalirati na svoj računar. Biblioteka podržava Linux, Windows i macOS operativne sisteme i dostupna je u programskim jezicima Python i R.

Yandex je također razvio program za vizualizaciju CatBoost Viewer, koji vam omogućava da pratite proces učenja na grafovima. CatBoost i CatBoost Viewer možete preuzeti na GitHubu.

Dmitrij Kručinin, Jevgenij Dolotov, Valentina Kustikova, Pavel Družkov, Kiril Kornjakov

Uvod

Strojno učenje je trenutno brzo rastuća oblast znanstvenog istraživanja. To je zbog mogućnosti bržeg, višeg, jačeg, lakšeg i jeftinijeg prikupljanja i obrade podataka, ali i razvoja metoda za identifikaciju zakonitosti iz tih podataka, prema kojima se odvijaju fizički, biološki, ekonomski i drugi procesi. U nekim problemima, kada je takav zakon teško odrediti, koristi se duboko učenje.

Duboko učenje ispituje metode za modeliranje apstrakcija visokog nivoa u podacima koristeći skup sekvencijalnih nelinearnih transformacija, koje se obično predstavljaju kao umjetne neuronske mreže. Danas se neuronske mreže uspješno koriste za rješavanje problema kao što su predviđanje, prepoznavanje obrazaca, kompresija podataka i niz drugih.

Relevantnost teme mašinskog učenja, a posebno dubokog učenja potvrđuje se redovnim pojavljivanjem članaka na ovu temu na Habré-u: Ovaj članak je posvećen komparativnoj analizi nekih softverskih alata za duboko učenje, od kojih veliki broj ima nedavno pojavio. Ovi alati uključuju softverske biblioteke, proširenja programskih jezika, kao i nezavisne jezike koji omogućavaju korištenje gotovih algoritama za kreiranje i obuku modela neuronskih mreža. Postojeći alati za duboko učenje imaju različite funkcionalnosti i zahtijevaju različite nivoe znanja i vještina od korisnika. Odabir pravog alata važan je zadatak koji vam omogućava da postignete željeni rezultat u najkraćem vremenu i uz manje truda.

Članak daje kratak pregled alata za dizajniranje i obuku modela neuronskih mreža. Fokus je na četiri biblioteke: Caffe, Pylearn2, Torch i Theano. Razmatraju se osnovne mogućnosti ovih biblioteka, daju se primjeri njihovog korištenja. Kvalitet i brzina biblioteka se upoređuju kada se konstruišu iste topologije neuronskih mreža za rešavanje problema klasifikacije rukom pisanih cifara (MNIST skup podataka se koristi kao uzorak za obuku i testiranje). Takođe se pokušava procijeniti pogodnost korištenja razmatranih biblioteka u praksi.

MNIST skup podataka

Nadalje, baza podataka slika rukom pisanih cifara MNIST () će se koristiti kao skup podataka koji se proučava. Slike u ovoj bazi podataka imaju rezoluciju 28x28 i pohranjuju se u formatu sivih tonova. Brojevi su centrirani na slici. Celokupna baza podataka podeljena je na dva dela: trening, koji se sastoji od 50.000 slika, i test - 10.000 slika.

Softver za duboko učenje

Dostupni su mnogi softverski alati za rješavanje problema dubokog učenja. U nastavku možete pronaći opću usporedbu funkcionalnosti najpoznatijih, ovdje dajemo opće informacije o nekima od njih (). Prvih šest softverskih biblioteka implementira najširi spektar tehnika dubokog učenja. Programeri pružaju mogućnosti za kreiranje potpuno povezanih neuronskih mreža (FC NN), konvolucionih neuronskih mreža (CNN), autoenkodera (AE) i ograničenih Boltzmann mašina (RBM). Potrebno je obratiti pažnju na preostale biblioteke. Iako imaju manje funkcionalnosti, u nekim slučajevima njihova jednostavnost pomaže u postizanju boljih performansi.

Tabela 1. Mogućnosti softvera za duboko učenje

# Ime Jezik 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 Baklja 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 + + - -

Na osnovu informacija i preporuka stručnjaka, četiri biblioteke su odabrane za dalje razmatranje:, - neke od najzrelijih i funkcionalno kompletnijih biblioteka, i - široko korišćene u zajednici. Svaka biblioteka se pregleda prema sljedećem planu:
  1. Kratke referentne informacije.
  2. Tehničke karakteristike (OS, programski jezik, zavisnosti).
  3. Funkcionalnost.
  4. Primjer formiranja mreže tipa logističke regresije.
  5. Obuka i korištenje izgrađenog modela za klasifikaciju.
Nakon razmatranja navedenih biblioteka, one se upoređuju na brojnim probnim mrežnim konfiguracijama.

Caffe biblioteka



Razvoj Caffe-a traje od septembra 2013. Razvoj je započeo sa Yangqing Jiaom tokom studija na Univerzitetu Kalifornije u Berkliju. Od tada, Caffe aktivno podržavaju Berkeley Vision and Learning Center (BVLC) i zajednica programera na GitHubu. Biblioteka se distribuira pod licencom BSD 2-Clause.

Caffe je implementiran pomoću programskog jezika C++, postoje omoti u Python-u i MATLAB-u. Zvanično podržani operativni sistemi su Linux i OS X, a postoji i nezvanični port na Windows-u. Caffe koristi BLAS biblioteku (ATLAS, Intel MKL, OpenBLAS) za vektorske i matrične proračune. Uz to, vanjske zavisnosti uključuju glog, gflags, OpenCV, protoBuf, boost, leveldb, nappy, hdf5, lmdb. Da bi se ubrzala računanja, Caffe se može pokrenuti na GPU-u koristeći osnovne mogućnosti CUDA tehnologije ili primitivne biblioteke cuDNN dubokog učenja.

Programeri Caffea podržavaju mogućnost stvaranja, obuke i testiranja potpuno povezanih i konvolucionih neuronskih mreža. Ulazni podaci i transformacije opisani su konceptom sloj... Ovisno o formatu pohrane, mogu se koristiti sljedeće vrste slojeva izvornih podataka:

  • DATA - definira sloj podataka u leveldb i lmdb formatu.
  • HDF5_DATA - sloj podataka u hdf5 formatu.
  • IMAGE_DATA je jednostavan format koji pretpostavlja da datoteka sadrži listu slika sa oznakom klase.
  • ostalo.
Transformacije se mogu specificirati pomoću slojeva:
  • INNER_PRODUCT je potpuno povezan sloj.
  • CONVOLUTION - Konvolucijski sloj.
  • POOLING - sloj prostornog objedinjavanja.
  • Local Response Normalization (LRN) - Lokalni normalizacijski sloj.
Uz to, prilikom formiranja transformacija mogu se koristiti različite aktivacijske funkcije.
  • Pozitivni dio (Rectified-Linear Unit, ReLU).
  • Sigmoidna funkcija (SIGMOID).
  • Hiperbolički tangent (TANH).
  • Apsolutna vrijednost (ABSVAL).
  • Eksponencijacija (POWER).
  • Funkcija binomne normalne log vjerovatnoće (BNLL).
Posljednji sloj modela neuronske mreže trebao bi sadržavati funkciju greške. Biblioteka sadrži sljedeće funkcije:
  • Srednja kvadratna greška (MSE).
  • Gubitak šarke.
  • Logistička funkcija gubitka.
  • Gubitak dobitka informacija.
  • Sigmoidni unakrsni gubitak entropije.
  • Softmax funkcija. Generalizira sigmoidnu unakrsnu entropiju na više od dvije klase.
U procesu obuke modela primjenjuju se različite metode optimizacije. Programeri Caffea pružaju implementacije za brojne metode:

U biblioteci Caffe, topologija neuronskih mreža, početni podaci i metoda obuke se postavljaju pomoću konfiguracijskih datoteka u prototxt formatu. Datoteka sadrži opis ulaznih podataka (trening i test) i slojeva neuronske mreže. Razmotrimo faze izgradnje takvih datoteka koristeći primjer mreže „logističke regresije“ (). U nastavku ćemo pretpostaviti da se datoteka zove linear_regression.prototxt, a nalazi se u direktoriju examples / mnist.
Rice. 2. Struktura neuronske mreže

Pylearn2 biblioteka


Pylearn2 je biblioteka razvijena u LISA laboratoriji na Univerzitetu u Montrealu od februara 2011. Ima oko 100 programera na GitHubu. Biblioteka se distribuira pod licencom BSD 3-Clause.

Pylearn2 je implementiran u Python, trenutno podržava Linux operativni sistem, takođe je moguće pokrenuti na bilo kom operativnom sistemu koristeći virtuelnu mašinu, jer programeri obezbeđuju konfigurisani omot za virtuelno okruženje bazirano na Vagrantu. Pylearn2 je dodatak Theano biblioteci. Dodatno potrebno PyYAML, PIL. Za ubrzanje izračunavanja, Pylearn2 i Theano koriste Cuda-convnet, koji je implementiran u C++/CUDA, što daje značajno povećanje brzine.

Pylearn2 podržava mogućnost kreiranja potpuno povezanih i konvolucionih neuronskih mreža, različitih tipova auto-kodera (kontraktivni auto-koderi, denoising auto-enkoderi) i ograničenih Boltzmann mašina (Gaussian RBM, spike-and-slab RBM). Osigurano je nekoliko funkcija greške: unakrsna entropija, log vjerovatnoća. Dostupne su sljedeće nastavne metode:

  • Batch Gradijentni spuštanje (BGD)
  • Stohastički gradijentni pad (SGD).
  • Nelinearni konjugirani gradijentni spuštanje (NCG).
U biblioteci Pylearn2, neuronske mreže se postavljaju koristeći njihov opis u konfiguracijskoj datoteci u YAML formatu. YAML datoteke su zgodan i brz način za serijalizaciju objekata jer su dizajnirane korištenjem tehnika objektno orijentiranog programiranja.

Torch library


Torch je naučna računarska biblioteka sa širokom podrškom za algoritme mašinskog učenja. Razvijen od strane Idiap Research Institute, New York University i NEC Laboratories America od 2000. godine, distribuira se pod BSD licencom.

Biblioteka je implementirana u Lua koristeći C i CUDA. Brzi skript jezik Lua u kombinaciji sa SSE, OpenMP, CUDA tehnologijama omogućavaju Torchu da pokaže dobru brzinu u poređenju sa drugim bibliotekama. Trenutno podržani operativni sistemi su Linux, FreeBSD, Mac OS X. Glavni moduli takođe rade na Windows-u. Zavisnosti Torch-a uključuju imagemagick, gnuplot, nodejs, npm i više paketa.

Biblioteka se sastoji od skupa modula, od kojih je svaki odgovoran za različite faze rada sa neuronskim mrežama. Tako, na primjer, modul nn pruža konfiguraciju neuronske mreže (definicija slojeva i njihovih parametara), modul optim sadrži implementacije različitih metoda optimizacije koje se koriste za obuku, i gnuplot pruža mogućnost vizualizacije podataka (crtanje, prikazivanje slika, itd.). Instaliranje dodatnih modula omogućava vam da proširite funkcionalnost biblioteke.

Torch vam omogućava da kreirate složene neuronske mreže koristeći mehanizam kontejnera. Kontejner je klasa koja kombinuje deklarisane komponente neuronske mreže u jednu zajedničku konfiguraciju, koja se kasnije može preneti u proceduru obuke. Komponenta neuronske mreže može biti ne samo potpuno povezani ili konvolucijski slojevi, već i funkcije aktivacije ili greške, kao i gotovi kontejneri. Torch vam omogućava da kreirate sledeće slojeve:

  • Potpuno povezan sloj (Linearni).
  • Funkcije aktiviranja: hiperbolički tangent (Tanh), izbor minimuma (Min) ili maksimuma (Max), softmax funkcija (SoftMax) i druge.
  • Konvolucijski slojevi: Convolution, SubSampling, MaxPooling, AveragePooling, LPPooling, SubtractiveNormalization.
Funkcije greške: srednja kvadratna greška (MSE), unakrsna entropija (CrossEntropy) itd.

Tokom treninga mogu se koristiti sljedeće metode optimizacije:

Pogledajmo proces konfiguracije neuronske mreže u Torchu. Prvo morate deklarirati kontejner, a zatim mu dodati slojeve. Redoslijed kojim se slojevi dodaju je važan jer izlaz (n-1) sloja će biti ulaz n-tog sloja.
regresija = nn.Sekvencijalna () regresija: dodaj (nn.Linear (784,10)) regresija: dodaj (nn.SoftMax ()) gubitak = nn.ClassNLLCriterion ()
Korištenje i obučavanje neuronske mreže:

  1. Učitavanje ulaznih podataka X. Funkcija torch.load (path_to_ready_dset) omogućava učitavanje pripremljenog skupa podataka u tekstualnom ili binarnom formatu. Obično je ovo Lua tabela koja se sastoji od tri polja: veličina, podaci i oznake. Ako nema gotovog skupa podataka, možete koristiti standardne Lua funkcije (na primjer, io.open (ime datoteke [, način])) ili funkcije iz paketa biblioteke Torch (na primjer, image.loadJPG (ime datoteke)).
  2. Određivanje mrežnog odgovora za ulaz X:
    Y = regresija: naprijed (X)
  3. Proračun funkcije greške E = gubitak (Y, T), u našem slučaju to je funkcija vjerovatnoće.
    E = gubitak: naprijed (Y, T)
  4. Rendering gradijenti prema algoritmu backpropagation.
    dE_dY = gubitak: unazad (Y, T) regresija: unazad (X, dE_dY)
Sad da sve spojimo. Da biste trenirali neuronsku mrežu u biblioteci Torch, morate napisati vlastiti ciklus obuke. U njemu deklarirajte specijalnu funkciju (zatvaranje) koja će izračunati mrežni odgovor, odrediti vrijednost greške i ponovo izračunati gradijente, te proslijediti ovo zatvaranje funkciji spuštanja gradijenta da ažurira težine mreže.
- Kreirajte posebne varijable: težine neuronske mreže i njihove gradijente w, dE_dw = regresija: getParameters () lokalni eval_E = funkcija (w) dE_dw: nula () - Ažuriranje gradijenata lokalno Y = regresija: naprijed (X) lokalno E = gubitak: naprijed (Y, T) lokalni dE_dY = gubitak: unatrag (Y, T) regresija: unatrag (X, dE_dY) povratak E, dE_dw kraj - Zatim, u petlji za učenje, pozovite optim.sgd (eval_E, w, optimState)
gdje je optimState parametri gradijenta spuštanja (learningRate, momentum, weightDecay, itd.). Kompletan ciklus obuke možete pogledati.

Lako je uočiti da procedura deklaracije, kao i procedura obuke, zauzima manje od 10 linija koda, što govori o lakoći korišćenja biblioteke. Istovremeno, biblioteka vam omogućava da radite sa neuronskim mrežama na prilično niskom nivou.

Spremanje i učitavanje obučene mreže vrši se pomoću posebnih funkcija:
torch.save (put, regresija) net = torch.load (put)
Kada se učita, mreža se može koristiti za klasifikaciju ili dodatnu obuku. Ako trebate saznati kojoj klasi pripada element uzorka, dovoljno je proći kroz mrežu i izračunati izlaz:
rezultat = neto: naprijed (uzorak)
Složeniji primjeri mogu se naći u bibliotečkim tutorijalima.

Theano Library


Theano je Python ekstenzija koja vam omogućava da efikasno procenite matematičke izraze koji sadrže višedimenzionalne nizove. Biblioteka je dobila ime po imenu žene starogrčkog filozofa i matematičara Pitagore - Feano (ili Teano). Theano je razvijen u LISA laboratoriji da podrži brzi razvoj algoritama za mašinsko učenje.

Biblioteka je implementirana u Python-u i podržana je na Windows, Linux i Mac OS operativnim sistemima. Theano uključuje kompajler koji prevodi matematičke izraze napisane u Pythonu u efikasan C ili CUDA kod.

Theano pruža osnovni skup alata za konfiguraciju i obuku neuronske mreže. Moguće je implementirati višeslojne potpuno povezane mreže (Multi-Layer Perceptron), konvolucione neuronske mreže (CNN), rekurentne neuronske mreže (Recurrent Neural Networks, RNN), autoenkodere i ograničene Boltzmannove mašine. Različite funkcije aktivacije su također dostupne, posebno sigmoidna, softmax-funkcija, unakrsna entropija. Batch SGD se koristi tokom treninga.

Razmotrimo konfiguraciju neuronske mreže u Theanu. Radi praktičnosti, implementirat ćemo klasu LogisticRegression () koja će sadržavati varijable - parametre učenja W, b i funkcije za rad s njima - izračunavanje mrežnog odgovora (y = softmax (Wx + b)) i funkciju greške. Zatim, da biste trenirali neuronsku mrežu, kreirajte funkciju train_model. Za to je potrebno opisati metode koje određuju funkciju greške, pravilo za izračunavanje gradijenata, metodu za promjenu težina neuronske mreže, veličinu i lokaciju uzorka mini serije (same slike i odgovori za njih). Nakon definiranja svih parametara, funkcija se kompajlira i prosljeđuje u petlju za učenje.


Rice. 3. Dijagram klasa za implementaciju neuronske mreže u Theano

Programska implementacija časa

class LogisticRegression (objekt): def __init __ (self, input, n_in, n_out): # y = W * x + b # deklarirati varijable, definirati tip, broj ulaza i izlaza self.W = theano.shared (# inicijalizirati inicijal težine sa nulama vrijednost = numpy.zeros ((n_in, n_out), dtype = theano.config.floatX), ime = "W", posuditi = True) self.b = theano.shared (vrijednost = numpy.zeros ((n_out) ,), dtype = theano.config.floatX), name = "b", borrow = True) # dodaj softmax funkciju aktivacije, mrežni izlaz - varijabla y_pred self.p_y_given_x = T.nnet.softmax (T.dot (ulaz, self .W) + self.b) self.y_pred = T.argmax (self.p_y_given_x, axis = 1) self.params = # definiraj funkciju greške def negative_log_likelihood (self, y): return -T.mean (T.log (self.p_y_given_x )) # x - unosi se na ulaz mreže # skup slika (minibatch) je raspoređen po redovima u matrici x # y - odgovor mreže na svaki uzorak x = T.matrix ("x ") y = T.ivector ("y") # kreirajte model logističke regresije svaka MNIST slika ima veličinu 28 * 28 klasifikator = LogisticR egresija (ulaz = x, n_in = 28 * 28, n_out = 10) # vrijednost funkcije greške koju pokušavamo minimizirati tokom treninga trošak = classifier.negative_log_likvelihood (y) # da biste izračunali gradijente, morate pozvati Theano funkcija - grad g_W = T .grad (trošak = trošak, wrt = klasifikator.W) g_b = T.grad (trošak = trošak, wrt = klasifikator.b) # definirajte pravila za ažuriranje ažuriranja težina neuronske mreže = [( classifier.W, classifier.W - learning_rate * g_W ), (classifier.b, classifier.b - learning_rate * g_b)] # kompajlirajte funkciju obuke, kasnije će biti pozvana u petlji treninga train_model = theano.function (inputs = , izlazi = trošak, ažuriranja = ažuriranja, data = (x : skup_voza, y: skup_voza_y))


Za brzo spremanje i učitavanje parametara neuronske mreže, možete koristiti funkcije iz cPickle paketa:
import cPickle save_file = open ("path", "wb") cPickle.dump (classifier.W.get_value (posuđivanje = True), save_file, -1) cPickle.dump (classifier.b.get_value (posuđivanje = True), save_file , -1) save_file.close () file = open ("put") classifier.W.set_value (cPickle.load (save_file), borrow = True) classifier.b.set_value (cPickle.load (save_file), borrow = True )
Lako je uočiti da proces kreiranja modela i određivanja njegovih parametara zahtijeva pisanje obimnog i bučnog koda. Biblioteka je niskog nivoa. Treba istaći njegovu fleksibilnost, kao i mogućnost implementacije i korištenja vlastitih komponenti. Na službenoj web stranici biblioteke nalazi se veliki broj edukativnih materijala na različite teme.

Poređenje biblioteka na primjeru problema klasifikacije rukopisnih brojeva

Testna infrastruktura

Tokom eksperimenata za procjenu performansi biblioteka, korištena je sljedeća testna infrastruktura:
  1. Ubuntu 12.04, Intel Core i5-3210M @ 2.5GHz (CPU eksperimenti).
  2. Ubuntu 14.04, Intel Core i5-2430M @ 2.4GHz + NVIDIA GeForce GT 540M (GPU eksperimenti).
  3. GCC 4.8, NVCC 6.5.

Mrežne topologije i parametri obuke

Računski eksperimenti su izvedeni na potpuno povezanim i konvolucijskim neuronskim mrežama sljedeće strukture:

Sve težine su nasumično inicijalizirane prema uniformnom zakonu distribucije u rasponu (−6 / (n_in + n_out), 6 / (n_in + n_out)), gdje su n_in, n_out broj neurona na ulazu i izlazu sloja , odnosno. Parametri stohastičkog gradijentnog spuštanja (SGD) biraju se jednaki sljedećim vrijednostima: brzina učenja - 0,01, impuls - 0,9, opadanje težine - 5e-4, veličina serije - 128, maksimalni broj iteracija - 150.

Eksperimentalni rezultati

Vrijeme obuke za neuronske mreže opisane ranije (,) koristeći četiri razmatrane biblioteke je predstavljeno u nastavku (

Istorijski gledano, umjetne neuronske mreže su tokom svoje više od pola stoljeća istorije iskusile i periode brzih uspona i padova i povećane pažnje javnosti, kao i periode skepticizma i ravnodušnosti koji su ih zamijenili. U dobrim vremenima, naučnicima i inženjerima se čini da je konačno pronađena univerzalna tehnologija koja može zamijeniti ljude u bilo kojem kognitivnom zadatku. Poput pečuraka nakon kiše pojavljuju se razni novi modeli neuronskih mreža, između njihovih autora, profesionalnih matematičara, vode se intenzivne rasprave o većem ili manjem stepenu biološkosti modela koje su predložili. Profesionalni biolozi posmatraju ove rasprave sa strane, povremeno se prekidajući i uzvikujući "Da, isto se ne dešava u stvarnoj prirodi!" - i bez većeg efekta, pošto matematičari neuronskih mreža slušaju biologe, po pravilu, samo kada se činjenice biologa slažu sa njihovim sopstvenim teorijama. Međutim, s vremenom se postupno akumulira skup zadataka na kojima neuronske mreže rade iskreno loše i entuzijazam ljudi se hladi.

Ovih dana neuronske mreže su ponovo u zenitu zahvaljujući izumu nenadzirane metode pre-učenja zasnovane na ograničenim Bolzmannovim mašinama (RBM), koja omogućava treniranje dubokih neuronskih mreža (tj. sa ekstra velikim, po narudžbini). desetine hiljada, broj neurona) i uspjeh dubokih neuronskih mreža u praktičnim problemima prepoznavanja govora i slike. Na primjer, prepoznavanje govora u Androidu implementirano je upravo na dubokim neuronskim mrežama. Koliko će ovo trajati i koliko će duboke neuronske mreže ispuniti njihova očekivanja, nije poznato.
U međuvremenu, uporedo sa svim naučnim sporovima, trendovima i trendovima, izdvaja se zajednica korisnika neuronskih mreža - softverskih inženjera-praktičara koji su zainteresovani za primenjeni aspekt neuronskih mreža, njihovu sposobnost da uče iz prikupljenih podataka i rešavaju probleme prepoznavanja. Dobro razvijeni, relativno mali modeli višeslojnog perceptrona (MLP) i mreže radijalnih baznih funkcija (RBF) odlični su u mnogim praktičnim problemima klasifikacije i predviđanja. Ove neuronske mreže su više puta opisane, preporučio bih sljedeće knjige, po redu moje lične simpatije prema njima: Osovsky, Bishop, Khaikin; postoje i dobri kursevi na Courseri i sličnim resursima.

Međutim, što se tiče opšteg pristupa korišćenju neuronskih mreža u praksi, on se suštinski razlikuje od uobičajenog determinističkog razvojnog pristupa „programirano, radi, dakle uvek radi“. Neuronske mreže su inherentno probabilistički modeli i pristup njima bi trebao biti potpuno drugačiji. Nažalost, mnogi programeri početnici u tehnologijama mašinskog učenja uopšte i neuronskim mrežama posebno prave sistemske greške kada rade sa njima, frustriraju se i napuštaju ovaj posao. Ideja o pisanju pravog traktata o Habru nastala je nakon komunikacije sa tako razočaranim korisnicima neuronskih mreža - odličnim, iskusnim, samouvjerenim programerima.

Evo moje liste pravila i uobičajenih grešaka u korištenju neuronskih mreža.

1. Ako je moguće ne koristiti neuronske mreže, nemojte ih koristiti.
Neuronske mreže omogućavaju rješavanje problema ako je nemoguće predložiti algoritam višestrukim (ili vrlo višestrukim) gledanjem podataka našim očima. Na primjer, ako ima puno podataka, oni su nelinearni, bučni i/ili visokodimenzionalni.

2. Složenost neuronskih mreža treba da bude adekvatna složenosti problema.
Moderni personalni računari (na primjer, Core i5, 8 GB RAM-a) omogućavaju obuku neuronskih mreža u ugodnom vremenu na uzorcima od desetina hiljada primjera, sa dimenzijama ulaznih podataka do stotinu. Veliki uzorci predstavljaju izazov za gore navedene duboke neuronske mreže, koje su obučene na multiprocesorskim GPU-ovima. Ovi modeli su vrlo zanimljivi, ali su van fokusa ovog članka na Habru.

3. Podaci za obuku moraju biti reprezentativni.
Uzorak obuke treba u potpunosti i diverzificirati opisani fenomen, uključiti različite moguće situacije. Dobro je imati puno podataka, ali samo to ne pomaže uvijek. U uskim krugovima raširena je šala kada geolog dođe do prepoznavača, stavi komad minerala ispred sebe i zatraži da se na osnovu njega razvije sistem za prepoznavanje takve tvari. "Je li moguće više primjera podataka?" - pita prepoznavač. "Svakako!" - odgovara geolog, vadi kramp i cepa svoj komad minerala na još nekoliko komada. Kao što razumijete, od takve operacije neće biti nikakve koristi - tako povećan uzorak ne nosi nikakve nove informacije.

4. Promiješajte uzorak.
Nakon što se prikupe vektori ulaznih i izlaznih podataka, ako su mjerenja nezavisna jedna od druge, promijenite redoslijed vektora na proizvoljan način. Ovo je ključno za ispravnu podelu uzorka na obuku/testiranje/validaciju i sve metode obuke “uzorak po uzorak”.

5. Normalizirajte i centrirajte svoje podatke.
Za višeslojne perceptrone, i za mnoge druge modele, vrijednosti ulaznih podataka moraju biti unutar [-1; 1]. Prije nego što ih pošaljete u neuronsku mrežu, oduzmite prosjek od podataka i podijelite sve vrijednosti sa maksimalnom vrijednošću.

6. Podijelite uzorak na Train, Test i Validation.
Glavna greška početnika je da osiguraju minimalnu grešku u radu neuronske mreže na setu za obuku, istovremeno je dovježbaju kao pakao i onda požele isto dobar kvalitet na novim stvarnim podacima. Ovo je posebno lako učiniti ako su podaci mali (ili su svi "iz jednog komada"). Rezultat može biti vrlo frustrirajući: neuronska mreža će se prilagoditi uzorku što je više moguće i izgubiti performanse na stvarnim podacima. Kako biste kontrolisali generalizacijske sposobnosti vašeg modela, podijelite sve podatke u tri uzorka sa omjerom 70:20:10. Trenirajte na vlaku, povremeno provjeravajući kvalitet modela na Testu. Za konačnu nepristrasnu procjenu - Validacija.
Tehnika unakrsne validacije, kada se Train i Test formiraju nekoliko puta naizmjence na proizvoljan način od istih podataka, može biti varljiva i dati lažan utisak o dobrom kvalitetu rada sistema - na primjer, ako se podaci uzimaju iz različitih izvora i to je kritično. Koristite ispravnu validaciju!

7. Primijenite regularizaciju.
Regularizacija je tehnika koja izbjegava ponovnu obuku neuronske mreže tokom treninga, čak i ako ima malo podataka. Ako pronađete potvrdni okvir s ovom riječi, obavezno ga označite. Znak preobučene neuronske mreže su velike vrijednosti težine, reda stotine i hiljade, takva neuronska mreža neće normalno raditi na novim podacima koji do sada nisu viđeni

8. Nema potrebe za ponovnom obukom neuronske mreže na mreži.
Ideja o stalnom preobuci neuronske mreže na novim dolaznim podacima je sama po sebi ispravna, u stvarnim biološkim sistemima se upravo to dešava. Učimo svaki dan i rijetko poludimo. Ipak, za konvencionalne umjetne neuronske mreže u sadašnjoj fazi tehničkog razvoja, ova praksa je rizična: mreža se može ponovo obučiti ili prilagoditi najnovijim primljenim podacima - i izgubiti svoje generalizacijske sposobnosti. Da bi se sistem mogao koristiti u praksi, neuronska mreža mora: 1) trenirati, 2) testirati kvalitetu na uzorcima za testiranje i validaciju, 3) odabrati uspješnu verziju mreže, popraviti njene težine i 4) koristiti obučene neuronske mreže u praksi, težine u procesu upotrebe se ne mijenjaju.

9. Koristite nove algoritme učenja: Levenberg-Marquardt, BFGS, konjugirani gradijenti, itd.
Duboko sam uvjeren da je implementacija učenja povratnog širenja sveta dužnost svakoga ko radi s neuronskim mrežama. Ova metoda je najjednostavnija, relativno laka za programiranje i omogućava vam da dobro proučite proces učenja neuronskih mreža. U međuvremenu, backpropagation je izmišljen početkom 70-ih, a postao je popularan sredinom 80-ih godina prošlog stoljeća, od tada su se pojavile naprednije metode koje mogu značajno poboljšati kvalitetu obrazovanja. Bolje ih iskoristi.

10. Obučite neuronske mreže u MATLAB-u i sličnim prijateljskim okruženjima.
Ako niste naučnik koji razvija nove metode obuke neuronskih mreža, već praktični programer, ne bih preporučio da sami kodirate proceduru za obuku neuronskih mreža. Postoji veliki broj softverskih paketa, uglavnom u MATLAB-u i Pythonu, koji vam omogućavaju da trenirate neuronske mreže, dok kontrolišete proces učenja i testiranja koristeći prikladne alate za vizualizaciju i otklanjanje grešaka. Iskoristite naslijeđe čovječanstva! Meni se lično sviđa pristup „učenje u MATLAB-u sa dobrom bibliotekom - implementacija obučenog modela ručno“, prilično je moćan i fleksibilan. Izuzetak je paket STATISTICA koji sadrži napredne metode za podučavanje neuronskih mreža i omogućava njihovo generiranje u obliku C programskog koda, što je pogodno za implementaciju.

U sljedećem članku planiram detaljno opisati kompletan industrijski ciklus za pripremu neuronske mreže, koja se koristi za zadatke prepoznavanja u komercijalnom softverskom proizvodu, na osnovu gore opisanih principa.

Sretno!

Književnost

Hinton G., Deng L., Yu D., Dahl G., Mohamed A., Jaitly N., Senior A., ​​Vanhoucke V., Nguyen P., Sainath T. i Kingsbury B. Duboke neuronske mreže za akustiku Modeliranje u prepoznavanju govora, IEEE časopis za obradu signala, Vol. 29, br. 6, 2012, str. 82 - 97.
Ciresan D., Meier U., Masci J i Schmidhuber J. Duboka neuronska mreža sa više kolona za klasifikaciju saobraćajnih znakova. Neuralne mreže, Vol. 34, avgust 2012, str. 333 - 338
S. Osovsky. Neuronske mreže za obradu informacija - traka. iz poljskog. M.: Finansije i statistika, 2002. - 344 str.
Biskup C.M. Prepoznavanje uzoraka i mašinsko učenje. Springer, 2006. - 738 str.
S. Khaikin. Neuronske mreže: kompletan kurs. Williams, 2006.

Top srodni članci