Dosbarthiad lluniadau mewn llawysgrifen. Adroddiad yn Yandex

Ychydig fisoedd yn ôl, mae ein cydweithwyr o Google wedi treulio ar Kaggle cystadleuaeth i greu dosbarthwr ar gyfer delweddau a gafwyd yn y synhwyraidd y gêm "Cyflym, Draw!" Cipiodd y tîm, a oedd yn cynnwys datblygwr Yandex Roman Vlasov, y pedwerydd safle yn y gystadleuaeth. Yn yr hyfforddiant dysgu peirianyddol ym mis Ionawr, rhannodd Roman syniadau ei dîm, gweithrediad terfynol y dosbarthwr, ac arferion diddorol ei wrthwynebwyr.


- Helo bawb! Fy enw i yw Roma Vlasov, heddiw byddaf yn dweud wrthych am Quick, Draw! Her Cydnabod Doodle.

Dosbarthiad lluniadau mewn llawysgrifen. Adroddiad yn Yandex

Roedd pump o bobl ar ein tîm. Ymunais yn union cyn y dyddiad cau ar gyfer uno. Roeddem yn anlwcus, cawsom ein hysgwyd ychydig, ond cawsom ein hysgwyd o'r sefyllfa arian, a chawsant eu hysgwyd o'r safle aur. A chymerasom y pedwerydd safle anrhydeddus.

(Yn ystod y gystadleuaeth, arsylwodd y timau eu hunain mewn sgôr, a ffurfiwyd yn seiliedig ar y canlyniadau a ddangosir ar un rhan o'r set ddata arfaethedig. Ffurfiwyd y sgôr terfynol, yn ei dro, ar ran arall o'r set ddata. Gwneir hyn felly nad yw cyfranogwyr y gystadleuaeth yn addasu eu algorithmau i ddata penodol.Felly, yn y rowndiau terfynol, wrth newid rhwng graddfeydd, mae'r safleoedd yn ysgwyd ychydig (o'r ysgwyd Saesneg - i gymysgu): ar ddata arall, efallai y bydd y canlyniad yn troi allan Roedd tîm Roman yn gyntaf yn y tri uchaf Yn yr achos hwn, y tri uchaf yw arian, parth graddio ariannol, gan mai dim ond y tri lle cyntaf a ddyfarnwyd gwobr ariannol.Ar ôl yr ad-drefnu, roedd y tîm eisoes mewn pedwerydd safle. Yn yr un modd, collodd y tîm arall y fuddugoliaeth, y safle aur. - Ed.)

Dosbarthiad lluniadau mewn llawysgrifen. Adroddiad yn Yandex

Roedd y gystadleuaeth hefyd yn arwyddocaol yn yr ystyr bod Evgeniy Babakhnin wedi derbyn nain, derbyniodd Ivan Sosin feistr, arhosodd Roman Soloviev yn feistr, derbyniodd Alex Parinov feistr, deuthum yn arbenigwr, ac erbyn hyn rwyf eisoes yn feistr.

Dosbarthiad lluniadau mewn llawysgrifen. Adroddiad yn Yandex

Beth yw'r Quick, Draw? Mae hwn yn wasanaeth gan Google. Roedd gan Google y nod o boblogeiddio AI a chyda'r gwasanaeth hwn roedd eisiau dangos sut mae rhwydweithiau niwral yn gweithio. Rydych chi'n mynd yno, cliciwch Dewch i dynnu llun, ac mae tudalen newydd yn ymddangos lle dywedir wrthych: tynnwch lun igam ogam, mae gennych 20 eiliad i wneud hyn. Rydych chi'n ceisio tynnu llun igam-ogam mewn 20 eiliad, fel yma, er enghraifft. Os byddwch chi'n llwyddo, mae'r rhwydwaith yn dweud ei fod yn igam ogam ac rydych chi'n symud ymlaen. Dim ond chwe llun o'r fath sydd.

Os methodd rhwydwaith Google adnabod yr hyn a lunasoch, gosodwyd croes ar y dasg. Yn ddiweddarach dywedaf wrthych beth fydd yn ei olygu yn y dyfodol p'un a yw lluniad yn cael ei gydnabod gan y rhwydwaith ai peidio.

Casglodd y gwasanaeth hwn nifer gweddol fawr o ddefnyddwyr, a chofnodwyd yr holl luniau a dynnwyd gan ddefnyddwyr.

Dosbarthiad lluniadau mewn llawysgrifen. Adroddiad yn Yandex

Llwyddom i gasglu bron i 50 miliwn o ddelweddau. O hyn, ffurfiwyd dyddiad y trên a'r prawf ar gyfer ein cystadleuaeth. Gyda llaw, mae swm y data yn y prawf a nifer y dosbarthiadau yn cael eu hamlygu mewn print trwm am reswm. Byddaf yn dweud wrthych amdanynt ychydig yn ddiweddarach.

Roedd fformat y data fel a ganlyn. Nid delweddau RGB yn unig yw'r rhain, ond, yn fras, log o bopeth a wnaeth y defnyddiwr. Gair yw ein targed, cod gwlad yw o ble mae awdur y dwdl yn dod, stamp amser yw amser. Mae'r label cydnabyddedig yn dangos a oedd y rhwydwaith yn adnabod y ddelwedd gan Google ai peidio. Ac mae'r lluniad ei hun yn ddilyniant, brasamcan o gromlin y mae'r defnyddiwr yn ei dynnu gyda phwyntiau. Ac amseriadau. Dyma'r amser o ddechrau tynnu'r llun.

Dosbarthiad lluniadau mewn llawysgrifen. Adroddiad yn Yandex

Cyflwynwyd data mewn dau fformat. Dyma'r fformat cyntaf, a'r ail yn cael ei symleiddio. Fe wnaethon nhw dorri'r amseriadau oddi yno a brasamcanu'r set hon o bwyntiau gyda set lai o bwyntiau. Ar gyfer hyn maent yn defnyddio algorithm Douglas-Pecker. Mae gennych set fawr o bwyntiau sy'n brasamcanu llinell syth yn unig, ond mewn gwirionedd gallwch chi frasamcanu'r llinell hon gyda dau bwynt yn unig. Dyma syniad yr algorithm.

Dosbarthwyd y data fel a ganlyn. Mae popeth yn unffurf, ond mae yna rai allgleifion. Pan wnaethon ni ddatrys y broblem, wnaethon ni ddim edrych arni. Y prif beth yw nad oedd unrhyw ddosbarthiadau a oedd yn brin iawn, nid oedd yn rhaid i ni wneud sampleri pwysol a gorsamplu data.

Dosbarthiad lluniadau mewn llawysgrifen. Adroddiad yn Yandex

Sut olwg oedd ar y lluniau? Dyma'r dosbarth “awyren” ac enghreifftiau ohono gyda'r labeli wedi'u cydnabod a heb eu hadnabod. Roedd eu cymhareb rhywle o gwmpas 1 i 9. Fel y gwelwch, mae'r data yn eithaf swnllyd. Byddwn yn dyfalu ei fod yn awyren. Os edrychwch ar heb ei gydnabod, yn y rhan fwyaf o achosion dim ond sŵn ydyw. Ceisiodd rhywun hyd yn oed ysgrifennu “awyren,” ond mae'n debyg yn Ffrangeg.

Yn syml, cymerodd y rhan fwyaf o gyfranogwyr gridiau, tynnu data o'r dilyniant hwn o linellau fel lluniau RGB, a'u taflu i'r rhwydwaith. Tynnais tua'r un ffordd: cymerais balet o liwiau, tynais y llinell gyntaf ag un lliw, a oedd ar ddechrau'r palet hwn, y llinell olaf ag un arall, a oedd ar ddiwedd y palet, a rhyngddynt. Fe wnes i ryngosod ym mhobman gan ddefnyddio'r palet hwn. Gyda llaw, rhoddodd hyn well canlyniad na phe baech chi'n tynnu llun fel ar y sleid gyntaf - dim ond mewn du.

Ceisiodd aelodau eraill o'r tîm, fel Ivan Sosin, ddulliau ychydig yn wahanol o luniadu. Gydag un sianel tynnodd lun llwyd yn syml, gyda sianel arall tynnodd bob strôc gyda graddiant o'r dechrau i'r diwedd, o 32 i 255, a chyda'r drydedd sianel tynnodd raddiant dros bob strôc o 32 i 255.

Peth diddorol arall yw bod Alex Parinov wedi llwytho gwybodaeth i'r rhwydwaith gan ddefnyddio côd gwlad.

Dosbarthiad lluniadau mewn llawysgrifen. Adroddiad yn Yandex

Y metrig a ddefnyddir yn y gystadleuaeth yw Cywirdeb Cymedrol Cyfartalog. Beth yw hanfod y metrig hwn ar gyfer cystadleuaeth? Gallwch roi tri rhagfynegiad, ac os nad oes rhagfynegiad cywir yn y tri hyn, yna fe gewch 0. Os oes un cywir, yna cymerir ei drefn i ystyriaeth. A bydd y canlyniad targed yn cael ei gyfrif fel 1 wedi'i rannu â threfn eich rhagfynegiad. Er enghraifft, gwnaethoch dri rhagfynegydd, a'r un cywir yw'r un cyntaf, yna rydych chi'n rhannu 1 ag 1 ac yn cael 1. Os yw'r rhagfynegydd yn gywir a'i drefn yw 2, yna rhannwch 1 â 2, fe gewch 0,5. Wel, etc.

Dosbarthiad lluniadau mewn llawysgrifen. Adroddiad yn Yandex

Gyda rhagbrosesu data - sut i dynnu lluniau ac yn y blaen - rydym wedi penderfynu ychydig. Pa saernïaeth a ddefnyddiwyd gennym? Fe wnaethon ni geisio defnyddio pensaernïaeth braster fel PNASNet, SENet, a phensaernïaeth sydd eisoes yn glasurol fel SE-Res-NeXt, maen nhw'n cystadlu fwyfwy mewn cystadlaethau newydd. Roedd yna hefyd ResNet a DenseNet.

Dosbarthiad lluniadau mewn llawysgrifen. Adroddiad yn Yandex

Dosbarthiad lluniadau mewn llawysgrifen. Adroddiad yn Yandex

Dosbarthiad lluniadau mewn llawysgrifen. Adroddiad yn Yandex

Sut wnaethon ni addysgu hyn? Roedd yr holl fodelau a gymerwyd gennym wedi'u hyfforddi ymlaen llaw ar imagenet. Er bod llawer o ddata, 50 miliwn o ddelweddau, ond yn dal i fod, os cymerwch rwydwaith wedi'i hyfforddi ymlaen llaw ar imagenet, dangosodd ganlyniadau gwell na phe baech yn ei hyfforddi o'r dechrau.

Pa dechnegau addysgu a ddefnyddiwyd gennym? Dyma Cosing Annealing gyda Warm Restarts, y byddaf yn siarad amdano ychydig yn ddiweddarach. Mae hon yn dechneg rydw i'n ei defnyddio ym mron pob un o'm cystadlaethau diweddar, a gyda nhw mae'n troi allan i hyfforddi'r gridiau yn eithaf da, i gyflawni isafswm da.

Dosbarthiad lluniadau mewn llawysgrifen. Adroddiad yn Yandex

Nesaf Lleihau'r Gyfradd Dysgu ar Lwyfandir. Rydych chi'n dechrau hyfforddi'r rhwydwaith, yn gosod cyfradd ddysgu benodol, yn parhau i'w haddysgu, ac mae'ch colled yn cydgyfeirio'n raddol i werth penodol. Rydych chi'n gwirio hyn, er enghraifft, am ddeg cyfnod nid yw'r golled wedi newid o gwbl. Rydych chi'n lleihau eich cyfradd dysgu o rywfaint o werth ac yn parhau i ddysgu. Mae'n gostwng ychydig eto, yn cydgyfeirio o leiaf, a byddwch eto'n gostwng y gyfradd ddysgu, ac yn y blaen, nes bod eich rhwydwaith yn cydgyfeirio o'r diwedd.

Nesaf yw techneg ddiddorol: Peidiwch â dadfeilio'r gyfradd ddysgu, cynyddwch faint y swp. Mae yna erthygl o'r un enw. Pan fyddwch chi'n hyfforddi rhwydwaith, nid oes rhaid i chi leihau'r gyfradd ddysgu, gallwch chi gynyddu maint y swp.

Defnyddiwyd y dechneg hon, gyda llaw, gan Alex Parinov. Dechreuodd gyda swp cyfartal i 408, a phan gyrhaeddodd ei rwydwaith rywfaint o lwyfandir, dyblu maint y swp, ac ati.

A dweud y gwir, nid wyf yn cofio pa werth a gyrhaeddodd ei faint swp, ond yr hyn sy'n ddiddorol yw bod yna dimau ar Kaggle a ddefnyddiodd yr un dechneg, roedd eu maint swp tua 10000. Gyda llaw, mae fframweithiau modern ar gyfer dysgu dwfn, megis Mae PyTorch, er enghraifft, yn caniatáu ichi wneud hyn yn hawdd iawn. Rydych chi'n cynhyrchu'ch swp ac yn ei gyflwyno i'r rhwydwaith nid fel y mae, yn ei gyfanrwydd, ond yn ei rannu'n dalpiau fel ei fod yn ffitio i mewn i'ch cerdyn fideo, cyfrifo'r graddiannau, ac ar ôl i chi gyfrifo'r graddiant ar gyfer y swp cyfan, diweddaru y pwysau.

Gyda llaw, roedd meintiau swp mawr yn dal i gael eu cynnwys yn y gystadleuaeth hon, oherwydd bod y data yn eithaf swnllyd, ac roedd maint swp mawr yn eich helpu i frasamcanu'r graddiant yn fwy cywir.

Defnyddiwyd ffug-labelu hefyd, a ddefnyddiwyd yn bennaf gan Roman Soloviev. Fe samplodd tua hanner y data o'r prawf mewn sypiau, a hyfforddodd y grid ar sypiau o'r fath.

Roedd maint y lluniau'n bwysig, ond y gwir yw bod gennych chi lawer o ddata, mae angen i chi hyfforddi am amser hir, ac os yw maint eich llun yn eithaf mawr, yna byddwch chi'n hyfforddi am amser hir iawn. Ond nid oedd hyn yn ychwanegu llawer at ansawdd eich dosbarthwr terfynol, felly roedd yn werth defnyddio rhyw fath o gyfaddawd. A dim ond lluniau nad oedden nhw'n fawr iawn o ran maint wnaethon ni drio.

Sut y dysgwyd y cyfan? Yn gyntaf, tynnwyd lluniau bach, rhedwyd sawl cyfnod arnynt, cymerodd hyn gryn dipyn o amser. Yna rhoddwyd lluniau maint mawr, hyfforddwyd y rhwydwaith, yna hyd yn oed yn fwy, hyd yn oed yn fwy, er mwyn peidio â'i hyfforddi o'r dechrau a pheidio â gwastraffu llawer o amser.

Ynglŷn â optimizers. Fe wnaethon ni ddefnyddio SGD ac Adam. Yn y modd hwn roedd yn bosibl cael model sengl, a roddodd gyflymder o 0,941-0,946 ar y bwrdd arweinwyr cyhoeddus, sy'n eithaf da.

Os byddwch chi'n ensembleu'r modelau mewn rhyw ffordd, fe gewch chi rywle o gwmpas 0,951. Os ydych chi'n defnyddio un dechneg arall, fe gewch sgôr derfynol o 0,954 ar y bwrdd cyhoeddus, yn union fel y cawsom ni. Ond mwy am hynny yn nes ymlaen. Nesaf dywedaf wrthych sut y gwnaethom ymgynnull y modelau, a sut y gwnaethom lwyddo i gyflawni cyflymder mor derfynol.

Nesaf hoffwn siarad am Cosio Anelio gydag Ailddechrau Cynnes neu Ddisgyniad Graddiant Stochastic gydag Ailddechrau Cynnes. Yn fras, mewn egwyddor, gallwch ddefnyddio unrhyw optimizer, ond y pwynt yw hyn: os ydych chi'n hyfforddi un rhwydwaith yn unig ac yn raddol mae'n cydgyfeirio i ryw isafswm, yna mae popeth yn iawn, fe gewch chi un rhwydwaith, mae'n gwneud rhai camgymeriadau, ond chi yn gallu ei hyfforddi ychydig yn wahanol. Byddwch yn gosod rhywfaint o gyfradd dysgu cychwynnol, ac yn ei ostwng yn raddol yn ôl y fformiwla hon. Rydych chi'n ei ostwng, mae eich rhwydwaith yn dod i isafswm, yna rydych chi'n arbed y pwysau, ac eto'n gosod y gyfradd ddysgu a oedd ar ddechrau'r hyfforddiant, a thrwy hynny'n mynd i rywle i fyny o'r isafswm hwn, ac eto'n gostwng eich cyfradd ddysgu.

Felly, gallwch ymweld â sawl isafswm ar unwaith, lle bydd eich colled, plws neu finws, yr un peth. Ond y ffaith yw y bydd rhwydweithiau gyda'r pwysau hyn yn rhoi gwallau gwahanol ar eich dyddiad. Trwy eu cyfartaleddu, fe gewch ryw fath o frasamcan, a bydd eich cyflymder yn uwch.

Dosbarthiad lluniadau mewn llawysgrifen. Adroddiad yn Yandex

Ynglŷn â sut y gwnaethom ymgynnull ein modelau. Ar ddechrau'r cyflwyniad, dywedais i roi sylw i faint o ddata yn y prawf a nifer y dosbarthiadau. Os ydych chi'n ychwanegu 1 at nifer y targedau yn y prawf a osodwyd ac yn rhannu â nifer y dosbarthiadau, fe gewch y rhif 330, ac ysgrifennwyd hyn ar y fforwm - bod y dosbarthiadau yn y prawf yn gytbwys. Gellid defnyddio hwn.

Yn seiliedig ar hyn, lluniodd Roman Soloviev fetrig, fe wnaethom ei alw'n Sgôr Procsi, a oedd yn cydberthyn yn eithaf da â'r bwrdd arweinwyr. Y pwynt yw: rydych chi'n gwneud rhagfynegiad, yn cymryd 1 uchaf eich rhagfynegyddion ac yn cyfrif nifer y gwrthrychau ar gyfer pob dosbarth. Nesaf, tynnwch 330 o bob gwerth ac adiwch y gwerthoedd absoliwt canlyniadol.

Cafwyd y gwerthoedd canlynol. Helpodd hyn ni i beidio â chreu bwrdd arweinwyr treiddgar, ond i ddilysu’n lleol a dewis cyfernodau ar gyfer ein hensembles.

Gydag ensemble fe allech chi gael y fath gyflymder. Beth arall allwn i ei wneud? Tybiwch eich bod wedi defnyddio'r wybodaeth bod y dosbarthiadau yn eich prawf yn gytbwys.

Roedd y cydbwysedd yn wahanol. Enghraifft o un ohonyn nhw - cydbwyso oddi wrth y bechgyn a gymerodd y lle cyntaf.

Beth wnaethom ni? Roedd ein cydbwyso yn eithaf syml, awgrymwyd gan Evgeny Babakhnin. Yn gyntaf fe wnaethom ddidoli ein rhagfynegiadau yn ôl yr 1 uchaf a dewis ymgeiswyr ohonynt - fel nad oedd nifer y dosbarthiadau'n fwy na 330. Ond ar gyfer rhai dosbarthiadau mae gennych lai na rhagfynegwyr 330. Iawn, gadewch i ni hefyd ddidoli yn ôl y 2 uchaf a'r 3 uchaf , a byddwn hefyd yn dewis ymgeiswyr.

Sut oedd ein cydbwyso yn wahanol i gydbwyso'r lle cyntaf? Defnyddient ddull ailadroddus, gan gymryd y dosbarth mwyaf poblogaidd a lleihau'r tebygolrwydd ar gyfer y dosbarth hwnnw o ryw nifer fach nes nad oedd y dosbarth hwnnw bellach y mwyaf poblogaidd. Cymerasom y dosbarth mwyaf poblogaidd nesaf. Felly parhawyd i'w gostwng hyd nes y daeth rhifedi yr holl ddosbarthiadau yn gyfartal.

Roedd pawb yn defnyddio un dull plws neu finws ar gyfer rhwydweithiau trên, ond nid oedd pawb yn defnyddio cydbwyso. Gan ddefnyddio cydbwyso, fe allech chi fynd i mewn i aur, ac os oeddech chi'n ffodus, yna i mewn i arian.

Sut i ragbrosesu dyddiad? Roedd pawb yn rhagbrosesu'r dyddiad, plws neu finws, yn yr un modd - gwneud nodweddion wedi'u gwneud â llaw, ceisio amgodio amseriadau gyda gwahanol liwiau strôc, ac ati Siaradodd Alexey Nozdrin-Plotnitsky, a gymerodd le 8fed, am hyn.

Dosbarthiad lluniadau mewn llawysgrifen. Adroddiad yn Yandex

Fe'i gwnaeth yn wahanol. Dywedodd nad yw'r holl nodweddion crefftus hyn sydd gennych chi'n gweithio, nid oes angen i chi wneud hynny, dylai eich rhwydwaith ddysgu hyn i gyd ar ei ben ei hun. Ac yn lle hynny, lluniodd fodiwlau dysgu a ragbrosesodd eich data. Taflodd y data gwreiddiol i mewn iddynt heb ragbrosesu - cyfesurynnau pwyntiau ac amseriadau.

Yna cymerodd y gwahaniaeth yn seiliedig ar y cyfesurynnau, a chyfartaleddodd y cyfan yn seiliedig ar yr amseriadau. A daeth i fyny gyda matrics eithaf hir. Cymhwysodd convolution 1D iddo sawl gwaith i gael matrics o faint 64xn, lle mae n yn gyfanswm nifer y pwyntiau, a gwneir 64 er mwyn bwydo'r matrics canlyniadol i haen unrhyw rwydwaith convolutional, sy'n derbyn nifer y sianeli. - 64. cafodd fatrics 64xn, yna o hyn roedd angen creu tensor o gryn faint fel bod nifer y sianeli yn hafal i 64. normaleiddiodd holl bwyntiau X, Y yn yr amrediad o 0 i 32 i greu a tensor maint 32x32. Wn i ddim pam ei fod eisiau 32x32, fe ddigwyddodd felly. Ac ar y cyfesuryn hwn gosododd ddarn o'r matrics hwn o faint 64xn. Felly, dim ond tensor 32x32x64 y gallech ei roi ymhellach yn eich rhwydwaith niwral convolutional. Dyna'r cyfan roeddwn i eisiau ei ddweud.

Ffynhonnell: hab.com

Ychwanegu sylw