Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • TV (Smart TV)
  • Yandex je predstavio novu verziju pretraživanja temeljenu na neuronskim mrežama. Yandex otvara tehnologiju strojnog učenja CatBoost

Yandex je predstavio novu verziju pretraživanja temeljenu na neuronskim mrežama. Yandex otvara tehnologiju strojnog učenja CatBoost

Povijesno gledano, umjetne neuronske mreže u svojoj su više od pola stoljeća povijesti doživjele kako razdoblja brzog uspona i povećane pozornosti javnosti, tako i razdoblja skepse i ravnodušnosti koja su ih pratila. U Dobra vremena Znanstvenicima i inženjerima se čini da su konačno pronašli univerzalnu tehnologiju koja može zamijeniti ljude u svim kognitivnim zadacima. Kao gljive poslije kiše niču razni novi modeli neuronskih mreža, a između njihovih autora, profesionalnih matematičara, vode se žestoke rasprave o većem ili manjem stupnju biologičnosti modela koje predlažu. Profesionalni biolozi promatraju te rasprave sa strane, povremeno se prekidajući i uzvikujući "Da, to se ne događa u stvarnoj prirodi!" – i to bez većeg učinka, jer matematičari neuronskih mreža slušaju biologe, u pravilu, samo kada su činjenice biologa u skladu s njihovim vlastitim teorijama. Međutim, s vremenom se postupno nakuplja gomila zadataka za koje neuronske mreže rade iskreno loše i entuzijazam ljudi se hladi.

Ovih su dana neuronske mreže ponovno u zenitu svoje slave zahvaljujući izumu nenadzirane metode preduvježbavanja koja se temelji na Ograničenim Bolzmannovim strojevima (RBM), što omogućuje uvježbavanje dubokih neuronskih mreža (tj. s iznimno velikim, na reda desetaka tisuća, broj neurona) i uspjeh dubokih neuronskih mreža u praktičnim problemima prepoznavanja govora i slike. Na primjer, prepoznavanje govora u Androidu implementirano je pomoću dubokih neuronskih mreža. Nije poznato koliko će to trajati i koliko će duboke neuronske mreže opravdati očekivanja koja su im postavljena.
U međuvremenu, paralelno sa svim znanstvenim prijeporima, strujanjima i trendovima, jasno se ističe zajednica korisnika neuronskih mreža - programskih inženjera praktičara koje zanima primijenjeni aspekt neuronskih mreža, njihova sposobnost učenja iz prikupljenih podataka i rješavanja problema prepoznavanja. Mnogi praktični problemi klasifikacije i predviđanja rješavaju se dobro dizajniranim, relativno malim modelima višeslojnog perceptrona (MLP) i mreža radijalne osnovne funkcije (RBF). Ove neuronske mreže su opisane mnogo puta; preporučio bih sljedeće knjige, prema mojim osobnim simpatijama prema njima: Osovsky, Bishop, Khaikin; Postoje i dobri tečajevi na Courseri i sličnim resursima.

Međutim, što se tiče općeg pristupa korištenju neuronskih mreža u praksi, on se bitno razlikuje od uobičajenog determinističkog pristupa razvoju "programirano, radi, znači da uvijek radi." Neuronske mreže su po svojoj prirodi probabilistički modeli i pristup njima bi trebao biti potpuno drugačiji. Nažalost, mnogi novi programeri tehnologija strojnog učenja općenito, a posebno neuronskih mreža rade sistemske pogreške pri radu s njima, razočaraju se i odustanu od toga. Ideja o pisanju ove rasprave na Habru nastala je nakon komunikacije s tako razočaranim korisnicima neuronskih mreža - izvrsnim, iskusnim, samouvjerenim programerima.

Ovdje je moj popis pravila i uobičajenih pogrešaka pri korištenju neuronskih mreža.

1. Ako je moguće ne koristiti neuronske mreže, nemojte ih koristiti.
Neuronske mreže omogućuju vam da riješite problem ako je nemoguće predložiti algoritam opetovanim (ili vrlo opetovanim) gledanjem podataka svojim očima. Na primjer, ako ima puno podataka, oni su nelinearni, imaju buku i/ili su veliki.

2. Složenost neuronskih mreža mora biti primjerena složenosti zadatka.
Moderno osobnih računala(na primjer, Core i5, 8 GB RAM-a) omogućuju vam treniranje neuronskih mreža u ugodnom vremenu koristeći uzorke od desetaka tisuća primjera, s dimenzijama ulaznih podataka do stotina. Veliki uzorci izazov su za gore spomenute duboke neuronske mreže koje se treniraju na višeprocesorskim GPU-ovima. Ovi modeli su vrlo zanimljivi, ali su izvan fokusa ovog habr članka.

3. Podaci o obuci moraju biti reprezentativni.
Uzorak za obuku treba u potpunosti i sveobuhvatno predstavljati fenomen koji se opisuje i uključivati ​​različite moguće situacije. Dobro je imati puno podataka, ali to samo po sebi ne pomaže uvijek. U uskim krugovima raširena je šala kada geolog dođe prepoznavaču, stavi pred njega komadić minerala i zamoli ga da pomoću njega razvije sustav za prepoznavanje takve tvari. "Mogu li dobiti još primjera podataka?" - pita prepoznavač. "Sigurno!" - odgovara geolog, vadi pijuk i cijepa svoj komad minerala na još nekoliko dijelova. Kao što razumijete, neće biti koristi od takve operacije - ne nove informacije tako povećan uzorak ne nosi u sebi.

4. Pomiješajte odabir.
Nakon što su prikupljeni vektori ulaznih i izlaznih podataka, ako su mjerenja neovisna jedno o drugom, promijenite redoslijed vektora na bilo koji način. Ovo je ključno za ispravnu podjelu uzorka na obuku/test/validaciju i sve metode obuke uzorak po uzorak.

5. Normalizirajte i centrirajte podatke.
Za višeslojne perceptrone i za mnoge druge modele, vrijednosti ulaznih podataka moraju ležati u rasponu [-1;1]. Prije nego što ih unesete u neuronsku mrežu, oduzmite prosjek od podataka i podijelite sve vrijednosti s maksimalnom vrijednošću.

6. Podijelite uzorak na trening, test i validaciju.
Glavna pogreška početnika je osigurati minimalnu pogrešku u radu neuronske mreže na uzorku za obuku, istovremeno ga vraški prekvalificirajući, a zatim poželjeti istu dobru kvalitetu na novim stvarnim podacima. To je posebno lako učiniti ako ima malo podataka (ili su svi iz jednog komada). Rezultat može biti vrlo razočaravajući: neuronska mreža će se maksimalno prilagoditi uzorku i izgubit će svoju funkcionalnost na stvarnim podacima. Kako biste kontrolirali generalizirajuće sposobnosti vašeg modela, podijelite sve podatke u tri uzorka u omjeru 70:20:10. Vježbajte u vlaku, povremeno provjeravajući kvalitetu modela na Testu. Za konačnu nepristranu procjenu – Validacija.
Tehnika unakrsne provjere, gdje se Train i Test generiraju nekoliko puta na slučajan način iz istih podataka, može biti podmukla i dati lažni dojam o dobroj kvaliteti sustava - na primjer, ako su podaci preuzeti iz različiti izvori a ovo je kritično. Koristite ispravnu provjeru valjanosti!

7. Primijenite regularizaciju.
Regularizacija je tehnika koja vam omogućuje da izbjegnete pretreniranje neuronske mreže tijekom treninga, čak i ako ima malo podataka. Ako pronađete potvrdni okvir s ovom riječi, svakako ga označite. Znak pretrenirane neuronske mreže – velike vrijednosti težine, reda veličine stotina i tisuća, takva neuronska mreža neće raditi normalno na novim, prethodno neviđenim podacima

8. Nema potrebe ponovno uvježbavati neuronsku mrežu online.
Ideja stalnog ponovnog uvježbavanja neuronske mreže na novim pristiglim podacima je sama po sebi točna; u stvarnim biološkim sustavima upravo se to događa. Učimo svaki dan i rijetko kad poludimo. Međutim, za konvencionalne umjetne neuronske mreže na sadašnjem stupnju tehničkog razvoja, ova praksa je riskantna: mreža se može pretrenirati ili prilagoditi najnovijim primljenim podacima - i izgubiti svoje sposobnosti generalizacije. Kako bi se sustav mogao koristiti u praksi, neuronska mreža treba: 1) trenirati, 2) testirati kvalitetu na testnim i validacijskim uzorcima, 3) odabrati uspješnu mrežnu opciju, popraviti njezine težine i 4) koristiti treniranu neuronsku mreži u praksi, težine u procesu ne mijenjaju upotrebu.

9. Koristite nove algoritme učenja: Levenberg-Marquardt, BFGS, Conjugate Gradients itd.
Duboko sam uvjeren da je implementacija backpropagation učenja sveta dužnost svakoga tko radi s neuronskim mrežama. Ova metoda je najjednostavnija, relativno laka za programiranje i omogućuje vam temeljito proučavanje procesa učenja neuronskih mreža. U međuvremenu, backpropagation je izumljen početkom 70-ih i 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 učenja. Bolje ih iskoristi.

10. Uvježbajte neuronske mreže u MATLAB-u i sličnim okruženjima prilagođenim korisnicima.
Ako niste znanstvenik koji razvija nove metode za obuku neuronskih mreža, već praktičan programer, ne bih preporučio da sami kodirate postupak za obuku neuronskih mreža. postoji veliki broj softverski paketi, uglavnom u MATLAB-u i Pythonu, koji vam omogućuju obuku neuronskih mreža, dok kontrolirate proces obuke i testiranja pomoću zgodno sredstvo vizualizacija i otklanjanje pogrešaka. Uživajte u naslijeđu čovječanstva! Osobno mi se sviđa pristup "uvježbavanje u MATLAB-u s dobrom bibliotekom - implementirajte uvježbani model ručno"; prilično je moćan i fleksibilan. Izuzetak je paket STATISTICA koji sadrži napredne metode za obuku neuronskih mreža i omogućuje vam njihovo generiranje u obliku programski kod u C-u, pogodan za implementaciju.

U sljedećem članku planiram detaljno opisati puni industrijski ciklus pripreme neuronske mreže implementirane na temelju gore opisanih principa, a koja se koristi za zadatke prepoznavanja u komercijalnom softverskom proizvodu.

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 Signal Processing Magazine, sv. 29, br. 6, 2012., str. 82 – 97 (prikaz, stručni).
Ciresan D., Meier U., Masci J i Schmidhuber J. Duboka neuronska mreža s više stupaca za klasifikaciju prometnih znakova. Neuronske mreže, sv. 34, kolovoz 2012., str. 333 – 338 (prikaz, stručni).
S. Osovski. Neuronske mreže za obradu informacija - trans. s poljskog. M.: Financije i statistika, 2002. – 344 str.
Biskup C.M. Prepoznavanje uzoraka i strojno učenje. Springer, 2006. – 738 str.
S. Khaikin. Neuronske mreže: puni tečaj. Williams, 2006. (enciklopedijska natuknica).

Bok svima!

U ovom ću članku govoriti o novom udobnom načinu programiranja u Pythonu.

Ovo je manje poput programiranja, a više poput stvaranja članaka (izvješća/demonstracije/istraživanja/primjeri): možete umetnuti uobičajeni tekst objašnjenja među blokove Python koda. Rezultat izvršavanja koda nisu samo brojevi i tekst (kao što je slučaj s konzolom pri radu s Pythonom), već i grafikoni, dijagrami, slike...

Primjeri dokumenata koje možete izraditi:

Izgleda cool? Želite li izraditi iste dokumente? Onda je ovaj članak za vas!

Neuronske mreže se stvaraju i treniraju uglavnom na Python jezik. Stoga je vrlo važno imati osnovno razumijevanje kako u njemu pisati programe. U ovom članku ću kratko i jasno govoriti o osnovnim konceptima ovog jezika: varijablama, funkcijama, klasama i modulima.

Materijal je namijenjen osobama koje nisu upoznate s programskim jezicima.

Prvo morate instalirati Python. Zatim trebate instalirati prikladno okruženje za pisanje programa u Pythonu. Portal je posvećen ova dva koraka.

Ako je sve instalirano i konfigurirano, možete početi.

Neuronske mreže moraju biti napisane u nekom programskom jeziku. Ima ih jako puno, ali ja preporučam (i koristim u udžbeniku i člancima) jezik Python. Zašto?

  1. Vrlo je lako naučiti
  2. Veliki broj gotovih biblioteka
  3. Kada pogledate program, odmah vidite algoritam koji implementira
  4. Većina stručnjaka za strojno učenje koristi Python i većina je biblioteka također stvorena posebno za ovaj programski jezik

U prethodnom smo dijelu naučili kako izračunati promjene signala pri prolasku kroz neuronsku mrežu. Upoznali smo se s matricama, njihovim produktima i izvedenicama jednostavne formule za izračune.

U šestom dijelu prijevoda objavljujem 4 dijela knjige odjednom. Sve su one posvećene jednom od naj važne teme u području neuronskih mreža – metoda povratnog širenja. Naučit ćete izračunati pogrešku svih neurona u neuronskoj mreži samo na temelju konačne pogreške mreže i težine veze.

Materijal je složen, stoga slobodno postavljajte svoja pitanja na forumu.

Možete prenijeti.

Uživaj čitajući!

U 5. dijelu prijevoda predstavljam 3 odjeljka povezana po značenju.

Prvo ćemo osobno izračunati izlaze dvoslojne neuronske mreže. Zatim ćemo se upoznati s matricama i njihovim proizvodima. Koristeći stečeno znanje, izvest ćemo jednostavne formule za izračun pretvorbe signala u neuronskoj mreži. A u zadnjem odjeljku provjerit ćemo dobivene formule u praksi, računajući izlaze troslojne neuronske mreže.

Možete prenijeti.

Uživaj čitajući!

Četvrti dio prijevoda je spreman!

Prestanimo lupati okolo i prijeđimo izravno na temu knjige – neuronske mreže.

U ovom dijelu prijevoda promotrit ćemo biološke neuronske mreže i usporediti ih s tradicionalnim računalima. Zatim ćemo izgraditi model umjetnog neurona i na kraju prijeći izravno na umjetne neuronske mreže.

Možete prenijeti.

Uživaj čitajući!

Treći dio prijevoda!

Članak nije jako dug. Pokriva samo jedan dio knjige. Cilj je pokazati da svaka metoda ima svoja ograničenja. U članku se raspravlja o ograničenjima linearnog klasifikatora. Također se uvode pojmovi logičke funkcije i XOR problemi.

Možete prenijeti.

Uživaj čitajući!

U ovom ću članku govoriti o zanimljivom glazbenom generatoru koji radi na neuronskim mrežama. Generator se zove Amper. Uz njegovu pomoć, svaka osoba, čak i netko tko je daleko od skladanja skladbi, može samostalno stvoriti jedinstvenu melodiju i koristiti je za svoje potrebe.

Evo, na primjer, što je neuronska mreža razvila za mene.

  • Piton,
  • Strojno učenje,
  • Tehnologije pretraživanja
  • Danas je Yandex objavio vlastitu biblioteku CatBoost, razvijenu uzimajući u obzir dugogodišnje iskustvo tvrtke u području strojnog učenja, u otvoreni kod. Uz njegovu pomoć možete učinkovito trenirati modele na heterogenim podacima, uključujući one koje je teško predstaviti u obliku brojeva (na primjer, vrste oblaka ili kategorije proizvoda). Izvorni kod, dokumentacija, mjerila i potrebni alati već su objavljeni na GitHubu pod licencom Apache 2.0.

    CatBoost je nova metoda strojnog učenja koja se temelji na pojačavanju gradijenta. Implementira se u Yandexu za rješavanje problema rangiranja, predviđanja i izrade preporuka. Štoviše, već se koristi u sklopu suradnje s Europskom organizacijom za nuklearna istraživanja (CERN) i industrijskim klijentima Yandex Data Factory. Dakle, kako se CatBoost razlikuje od ostalih analoga otvorenog koda? Zašto boostiranje, a ne metoda neuronske mreže? U kakvoj je vezi ova tehnologija s već poznatim Matrixnetom? I kakve veze mačke imaju s tim? Danas ćemo odgovoriti na sva ova pitanja.

    Pojam “strojno učenje” pojavio se 50-ih godina prošlog stoljeća. Ovaj izraz se odnosi na pokušaj da se računalo nauči rješavati probleme koji su ljudima laki, ali je teško formalizirati način na koji se rješavaju. Kao rezultat strojnog učenja, računalo može pokazivati ​​ponašanje koje nije izričito predviđeno za njega. U suvremenom svijetu plodove strojnog učenja susrećemo mnogo puta svaki dan, mnogi od nas toga nisu ni svjesni. Koristi se za izradu feedova na društvenim mrežama, popisa "sličnih proizvoda" u internetskim trgovinama, pri izdavanju kredita u bankama i određivanju troškova osiguranja. Tehnologije strojnog učenja koriste se za traženje lica na fotografijama ili brojnih fotofiltara. Za potonje se, usput, obično koriste neuronske mreže, a o njima se piše toliko često da može postojati pogrešno mišljenje da je to "srebrni metak" za rješavanje problema bilo koje složenosti. Ali to nije istina.

    Neuronske mreže ili povećanje gradijenta

    Zapravo, strojno učenje je vrlo različito: postoji veliki broj različitih metoda, a neuronske mreže su samo jedna od njih. Ilustracija toga su rezultati natjecanja na Kaggle platformi, gdje različite metode pobjeđuju na različitim natjecanjima, a gradient boosting na mnogima.

    Neuronske mreže izvrsne su u rješavanju određenih problema – na primjer, onih u kojima trebate raditi s homogenim podacima. Homogeni podaci sastoje se od, na primjer, slika, zvuka ili teksta. U Yandexu nam pomažu da bolje razumijemo upite za pretraživanje, tražim slične slike na internetu, prepoznati svoj glas u Navigatoru i još mnogo toga. Ali to nisu svi zadaci za strojno učenje. Postoji čitav niz ozbiljnih izazova koje ne mogu riješiti same neuronske mreže - potrebno im je pojačanje gradijenta. Ova metoda je neizostavna tamo gdje podataka ima puno i njihova struktura je heterogena.

    Na primjer, ako vam je potrebna točna vremenska prognoza, koja uzima u obzir veliki iznosčimbenici (temperatura, vlažnost, radarski podaci, opažanja korisnika i mnogi drugi). Ili ako trebate kvalitativno rangirati rezultate pretraživanja - to je ono što je potaknulo Yandex da razvije vlastitu metodu strojnog učenja.

    Matrixnet

    Prvi tražilice nisu bili tako složeni kao sada. Zapravo, isprva je to bilo samo pretraživanje riječi - bilo je tako malo stranica da među njima nije bilo previše konkurencije. Zatim je bilo više stranica i postalo je potrebno rangirati ih. Počele su se uzimati u obzir razne komplikacije – frekvencija riječi, tf-idf. Tada je bilo previše stranica o bilo kojoj temi, dogodio se prvi važan proboj - počeli su uzimati u obzir poveznice.

    Ubrzo je internet postao komercijalno važan i pojavili su se mnogi prevaranti koji su pokušavali prevariti jednostavne algoritme koji su postojali u to vrijeme. Dogodio se i drugi važan napredak - tražilice su počele koristiti svoje znanje o ponašanju korisnika kako bi shvatile koje su stranice dobre, a koje nisu.

    Prije desetak godina ljudski um više nije bio dovoljan da shvati kako rangirati dokumente. Vjerojatno ste primijetili da je broj rezultata pronađenih za gotovo svaki upit ogroman: stotine tisuća, često milijuni rezultata. Većina ih je nezanimljiva, beskorisna, samo nasumično spominju riječi upita ili su općenito spam. Da biste odgovorili na vaš zahtjev, trebate odmah odabrati prvih deset među svim pronađenim rezultatima. Pisanje programa koji to čini s prihvatljivom kvalitetom postalo je izvan moći ljudskog programera. Dogodio se sljedeći prijelaz - tražilice su počele aktivno koristiti strojno učenje.

    Još 2009. Yandex je predstavio vlastitu Matrixnet metodu, temeljenu na gradijentnom pojačavanju. Možemo reći da rangiranju pomaže kolektivna inteligencija korisnika i "mudrost gomile". Informacije o stranicama i ponašanju ljudi pretvaraju se u mnoge čimbenike, od kojih Matrixnet koristi svaki za izradu formule za rangiranje. Zapravo, formulu za rangiranje sada piše stroj. Inače, kao pojedinačne faktore koristimo i rezultate neuronskih mreža (tako, primjerice, radi Palekhov algoritam o kojem smo govorili prošle godine).

    Važna karakteristika Matrixneta je da je otporan na prekomjerno opremanje. To vam omogućuje da uzmete u obzir mnogo čimbenika rangiranja i istovremeno trenirate na relativno maloj količini podataka, bez straha da će stroj pronaći nepostojeće obrasce. Druge metode strojnog učenja omogućuju vam izradu jednostavnijih formula s manje faktora ili zahtijevaju veći uzorak za obuku.

    Druga važna značajka Matrixneta je da se formula za rangiranje može zasebno konfigurirati za prilično uske klase upita. Na primjer, poboljšajte kvalitetu pretraživanja samo za upite o glazbi. U isto vrijeme, rangiranje za druge klase upita neće se pogoršati.

    Matrixnet i njegove prednosti bile su osnova CatBoosta. Ali zašto smo uopće morali izmišljati nešto novo?

    Gotovo svaka moderna metoda temeljena na pojačavanju gradijenta radi s brojevima. Čak i ako su vaš unos žanrovi glazbe, vrste oblaka ili boje, te podatke i dalje treba opisati jezikom brojeva. To dovodi do iskrivljenja njihove suštine i mogućeg smanjenja točnosti modela.

    Pokažimo to na primitivnom primjeru s katalogom proizvoda u trgovini. Proizvodi su malo povezani jedni s drugima i ne postoji obrazac između njih koji bi omogućio da ih se naruči i dodijeli smisleni broj svakom proizvodu. Stoga se u ovoj situaciji svakom proizvodu jednostavno dodjeljuje serijski ID (na primjer, u skladu s računovodstvenim programom trgovine). Redoslijed ovih brojeva ne znači ništa, ali algoritam će koristiti taj redoslijed i iz njega izvući lažne zaključke.

    Iskusni stručnjak za strojno učenje može smisliti inteligentniji način pretvaranja kategoričkih značajki u brojeve, ali takva predobrada će dovesti do gubitka nekih informacija i pogoršanja kvalitete konačnog rješenja.

    Zato je bilo važno naučiti stroj da radi ne samo s brojevima, već i izravno s kategorijama, uzorcima između kojih će se samostalno identificirati, bez naše ručne „pomoći“. A CatBoost smo osmislili kako bi jednako dobro funkcionirao izvan kutije s numeričkim i kategoričkim značajkama. Zahvaljujući tome, pokazuje više visoka kvaliteta obuka pri radu s heterogenim podacima nego alternativna rješenja. Može se koristiti u raznim područjima - od bankarstva do industrije.

    Inače, naziv tehnologije dolazi od Categorical Boosting. I niti jedna mačka nije stradala tijekom razvoja.

    mjerila

    Možemo dugo govoriti o teoretskim razlikama knjižnice, ali bolje je to jednom pokazati u praksi. Radi jasnoće, usporedili smo izvedbu CatBoost biblioteke s otvorenim analogima XGBoost, LightGBM i H20 na skupu javnih skupova podataka. A evo rezultata (što manji to bolji): https://catboost.yandex/#benchmark

    Ne želimo biti neutemeljeni, stoga je uz biblioteku u otvorenom kodu objavljen opis procesa usporedbe, kod za pokretanje usporedbe metoda te spremnik s korištenim verzijama svih biblioteka. Svaki korisnik može ponoviti eksperiment kod kuće ili na vlastitim podacima.

    CatBoost u praksi

    Nova metoda već je testirana na servisima Yandex. Korišten je za poboljšanje rezultata pretraživanja, rangiranje feeda preporuka Yandex.Zen i za izračun vremenske prognoze u tehnologiji Meteum - i u svim slučajevima pokazao se boljim od Matrixneta. U budućnosti će CatBoost raditi na drugim uslugama. Nećemo stati ovdje - bolje je da vam odmah kažemo o Velikom hadronskom sudaraču (LHC).

    CatBoost je također našao primjenu u okviru suradnje s Europskom organizacijom za nuklearna istraživanja. LHC upravlja LHCb detektorom, koji se koristi za proučavanje asimetrije materije i antimaterije u interakcijama teških lijepih kvarkova. Za točno praćenje različitih čestica detektiranih u eksperimentu, postoji nekoliko specifičnih dijelova u detektoru, od kojih svaki određuje posebna svojstva čestica. Najteži zadatak u ovom slučaju je kombiniranje informacija sa razne dijelove detektor u najtočnije, agregirano znanje o čestici. Ovdje u pomoć dolazi strojno učenje. Koristeći CatBoost za kombiniranje podataka, znanstvenici su uspjeli poboljšati karakteristike kvalitete konačnog rješenja. CatBoost rezultati su bili bolje rezultate dobivenih drugim metodama.

    Kako početi koristiti CatBoost?

    Da biste radili s CatBoostom, samo ga instalirajte na svoje računalo. Knjižnica podržava operativne sustave Linux, Windows i macOS i dostupna je na jezicima Python programiranje i R. Yandex je također razvio program za vizualizaciju

    18.07.2017, uto, 15:53, moskovsko vrijeme, Tekst: Vladimir Bakhur

    Objavljeno u otvoreni pristup knjižnica stroja CatBoost trening razlikuje se od tradicionalnih metoda u algoritmu povećanja gradijenta za fleksibilno učenje na heterogenim podacima, uključujući nenumeričke.

    Fleksibilno korištenje numeričkih i nenumeričkih podataka

    Yandex je predstavio novu metodu strojnog učenja, CatBoost, i učinio CatBoost biblioteku javno dostupnom svima na GitHubu pod licencom Apache 2.0. Tehnika vam omogućuje učinkovito treniranje modela na heterogenim podacima - kao što su lokacija korisnika, povijest transakcija i vrsta uređaja.

    Prema izjavama samog Yandexa, CatBoost biblioteke su alternativa neuronskim mrežama, koje nisu prikladne za sve vrste problema u stvarnoj proizvodnji. U takvim uvjetima CatBoost algoritam osigurava veće performanse i stabilniji rezultat tijekom procesa prekvalifikacije te visoku predvidljivost u pogledu kvalitete konačnog rezultata.

    “Yandex se godinama bavi strojnim učenjem, a CatBoost su kreirali najbolji stručnjaci u ovom području. Čineći CatBoost biblioteku javno dostupnom, želimo pridonijeti razvoju strojnog učenja”, rekao je Mihail Bilenko, voditelj odjela za strojnu inteligenciju i istraživanje u Yandexu. - Moram reći da je CatBoost prva ruska metoda strojnog učenja koja je postala dostupna u Otvoreni izvor. Nadamo se da će zajednica stručnjaka to cijeniti i pomoći da bude još bolji.”

    Kako je Yandex objasnio za CNews, CatBoost tehnika je nasljednik Matrixnet metode strojnog učenja, koja se koristi u gotovo svim Yandex servisima. Po analogiji s Matrixnetom, CatBoost koristi mehanizam za povećanje gradijenta, koji je vrlo prikladan za rad s heterogenim podacima.

    Tehnika CatBoost zanimljiva je zbog smanjenog vremena prekvalifikacije zbog upotrebe vlastitog algoritma za izgradnju modela, koji se pak razlikuje od standardne sheme pojačavanja gradijenta.

    Logo projekta CatBoost

    Za razliku od Matrixneta, koji trenira modele na numeričkim podacima, CatBoost također uzima u obzir nenumeričke podatke, na primjer, vrste oblaka ili vrste zgrada. Prethodno su takve podatke morali prevesti u brojke, što je moglo promijeniti njihovu bit i utjecati na točnost modela.

    Sada se takvi podaci mogu koristiti u izvornom obliku, zahvaljujući čemu CatBoost pokazuje višu kvalitetu obuke od sličnih metoda za rad s heterogenim podacima. Može se koristiti u raznim područjima - od bankarstva do industrije.

    CatBoost se može pokrenuti izravno iz naredbeni redak ili upotrijebite user-friendly API za Python ili R s alatima za analizu formula i vizualizaciju učenja.

    Kao što je Yandexova press služba objasnila za CNews, rezultat je CatBoost dug rad najbolji stručnjaci tvrtke, koji su apsorbirali dugogodišnje iskustvo tvrtke u razvoju vodećih rješenja u strojnom učenju, kao što je Matrixnet. Čineći tehnologiju javno dostupnom, Yandex namjerava dati ozbiljan doprinos razvoju strojnog 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 je pojašnjeno iz tvrtke, podrška će se izražavati u stalnom poboljšanju algoritma, kao i radu s povratnim informacijama korisnika tehnologije.

    Usporedba algoritama strojnog učenja (GitHub)

    Programeri također planiraju razvijati tehnologiju unutar tvrtke: na njoj trenutno radi poseban tim koji je poboljšava i implementira u velika količina usluge. S vremenom će knjižnica CatBoost aplikacija rasti. Budući da je tehnologija javno dostupna, sav napredak bit će odmah dostupan svim korisnicima. S obzirom na količinu i kvalitetu usluga Yandexa i netrivijalni zadaci koji se u njima rješavaju, tvrtka je uvjerena da će tehnologija još dugo ostati vodeća u svojoj klasi.

    Danas u svijetu postoje različiti putevi rad s kategoričkim faktorima. Sastoje se od početne predobrade i pretvaranja u brojeve, objasnio je Yandex.

    Najučinkovitija metoda s praktičnog gledišta je brojanje "brojača", aktivno je koriste natjecatelji na Kaggleu, a ova metoda se koristi u pobjedničkim rješenjima. U postojećem otvorena rješenja Ova metoda se ne koristi, ali se koriste jednostavnije metode, kao što je one-hot-encoding, obično rade lošije. Na primjer, takva predobrada može se koristiti u algoritmu lightgbm.

    CatBoost koristi inteligentniji rad s kategoričkim faktorima, gdje se statistika o njima ne izračunava unaprijed, već tijekom treninga, a najviše korisne statistike prema podacima i njihovim kombinacijama. One-hot kodiranje u CatBoostu je, naravno, također podržano; za karakteristike koje imaju malo vrijednosti, ponekad ova metoda daje plus u kvaliteti, objasnio je Yandex.

    Osobitost CatBoost knjižnica je da čak i sada, u eri široke primjene Duboke tehnologije Učeći, za stvarnu proizvodnju, neuronske mreže nisu prikladne za sve vrste zadataka, au takvim uvjetima CatBoost s povećanjem gradijenta pruža veće performanse, stabilnost i predvidljivost u smislu kvalitete konačnog rezultata.

    Praktične aplikacije

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

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

    CatBoost već ima iskustva u međunarodnoj uporabi: ovu metodu strojnog učenja uveo je Europski centar za nuklearna istraživanja (CERN) kako bi kombinirao podatke dobivene iz različitih dijelova LHCb detektora.

    Podaci prikupljeni tijekom eksperimenta obrađuju se za pojedinačne sudare pomoću CatBoosta pri brzini od 40 milijuna u sekundi.

    Dostupnost CatBoosta

    Da biste radili s CatBoostom, samo ga instalirajte na svoje računalo. Biblioteka podržava operativne sustave Linux, Windows i macOS te je dostupna u programskim jezicima Python i R.

    Yandex je također razvio program za vizualizaciju pod nazivom CatBoost Viewer, koji vam omogućuje praćenje procesa učenja na grafikonima. CatBoost i CatBoost Viewer možete preuzeti na GitHubu.

    Kruchinin Dmitry, Dolotov Evgeniy, Kustikova Valentina, Družkov Pavel, Kornyakov Kirill

    Uvod

    Trenutno je strojno učenje područje znanstvenog istraživanja koje se aktivno razvija. Tome pridonosi kako mogućnost prikupljanja i obrade podataka brže, više, jače, lakše i jeftinije, tako i razvoj metoda za prepoznavanje zakonitosti po kojima se odvijaju fizikalni, biološki, ekonomski i drugi procesi iz tih podataka. U nekim problemima, kada je takav zakon prilično teško odrediti, koristi se duboko učenje.

    Duboko učenje ispituje metode za modeliranje apstrakcija visoke razine u podacima korištenjem više 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 uzoraka, kompresija podataka i niz drugih.

    Relevantnost teme strojnog učenja, a posebno dubinskog učenja, potvrđuje redovita pojava članaka o ovoj temi na Habréu: Ovaj je članak posvećen komparativna analiza neki softverski alati za dubinsko učenje, kojih se nedavno pojavila velika raznolikost. Ovi alati uključuju softverske biblioteke, proširenja programskih jezika i samostalni jezici, što vam omogućuje korištenje gotove algoritme stvaranje i treniranje modela neuronske mreže. Postojeći alati za duboko učenje imaju različite funkcionalnosti i od korisnika zahtijevaju različite razine znanja i vještina. Pravi izbor korištenje alata važan je zadatak koji vam omogućuje da postignete željeni rezultat u najkraćem vremenu i uz manje truda.

    U članku se daje kratak pregled alata za projektiranje i obuku modela neuronskih mreža. Fokus je na četiri biblioteke: Caffe, Pylearn2, Torch i Theano. Razmatraju se osnovne mogućnosti ovih knjižnica i daju primjeri njihove uporabe. Kvaliteta i brzina knjižnica se uspoređuju prilikom konstruiranja identičnih topologija neuronskih mreža kako bi se riješio problem klasifikacije rukom pisanih znamenki (MNIST skup podataka koristi se kao set za obuku i testiranje). Također se pokušava ocijeniti jednostavnost korištenja predmetnih knjižnica u praksi.

    Skup podataka MNIST-a

    Zatim će se MNIST () baza podataka slika rukom pisanih znamenki koristiti kao skup podataka koji se proučava. Slike u ovoj bazi podataka imaju rezoluciju 28x28 i pohranjene su u sivim tonovima. Brojevi su centrirani na slici. Cjelokupna baza podataka podijeljena je u dva dijela: trening koji se sastoji od 50.000 slika i testni koji se sastoji od 10.000 slika.

    Programski alati za rješavanje problema dubokog učenja

    Ima ih mnogo softver za rješavanje problema dubokog učenja. Opću usporedbu možete pronaći u funkcionalnost najpoznatiji, ovdje dajemo opće informacije o nekima od njih (). Prvih šest softverskih knjižnica implementira najviše širok raspon metode dubokog učenja. Programeri pružaju mogućnosti za stvaranje potpuno povezanih neuronskih mreža (FC NN), konvolucijskih neuronskih mreža (CNN), autokodera (AE) i ograničenih Boltzmannovih strojeva (RBM). Potrebno je obratiti pozornost na preostale knjižnice. Iako imaju manje funkcionalnosti, u nekim slučajevima njihova jednostavnost pomaže u postizanju veće produktivnosti.

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

    # Ime Jezik O.C. FC NN CNN A.E. R.B.M.
    1 DeepLearnToolbox Matlab Windows, Linux + + + +
    2 Theano Piton Windows, Linux, Mac + + + +
    3 Pylearn2 Piton Linux, Skitnica + + + +
    4 Deepnet Piton 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 Čuda CNN Matlab Linux, Windows + + - -

    Na temelju dobivenih informacija i preporuka stručnjaka odabrane su četiri knjižnice za daljnje razmatranje: - jedna od najzrelijih i funkcionalno najkompletnijih knjižnica i - široko korištena u zajednici. Svaka knjižnica razmatra se prema sljedećem planu:
    1. Kratke osnovne informacije.
    2. Tehničke značajke (OS, programski jezik, ovisnosti).
    3. Funkcionalnost.
    4. Primjer formiranja logističke regresijske mreže.
    5. Osposobljavanje i korištenje konstruiranog modela za klasifikaciju.
    Nakon pregleda navedenih biblioteka, one se uspoređuju na brojnim testnim konfiguracijama mreže.

    Caffe knjižnica



    Caffe je u razvoju od rujna 2013. Razvoj je započeo Yangqing Jia tijekom njegovog studija na Kalifornijskom sveučilištu u Berkeleyu. Od tada Caffe aktivno podržavaju The Berkeley Vision and Learning Center (BVLC) i zajednica programera na GitHubu. Knjižnica se distribuira pod licencom BSD 2-Clause.

    Caffe je implementiran pomoću programskog jezika C++, s dostupnim omotačima Python i MATLAB. Službeno podržani operativni sustavi su Linux i OS X, a postoji i neslužbeni port na Windows. Caffe koristi BLAS biblioteku (ATLAS, Intel MKL, OpenBLAS) za vektorske i matrične izračune. Uz ovo, vanjske ovisnosti uključuju glog, gflags, OpenCV, protoBuf, boost, leveldb, nappy, hdf5, lmdb. Da biste ubrzali izračune, Caffe se može pokrenuti na GPU-u pomoću osnovne sposobnosti CUDA tehnologije ili biblioteke primitiva dubokog učenja cuDNN.

    Caffe programeri podržavaju mogućnost stvaranja, treniranja i testiranja potpuno povezanih i konvolucijskih neuronskih mreža. Ulazni podaci i transformacije opisani su pojmom sloj. Ovisno o formatu pohrane, mogu se koristiti sljedeće vrste izvornih podatkovnih slojeva:

    • DATA - definira podatkovni sloj u leveldb i lmdb formatu.
    • HDF5_DATA - podatkovni sloj u formatu HDF5.
    • IMAGE_DATA je jednostavan format koji pretpostavlja da datoteka sadrži popis slika s oznakom klase.
    • i drugi.
    Transformacije se mogu odrediti pomoću slojeva:
    • INNER_PRODUCT je potpuno povezani sloj.
    • KONVOLUCIJA - zavojni sloj.
    • POOLING - sloj prostornog udruživanja.
    • Local Response Normalization (LRN) - lokalni normalizacijski sloj.
    Uz to, razne aktivacijske funkcije mogu se koristiti prilikom generiranja transformacija.
    • Pozitivni dio (Rectified-Linear Unit, ReLU).
    • Sigmoidna funkcija (SIGMOID).
    • Tangentna hiperbolika (TANH).
    • Apsolutna vrijednost (ABSVAL).
    • Potenciranje (POWER).
    • Funkcija binomne normalne log vjerojatnosti (BNLL).
    Zadnji sloj modela neuronske mreže mora sadržavati funkciju pogreške. Knjižnica ima sljedeće funkcije:
    • Srednja kvadratna pogreška (MSE).
    • Gubitak šarke.
    • Logistička funkcija gubitka.
    • Funkcija dobivanja informacija.
    • Sigmoidni križni gubitak entropije.
    • Softmax funkcija. Generalizira sigmoidalnu kros-entropiju na slučaj više od dvije klase.
    U procesu obuke modela koriste se različite optimizacijske metode. Programeri Caffea pružaju implementacije niza metoda:

    U biblioteci Caffe topologija neuronskih mreža, početni podaci i način obuke specificirani su pomoću konfiguracijskih datoteka u prototxt formatu. Datoteka sadrži opis ulaznih podataka (trening i test) i slojeve neuronske mreže. Razmotrimo faze konstruiranja takvih datoteka na primjeru mreže "logističke regresije" (). U nastavku ćemo pretpostaviti da se datoteka zove linear_regression.prototxt i da se nalazi u direktoriju examples/mnist.
    Riža. 2. Struktura neuronske mreže

    Knjižnica Pylearn2


    Pylearn2 je biblioteka razvijena u LISA laboratoriju na Sveučilištu u Montrealu od veljače 2011. Ima oko 100 programera na GitHubu. Knjižnica se distribuira pod licencom BSD 3-Clause.

    Pylearn2 je implementiran u Pythonu, trenutno podržava operativni sustav Linux, a također se može pokrenuti na bilo kojem operativnom sustavu koristeći virtualni stroj, jer programeri pružaju konfigurirani omotač virtualno okruženje temeljen na Vagrantu. Pylearn2 je nadskup Theano biblioteke. Dodatno potreban PyYAML, PIL. Kako bi ubrzali izračune, Pylearn2 i Theano koriste Cuda-convnet, koji je implementiran u C++/CUDA, što daje značajno povećanje brzine.

    Pylearn2 podržava mogućnost stvaranja potpuno povezanih i konvolucijskih neuronskih mreža, raznih vrsta automatskih kodera (kontraktivni automatski koderi, automatski koderi za uklanjanje buke) i ograničenih Boltzmannovih strojeva (Gaussov RBM, spike-and-slab RBM). Omogućeno je nekoliko funkcija pogreške: unakrsna entropija, logaritamska vjerojatnost. Dostupno sljedeće metode trening:

    • Batch Gradient Descent (BGD).
    • Stohastički gradijentni pad (SGD).
    • Nelinearni konjugirani gradijentni spust (NCG).
    U biblioteci Pylearn2, neuronske mreže specificirane su pomoću njihovog opisa u konfiguracijskoj datoteci u YAML formatu. YAML datoteke su prikladan i brz način za serijalizaciju objekata jer su razvijene pomoću tehnika objektno orijentiranog programiranja.

    Biblioteka Baklja


    Torch je znanstvena računalna biblioteka s opsežnom podrškom za algoritme strojnog učenja. Razvijen od strane Idiap Research Institute, New York University i NEC Laboratories America, od 2000., distribuiran pod BSD licencom.

    Knjižnica je implementirana u Lua koristeći C i CUDA. Brzi skriptni jezik Lua, u kombinaciji sa SSE, OpenMP i CUDA tehnologijama, omogućuje Torchu dobru brzinu u usporedbi s drugim bibliotekama. Na ovaj trenutak Linux, FreeBSD, Mac OS X operativni sustavi također rade na Windowsima. Ovisnosti Torcha uključuju imagemagick, gnuplot, nodejs, npm i druge.

    Knjižnica se sastoji od skupa modula, od kojih je svaki odgovoran za različite faze rada s neuronskim mrežama. Tako, na primjer, modul nn omogućuje konfiguraciju neuronske mreže (definiranje slojeva i njihovih parametara), modul optim sadrži implementacije razne metode optimizacije koje se koriste za obuku i gnuplot pruža mogućnost vizualizacije podataka (izrada grafikona, prikaz slika itd.). Instaliranje dodatnih modula omogućuje vam proširenje funkcionalnosti knjižnice.

    Torch vam omogućuje stvaranje složenih neuronskih mreža pomoću mehanizma spremnika. Kontejner je klasa koja kombinira deklarirane komponente neuronske mreže u jednu zajedničku konfiguraciju, koja se kasnije može prenijeti u proceduru obuke. Komponenta neuronske mreže može biti ne samo potpuno povezan ili konvolucijski sloj, već i funkcija aktivacije ili pogreške, kao i gotovi spremnici. Torch vam omogućuje stvaranje sljedećih slojeva:

    • Potpuno povezani sloj (Linearni).
    • Aktivacijske funkcije: hiperbolički tangens (Tanh), izbor minimuma (Min) ili maksimuma (Max), softmax funkcija (SoftMax) i druge.
    • Konvolucijski slojevi: konvolucija (Convolution), stanjivanje (SubSampling), prostorno udruživanje (MaxPooling, AveragePooling, LPPooling), normalizacija razlike (SubtractiveNormalization).
    Funkcije pogrešaka: Srednja kvadratna pogreška (MSE), CrossEntropy, itd.

    Tijekom treninga mogu se koristiti sljedeće metode optimizacije:

    Pogledajmo proces konfiguriranja neuronske mreže u Torchu. Prvo morate deklarirati spremnik, a zatim mu dodati slojeve. Redoslijed kojim dodajete slojeve važan je jer... izlaz (n-1)-tog sloja bit će ulaz n-tog.
    regresija = nn.Sequential() regresija:add(nn.Linear(784,10)) regresija:add(nn.SoftMax()) gubitak = nn.ClassNLLCriterion()
    Korištenje i treniranje neuronske mreže:

    1. Učitavanje ulaznih podataka X. Funkcija torch.load(path_to_ready_dset) omogućuje učitavanje unaprijed pripremljenog skupa podataka u tekstualnom ili binarnom formatu. Obično je to Lua tablica koja se sastoji od tri polja: veličina, podaci i oznake. Ako nema gotovog skupa podataka, možete koristiti standardne funkcije Lua jezik(npr. io.open(ime datoteke [, način])) ili funkcije iz paketa biblioteke Torch (npr. image.loadJPG(ime datoteke)).
    2. Određivanje odgovora mreže za ulazne podatke X:
      Y = regresija:naprijed(X)
    3. Izračun funkcije pogreške E = gubitak(Y,T), u našem slučaju to je funkcija vjerojatnosti.
      E = gubitak:naprijed (Y,T)
    4. Izračun gradijenata prema algoritmu povratnog širenja.
      dE_dY = gubitak:natrag(Y,T) regresija:natrag(X,dE_dY)
    Sada spojimo sve zajedno. Kako biste trenirali neuronsku mrežu u Torch biblioteci, trebate napisati vlastitu petlju za obuku. U njemu deklarirajte posebnu funkciju (zatvaranje) koja će izračunati odgovor mreže, odrediti vrijednost pogreške i ponovno izračunati gradijente, te proslijediti ovo zatvaranje funkciji spuštanja gradijenta za ažuriranje mrežnih težina.
    -- Stvorite posebne varijable: težine neuronske mreže i njihove gradijente w, dE_dw = regression:getParameters() local eval_E = function(w) dE_dw:zero() -- Ažuriranje gradijenata local Y = regression:forward(X) local E = gubitak : naprijed(Y,T) lokalni dE_dY = gubitak:natrag(Y,T) regresija:natrag(X,dE_dY) povratak E, dE_dw kraj -- Zatim u petlji za obuku pozivamo optim.sgd(eval_E, w, optimState)
    gdje su optimState parametri spuštanja gradijenta (learningRate, momentum, weightDecay, itd.). Možete pogledati cijeli ciklus treninga.

    Lako je vidjeti da procedura deklaracije, kao i procedura obuke, zauzima manje od 10 redaka koda, što ukazuje na jednostavnost korištenja knjižnice. Istodobno, knjižnica vam omogućuje rad s neuronskim mrežama na prilično niskoj razini.

    Spremanje i učitavanje trenirane mreže provodi se pomoću posebnih funkcija:
    torch.save(put, regresija) net = torch.load(put)
    Nakon učitavanja, mreža se može koristiti za klasifikaciju ili dodatnu obuku. Ako trebate saznati kojoj klasi pripada uzorak elementa, tada samo trebate proći kroz mrežu i izračunati izlaz:
    rezultat = neto:naprijed(uzorak)
    Više složeni primjeri mogu se pronaći u materijalima za obuku knjižnice.

    Knjižnica Theano


    Theano je proširenje jezika Python koje vam omogućuje učinkovito računanje matematički izrazi, koji sadrži višedimenzionalne nizove. Knjižnica je dobila ime po ženi starogrčkog filozofa i matematičara Pitagore - Theano (ili Theano). Theano je razvijen u laboratoriju LISA za podršku brzom razvoju algoritama strojnog učenja.

    Biblioteka je implementirana u Pythonu i podržana je na operativnim sustavima Windows sustavi, Linux i Mac OS. Theano uključuje kompilator koji prevodi matematičke izraze napisane u Pythonu u učinkovit C ili CUDA kod.

    Theano pruža osnovni skup alata za konfiguriranje neuronskih mreža i njihovo treniranje. Moguće je implementirati višeslojne potpuno povezane mreže (Multi-Layer Perceptron), konvolucijske neuronske mreže (CNN), rekurentne neuronske mreže (RNN), autokodere i ograničene Boltzmannove strojeve. Također su dostupne različite aktivacijske funkcije, posebno sigmoidna, softmax funkcija, unakrsna entropija. Tijekom obuke koristi se batch gradient descent (Batch SGD).

    Pogledajmo konfiguraciju neuronske mreže u Theanu. Radi praktičnosti, implementirat ćemo klasu LogisticRegression(), koja će sadržavati varijable - parametre W, b koji se mogu trenirati i funkcije za rad s njima - izračunavanje mrežnog odgovora (y = softmax(Wx + b)) i funkciju pogreške. Zatim, za treniranje neuronske mreže, kreiramo funkciju train_model. Za nju je potrebno opisati metode koje određuju funkciju pogreške, pravilo za izračunavanje gradijenata, metodu promjene težina neuronske mreže, veličinu i mjesto uzorka mini-serije (same slike i odgovori za njih). Nakon što su svi parametri određeni, funkcija se kompilira i prosljeđuje u petlju za obuku.


    Riža. 3. Dijagram klasa za implementaciju neuronske mreže u Theanu

    Programska implementacija klase

    class LogisticRegression(object): def __init__(self, input, n_in, n_out): # y = W * x + b # deklariraj varijable, odredi vrstu, broj ulaza i izlaza self.W = theano.shared(# inicijaliziraj početne težine na nulu value=numpy.zeros((n_in, n_out), dtype=theano.config.floatX), name="W", borrow=True) self.b = theano.shared(value=numpy.zeros(( n_out,), dtype=theano.config.floatX), name="b", borrow=True) # dodaj softmax aktivacijsku funkciju, mrežni izlaz je varijabla 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, axis=1) self.params = # definirajte funkciju pogreške def negative_log_likelihood(self, y): return -T.mean(T. log(self.p_y_given_x )) # x - uneseno na mrežni ulaz # skup slika (minibatch) raspoređen je u retke 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 classifier = LogisticRegression(input=x, n_in=28 * 28, n_out=10) # vrijednost funkcije pogreške koju smo pokušavajući minimizirati troškove tijekom obuke = classifier.negative_log_likelihood(y) # za izračun gradijenata morate pozvati Theano funkciju - grad g_W = T.grad(cost=cost, wrt=classifier.W) g_b = T.grad(cost =cost, wrt=classifier.b) # definiranje pravila za ažuriranje težina neuronske mreže updates = [(classifier.W, classifier.W - learning_rate * g_W), (classifier.b, classifier.b - learning_rate * g_b)] # kompajlirajte funkciju obuke, u budućnosti će se pozivati ​​u petlji obuke train_model = theano.function(inputs =, outputs=cost, updates=updates, givens=( x: train_set_x, y: train_set_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(borrow=True), save_file, -1) cPickle.dump(classifier.b.get_value(borrow=True), save_file , -1) save_file.close() file = open("path") classifier.W.set_value(cPickle.load(save_file), borrow=True) classifier.b.set_value(cPickle.load(save_file), borrow=True )
    Lako je vidjeti da proces stvaranja modela i određivanja njegovih parametara zahtijeva pisanje voluminoznog i bučnog koda. Knjižnica je niske razine. Nemoguće je ne primijetiti njegovu fleksibilnost, kao i mogućnost implementacije i korištenja vlastitih komponenti. Na službenim stranicama knjižnice nalazi se veliki broj edukativnih materijala različite tematike.

    Usporedba knjižnica na primjeru zadatka razvrstavanja rukopisnih znamenki

    Testna infrastruktura

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

    Mrežne topologije i parametri obuke

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

    Sve težine su inicijalizirane nasumično prema jedinstvenom 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 gradijenta (SGD) odabrani su jednaki sljedećim vrijednostima: stopa učenja - 0,01, momentum - 0,9, pad težine - 5e-4, veličina serije - 128, najveći broj ponavljanja - 150.

    Rezultati eksperimenta

    Vrijeme obuke neuronskih mreža opisanih ranije ( , ) korištenjem četiri razmatrane biblioteke prikazano je u nastavku (

    Najbolji članci na temu