Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • televizori (Smart TV)
  • Yandex je predstavio novu verziju pretraživanja zasnovanu na neuronskim mrežama. Yandex otvara CatBoost tehnologiju mašinskog učenja

Yandex je predstavio novu verziju pretraživanja zasnovanu na neuronskim mrežama. Yandex otvara CatBoost tehnologiju mašinskog učenja

Istorijski gledano, umjetne neuronske mreže su tokom svoje više od pola vijeka iskusile i periode brzog uspona i povećane pažnje javnosti, kao i periode skepticizma i ravnodušnosti koji su ih pratili. IN Dobra vremena Naučnicima i inženjerima se čini da su konačno pronašli univerzalnu tehnologiju koja može zamijeniti ljude u svim kognitivnim zadacima. Poput gljiva nakon kiše, pojavljuju se razni novi modeli neuronskih mreža, a između njihovih autora, profesionalnih matematičara, vode se intenzivne rasprave o većem ili manjem stepenu biološkosti modela koje oni predlažu. Profesionalni biolozi posmatraju ove rasprave sa strane, povremeno se prekidajući i uzvikujući „Da, ovo se ne dešava u stvarnoj prirodi!“ – i to bez većeg efekta, budući da matematičari neuronskih mreža slušaju biologe, po pravilu, samo kada su činjenice biologa u skladu s njihovim vlastitim teorijama. Međutim, s vremenom se postupno akumulira skup zadataka za koje neuronske mreže rade iskreno loše i entuzijazam ljudi se hladi.

Ovih dana, neuronske mreže su se vratile u zenitu svoje slave zahvaljujući izumu nenadzirane metode pre-treninga zasnovane na ograničenim Bolzmannovim mašinama (RBM), koja omogućava treniranje dubokih neuronskih mreža (tj. sa ekstra velikim, na reda desetina hiljada, broj neurona) i uspjeh dubokih neuronskih mreža u praktičnim problemima prepoznavanja govora i slike. Na primjer, prepoznavanje govora u Androidu se implementira pomoću dubokih neuronskih mreža. Koliko će ovo trajati i koliko će duboke neuronske mreže ispuniti očekivanja koja se na njih postavljaju, nije poznato.
U međuvremenu, uporedo sa svim naučnim sporovima, tokovima i trendovima, jasno se izdvaja 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. Mnogi praktični problemi klasifikacije i predviđanja se lijepo rješavaju pomoću dobro dizajniranih, relativno malih modela višeslojnih perceptrona (MLP) i mreža radijalnih osnovnih funkcija (RBF). Ove neuronske mreže su opisane mnogo puta, 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ćeg pristupa korištenju neuronskih mreža u praksi, on se fundamentalno razlikuje od uobičajenog determinističkog razvojnog pristupa „programirano, radi, znači uvijek radi“. Neuronske mreže su po svojoj prirodi probabilistički modeli, a pristup bi im trebao biti potpuno drugačiji. Nažalost, mnogi novi programeri tehnologija mašinskog učenja uopšte i neuronskih mreža posebno prave sistemske greške kada rade sa njima, razočaravaju se i odustaju od toga. Ideja o pisanju ove rasprave na 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 pri korištenju neuronskih mreža.

1. Ako je moguće ne koristiti neuronske mreže, nemojte ih koristiti.
Neuronske mreže vam omogućavaju da riješite problem ako je nemoguće predložiti algoritam uzastopnim (ili vrlo ponavljanim) gledanjem podataka očima. Na primjer, ako ima puno podataka, oni su nelinearni, bučni i/ili velike veličine.

2. Složenost neuronskih mreža mora biti adekvatna složenosti zadatka.
Moderna personalni računari(na primjer, Core i5, 8 GB RAM-a) omogućavaju vam da trenirate neuronske mreže u ugodnom vremenu koristeći uzorke od desetina hiljada primjera, sa dimenzijama ulaznih podataka do stotina. 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 izvan fokusa ovog habr članka.

3. Podaci o obuci moraju biti reprezentativni.
Uzorak obuke 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 je raširena šala kada geolog dođe do prepoznavača, stavi komad minerala ispred sebe i zamoli ga da razvije sistem za prepoznavanje takve supstance koristeći ga. "Mogu li dobiti još 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 - ne nove informacije tako povećan uzorak ne nosi u sebi.

4. Pomiješajte odabir.
Nakon što su vektori ulaznih i izlaznih podataka prikupljeni, ako su mjerenja nezavisna jedna od druge, promijenite redoslijed vektora na bilo koji 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 podatke.
Za višeslojne perceptrone, i za mnoge druge modele, vrijednosti ulaznih podataka moraju biti u rasponu [-1;1]. Prije nego što ih unesete 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 osigurati minimalnu grešku u radu neuronske mreže na uzorku za obuku, istovremeno ga pakleno preobučiti, a zatim poželjeti isto tako dobar kvalitet na novim stvarnim podacima. Ovo 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 prilagoditi što je više moguće uzorku i izgubit će svoju funkcionalnost na stvarnim podacima. Da biste kontrolisali generalizacijske sposobnosti vašeg modela, podijelite sve podatke u tri uzorka u omjeru 70:20:10. Trenirajte na Train, povremeno provjeravajući kvalitet modela na Testu. Za konačnu nepristrasnu procjenu – Validacija.
Tehnika unakrsne provjere, gdje se Train i Test generiraju nekoliko puta na nasumičan način iz istih podataka, može biti podmukla i dati lažan utisak o dobrom kvalitetu sistema - na primjer, ako su podaci uzeti iz različitih izvora a ovo je kritično. Koristite ispravnu validaciju!

7. Primijenite regularizaciju.
Regularizacija je tehnika koja vam omogućava da izbjegnete pretreniranost 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 pretrenirane neuronske mreže – velike vrijednosti težine, reda stotine i hiljade, takva neuronska mreža neće normalno raditi na novim, ranije nevidljivim podacima

8. Nema potrebe za ponovnom obukom neuronske mreže na mreži.
Ideja da se neuronska mreža stalno preobučava na novim dolaznim podacima ispravna je sama po sebi; u stvarnim biološkim sistemima se to upravo dešava. Učimo svaki dan i rijetko poludimo. Međutim, za konvencionalne umjetne neuronske mreže u trenutnoj fazi tehničkog razvoja, ova praksa je rizična: mreža se može pretrenirati ili prilagoditi najnovijim primljenim podacima - i izgubiti svoje sposobnosti generalizacije. Da bi se sistem mogao koristiti u praksi, neuronska mreža treba: 1) trenirati, 2) testirati kvalitetu na uzorcima za testiranje i validaciju, 3) odabrati uspješnu mrežnu opciju, popraviti njene težine i 4) koristiti obučene neuronske mreže u praksi, težine u procesu ne mijenjaju upotrebu.

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 temeljito proučite proces učenja neuronskih mreža. U međuvremenu, backpropagation je izmišljen početkom 70-ih i postao 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. Obučite neuronske mreže u MATLAB-u i sličnim korisničkim okruženjima.
Ako niste naučnik koji razvija nove metode za obuku neuronskih mreža, već programer, ne bih preporučio da sami kodirate proceduru za obuku neuronskih mreža. Postoji veliki broj softverski paketi, uglavnom u MATLAB-u i Python-u, koji vam omogućavaju da trenirate neuronske mreže, dok kontrolišete proces obuke i testiranja koristeći pogodna sredstva vizualizacija i otklanjanje grešaka. Uživajte u naslijeđu čovječanstva! Meni se lično sviđa pristup „treniraj u MATLAB-u sa dobrom bibliotekom - implementiraj obučeni model rukom“, prilično je moćan i fleksibilan. Izuzetak je paket STATISTICA, koji sadrži napredne metode za obuku neuronskih mreža i omogućava vam da ih generišete u obliku programski kod u C, pogodan za implementaciju.

U sljedećem članku planiram detaljno opisati cijeli industrijski ciklus pripreme neuronske mreže implementiran na osnovu gore opisanih principa, koji 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 č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 - trans. 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: puni kurs. Williams, 2006.

Zdravo svima!

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

Ovo manje liči na programiranje, a više na kreiranje članaka (izvještaji/demonstracije/istraživanja/primjeri): možete umetnuti običan tekst objašnjenja među blokove Python koda. Rezultat izvršavanja koda nisu samo brojevi i tekst (kao što je slučaj sa konzolom pri radu sa Pythonom), već i grafikoni, dijagrami, slike...

Primjeri dokumenata koje možete kreirati:

izgleda cool? Želite li kreirati 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 pisati programe u njemu. U ovom članku ću kratko i jasno govoriti o osnovnim konceptima ovog jezika: varijablama, funkcijama, klasama i modulima.

Materijal je namijenjen osobama koje ne poznaju programske jezike.

Prvo morate instalirati Python. Zatim morate instalirati pogodno okruženje za pisanje programa u Python-u. 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čujem (i koristim u udžbeniku i člancima) jezik Python. Zašto?

  1. Veoma je lako naučiti
  2. Veliki broj gotovih biblioteka
  3. Kada pogledate program, odmah vidite algoritam koji on implementira
  4. Većina stručnjaka za mašinsko učenje koristi Python, a većina biblioteka je takođe kreirana posebno za ovaj programski jezik

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

U 6. dijelu prijevoda postavljam 4 dijela knjige odjednom. Svi oni posvećeni su jednom od najvažnijih važne teme u oblasti neuronskih mreža - metoda povratnog širenja. Naučićete da izračunate grešku svih neurona u neuronskoj mreži samo na osnovu konačne greške mreže i težine veze.

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

Možete prenijeti.

Uživajte u čitanju!

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

Prvo ćemo lično izračunati izlaze dvoslojne neuronske mreže. Zatim ćemo se upoznati sa matricama i njihovim proizvodima. Koristeći stečeno znanje, izvešćemo jednostavne formule za izračunavanje konverzije signala u neuronskoj mreži. I u posljednjem dijelu ćemo provjeriti dobijene formule u praksi, računajući izlaze troslojne neuronske mreže.

Možete prenijeti.

Uživajte u čitanju!

Četvrti dio prijevoda je spreman!

Hajde da prestanemo da lupamo okolo i pređimo direktno na temu knjige – neuronske mreže.

U ovom dijelu prijevoda osvrnut ćemo se na biološke neuronske mreže i uporediti ih sa tradicionalnim računarima. Zatim ćemo izgraditi model umjetnog neurona i na kraju prijeći direktno na umjetne neuronske mreže.

Možete prenijeti.

Uživajte u čitanju!

Treći dio prijevoda!

Članak nije jako dugačak. Pokriva samo jedan dio knjige. Cilj je pokazati da svaka metoda ima svoja ograničenja. U članku se razmatraju ograničenja linearnog klasifikatora. Uvedeni su i koncepti logičke funkcije i XOR problemi.

Možete prenijeti.

Uživajte u čitanju!

U ovom članku ću govoriti o zanimljivom muzičkom generatoru koji radi na neuronskim mrežama. Generator se zove Amper. Uz njegovu pomoć, svaka osoba, čak i neko ko je daleko od komponovanja kompozicija, može samostalno stvoriti jedinstvenu melodiju i koristiti je za svoje potrebe.

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

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

    CatBoost je nova metoda mašinskog učenja zasnovana na poboljšanju gradijenta. Implementira se u Yandexu za rješavanje problema rangiranja, predviđanja i preporuka za izgradnju. Štaviše, već se koristi u sklopu saradnje sa Evropskom organizacijom za nuklearna istraživanja (CERN) i industrijskim klijentima Yandex Data Factory. Dakle, kako se CatBoost razlikuje od drugih analoga otvorenog koda? Zašto pojačavanje, a ne metoda neuronske mreže? Kako je ova tehnologija povezana sa već poznatim Matrixnetom? I kakve veze s tim imaju mačke? Danas ćemo odgovoriti na sva ova pitanja.

    Termin "mašinsko učenje" pojavio se još 50-ih godina. Ovaj termin se odnosi na pokušaj da se kompjuter nauči da rešava probleme koji su laki za ljude, ali je teško formalizovati način na koji se oni rešavaju. Kao rezultat mašinskog učenja, računar može pokazati ponašanje koje nije eksplicitno dizajnirano u njemu. U savremenom svijetu, svakodnevno se susrećemo s plodovima mašinskog učenja mnogo puta, a mnogi od nas to i ne znaju. Koristi se za izradu feedova na društvenim mrežama, lista „sličnih proizvoda“ u online prodavnicama, prilikom izdavanja kredita u bankama i određivanja troškova osiguranja. Tehnologije mašinskog učenja koriste se za traženje lica na fotografijama ili brojnim foto filterima. Za potonje, inače, obično se koriste neuronske mreže, o kojima se toliko često piše da se može pogrešiti mišljenje da je ovo „srebrni metak“ za rješavanje problema bilo koje složenosti. Ali to nije istina.

    Neuronske mreže ili povećanje gradijenta

    Zapravo, mašinsko učenje je veoma različito: postoji veliki broj različitih metoda, a neuronske mreže su samo jedna od njih. To ilustruju rezultati takmičenja na Kaggle platformi, gdje različite metode pobjeđuju na različitim takmičenjima, a na mnogim od njih pobjeđuje pojačanje gradijenta.

    Neuronske mreže su odlične u rješavanju određenih problema – na primjer, onih u kojima trebate raditi s homogenim podacima. Homogeni podaci se sastoje od, na primjer, slika, zvuka ili teksta. U Yandexu nam pomažu da bolje razumijemo upiti za pretraživanje, tražim slične slike na Internetu, prepoznajte svoj glas u Navigatoru i još mnogo toga. Ali to nisu svi zadaci za mašinsko učenje. Postoji čitav sloj ozbiljnih izazova koji se ne mogu riješiti samo neuronskim mrežama – potrebno im je povećanje gradijenta. Ova metoda je nezamjenjiva tamo gdje ima mnogo podataka i gdje je struktura heterogena.

    Na primjer, ako vam je potrebna tačna vremenska prognoza, koja uzima u obzir velika količina faktori (temperatura, vlažnost, radarski podaci, zapažanja korisnika i mnogi drugi). Ili ako trebate kvalitativno rangirati rezultate pretraživanja - to je ono što je navelo Yandex da razvije vlastitu metodu mašinskog učenja.

    Matrixnet

    Prvo tražilice nisu bili tako složeni kao sada. U stvari, u početku je to bila samo pretraga riječi - bilo je tako malo stranica da među njima nije bilo velike konkurencije. Zatim je bilo još stranica i postalo je neophodno rangirati ih. Počele su se uzimati u obzir razne komplikacije - frekvencija riječi, tf-idf. Tada je bilo previše stranica na bilo koju temu, dogodio se prvi važan proboj - počeli su da uzimaju u obzir veze.

    Ubrzo je internet postao komercijalno važan, a pojavili su se mnogi prevaranti koji su pokušavali prevariti jednostavne algoritme koji su postojali u to vrijeme. I dogodio se drugi važan iskorak - pretraživači su počeli koristiti svoje znanje o ponašanju korisnika kako bi shvatili koje su stranice dobre, a koje ne.

    Prije desetak godina ljudski um više nije bio dovoljan da shvati kako rangirati dokumente. Verovatno ste primetili da je broj pronađenih rezultata za skoro svaki upit ogroman: stotine hiljada, često milioni rezultata. Većina njih je nezanimljiva, beskorisna, samo nasumično spominju riječi za upit ili su općenito spam. Da biste odgovorili na vaš zahtjev, morate odmah odabrati prvih deset od svih pronađenih rezultata. Pisanje programa koji to radi sa prihvatljivim kvalitetom postalo je izvan moći ljudskog programera. Dogodila se sljedeća tranzicija - tražilice su počele aktivno koristiti strojno učenje.

    Još 2009. godine Yandex je predstavio sopstvenu Matrixnet metodu, zasnovanu na pojačavanju gradijenta. Možemo reći da rangiranju pomažu kolektivna inteligencija korisnika i „mudrost mase“. Informacije o sajtovima i ponašanju ljudi pretvaraju se u mnoge faktore, od kojih svaki Matrixnet koristi za izradu formule za rangiranje. U stvari, formulu za rangiranje sada piše mašina. Inače, koristimo i rezultate neuronskih mreža kao individualne faktore (na primjer, ovako radi Palekh algoritam o kojem smo pričali prošle godine).

    Važna karakteristika Matrixneta je da je otporan na prenamjenu. Ovo vam omogućava da uzmete u obzir mnogo faktora rangiranja i istovremeno trenirate na relativno maloj količini podataka, bez straha da će mašina pronaći nepostojeće obrasce. Druge metode mašinskog učenja ili vam omogućavaju da napravite jednostavnije formule sa manje faktora ili zahtevaju veći uzorak za obuku.

    Još jedna važna karakteristika Matrixneta je da se formula za rangiranje može zasebno konfigurisati za prilično uske klase upita. Na primjer, poboljšajte kvalitet pretrage samo za upite o muzici. Istovremeno, rangiranje za druge klase upita neće se pogoršati.

    Upravo su Matrixnet i njegove prednosti činile osnovu CatBoost-a. Ali zašto smo uopšte morali da izmislimo nešto novo?

    Gotovo svaka moderna metoda zasnovana na povećanju gradijenta radi s brojevima. Čak i ako su vaš unos žanrovi muzike, vrste oblaka ili boje, ovi podaci i dalje moraju biti opisani jezikom brojeva. To dovodi do izobličenja njihove suštine i potencijalnog smanjenja tačnosti modela.

    Hajde da to demonstriramo koristeći primitivni primjer s katalogom proizvoda u trgovini. Proizvodi imaju malo veze jedni s drugima i ne postoji obrazac između njih koji bi omogućio da se naruče i svakom proizvodu dodijeli značajan broj. 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 ovaj red i iz njega izvući lažne zaključke.

    Iskusni stručnjak za mašinsko učenje može smisliti inteligentniji način da pretvori kategoričke karakteristike u brojeve, ali takva prethodna obrada će dovesti do gubitka nekih informacija i dovesti do pogoršanja kvaliteta konačnog rješenja.

    Zato je bilo važno naučiti mašinu da radi ne samo sa brojevima, već i direktno sa kategorijama, obrascima između kojih će se identifikovati samostalno, bez naše ručne „pomoći“. A CatBoost smo dizajnirali tako da radi podjednako dobro i sa numeričkim i kategoričkim karakteristikama. Zahvaljujući tome, pokazuje više visoka kvaliteta obuka za rad sa heterogenim podacima nego alternativna rješenja. Može se koristiti u raznim oblastima - od bankarstva do industrije.

    Inače, naziv tehnologije dolazi od Categorical Boosting. I nijedna mačka nije oštećena tokom razvoja.

    Benchmarks

    Možemo dugo pričati o teorijskim razlikama biblioteke, ali bolje je to jednom pokazati u praksi. Radi jasnoće, uporedili smo performanse CatBoost biblioteke sa otvorenim analogima XGBoost, LightGBM i H20 na skupu javnih skupova podataka. A evo i rezultata (što manji to bolji): https://catboost.yandex/#benchmark

    Ne želimo da budemo neutemeljeni, stoga se uz biblioteku u open source objavljuje opis procesa poređenja, kod za pokretanje poređenja metoda i kontejner sa korišćenim verzijama svih biblioteka. Svaki korisnik može ponoviti eksperiment kod kuće ili na vlastitim podacima.

    CatBoost u praksi

    Nova metoda je već testirana na Yandex servisima. Korišćen je za poboljšanje rezultata pretrage, rangiranje Yandex.Zen feed preporuka i za izračunavanje vremenske prognoze u Meteum tehnologiji – i u svim slučajevima pokazao se boljim od Matrixneta. U budućnosti, CatBoost će raditi na drugim uslugama. Nećemo se ovdje zaustaviti – bolje je da vam odmah ispričamo o Velikom hadronskom sudaraču (LHC).

    CatBoost je našao primenu i u okviru saradnje sa Evropskom 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 precizno praćenje različitih čestica otkrivenih 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 razni dijelovi detektor do najtačnijeg, agregiranog znanja o čestici. Ovdje mašinsko učenje dolazi u pomoć. Koristeći CatBoost za kombinovanje podataka, naučnici su uspeli da poboljšaju karakteristike kvaliteta konačnog rešenja. CatBoost rezultati su bili bolje rezultate dobijene drugim metodama.

    Kako početi koristiti CatBoost?

    Da biste radili sa CatBoostom, samo ga instalirajte na svoj računar. Biblioteka podržava Linux, Windows i macOS operativne sisteme i dostupna je na jezicima Python programiranje i R. Yandex je također razvio program za vizualizaciju

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

    Objavljeno u otvoreni pristup mašinska biblioteka CatBoost trening razlikuje se od tradicionalnih metoda u algoritmu povećanja gradijenta za fleksibilno učenje na heterogenim podacima, uključujući i nenumeričke.

    Fleksibilna upotreba numeričkih i nenumeričkih podataka

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

    Prema izjavama samog Yandexa, CatBoost biblioteke su alternativa neuronskim mrežama, koje nisu pogodne za sve vrste problema u stvarnoj proizvodnji. U takvim uslovima, CatBoost algoritam obezbeđuje veće performanse i stabilniji rezultat tokom procesa preobuke i visoku predvidljivost u pogledu kvaliteta konačnog 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 javno dostupnom, želimo da doprinesemo razvoju 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 Open Source. Nadamo se da će zajednica stručnjaka to cijeniti i pomoći da bude još bolje.”

    Kako je Yandex objasnio za CNews, CatBoost tehnika je nasljednica 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.

    Tehnika CatBoost je zanimljiva zbog smanjenog vremena ponovne obuke zbog upotrebe vlasničkog algoritma za izgradnju modela, koji se, zauzvrat, razlikuje od standardne šeme za povećanje gradijenta.

    Logo projekta CatBoost

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

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

    CatBoost se može pokrenuti direktno iz komandna linija ili koristite user-friendly API za Python ili R sa alatima za analizu formule i vizualizaciju učenja.

    Kako je Yandex press služba objasnila za CNews, rezultat je CatBoost dug rad najbolji stručnjaci kompanije, koji su apsorbirali 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 ozbiljan 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 su objasnili iz kompanije, 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 takođe planiraju da razviju tehnologiju unutar kompanije: poseban tim trenutno radi na njoj, unapređuje je i implementira u velika količina usluge. S vremenom će se biblioteka CatBoost aplikacija povećavati. Budući da je tehnologija javno dostupna, sav napredak će odmah biti dostupan svim korisnicima. S obzirom na količinu i kvalitet usluga Yandexa i netrivijalnih zadataka koji su u njima riješeni, kompanija je uvjerena da će tehnologija još dugo ostati lider u svojoj klasi.

    Danas u svijetu postoje Različiti putevi rad sa kategoričkim faktorima. Oni se sastoje od početne predprocesiranja i pretvaranja u brojeve, objasnio je Yandex.

    Najefikasnija metoda sa praktične tačke gledišta je brojanje „kontra“, aktivno ga koriste konkurenti na Kaggleu, a ovaj metod 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 lošije rade. Na primjer, takva predobrada se može koristiti u lightgbm algoritmu.

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

    Posebnost CatBoost biblioteka je da čak i sada, u eri široke implementacije Duboke tehnologije Učenje, za realnu produkciju, neuronske mreže nisu pogodne za sve vrste zadataka, a u takvim uslovima, gradijent boosting CatBoost obezbeđuje veće performanse, stabilnost i predvidljivost u pogledu 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 i 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. Tim Yandex Data Factory također ga koristi u svojim rješenjima za industriju, posebno za optimizaciju potrošnje sirovina i predviđanje kvarova.

    CatBoost već ima iskustvo u međunarodnoj upotrebi: ovu metodu mašinskog učenja uveo je Evropski centar za nuklearna istraživanja (CERN) da kombinuje podatke dobijene 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.

    Dostupnost CatBoost-a

    Da biste radili sa CatBoostom, samo ga instalirajte 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 pod nazivom CatBoost Viewer, koji vam omogućava da pratite proces učenja na grafovima. CatBoost i CatBoost Viewer možete preuzeti na GitHubu.

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

    Uvod

    Trenutno je mašinsko učenje oblast naučnog istraživanja koja se aktivno razvija. 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 iz tih podataka zakonitosti po kojima se odvijaju fizički, biološki, ekonomski i drugi procesi. 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 visokog nivoa u podacima koristeći višestruke sekvencijalne nelinearne transformacije, koje su tipično predstavljene 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 komparativna analiza neki softverski alati za duboko učenje, od kojih se nedavno pojavio veliki izbor. Ovi alati uključuju softverske biblioteke, proširenja programskih jezika i nezavisni jezici, što vam omogućava da koristite gotovi algoritmi kreiranje i obučavanje 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. Pravi izbor korištenje alata je važan 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 i daju se primjeri njihovog korištenja. Kvalitet i brzina biblioteka se upoređuju kada se konstruišu identične topologije neuronske mreže kako bi se rešio problem klasifikacije rukom pisanih cifara (MNIST skup podataka se koristi kao skup za obuku i testiranje). Također se pokušava ocijeniti lakoća korištenja biblioteka o kojima je riječ u praksi.

    MNIST skup podataka

    Zatim će se baza podataka MNIST () sa slikama rukom pisanih cifara 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: obuku, koja se sastoji od 50.000 slika, i testiranje, koja se sastoji od 10.000 slika.

    Softverski alati za rješavanje problema dubokog učenja

    Ima ih mnogo softver za rješavanje problema dubokog učenja. Opšte poređenje možete pronaći u funkcionalnost najpoznatiji, ovdje pružamo opće informacije o nekima od njih (). Prvih šest softverskih biblioteka najviše implementira širok raspon metode 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 veće produktivnosti.

    Tabela 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 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 dostavljenih informacija i preporuka stručnjaka, četiri biblioteke su odabrane za dalje razmatranje: - jedna od najzrelijih i funkcionalno kompletnijih biblioteka, i - široko korišćena u zajednici. Svaka biblioteka se razmatra prema sljedećem planu:
    1. Kratke osnovne informacije.
    2. Tehničke karakteristike (OS, programski jezik, zavisnosti).
    3. Funkcionalnost.
    4. Primjer formiranja mreže logističke regresije.
    5. Obuka i upotreba konstruisanog modela za klasifikaciju.
    Nakon pregleda navedenih biblioteka, one se upoređuju na brojnim probnim mrežnim konfiguracijama.

    Caffe Library



    Caffe je u razvoju od septembra 2013. Razvoj je počeo sa Yangqing Jia 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 C++ programskog jezika, sa dostupnim omotima Python i MATLAB. Zvanično podržani operativni sistemi su Linux i OS X, a postoji i nezvanični port za Windows. 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 biste ubrzali proračune, Caffe se može pokrenuti na GPU-u osnovne sposobnosti CUDA tehnologije ili biblioteke primitiva dubokog učenja cuDNN.

    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.
    • i drugi.
    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, razne aktivacijske funkcije se mogu koristiti prilikom generiranja transformacija.
    • Pozitivni dio (Rectified-Linear Unit, ReLU).
    • Sigmoidna funkcija (SIGMOID).
    • Hiperbolična tangenta (TANH).
    • Apsolutna vrijednost (ABSVAL).
    • Eksponencijacija (POWER).
    • Funkcija binomne normalne log vjerovatnoće (BNLL).
    Posljednji sloj modela neuronske mreže mora sadržavati funkciju greške. Biblioteka ima sljedeće funkcije:
    • Srednja kvadratna greška (MSE).
    • Gubitak šarke.
    • Funkcija logističkih gubitaka.
    • Funkcija dobivanja informacija.
    • Sigmoidni unakrsni gubitak entropije.
    • Softmax funkcija. Generalizira sigmoidnu unakrsnu entropiju na slučaj više od dvije klase.
    U procesu obuke modela koriste se različite metode optimizacije. Programeri Caffea pružaju implementacije brojnih metoda:

    U biblioteci Caffe, topologija neuronskih mreža, početni podaci i metoda obuke su specificirani 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 i da se nalazi 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, a može se pokrenuti i na bilo kojem operativnom sistemu koristeći virtuelna mašina, jer programeri obezbeđuju konfigurisani omotač virtuelno okruženje baziran na Vagrantu. Pylearn2 je nadskup Theano biblioteke. Dodatno potrebno PyYAML, PIL. Da bi ubrzali prorač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 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. Dostupan sledećim metodama obuka:

    • Batch Gradient Descent (BGD).
    • Stohastički gradijentni pad (SGD).
    • Nelinearni konjugirani gradijentni spuštanje (NCG).
    U biblioteci Pylearn2, neuronske mreže su specificirane 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 opsežnom 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 jezik skriptiranja Lua, u kombinaciji sa SSE, OpenMP i CUDA tehnologijama, omogućava Torchu da pokaže dobru brzinu u poređenju sa drugim bibliotekama. On ovog trenutka Podržani su operativni sistemi Linux, FreeBSD, Mac OS X. Glavni moduli rade i na Windows-u. Torchove zavisnosti uključuju imagemagick, gnuplot, nodejs, npm i druge.

    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 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ć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 mogu 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: konvolucija (Convolution), stanjivanje (SubSampling), prostorno udruživanje (MaxPooling, AveragePooling, LPPooling), normalizacija razlike (SubtractiveNormalization).
    Funkcije greške: Srednja kvadratna greška (MSE), CrossEntropy, itd.

    Sljedeće metode optimizacije se mogu koristiti tokom treninga:

    Pogledajmo proces konfiguracije neuronske mreže u Torchu. Prvo morate deklarirati kontejner, a zatim mu dodati slojeve. Redoslijed kojim dodajete slojeve je važan jer... izlaz (n-1)-tog sloja će biti ulaz n-tog.
    regresija = nn.Sequential() regresija:add(nn.Linear(784,10)) regresija:add(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 vam da učitate unaprijed pripremljen skup 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 funkcije Lua jezik(npr. io.open(ime datoteke [, mod])) ili funkcije iz paketa biblioteke Torch (npr. image.loadJPG(ime datoteke)).
    2. Određivanje mrežnog odgovora za ulazne podatke X:
      Y = regresija:naprijed(X)
    3. Proračun funkcije greške E = gubitak(Y,T), u našem slučaju ovo je funkcija vjerovatnoće.
      E = gubitak:naprijed(Y,T)
    4. Proračun gradijenata prema algoritmu povratnog širenja.
      dE_dY = gubitak:nazad(Y,T) regresija:nazad(X,dE_dY)
    Sad hajde da sve to spojimo. Da biste trenirali neuronsku mrežu u biblioteci Torch, morate napisati sopstvenu petlju za obuku. 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 mrežne težine.
    -- Kreirajte posebne varijable: težine neuronske mreže i njihove gradijente w, dE_dw = regresija:getParameters() lokalno 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:nazad(Y,T) regresija:nazad(X,dE_dY) povratak E, dE_dw kraj -- Zatim u petlji za obuku pozivamo optim.sgd(eval_E, w, optimState)
    gdje su optimState parametri gradijenta spuštanja (learningRate, momentum, weightDecay, itd.). Možete pogledati cijeli ciklus treninga.

    Lako je uočiti da procedura deklaracije, kao i procedura obuke, zauzima manje od 10 linija koda, što ukazuje na lakoću 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(path)
    Kada se učita, mreža se može koristiti za klasifikaciju ili dodatnu obuku. Ako trebate saznati kojoj klasi pripada element uzorka, trebate samo proći kroz mrežu i izračunati izlaz:
    rezultat = neto:naprijed(uzorak)
    Više složeni primjeri možete pronaći u bibliotečkom materijalu za obuku.

    Theano Library


    Theano je proširenje jezika Python koje vam omogućava efikasno računanje matematički izrazi, koji sadrži višedimenzionalne nizove. Biblioteka je dobila ime po ženi starogrčkog filozofa i matematičara Pitagore - Teano (ili Teano). Theano je razvijen u LISA laboratoriji kako bi podržao brzi razvoj algoritama mašinskog učenja.

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

    Theano pruža osnovni skup alata za konfigurisanje neuronskih mreža i njihovu obuku. Moguće je implementirati višeslojne potpuno povezane mreže (Multi-Layer Perceptron), konvolucione neuronske mreže (CNN), rekurentne neuronske mreže (RNN), autoenkodere i ograničene Boltzmannove mašine. Razne funkcije aktivacije su također dostupne, posebno sigmoidna, softmax funkcija, unakrsna entropija. Tokom treninga se koristi batch gradijent spuštanje (Batch SGD).

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


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

    Softverska implementacija klase

    class LogisticRegression(object): def __init__(self, input, n_in, n_out): # y = W * x + b # deklarirati varijable, odrediti tip, broj ulaza i izlaza self.W = theano.shared(# inicijalizirati početni ponderi na nulu vrijednost=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 funkciju aktivacije, mrežni izlaz je varijabilan 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 = # definiraj funkciju greške def negative_log_likelihood(self, y): return -T.mean(T. log(self.p_y_given_x )) # x - unosi se na mrežni ulaz # skup slika (minibatch) je raspoređen u redove u matrici x # y - mrežni odgovor na svaki uzorak x = T.matrix("x") y = T.ivector("y") # kreirajte model logističke regresije svaka MNIST slika ima veličinu od 28*28 klasifikator = LogisticRegression(input=x, n_in=28 * 28, n_out=10) # vrijednost funkcije greške koju smo pokušavajući da minimizirate tokom treninga trošak = classifier.negative_log_likvihood(y) # da biste izračunali gradijente, morate pozvati Theano funkciju - grad g_W = T.grad(cost=cost, wrt=classifier.W) g_b = T.grad(cost =cost, wrt=classifier.b) # definirajte pravila za ažuriranje ažuriranja težine neuronske mreže = [(classifier.W, classifier.W - learning_rate * g_W), (classifier.b, classifier.b - learning_rate * g_b)] # kompajlirajte funkciju za obuku, u budućnosti će se ona pozivati ​​u petlji za obuku train_model = theano.function(inputs =, outputs=cost, updates=updates, givens=( x: train_set_x, y: train_set_y ))


    Za brzo spremanje i učitavajući parametre 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 uočiti da proces kreiranja modela i određivanja njegovih parametara zahtijeva pisanje obimnog i bučnog koda. Biblioteka je niskog nivoa. Nemoguće je ne primijetiti njegovu fleksibilnost, kao i sposobnost 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 zadatka klasifikacije rukom pisanih znamenki

    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 inicijalizirane nasumično 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 gradijenta spuštanja (SGD) se biraju jednaki sljedećim vrijednostima: brzina učenja - 0,01, impuls - 0,9, opadanje težine - 5e-4, veličina serije - 128, maksimalan broj iteracija - 150.

    Eksperimentalni rezultati

    Vrijeme obuke neuronskih mreža opisanih ranije ( , ) koristeći četiri razmatrane biblioteke prikazano je u nastavku (

    Najbolji članci na ovu temu