Қолжазба сызбалардың классификациясы. Яндексте есеп беру

Бірнеше ай бұрын Google-дағы әріптестеріміз өткізді Kaggle сайтында сенсациялық фильмде алынған суреттерге классификатор жасау конкурсы ойын «Тез, сурет сал!» Құрамында Яндекс әзірлеушісі Роман Власов бар команда жарыста төртінші орын алды. Қаңтар айындағы машиналық оқыту тренингінде Роман өз командасының идеяларымен, классификатордың соңғы орындалуымен және қарсыластарының қызықты тәжірибелерімен бөлісті.


- Бәріңе сәлем! Менің атым Рома Власов, бүгін мен сізге Quick, Draw туралы айтамын! Doodle тану сыны.

Қолжазба сызбалардың классификациясы. Яндексте есеп беру

Біздің командада бес адам болды. Мен біріктіру мерзімі аяқталмай тұрып қосылдым. Жолымыз болмады, аздап сілкіндік, бірақ біз ақша позициясынан, ал олар алтын позициядан шайқалды. Ал біз құрметті төртінші орын алдық.

(Сайыс барысында командалар ұсынылған деректер жинағының бір бөлігінде көрсетілген нәтижелер бойынша құрылған рейтингте өздерін бақылап отырды. Қорытынды рейтинг, өз кезегінде, деректер жинағының басқа бөлігінде қалыптастырылды. Бұл осылай жасалады. жарысқа қатысушылардың алгоритмдерін нақты деректерге реттемейтіні.Сондықтан финалда рейтингтер арасында ауысқанда позициялар аздап дірілдейді (ағылшынша shake up – араластыру) басқа деректер бойынша нәтиже шығуы мүмкін. Роман командасы үздік үштікте бірінші болды.Бұл жағдайда үздік үштікті ақшалай, ақшалай рейтингтік аймақ алады, өйткені тек алғашқы үш орынға ақшалай сыйлық берілді.Тербелістен кейін команда қазірдің өзінде болды. төртінші орын.Дәл осылай басқа команда да жеңістен, алтын позициядан айырылды.- Ред.)

Қолжазба сызбалардың классификациясы. Яндексте есеп беру

Евгений Бабахнин гроссмейстер, Иван Сосин шеберді, Роман Соловьев гроссмейстер болып қалды, Алекс Паринов шебер болды, мен сарапшы болдым, қазір де шебер болдым деп жарыстың маңызы зор болды.

Қолжазба сызбалардың классификациясы. Яндексте есеп беру

Бұл не жылдам, сызу? Бұл Google ұсынған қызмет. Google AI-ны танымал етуді мақсат етті және осы қызмет арқылы нейрондық желілердің қалай жұмыс істейтінін көрсеткісі келді. Сіз ол жерге барасыз, «Сурет салайық» түймесін басыңыз, сонда сізге айтылған жерде жаңа бет шығады: зигзаг сызыңыз, мұны істеу үшін сізде 20 секунд бар. Сіз 20 секундта ирек сызбаны салуға тырысасыз, мысалы, мұнда. Егер сіз сәттілікке жетсеңіз, желі бұл зигзаг екенін айтады және сіз әрі қарай жүресіз. Мұндай тек алты сурет бар.

Егер Google желісі сіз салған нәрсені тани алмаса, тапсырмаға крест қойылды. Сызба желі арқылы танылады ма, жоқ па, бұл болашақта нені білдіретінін кейінірек айтамын.

Бұл қызмет өте көп пайдаланушыларды жинады және пайдаланушылар салған барлық суреттер тіркелді.

Қолжазба сызбалардың классификациясы. Яндексте есеп беру

Біз 50 миллионға жуық сурет жинадық. Осыдан біздің жарыстың пойызы мен сынақ күні қалыптасты. Айтпақшы, сынақтағы деректер көлемі мен сыныптар саны бір себеппен қою шрифтпен белгіленген. Мен олар туралы сәл кейінірек айтамын.

Деректер пішімі келесідей болды. Бұл жай ғана RGB кескіндері емес, шамамен айтқанда, пайдаланушы жасаған барлық әрекеттердің журналы. Word - біздің мақсатымыз, ел коды - дудл авторы қайдан, уақыт белгісі - уақыт. Танылған жапсырма желі суретті Google-дан танығанын немесе танымағанын көрсетеді. Ал сызбаның өзі пайдаланушы нүктелермен сызатын қисық сызықтың реттілігі, жуықтауы. Және уақыттары. Бұл суретті салудың басталу уақыты.

Қолжазба сызбалардың классификациясы. Яндексте есеп беру

Деректер екі форматта ұсынылды. Бұл бірінші пішім, ал екіншісі жеңілдетілген. Олар уақытты сол жерден қиып алып, осы нүктелер жиынын кішірек нүктелер жиынтығымен жақындатты. Бұл үшін олар пайдаланды Дуглас-Пеккер алгоритмі. Сізде түзу сызықты жақындататын үлкен нүктелер жинағы бар, бірақ шын мәнінде сіз бұл сызықты екі нүктемен жақындата аласыз. Бұл алгоритмнің идеясы.

Деректер келесідей таратылды. Барлығы біркелкі, бірақ кейбір ауытқулар бар. Мәселені шешкен кезде біз оған қарамадық. Ең бастысы, шын мәнінде аз болатын сыныптар болмады, біз салмақты сынамаларды және деректерді шамадан тыс іріктеуді орындаудың қажеті жоқ еді.

Қолжазба сызбалардың классификациясы. Яндексте есеп беру

Суреттер қандай болды? Бұл «ұшақ» класы және оның танылған және танылмаған белгілері бар мысалдар. Олардың арақатынасы шамамен 1-ден 9-ға дейін болды. Көріп отырғаныңыздай, деректер өте шулы. Менің ойымша, бұл ұшақ. Егер сіз танылмаған деп қарасаңыз, көп жағдайда бұл жай шу. Біреу тіпті «ұшақ» деп жазуға тырысты, бірақ француз тілінде.

Қатысушылардың көпшілігі жай ғана торларды алып, осы жолдар тізбегінен деректерді RGB суреттері ретінде сызып, оларды желіге тастады. Мен шамамен бірдей сурет салдым: мен түстер палитрасын алдым, бірінші жолды бір түспен сыздым, ол осы бояғыштың басында, соңғы жолды екіншісімен, палитраның соңында және олардың арасында болды. Мен осы палитраны пайдаланып барлық жерде интерполяция жасадым. Айтпақшы, бұл бірінші слайдтағы суретті қара түспен салғанға қарағанда жақсы нәтиже берді.

Басқа команда мүшелері, мысалы, Иван Сосин, сурет салудың сәл басқаша тәсілдерін қолданып көрді. Бір арнамен ол жай ғана сұр сурет салды, басқа арнамен әр штрихты басынан аяғына дейін градиентпен 32-ден 255-ке дейін, ал үшінші арнамен 32-ден 255-ке дейінгі барлық штрихтардың үстінен градиент салды.

Тағы бір қызығы, Алекс Паринов желіге ақпаратты елдік код арқылы жүктеген.

Қолжазба сызбалардың классификациясы. Яндексте есеп беру

Бәсекелестікте қолданылатын көрсеткіш Орташа орташа дәлдік болып табылады. Бәсекелестік үшін бұл көрсеткіштің мәні неде? Үш предикат беруге болады, егер осы үшеуінде дұрыс болжам болмаса, онда 0 шығады.Дұрыс болса, оның реті ескеріледі. Ал мақсатты нәтиже сіздің болжауыңыздың ретіне бөлінген 1 ретінде есептеледі. Мысалы, сіз үш болжау жасадыңыз, ал біріншісі дұрыс, содан кейін 1-ді 1-ге бөліп, 1-ді аласыз. Егер болжау дұрыс болса және оның реті 2 болса, 1-ді 2-ге бөлсеңіз, сіз 0,5 аласыз. Ал, т.б.

Қолжазба сызбалардың классификациясы. Яндексте есеп беру

Деректерді алдын ала өңдеумен - суреттерді қалай салу керек және т.б. - біз аздап шештік. Біз қандай архитектураларды қолдандық? Біз PNASNet, SENet сияқты майлы архитектураларды және SE-Res-NeXt сияқты классикалық архитектураларды қолдануға тырыстық, олар жаңа жарыстарға көбірек қатысуда. Сондай-ақ ResNet және DenseNet болды.

Қолжазба сызбалардың классификациясы. Яндексте есеп беру

Қолжазба сызбалардың классификациясы. Яндексте есеп беру

Қолжазба сызбалардың классификациясы. Яндексте есеп беру

Біз мұны қалай үйреттік? Біз түсірген барлық модельдер imagenet желісінде алдын ала дайындалған. Деректер көп, 50 миллион кескін бар, бірақ бәрібір, егер сіз imagenet-те алдын ала дайындалған желіні алсаңыз, оны нөлден бастап үйреткеннен гөрі жақсы нәтиже көрсетті.

Қандай оқыту әдістерін қолдандық? Бұл жылы қайта іске қосу арқылы күйдіру, ол туралы мен сәл кейінірек айтатын боламын. Бұл менің соңғы жарыстарымның барлығында дерлік қолданатын әдіс, және олармен жақсы минимумға жету үшін торларды жақсы жаттықтырады.

Қолжазба сызбалардың классификациясы. Яндексте есеп беру

Келесі Үстіртте оқу жылдамдығын төмендетіңіз. Сіз желіні оқытуды бастайсыз, белгілі бір оқу жылдамдығын орнатасыз, оны оқытуды жалғастырасыз және жоғалтуыңыз бірте-бірте белгілі бір мәнге жақындайды. Сіз мұны тексересіз, мысалы, он дәуірде жоғалту мүлде өзгерген жоқ. Сіз оқу жылдамдығыңызды белгілі бір мәнге азайтып, оқуды жалғастырасыз. Ол қайтадан аздап төмендейді, ең аз дегенде жинақталады, және сіз оқу жылдамдығын қайтадан төмендетіңіз, және т.б., желіңіз ақыры жақындағанша.

Келесі қызықты әдіс: оқу жылдамдығын төмендетпеңіз, топтаманың көлемін арттырыңыз. Осы аттас мақала бар. Желіні жаттықтырған кезде оқу жылдамдығын азайтудың қажеті жоқ, жай ғана пакет өлшемін үлкейтуге болады.

Бұл әдісті, айтпақшы, Алекс Паринов қолданған. Ол 408-ге тең партиядан бастады және оның желісі қандай да бір үстіртке жеткенде, ол жай ғана партия өлшемін екі есеге арттырды және т.б.

Шындығында, оның топтамасының көлемі қандай мәнге жеткені есімде жоқ, бірақ бір қызығы, Kaggle-де дәл осындай әдісті қолданатын командалар болды, олардың пакетінің көлемі шамамен 10000 XNUMX болды. Айтпақшы, терең оқытуға арналған заманауи құрылымдар, мысалы Мысалы, PyTorch мұны өте оңай жасауға мүмкіндік береді. Сіз топтамаңызды жасайсыз және оны желіге бұрынғыдай емес, толығымен жібересіз, бірақ оны бейне картаңызға сәйкес келетіндей етіп бөліктерге бөліңіз, градиенттерді есептеңіз және бүкіл топтама үшін градиентті есептегеннен кейін жаңартыңыз. салмақтар.

Айтпақшы, үлкен партия өлшемдері әлі де осы конкурсқа қосылды, өйткені деректер өте шулы болды, ал үлкен партия өлшемі градиентті дәлірек жақындатуға көмектесті.

Псевдо-таңбалау да қолданылды, оны көбіне Роман Соловьев қолданған. Ол сынақтан алынған деректердің жартысына жуығын партиялармен іріктеп алды және торды осындай партияларға үйретті.

Суреттердің өлшемі маңызды болды, бірақ факт: сізде көп деректер бар, сізге ұзақ уақыт жаттығу керек, ал егер сіздің суретіңіздің өлшемі айтарлықтай үлкен болса, онда сіз өте ұзақ уақыт жаттығасыз. Бірақ бұл сіздің соңғы жіктеуішіңіздің сапасына көп әсер етпеді, сондықтан қандай да бір сауда-саттықты пайдалану керек болды. Біз тек өлшемі өте үлкен емес суреттерді қолданып көрдік.

Мұның бәрі қалай үйренді? Алдымен шағын өлшемді суреттер түсірілді, оларда бірнеше дәуірлер жүргізілді, бұл көп уақытты алды. Содан кейін үлкен өлшемді суреттер берілді, желіні жаттықтырды, содан кейін оны нөлден бастап жаттықтырмау және көп уақытты жоғалтпау үшін одан да көп, одан да көп.

Оңтайландырушылар туралы. Біз SGD мен Адамды қолдандық. Осылайша, жалпы көшбасшылар тақтасында 0,941-0,946 жылдамдықты беретін жалғыз модельді алуға болады, бұл өте жақсы.

Модельдерді қандай да бір түрде біріктірсеңіз, сіз 0,951 шамасында аласыз. Егер сіз тағы бір әдісті қолдансаңыз, біз алған сияқты, жалпыға ортақ тақтада 0,954 қорытынды ұпай аласыз. Бірақ бұл туралы кейінірек. Әрі қарай мен сізге модельдерді қалай құрастырғанымызды және осындай соңғы жылдамдыққа қалай қол жеткізгенімізді айтып беремін.

Әрі қарай мен жылы қайта іске қосу арқылы күйдіру немесе жылы қайта іске қосу арқылы стохастикалық градиент түсіру туралы айтқым келеді. Негізінде, сіз кез келген оңтайландырғышты пайдалана аласыз, бірақ мәні мынада: егер сіз жай ғана бір желіні жаттықтырсаңыз және ол бірте-бірте минималды деңгейге жетсе, онда бәрі жақсы, сіз бір желі аласыз, ол белгілі бір қателіктер жібереді, бірақ сіз оны сәл басқаша жаттықтыруға болады. Сіз бастапқы оқу жылдамдығын орнатасыз және оны осы формулаға сәйкес біртіндеп төмендетесіз. Сіз оны төмендетесіз, сіздің желіңіз біршама минимумға жетеді, содан кейін салмақты сақтайсыз және жаттығудың басында болған оқу жылдамдығын қайтадан орнатасыз, осылайша осы минимумнан бір жерге көтеріліп, оқу жылдамдығыңызды қайтадан төмендетесіз.

Осылайша, сіз бірден бірнеше минимумға бара аласыз, онда сіздің жоғалтуыңыз плюс немесе минус бірдей болады. Бірақ бұл салмақтары бар желілер сіздің күніңізде әртүрлі қателер береді. Оларды орташалау арқылы сіз қандай да бір жуықтау аласыз және сіздің жылдамдығыңыз жоғары болады.

Қолжазба сызбалардың классификациясы. Яндексте есеп беру

Модельдерімізді қалай құрастырғанымыз туралы. Презентацияның басында мен тесттегі деректер көлеміне және сынып санына назар аударуды айттым. Тест жинағындағы мақсат санына 1-ді қоссаңыз және сыныптар санына бөлсеңіз, сіз 330 санын аласыз және бұл форумда жазылған - тесттегі сыныптар теңгерілген. Бұл пайдаланылуы мүмкін.

Осының негізінде Роман Соловьев көрсеткішті ойлап тапты, біз оны прокси ұпай деп атадық, ол көшбасшылар тақтасымен өте жақсы сәйкес келеді. Мәселе мынада: сіз болжау жасайсыз, болжаушылардың ең жақсы 1-ін алыңыз және әр сынып үшін нысандардың санын есептейсіз. Әрі қарай, әрбір мәннен 330-ды алып тастап, алынған абсолютті мәндерді қосыңыз.

Келесі мәндер алынды. Бұл бізге тексерудің көшбасшылар тақтасын құруға емес, жергілікті түрде тексеруге және ансамбльдеріміз үшін коэффициенттерді таңдауға көмектесті.

Ансамбльмен сіз осындай жылдамдыққа қол жеткізе аласыз. Мен тағы не істей аламын? Сіз өзіңіздің тестіңіздегі сабақтар теңдестірілген деген ақпаратты пайдаландыңыз делік.

Теңгерім басқаша болды. Солардың бірінің мысалы — бірінші орын алған жігіттерден таразылау.

Біз не істедік? Біздің теңгерімдеуіміз өте қарапайым болды, оны Евгений Бабахнин ұсынды. Біз алдымен өз болжамдарымызды үздік 1 бойынша сұрыптадық және олардың арасынан үміткерлерді таңдадық - сыныптар саны 330-дан аспауы үшін. Бірақ кейбір сыныптар үшін 330-дан аз болжаушы болады. Жарайды, сонымен қатар үздік 2 және үздік 3 бойынша сұрыптайық. , және біз де үміткерлерді таңдаймыз.

Біздің теңгерім бірінші орындағы теңгерімнен несімен ерекшеленді? Олар итеративті тәсілді қолданды, ең танымал сыныпты алып, сол сыныптың ықтималдықтарын сол сынып ең танымал болып қалмайынша, кішкене санға азайтты. Біз келесі ең танымал сыныпты алдық. Сондықтан олар барлық сыныптардың саны тең болғанша оларды төмендете берді.

Пойыз желілеріне барлығы плюс немесе минус бір тәсілді қолданды, бірақ бәрі бірдей теңдестіруді пайдаланбады. Теңгерімді пайдалана отырып, сіз алтынға, ал егер сәттілікке жетсеңіз, ақшаға кіре аласыз.

Күнді қалай алдын ала өңдеу керек? Барлығы бірдей плюс немесе минус күнді өңдеді - қолдан жасалған мүмкіндіктерді жасау, таймингтерді әртүрлі штрих түстерімен кодтауға тырысу және т.б. Бұл туралы 8-ші орын алған Алексей Ноздрин-Плотницкий айтты.

Қолжазба сызбалардың классификациясы. Яндексте есеп беру

Ол мұны басқаша жасады. Ол сіздің қолмен жасалған барлық мүмкіндіктеріңіз жұмыс істемейді, мұны істеудің қажеті жоқ, сіздің желіңіз мұның бәрін өздігінен үйренуі керек деді. Оның орнына ол сіздің деректеріңізді алдын ала өңдейтін оқу модульдерін ойлап тапты. Ол бастапқы деректерді оларға алдын ала өңдеусіз тастады - нүкте координаттары мен уақыттары.

Содан кейін ол координаттарға негізделген айырмашылықты алып, уақыт бойынша барлығын орташалады. Және ол өте ұзақ матрицаны ойлап тапты. Ол 1xn өлшемді матрицаны алу үшін оған бірнеше рет 64D конволюциясын қолданды, мұндағы n - нүктелердің жалпы саны, ал алынған матрицаны арналар санын қабылдайтын кез келген конволюционды желінің қабатына беру үшін 64 жасалады. - 64. ол 64xn матрицаны алды, содан кейін одан арналар саны 64-ке тең болатындай қандай да бір өлшемдегі тензорды құру керек болды. Ол 0-ден 32-ге дейінгі диапазондағы барлық X, Y нүктелерін нормалады. тензор өлшемі 32х32. Мен оның неліктен 32x32 өлшемін қалайтынын білмеймін, бұл дәл осылай болды. Және бұл координатаға ол осы матрицаның өлшемі 64xn фрагментін орналастырды. Осылайша, ол 32x32x64 тензормен аяқталды, оны одан әрі конволюционды нейрондық желіге енгізуге болады. Менің айтқым келгені осы болды.

Ақпарат көзі: www.habr.com

пікір қалдыру