Ձեռագիր գծագրերի դասակարգում. Հաշվետվություն Yandex-ում

Մի քանի ամիս առաջ Google-ի մեր գործընկերները ծախսել Կագլում մրցույթ՝ սենսացիոն պատկերների համար դասակարգիչ ստեղծելու համար խաղը «Արագ, նկարիր»: Թիմը, որի կազմում էր Yandex-ի ծրագրավորող Ռոման Վլասովը, զբաղեցրեց չորրորդ տեղը մրցույթում։ Հունվարյան մեքենայական ուսուցման թրեյնինգում Ռոմանը կիսվեց իր թիմի գաղափարներով, դասակարգչի վերջնական ներդրմամբ և իր հակառակորդների հետաքրքիր պրակտիկաներով:


- Բարեւ բոլորին! Ես Ռոմա Վլասովն եմ, այսօր ես ձեզ կպատմեմ Quick, Draw! Խզբզոցների ճանաչման մարտահրավեր.

Ձեռագիր գծագրերի դասակարգում. Հաշվետվություն Yandex-ում

Մեր թիմում հինգ հոգի կար: Ես միացա միաձուլման վերջնաժամկետից անմիջապես առաջ: Մեր բախտը չբերեց, մի քիչ ցնցվեցինք, բայց մենք փողի դիրքից ցնցվեցինք, իսկ նրանք՝ ոսկե դիրքից։ Եվ մենք գրավեցինք պատվավոր չորրորդ տեղը։

(Մրցույթի ընթացքում թիմերը դիտարկել են իրենց վարկանիշում, որը ձևավորվել է առաջարկվող տվյալների հավաքածուի մի մասի վրա ցուցադրված արդյունքների հիման վրա: Վերջնական վարկանիշը, իր հերթին, ձևավորվել է տվյալների շտեմարանի մեկ այլ մասի վրա: Դա արվում է այսպես. որ մրցույթի մասնակիցները չեն հարմարեցնում իրենց ալգորիթմները կոնկրետ տվյալների վրա: Հետևաբար, եզրափակչում, վարկանիշների միջև անցում կատարելիս, դիրքերը մի փոքր ցնցվում են (անգլերենից shake up - խառնել). այլ տվյալների դեպքում արդյունքը կարող է ստացվել. տարբերվելու համար Ռոմանի թիմը առաջինն էր լավագույն եռյակում։Այս դեպքում լավագույն եռյակը փողի, դրամական վարկանիշային գոտին է, քանի որ միայն առաջին երեք տեղերն են արժանացել դրամական մրցանակի։Թափահարումից հետո թիմն արդեն եղել է. չորրորդ տեղ։Նույն կերպ մյուս թիմը կորցրեց հաղթանակը՝ ոսկե դիրքը։-Խմբ.)

Ձեռագիր գծագրերի դասակարգում. Հաշվետվություն Yandex-ում

Մրցակցությունը նշանակալից էր նաև նրանով, որ Եվգենի Բաբախնինը գրոսմայստեր ստացավ, Իվան Սոսինը՝ վարպետ, Ռոման Սոլովևը մնաց գրոսմայստեր, Ալեքս Պարինովը՝ վարպետ, ես դարձա փորձագետ, իսկ հիմա արդեն վարպետ եմ։

Ձեռագիր գծագրերի դասակարգում. Հաշվետվություն Yandex-ում

Ի՞նչ է սա Quick, Draw: Սա Google-ի ծառայություն է: Google-ը նպատակ ուներ հանրահռչակել AI-ն և այս ծառայության միջոցով ցանկանում էր ցույց տալ, թե ինչպես են աշխատում նեյրոնային ցանցերը: Գնում ես այնտեղ, սեղմում ես նկարենք, և նոր էջ է բացվում, որտեղ քեզ ասում են՝ նկարիր զիգզագ, դու ունես 20 վայրկյան դա անելու համար։ Դուք փորձում եք զիգզագ նկարել 20 վայրկյանում, ինչպես, օրինակ, այստեղ։ Եթե ​​հաջողվի, ցանցն ասում է, որ դա զիգզագ է, և դու առաջ ես գնում: Նման նկարները ընդամենը վեցն են։

Եթե ​​Google-ի ցանցը չկարողացավ ճանաչել ձեր նկարածը, առաջադրանքի վրա խաչ է դրվել: Հետագայում ես ձեզ կասեմ, թե ինչ կնշանակի ապագայում նկարը ճանաչվի ցանցի կողմից, թե ոչ։

Այս ծառայությունը հավաքեց բավականին մեծ թվով օգտատերեր, և բոլոր նկարները, որոնք նկարեցին օգտատերերը, գրանցվեցին:

Ձեռագիր գծագրերի դասակարգում. Հաշվետվություն Yandex-ում

Մեզ հաջողվեց հավաքել գրեթե 50 միլիոն պատկեր։ Սրանից էլ ձևավորվեց մեր մրցույթի գնացքը և թեստավորման ամսաթիվը։ Ի դեպ, թեստի տվյալների քանակն ու դասերի քանակը մի պատճառով ընդգծված են թավերով։ Նրանց մասին կպատմեմ մի փոքր ուշ։

Տվյալների ձևաչափը հետևյալն էր. Սրանք ոչ միայն RGB պատկերներ են, այլ, կոպիտ ասած, օգտագործողի արած ամեն ինչի մատյան: Word-ը մեր թիրախն է, երկրի կոդը՝ որտեղից է խզբզոցի հեղինակը, ժամանակի դրոշմը՝ ժամանակը: Ճանաչված պիտակը պարզապես ցույց է տալիս՝ արդյոք ցանցը ճանաչե՞լ է պատկերը Google-ից, թե՞ ոչ: Իսկ գծագրությունն ինքնին հաջորդականություն է, կորի մոտավորություն, որը օգտատերը գծում է կետերով: Եվ ժամկետներ: Սա նկարը նկարելու սկզբից է:

Ձեռագիր գծագրերի դասակարգում. Հաշվետվություն Yandex-ում

Տվյալները ներկայացվել են երկու ձևաչափով. Սա առաջին ձևաչափն է, իսկ երկրորդը՝ պարզեցված։ Նրանք այնտեղից կտրեցին ժամանակացույցերը և միավորների այս խումբը մոտեցրին ավելի փոքր միավորների: Դրա համար նրանք օգտագործել են Դուգլաս-Պեկերի ալգորիթմ. Դուք ունեք մի մեծ շարք կետեր, որոնք պարզապես մոտավոր են ուղիղ գծի, բայց իրականում դուք կարող եք մոտավորել այս ուղիղը ընդամենը երկու կետով: Սա ալգորիթմի գաղափարն է:

Տվյալները բաշխվել են հետևյալ կերպ. Ամեն ինչ միատեսակ է, բայց կան որոշ արտանետումներ: Երբ մենք լուծեցինք խնդիրը, մենք դրան չնայեցինք. Հիմնական բանն այն է, որ չկային դասեր, որոնք իսկապես քիչ էին, մենք չպետք է անեինք կշռված նմուշառումներ և տվյալների գերընտրանք:

Ձեռագիր գծագրերի դասակարգում. Հաշվետվություն Yandex-ում

Ինչ տեսք ունեին նկարները: Սա «ինքնաթիռ» դասն է և դրա օրինակները՝ ճանաչված և չճանաչված պիտակներով: Նրանց հարաբերակցությունը ինչ-որ տեղ 1-ից 9-ի մոտ էր: Ինչպես տեսնում եք, տվյալները բավականին աղմկոտ են: Կարծում եմ, որ դա ինքնաթիռ է: Եթե ​​նայեք չճանաչվածին, ապա շատ դեպքերում դա պարզապես աղմուկ է: Ինչ-որ մեկը նույնիսկ փորձել է գրել «ինքնաթիռ», բայց, ըստ երևույթին, ֆրանսերեն:

Մասնակիցներից շատերը պարզապես վերցրեցին ցանցեր, գծեցին գծերի այս հաջորդականությունից տվյալները որպես RGB նկարներ և դրանք նետեցին ցանց: Ես նկարեցի մոտավորապես նույն կերպ. ես վերցրեցի գույների գունապնակ, գծեցի առաջին գիծը մի գույնով, որը այս ներկապնակի սկզբում էր, վերջին տողը մյուսով, որը գտնվում էր ներկապնակի վերջում, և նրանց միջև. Ես ինտերպոլացրի ամենուր՝ օգտագործելով այս ներկապնակը: Ի դեպ, սա ավելի լավ արդյունք տվեց, քան եթե նկարեք առաջին իսկ սլայդում` հենց սևով:

Թիմի մյուս անդամները, օրինակ՝ Իվան Սոսինը, փորձեցին նկարչության մի փոքր այլ մոտեցումներ: Մի ալիքով նա պարզապես գծեց մոխրագույն նկար, մեկ այլ ալիքով նա գծեց յուրաքանչյուր հարված սկզբից մինչև վերջ գրադիենտով, 32-ից մինչև 255, իսկ երրորդ ալիքով նա գծեց գրադիենտ բոլոր հարվածների վրա 32-ից մինչև 255:

Մեկ այլ հետաքրքիր բան այն է, որ Ալեքս Պարինովը տեղեկատվություն է բեռնել ցանց՝ օգտագործելով երկրի կոդը։

Ձեռագիր գծագրերի դասակարգում. Հաշվետվություն Yandex-ում

Մրցույթում օգտագործվող չափանիշը միջին միջին ճշգրտությունն է: Ո՞րն է այս ցուցանիշի էությունը մրցակցության համար: Դուք կարող եք տալ երեք նախադասություն, և եթե այս երեքում ճիշտ նախադասություն չկա, ապա կստանաք 0, եթե կա ճիշտ, ապա հաշվի է առնվում դրա հերթականությունը։ Եվ նպատակային արդյունքը կհաշվվի որպես 1 բաժանված ձեր կանխատեսման հերթականությամբ: Օրինակ, դուք արել եք երեք կանխատեսող, և ճիշտը առաջինն է, այնուհետև 1-ը բաժանում եք 1-ի և ստանում եք 1: Դե և այլն:

Ձեռագիր գծագրերի դասակարգում. Հաշվետվություն Yandex-ում

Տվյալների նախնական մշակմամբ՝ ինչպես նկարել նկարներ և այլն, մենք մի փոքր որոշել ենք: Ի՞նչ ճարտարապետություններ ենք մենք օգտագործել: Մենք փորձեցինք օգտագործել հաստ ճարտարապետներ, ինչպիսիք են PNASNet-ը, SENet-ը և այնպիսի արդեն դասական ճարտարապետություններ, ինչպիսիք են SE-Res-NeXt-ը, դրանք գնալով ավելի են մտնում նոր մրցույթների մեջ: Կային նաև ResNet և DenseNet:

Ձեռագիր գծագրերի դասակարգում. Հաշվետվություն Yandex-ում

Ձեռագիր գծագրերի դասակարգում. Հաշվետվություն Yandex-ում

Ձեռագիր գծագրերի դասակարգում. Հաշվետվություն Yandex-ում

Ինչպե՞ս սովորեցրինք սա: Մեր վերցրած բոլոր մոդելները նախապես վերապատրաստվել են imagenet-ով։ Թեև շատ տվյալներ կան՝ 50 միլիոն նկար, բայց այնուամենայնիվ, եթե դուք վերցնում եք մի ցանց, որը նախապես վերապատրաստվել է imagenet-ով, այն ավելի լավ արդյունքներ ցույց տվեց, քան եթե այն պարզապես զրոյից վարժեցնեիք։

Ուսուցման ի՞նչ տեխնիկա ենք մենք օգտագործել: Սա Cosing Annealing-ն է Warm Restarts-ով, որի մասին կխոսեմ մի փոքր ուշ: Սա տեխնիկա է, որը ես օգտագործում եմ իմ վերջին մրցումների գրեթե բոլոր ժամանակներում, և դրանցով ստացվում է բավականին լավ մարզել ցանցերը, հասնել լավ նվազագույնի:

Ձեռագիր գծագրերի դասակարգում. Հաշվետվություն Yandex-ում

Հաջորդը Նվազեցրեք ուսուցման մակարդակը բարձրավանդակում: Դուք սկսում եք մարզել ցանցը, սահմանում եք որոշակի ուսուցման արագություն, շարունակում եք ուսուցանել այն, և ձեր կորուստը աստիճանաբար մոտենում է որոշակի արժեքի: Սա ստուգեք, օրինակ, տասը դարաշրջանի ընթացքում կորուստը ընդհանրապես չի փոխվել։ Դուք նվազեցնում եք ձեր ուսուցման մակարդակը որոշակի արժեքով և շարունակում եք սովորել: Այն նորից մի փոքր իջնում ​​է, միանում է նվազագույնի, և դուք նորից իջեցնում եք ուսուցման արագությունը և այլն, մինչև ձեր ցանցը վերջապես համախմբվի:

Հաջորդը հետաքրքիր տեխնիկա է. Մի փչացրեք սովորելու արագությունը, ավելացրեք խմբաքանակի չափը: Նույն անունով հոդված կա. Երբ դուք վերապատրաստում եք ցանց, պետք չէ նվազեցնել ուսուցման արագությունը, դուք պարզապես կարող եք մեծացնել խմբաքանակի չափը:

Այս տեխնիկան, ի դեպ, կիրառել է Ալեքս Պարինովը։ Նա սկսեց 408-ի խմբաքանակով, և երբ նրա ցանցը հասավ ինչ-որ բարձրավանդակի, նա պարզապես կրկնապատկեց խմբաքանակի չափը և այլն:

Իրականում, ես չեմ հիշում, թե ինչ արժեքի էր հասել նրա խմբաքանակի չափը, բայց հետաքրքիրն այն է, որ Kaggle-ում կային թիմեր, որոնք օգտագործում էին նույն տեխնիկան, նրանց խմբաքանակի չափը մոտ 10000 էր: Ի դեպ, խորը ուսուցման ժամանակակից շրջանակներ, ինչպիսիք են. PyTorch-ը, օրինակ, թույլ է տալիս դա անել շատ հեշտությամբ։ Դուք ստեղծում եք ձեր խմբաքանակը և այն ներկայացնում եք ցանցին ոչ այնպես, ինչպես որ կա, ամբողջությամբ, այլ այն բաժանում եք մասերի, որպեսզի այն տեղավորվի ձեր վիդեո քարտի մեջ, հաշվարկեք գրադիենտները և ամբողջ խմբաքանակի գրադիենտը հաշվարկելուց հետո թարմացրեք: կշիռները.

Ի դեպ, այս մրցույթում դեռևս ներառված էին խմբաքանակի մեծ չափսերը, քանի որ տվյալները բավականին աղմկոտ էին, և մեծ խմբաքանակի չափն օգնեց ձեզ ավելի ճշգրիտ մոտավորել գրադիենտը։

Կիրառվել է նաև կեղծ պիտակավորում, որը հիմնականում կիրառել է Ռոման Սոլովևը։ Նա խմբաքանակներով նմուշառեց թեստի տվյալների մոտ կեսը և վարժեցրեց ցանցը նման խմբաքանակների վրա:

Նկարների չափը նշանակություն ուներ, բայց փաստն այն է, որ շատ տվյալներ ունես, պետք է երկար մարզվել, իսկ եթե քո նկարի չափսը բավականին մեծ է, ուրեմն շատ երկար կմարզվես։ Բայց սա շատ բան չավելացրեց ձեր վերջնական դասակարգչի որակի վրա, ուստի արժե օգտագործել որոշակի փոխզիջում: Եվ մենք միայն փորձեցինք նկարներ, որոնք չափսերով այնքան էլ մեծ չէին:

Ինչպե՞ս է այդ ամենը սովորել: Սկզբում փոքր չափի նկարներ են արվել, դրանց վրա մի քանի դարաշրջան է նկարահանվել, սա բավականին շատ ժամանակ է խլել։ Հետո տրվեցին մեծ չափերի նկարներ, վերապատրաստվեց ցանցը, հետո էլ ավելին, էլ ավելին, որպեսզի զրոյից չմարզվի ու շատ ժամանակ չվատնի։

Օպտիմիզատորների մասին. Մենք օգտագործեցինք SGD-ն և Ադամը: Այս կերպ հնարավոր եղավ ստանալ մեկ մոդել, որը հանրային առաջատարների տախտակի վրա տալիս էր 0,941-0,946 արագություն, ինչը բավականին լավ է։

Եթե ​​մոդելները ինչ-որ կերպ համադրեք, ապա ինչ-որ տեղ կստանաք 0,951-ի սահմաններում: Եթե ​​օգտագործեք ևս մեկ տեխնիկա, դուք կստանաք վերջնական 0,954 միավոր հանրային տախտակում, ինչպես մենք ստացանք: Բայց դրա մասին ավելի ուշ: Հաջորդիվ ես ձեզ կասեմ, թե ինչպես ենք մենք հավաքել մոդելները, և ինչպես կարողացել ենք հասնել նման վերջնական արագության։

Հաջորդը ես կցանկանայի խոսել Cosing Annealing-ի հետ Warm Restarts-ի կամ Stochastic Gradient Descent-ի մասին՝ Warm Restarts-ով: Կոպիտ ասած, սկզբունքորեն կարող եք օգտագործել ցանկացած օպտիմիզատոր, բայց բանն այն է, որ եթե դուք պարզապես վարժեցնեք մեկ ցանց և աստիճանաբար այն զուգակցվի ինչ-որ նվազագույնի, ապա ամեն ինչ կարգին է, դուք կստանաք մեկ ցանց, այն թույլ է տալիս որոշակի սխալներ, բայց դուք. կարող է մի փոքր այլ կերպ վարժեցնել: Դուք կսահմանեք որոշակի նախնական ուսուցման արագություն և աստիճանաբար կիջեցնեք այն ըստ այս բանաձևի: Դուք իջեցնում եք այն, ձեր ցանցը հասնում է ինչ-որ նվազագույնի, այնուհետև խնայում եք կշիռները և կրկին սահմանում ուսուցման արագությունը, որը եղել է մարզման սկզբում, դրանով իսկ ինչ-որ տեղ բարձրանալով այս նվազագույնից և կրկին իջեցնելով ձեր ուսուցման մակարդակը:

Այսպիսով, դուք կարող եք միանգամից մի քանի մինիմում այցելել, որոնցում ձեր կորուստը, գումարած կամ մինուս, նույնը կլինի: Բայց փաստն այն է, որ այս կշիռներով ցանցերը տարբեր սխալներ կտան ձեր ժամադրության ժամանակ: Միջինացնելով դրանք, դուք կստանաք որոշակի մոտավորություն, և ձեր արագությունը կլինի ավելի բարձր:

Ձեռագիր գծագրերի դասակարգում. Հաշվետվություն Yandex-ում

Այն մասին, թե ինչպես ենք հավաքել մեր մոդելները։ Ներկայացման սկզբում ես ասացի, որ ուշադրություն դարձնեմ թեստի տվյալների քանակին և դասերի քանակին։ Եթե ​​թեստային հավաքածուի թիրախների թվին ավելացնեք 1 և բաժանեք դասերի քանակի վրա, կստանաք 330 թիվը, և սա գրված էր ֆորումում, որ թեստի դասերը հավասարակշռված են: Սա կարող էր օգտագործվել:

Ելնելով դրանից՝ Ռոման Սոլովևը հորինեց չափիչ, մենք այն անվանեցինք Proxy Score, որը բավականին լավ փոխկապակցված էր առաջատարների հետ: Բանն այն է, որ դուք կանխատեսում եք անում, վերցնում ձեր գուշակողների առաջին 1-ը և հաշվում առարկաների քանակը յուրաքանչյուր դասի համար: Այնուհետև յուրաքանչյուր արժեքից հանեք 330 և գումարեք ստացված բացարձակ արժեքները:

Ստացվել են հետևյալ արժեքները. Սա մեզ օգնեց ոչ թե ստեղծել զոնդային առաջատարների աղյուսակ, այլ տեղական մակարդակում վավերացնել և ընտրել մեր անսամբլների գործակիցները:

Համույթով կարող էիր նման արագություն ստանալ։ Էլ ի՞նչ կարող էի անել։ Ենթադրենք, դուք օգտագործել եք այն տեղեկատվությունը, որ ձեր թեստի դասերը հավասարակշռված են:

Հավասարակշռումն այլ էր. Դրանցից մեկի օրինակը — հավասարակշռություն առաջին տեղը զբաղեցրած տղաներից։

Ի՞նչ արեցինք։ Մեր բալանսավորումը բավականին պարզ էր, այն առաջարկեց Եվգենի Բաբախնինը։ Մենք նախ դասակարգեցինք մեր կանխատեսումները ըստ լավագույն 1-ի և նրանցից ընտրեցինք թեկնածուներին, որպեսզի դասերի թիվը չգերազանցի 330-ը: Բայց որոշ դասերի համար դուք հայտնվում եք 330-ից քիչ կանխատեսողներով: Լավ, եկեք նաև դասավորենք ըստ լավագույն 2-ի և լավագույն 3-ի: , և մենք կընտրենք նաև թեկնածուներ։

Ինչո՞վ էր մեր հավասարակշռումը տարբերվում առաջին տեղի հավասարակշռությունից: Նրանք կիրառեցին կրկնվող մոտեցում՝ վերցնելով ամենահայտնի դասը և փոքր թվով նվազեցնելով այդ դասի հավանականությունները, մինչև որ այդ դասն այլևս ամենահայտնին չէր: Մենք անցանք հաջորդ ամենահայտնի դասը: Այսպիսով, նրանք շարունակեցին դրանք իջեցնել այնքան ժամանակ, մինչև բոլոր դասարանների թիվը հավասարվեց:

Բոլորն օգտագործում էին պլյուս կամ մինուս մեկ մոտեցում գնացքների ցանցերի համար, բայց ոչ բոլորն էին օգտագործում հավասարակշռում: Օգտագործելով հավասարակշռությունը, դուք կարող եք գնալ ոսկու, իսկ եթե հաջողակ լինեիք, ապա փողի:

Ինչպե՞ս նախապես մշակել ամսաթիվը: Բոլորը նույն ձևով նախապես մշակեցին ամսաթիվը, գումարած կամ մինուս՝ պատրաստելով ձեռքի աշխատանք, փորձելով կոդավորել ժամանակացույցը տարբեր գույներով և այլն: Այս մասին խոսեց Ալեքսեյ Նոզդրին-Պլոտնիցկին, ով զբաղեցրել է 8-րդ տեղը:

Ձեռագիր գծագրերի դասակարգում. Հաշվետվություն Yandex-ում

Նա դա այլ կերպ արեց: Նա ասաց, որ ձեր բոլոր այս ձեռագործ հատկությունները չեն աշխատում, դուք դա անելու կարիք չունեք, ձեր ցանցը պետք է ինքնուրույն սովորի այս ամենը: Եվ փոխարենը նա ստեղծեց ուսումնական մոդուլներ, որոնք նախապես մշակում էին ձեր տվյալները: Նա դրանց մեջ գցեց բնօրինակ տվյալները՝ առանց նախնական մշակման՝ կետերի կոորդինատները և ժամանակացույցերը:

Այնուհետև նա վերցրեց տարբերությունը՝ հիմնվելով կոորդինատների վրա և միջինացրեց այդ ամենը՝ ելնելով ժամանակացույցից: Եվ նա հանդես եկավ բավականին երկար մատրիցով։ Նա դրա վրա մի քանի անգամ կիրառեց 1D կոնվուլցիա՝ ստանալու համար 64xn չափի մատրիցա, որտեղ n-ը միավորների ընդհանուր թիվն է, իսկ 64-ը կազմված է, որպեսզի ստացված մատրիցը սնվի ցանկացած կոնվոլյուցիոն ցանցի շերտին, որն ընդունում է ալիքների քանակը։ - 64. նա ստացավ 64xn մատրիցա, այնուհետև դրանից անհրաժեշտ էր ստեղծել որոշակի չափի տենզոր, որպեսզի ալիքների թիվը հավասար լինի 64-ի: Նա նորմալացրեց բոլոր X, Y կետերը 0-ից 32 միջակայքում՝ ստեղծելու համար 32x32 չափսի թենզոր։ Ես չգիտեմ, թե ինչու էր նա ուզում 32x32, դա պարզապես այդպես եղավ: Եվ այս կոորդինատում նա տեղադրեց այս մատրիցից 64xn չափի մի հատված: Այսպիսով, այն պարզապես ավարտվեց 32x32x64 տենզորով, որը դուք կարող եք տեղադրել ձեր կոնվոլյուցիոն նեյրոնային ցանցում: Այսքանն էի ուզում ասել։

Source: www.habr.com

Добавить комментарий