Classificazione di i disegni scritti a manu. Rapportu in Yandex

Uni pochi mesi fà, i nostri culleghi di Google spesi nantu à Kaggle un cuncorsu per creà un classificatore per l'imaghjini ottenuti in u sensazionale u ghjocu "Presto, Disegna!" A squadra, chì includeva u sviluppatore Yandex Roman Vlasov, hà pigliatu u quartu postu in a cumpetizione. À a furmazione di machine learning di ghjennaghju, Roman hà spartutu l'idee di a so squadra, l'implementazione finale di u classificatore è e pratiche interessanti di i so avversari.


- Salute à tutti ! Mi chjamu Roma Vlasov, oghje vi parleraghju di Quick, Draw ! Sfida di ricunniscenza di Doodle.

Classificazione di i disegni scritti a manu. Rapportu in Yandex

Ci era cinque persone in a nostra squadra. Aghju aghjustatu ghjustu prima di a data di fusione. Eramu sfurtunati, ci sò stati scuzzulati un pocu, ma ci sò stati scuzzulati da a pusizione di soldi, è sò stati scuzzulati da a pusizione d'oru. È avemu pigliatu un onorevoli quartu postu.

(Durante a cumpetizione, i squadre anu osservatu in una qualificazione, chì hè stata furmata nantu à i risultati mostrati nantu à una parte di u settore di dati prupostu. A valutazione finale, à u turnu, hè stata furmata nantu à una altra parte di u dataset. Questu hè fattu cusì. chì i participanti di a cuncurrenza ùn aghjustate micca i so algoritmi à dati specifichi.Per quessa, in a finale, quandu si cambia trà e valutazioni, i pusizioni scuzzulate un pocu (da l'inglesi shake up - per mischjà): nantu à altre dati, u risultatu pò esce. A squadra di Rumanu era prima in i primi trè. In questu casu, i primi trè sò soldi, zona di valutazione monetaria, postu chì solu i primi trè posti sò stati premiati in cash. quartu postu. In listessu modu, l'altru squadra hà persu a vittoria, a pusizione d'oru. - Ed.)

Classificazione di i disegni scritti a manu. Rapportu in Yandex

A cumpetizione era ancu significativu in chì Evgeniy Babakhnin hà ricivutu un grandmastru, Ivan Sosin hà ricevutu un maestru, Roman Soloviev restava un grandmaestru, Alex Parinov hà ricevutu un maestru, sò diventatu un espertu, è avà sò digià un maestru.

Classificazione di i disegni scritti a manu. Rapportu in Yandex

Chì ghjè questu Quick, Draw? Questu hè un serviziu di Google. Google hà avutu u scopu di popularizà l'IA è cù stu serviziu vulia dimustrà cumu funziona e rete neurali. Andate quì, cliccate Disegnà, è una nova pagina si apre induve vi dicenu: disegnate un zigzag, avete 20 seconde per fà questu. Pruvate di disegnà un zigzag in 20 seconde, cum'è quì, per esempiu. Sè avete successu, a reta dice chì hè un zigzag è andate avanti. Ci sò solu sei tali ritratti.

Se a reta di Google ùn hà micca ricunnosce ciò chì avete disegnatu, una croce hè stata posta nantu à u compitu. Più tardi vi dicu ciò chì significarà in u futuru chì un disegnu hè ricunnisciutu da a reta o micca.

Stu serviziu hà riunitu un numeru abbastanza grande d'utilizatori, è tutti i ritratti chì l'utilizatori anu tiratu sò stati registrati.

Classificazione di i disegni scritti a manu. Rapportu in Yandex

Avemu riesciutu à cullà quasi 50 milioni d'imaghjini. Da questu, u trenu è a data di prova per a nostra cumpetizione sò stati furmati. In modu, a quantità di dati in a prova è u numeru di classi sò evidenziati in grassu per una ragione. Vi dicu un pocu dopu.

U furmatu di dati era cum'è seguita. Queste ùn sò micca solu l'imaghjini RGB, ma, à pocu pressu, un logu di tuttu ciò chì l'utilizatore hà fattu. A parolla hè u nostru scopu, u codice di paese hè da induve vene l'autore di u doodle, u timestamp hè u tempu. L'etichetta ricunnisciuta mostra solu se a reta hà ricunnisciutu l'imaghjini da Google o micca. È u disegnu stessu hè una sequenza, una apprussimazione di una curva chì l'utilizatore traccia cù punti. È i tempi. Questu hè u tempu da u principiu di disegnu u ritrattu.

Classificazione di i disegni scritti a manu. Rapportu in Yandex

I dati sò stati presentati in dui formati. Questu hè u primu formatu, è u sicondu hè simplificatu. Taglianu i timings da quì è approssimavanu stu settore di punti cù un settore più chjucu di punti. Per questu anu utilizatu Algoritmu Douglas-Pecker. Avete un grande inseme di punti chì simpricimenti si avvicina à una linea recta, ma in fatti pudete apprussimassi sta linea cù solu dui punti. Questa hè l'idea di l'algoritmu.

I dati sò stati distribuiti cusì. Tuttu hè uniformu, ma ci sò qualchi outliers. Quandu avemu risoltu u prublema, ùn avemu micca vistu. A cosa principal hè chì ùn ci era micca classi chì eranu veramente pochi, ùn avemu micca bisognu di fà campioni ponderati è oversampling di dati.

Classificazione di i disegni scritti a manu. Rapportu in Yandex

Chì parevanu i ritratti ? Questa hè a classa "aviò" è esempi da questu cù l'etichette ricunnisciute è micca ricunnisciute. U so rapportu era in un locu intornu à 1 à 9. Comu pudete vede, i dati sò abbastanza rumorosi. Pensu chì hè un aviò. Sè vo circate micca ricunnisciutu, in a maiò parte di i casi hè solu u rumore. Qualchissia hà ancu pruvatu à scrive "aviò", ma apparentemente in francese.

A maiò parte di i participanti pigghiaru simpricimenti grids, tiravanu dati da questa sequenza di linii cum'è ritratti RGB, è li ghjittavanu in a reta. Aghju fattu apprussimatamente a listessa manera: aghju pigliatu una paleta di culori, hà tracciatu a prima linea cù un culore, chì era à u principiu di sta paleta, l'ultima linea cù l'altru, chì era à a fine di a paleta, è trà elli. Aghju interpolatu in ogni locu cù sta paleta. A propositu, questu hà datu un risultatu megliu cà s'ellu tirate cum'è nantu à a prima diapositiva - solu in neru.

L'altri membri di l'equipa, cum'è Ivan Sosin, anu pruvatu approcci ligeramente diffirenti per u disegnu. Cù un canale hà fattu simplicemente una stampa grisa, cù un altru canale hà disegnatu ogni colpu cù un gradiente da u principiu à a fine, da 32 à 255, è cù u terzu canale hà fattu un gradiente nantu à tutti i tratti da 32 à 255.

Un'altra cosa interessante hè chì Alex Parinov hà caricatu l'infurmazioni à a reta cù u codice di paese.

Classificazione di i disegni scritti a manu. Rapportu in Yandex

A metrica utilizata in a cumpetizione hè a Precision Media Media. Chì ghjè l'essenza di sta metrica per a cumpetizione? Pudete dà trè prediczioni, è s'ellu ùn ci hè micca una predica curretta in questi trè, allora avete 0. Se ci hè una curretta, allora u so ordine hè cunsideratu. È u risultatu di destinazione serà cuntatu cum'è 1 divisu da l'ordine di a vostra predizione. Per esempiu, avete fattu trè predittori, è u currettu hè u primu, dopu dividite 1 per 1 è uttene 1. Se u predictore hè currettu è u so ordine hè 2, dopu dividite 1 per 2, avete 0,5. Ebbè, ecc.

Classificazione di i disegni scritti a manu. Rapportu in Yandex

Cù preprocessing di dati - cumu disegnà l'imaghjini è cusì - avemu decisu un pocu. Chì architetture avemu usatu? Avemu pruvatu à aduprà architetture grasse cum'è PNASNet, SENet, è architetture cusì classiche cum'è SE-Res-NeXt, sò sempre più entrate in novi cuncorsi. Ci era ancu ResNet è DenseNet.

Classificazione di i disegni scritti a manu. Rapportu in Yandex

Classificazione di i disegni scritti a manu. Rapportu in Yandex

Classificazione di i disegni scritti a manu. Rapportu in Yandex

Cumu avemu amparatu questu? Tutti i mudelli chì avemu pigliatu sò stati pre-furmati nantu à imagenet. Ancu s'ellu ci hè una mansa di dati, 50 milioni d'imaghjini, ma sempre, se pigliate una reta pre-furmata nantu à imagenet, hà dimustratu risultati megliu cà s'ellu avete solu furmatu da zero.

Chì tecniche d'insignamentu avemu usatu ? Questu hè Cosing Annealing with Warm Restarts, di quale parleraghju un pocu dopu. Questa hè una tecnica chì aghju utilizatu in quasi tutti i mo cuncorsi recenti, è cun elli si trova à furmà e griglie abbastanza bè, per ottene un bonu minimu.

Classificazione di i disegni scritti a manu. Rapportu in Yandex

Next Reduce u Tasso di Apprendimentu nantu à Plateau. Avete principiatu a furmazione di a reta, stabilisce un certu ritmu di apprendimentu, cuntinueghja à insignà, è a vostra perdita cunverge gradualmente à un certu valore. Verificate questu, per esempiu, per deci epoche a perdita ùn hà micca cambiatu in tuttu. Riducete u vostru ritmu di apprendimentu di qualchì valore è cuntinueghja à amparà. Si scende un pocu di novu, cunverge à un minimu minimu, è torna abbassà u ritmu di apprendimentu, è cusì, finu à chì a vostra reta finalmente cunverge.

In seguitu hè una tecnica interessante: Ùn decadete u ritmu di apprendimentu, aumentate a dimensione di u batch. Ci hè un articulu cù u listessu nome. Quandu si furmà una reta, ùn avete micca bisognu di riduce u ritmu di apprendimentu, pudete solu aumentà a dimensione di u batch.

Sta tecnica, per via, hè stata utilizata da Alex Parinov. Cuminciò cù un batch ugguali à 408, è quandu a so reta ghjunse à qualchì plateau, simpricimenti duppiò a dimensione di batch, etc.

In fatti, ùn aghju micca ricurdatu di quale valore hà righjuntu u so batch size, ma ciò chì hè interessante hè chì ci eranu squadre nantu à Kaggle chì anu utilizatu a listessa tecnica, u so batch size era di circa 10000 XNUMX. In modu, i quadri muderni per l'apprendimentu prufondu, cum'è per esempiu. PyTorch, per esempiu, permette di fà questu assai facilmente. Generate u vostru batch è u sottumette à a rete micca cum'è hè, in a so interezza, ma dividite in pezzi in modu chì si mette in a vostra carta video, calculate i gradienti, è dopu avè calculatu u gradiente per tuttu u batch, aghjurnà. i pesi.

In modu, i grandi batch sizes eranu ancu inclusi in questa cumpetizione, perchè i dati eranu abbastanza rumorosi, è un grande batch size hà aiutatu à apprussimarà più precisamente u gradiente.

Pseudo-etichettatura hè stata ancu usata, soprattuttu utilizata da Roman Soloviev. Hà campionatu circa a mità di i dati da a prova in batch, è hà furmatu a griglia nantu à tali batch.

A dimensione di l'imaghjini importava, ma u fattu hè chì avete assai dati, avete bisognu di furmà per un bellu pezzu, è se a vostra dimensione di stampa hè abbastanza grande, allora entrerete per un bellu pezzu. Ma questu ùn hà micca aghjustatu assai à a qualità di u vostru classificatore finali, per quessa, valeva a pena aduprà qualchì tipu di scambiu. E avemu pruvatu solu ritratti chì ùn eranu micca assai grande in grandezza.

Cumu era tuttu amparatu? Prima, i ritratti chjuchi sò stati pigliati, parechji epoche sò stati currutti nantu à elli, questu hà pigliatu assai tempu. Allora i ritratti di grande dimensione sò stati dati, a rete hè stata furmata, allora ancu di più, ancu di più, per ùn furmà micca da zero è micca perdi assai tempu.

Circa l'ottimisori. Avemu usatu SGD è Adam. In questu modu, era pussibule di ottene un mudellu unicu, chì hà datu una velocità di 0,941-0,946 nantu à a classificazione publica, chì hè abbastanza bè.

Sè inseme i mudelli in qualchì modu, vi ghjunghjerà in un locu intornu à 0,951. Se aduprate una tecnica più, uttene un puntuatu finale di 0,954 nantu à u tribunale publicu, cum'è avemu avutu. Ma più nantu à questu dopu. In seguitu vi dicu cumu avemu assemblatu i mudelli, è cumu avemu riesciutu à ottene una tale velocità finale.

In seguitu mi piacerebbe parlà di Cosing Annealing cù Warm Restarts o Stochastic Gradient Descent with Warm Restarts. In modu approssimativu, in principiu, pudete aduprà qualsiasi ottimisatore, ma u puntu hè questu: se entrene solu una rete è gradualmente cunverge à un minimu minimu, allora tuttu hè bè, uttene una rete, face certi sbagli, ma voi. pò furmà un pocu sfarente. Puderete un certu ritmu di apprendimentu iniziale, è scenderà gradualmente secondu sta formula. L'abbassate, a vostra reta vene à qualchì minimu, allora salvate i pesi, è torna torna a tarifa d'apprendimentu chì era à u principiu di a furmazione, andendu cusì in un locu più altu da questu minimu, è di novu abbassendu u vostru ritmu di apprendimentu.

Cusì, pudete visità parechji minimi à una volta, in quale a vostra perdita serà, più o minus, u listessu. Ma u fattu hè chì e rete cù questi pesi daranu diverse errori nantu à a vostra data. Mediendu a media, uttene qualchì tipu d'approssimazione, è a vostra vitezza serà più altu.

Classificazione di i disegni scritti a manu. Rapportu in Yandex

Circa cumu avemu assemblatu i nostri mudelli. À u principiu di a presentazione, aghju dettu di attentu à a quantità di dati in a prova è u numeru di classi. Se aghjunghje 1 à u numeru di mira in u test set è dividite da u numeru di classi, uttene u numeru 330, è questu hè statu scrittu nantu à u foru - chì e classi in a prova sò equilibrati. Questu puderia esse usatu.

Basatu annantu à questu, Roman Soloviev hà ghjuntu cù una metrica, l'avemu chjamatu Proxy Score, chì correlava abbastanza bè cù a classificazione. U puntu hè: fate una predizione, pigliate u primu 1 di i vostri predittori è cuntate u numeru d'uggetti per ogni classa. In seguitu, resta 330 da ogni valore è aghjunghje i valori assoluti resultanti.

I seguenti valori sò stati ottenuti. Questu ci hà aiutatu micca à creà una classificazione di sonda, ma à cunvalidà in u locu è selezziunà i coefficienti per i nostri inseme.

Cù un inseme pudete ottene una tale velocità. Chì altru puderia fà ? Suppone chì avete utilizatu l'infurmazioni chì e classi in a vostra prova sò equilibrati.

L'equilibriu era diversu. Un esempiu di unu di elli - equilibriu da i picciotti chì anu pigliatu u primu postu.

Chì avemu fattu ? U nostru equilibriu era abbastanza simplice, hè statu suggeritu da Evgeny Babakhnin. Prima avemu ordenatu e nostre predizioni per u top 1 è i candidati selezziunati da elli - cusì chì u numeru di classi ùn hà micca più di 330. Ma per certi classi finiscinu cù menu di predittori 330. Va bè, sortemu ancu per u top 2 è u top 3. , è avemu ancu selezziunà i candidati.

Cumu hè u nostru equilibriu diffirenti da l'equilibriu di u primu postu? Adupranu un accostu iterativu, pigliendu a classa più populari è diminuendu e probabilità per quella classa da un pocu numeru finu à chì ùn era più a classa più populari. Avemu pigliatu a prossima classe più populari. Allora cuntinueghjanu à calà finu à chì u numeru di tutte e classi diventa uguali.

Tutti anu utilizatu più o minus un approcciu per furmà e rete, ma micca tutti anu utilizatu l'equilibriu. Aduprendu l'equilibriu, pudete andà in l'oru, è s'ellu era furtunatu, allora in soldi.

Cumu preprocessà una data? Tutti anu preprocessatu a data, più o minus, in u listessu modu - facendu funziunalità artighjanali, circate di codificà i timings cù diversi culori di colpu, etc. Questu hè esattamente ciò chì Alexey Nozdrin-Plotnitsky, chì hà pigliatu u 8u postu, hà parlatu.

Classificazione di i disegni scritti a manu. Rapportu in Yandex

L'hà fattu in modu diversu. Ellu disse chì tutte queste caratteristiche artighjanali di u vostru ùn viaghjanu micca, ùn avete micca bisognu di fà quessa, a vostra reta deve amparà tuttu questu per sè stessu. E invece, hà ghjuntu cun moduli di apprendimentu chì preprocessanu i vostri dati. Hà lanciatu i dati originali in elli senza preprocessing - coordenate di puntu è timings.

Allora pigliò a diffarenza basatu annantu à e coordenate, è hà mediu tuttu basatu annantu à i timings. È ghjunse cù una matrice piuttostu longa. Hà appiicatu a cunvoluzione 1D parechje volte per ottene una matrice di dimensione 64xn, induve n hè u numeru tutale di punti, è 64 hè fattu per alimentà a matrice resultanti à a capa di qualsiasi rete cunvoluzionale, chì accetta u numeru di canali. - 64. hà ottenutu una matrice 64xn, da questu era necessariu di creà un tensoru di qualchì grandezza per chì u numeru di canali era uguali à 64. Hà normalizatu tutti i punti X, Y in a gamma da 0 à 32 per creà un tensor di taglia 32x32. Ùn sò micca sapè perchè vulia 32x32, hè accadutu cusì. È à questa coordenada pusò un fragmentu di sta matrice di taglia 64xn. Allora hè finitu solu cù un tensore 32x32x64 chì puderete mette più in a vostra rete neurale cunvoluzionale. Hè tuttu ciò chì vulia dì.

Source: www.habr.com

Add a comment