Նեյրոնային ցանցերի հետ աշխատելը. վրիպազերծման ստուգաթերթ

Նեյրոնային ցանցերի հետ աշխատելը. վրիպազերծման ստուգաթերթ

Մեքենայի ուսուցման ծրագրային արտադրանքի կոդը հաճախ բարդ է և բավականին շփոթեցնող: Դրանում առկա սխալների հայտնաբերումն ու վերացումը ռեսուրսներ պահանջող խնդիր է: Նույնիսկ ամենապարզը առաջընթաց նեյրոնային ցանցեր պահանջում է լուրջ մոտեցում ցանցի ճարտարապետությանը, կշիռների սկզբնավորմանը և ցանցի օպտիմալացմանը: Փոքր սխալը կարող է հանգեցնել տհաճ խնդիրների։

Այս հոդվածը ձեր նեյրոնային ցանցերի վրիպազերծման ալգորիթմի մասին է:

Skillbox-ը խորհուրդ է տալիս. Գործնական դասընթաց Python-ի մշակողը զրոյից.

Հիշեցում. «Habr»-ի բոլոր ընթերցողների համար՝ 10 ռուբլի զեղչ «Habr» գովազդային կոդով Skillbox-ի ցանկացած դասընթացին գրանցվելիս:

Ալգորիթմը բաղկացած է հինգ փուլից.

  • հեշտ մեկնարկ;
  • կորուստների հաստատում;
  • միջանկյալ արդյունքների և կապերի ստուգում;
  • պարամետրերի ախտորոշում;
  • աշխատանքի վերահսկում.

Եթե ​​ձեզ ինչ-որ բան ավելի հետաքրքիր է թվում, քան մնացածը, կարող եք անմիջապես անցնել այս բաժիններին:

Հեշտ սկիզբ

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

Պարզ սկիզբը պարզեցված մոդել ստեղծելն է և այն վարժեցնել տվյալների մեկ հավաքածուի (կետի) վրա:

Սկզբում մենք ստեղծում ենք պարզեցված մոդել

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

Մենք մոդելը վարժեցնում ենք տվյալների մեկ հավաքածուի (կետի) վրա

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

Նույնիսկ եթե ամեն ինչ լավ է, նախքան առաջ անցնելը, պատրաստեք մոդելը մեկ կամ մի քանի դարաշրջանների համար:

Կորստի գնահատում

Կորուստների գնահատումը մոդելի արդյունավետությունը բարելավելու հիմնական միջոցն է: Դուք պետք է համոզվեք, որ կորուստը համապատասխանում է խնդրին, և որ կորստի գործառույթները գնահատված են ճիշտ մասշտաբով: Եթե ​​դուք օգտագործում եք մեկից ավելի կորստի տեսակներ, համոզվեք, որ դրանք բոլորը նույն կարգի են և ճիշտ չափված:

Կարևոր է ուշադիր լինել սկզբնական կորուստների նկատմամբ։ Ստուգեք, թե որքանով է իրական արդյունքը մոտ ակնկալվող արդյունքին, եթե մոդելը սկսել է պատահական գուշակությամբ: IN Անդրեյ Կարպատիի աշխատությունը հուշում է հետևյալը.«Համոզվեք, որ ստանում եք ձեր ակնկալած արդյունքը, երբ սկսում եք փոքր թվով պարամետրերով: Ավելի լավ է անհապաղ ստուգել տվյալների կորուստը (նորմալացման աստիճանը զրոյական է): Օրինակ, CIFAR-10-ի համար Softmax դասակարգիչով, մենք ակնկալում ենք, որ սկզբնական կորուստը կլինի 2.302, քանի որ ակնկալվող ցրված հավանականությունը յուրաքանչյուր դասի համար 0,1 է (քանի որ կան 10 դասեր), իսկ Softmax կորուստը ճիշտ դասի բացասական լոգարիթմական հավանականությունն է: որպես − ln (0.1) = 2.302»։

Երկուական օրինակի համար նմանատիպ հաշվարկ պարզապես կատարվում է դասերից յուրաքանչյուրի համար։ Ահա, օրինակ, տվյալները՝ 20% 0 և 80% 1: Ակնկալվող սկզբնական կորուստը կկազմի մինչև –0,2ln (0,5) –0,8ln (0,5) = 0,693147: Եթե ​​արդյունքը 1-ից մեծ է, դա կարող է ցույց տալ, որ նեյրոնային ցանցի կշիռները պատշաճ կերպով հավասարակշռված չեն կամ տվյալները նորմալացված չեն:

Միջանկյալ արդյունքների և կապերի ստուգում

Նյարդային ցանցի վրիպազերծման համար անհրաժեշտ է հասկանալ ցանցի ներսում պրոցեսների դինամիկան և առանձին միջանկյալ շերտերի դերը, երբ դրանք միացված են: Ահա ընդհանուր սխալները, որոնց կարող եք հանդիպել.

  • gradle-ի թարմացումների սխալ արտահայտություններ;
  • քաշի թարմացումները չեն կիրառվում.
  • պայթող գրադիենտներ.

Եթե ​​գրադիենտի արժեքները զրոյական են, դա նշանակում է, որ օպտիմիզատորում սովորելու արագությունը չափազանց դանդաղ է, կամ որ դուք հանդիպում եք գրադիենտը թարմացնելու սխալ արտահայտության:

Բացի այդ, անհրաժեշտ է վերահսկել յուրաքանչյուր շերտի ակտիվացման գործառույթների, կշիռների և թարմացումների արժեքները: Օրինակ՝ պարամետրերի թարմացումների մեծությունը (կշիռները և կողմնակալությունները) պետք է լինի 1-e3.

Կա մի երեւույթ, որը կոչվում է «Dying ReLU» կամ «անհետացող գրադիենտի խնդիր», երբ ReLU նեյրոնները կարտադրեն զրո՝ նրա կշիռների համար մեծ բացասական կողմնակալության արժեք սովորելուց հետո: Այս նեյրոնները այլևս երբեք չեն արձակվում տվյալների որևէ կետում:

Դուք կարող եք օգտագործել գրադիենտ ստուգումը այս սխալները բացահայտելու համար՝ մոտավորելով գրադիենտը՝ օգտագործելով թվային մոտեցում: Եթե ​​այն մոտ է հաշվարկված գրադիենտներին, ապա հետտարածումը ճիշտ է իրականացվել։ Գրադիենտ ստուգում ստեղծելու համար ստուգեք այս հիանալի ռեսուրսները CS231-ից այստեղ и այստեղԻնչպես նաեւ դաս Էնդրյու Նգան այս թեմայով.

Ֆայզան Շեյխ ցույց է տալիս նեյրոնային ցանցի պատկերացման երեք հիմնական մեթոդ.

  • Նախնականները պարզ մեթոդներ են, որոնք մեզ ցույց են տալիս վարժեցված մոդելի ընդհանուր կառուցվածքը: Դրանք ներառում են նեյրոնային ցանցի առանձին շերտերի ձևերի կամ զտիչների ելքը և յուրաքանչյուր շերտի պարամետրերը:
  • Ակտիվացման հիման վրա: Դրանցում մենք վերծանում ենք առանձին նեյրոնների կամ նեյրոնների խմբերի ակտիվացումները՝ հասկանալու նրանց գործառույթները:
  • Գրադիենտների հիման վրա. Այս մեթոդները հակված են մանիպուլյացիայի ենթարկելու գրադիենտները, որոնք ձևավորվում են մոդելային ուսուցման առաջ և հետընթաց անցումներից (ներառյալ կարևորության քարտեզները և դասի ակտիվացման քարտեզները):

Առանձին շերտերի ակտիվացումներն ու կապերը պատկերացնելու համար կան մի քանի օգտակար գործիքներ, օրինակ. ConX и Tensorboard.

Նեյրոնային ցանցերի հետ աշխատելը. վրիպազերծման ստուգաթերթ

Պարամետրային ախտորոշում

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

Փաթեթի չափը (խմբաքանակի չափս) - Եթե ցանկանում եք, որ խմբաքանակի չափը լինի բավականաչափ մեծ սխալների գրադիենտի ճշգրիտ գնահատականներ ստանալու համար, բայց բավականաչափ փոքր, որպեսզի ձեր ցանցը կարգավորի ստոխաստիկ գրադիենտ ծագումը (SGD): Փոքր խմբաքանակի չափերը կհանգեցնեն արագ կոնվերգենցիայի՝ կապված ուսուցման գործընթացի ընթացքում աղմուկի և, հետևաբար, օպտիմալացման դժվարությունների հետ: Սա ավելի մանրամասն նկարագրված է այստեղ.

Ուսուցման մակարդակը - չափազանց ցածրը կհանգեցնի դանդաղ կոնվերգենցիայի կամ տեղական նվազագույնի մեջ խրվելու ռիսկի: Միևնույն ժամանակ, ուսուցման բարձր մակարդակը կառաջացնի օպտիմալացման տարաձայնություններ, քանի որ դուք վտանգում եք անցնել կորստի ֆունկցիայի խորը, բայց նեղ մասով: Նյարդային ցանցը մարզելիս փորձեք օգտագործել արագության ժամանակացույցը՝ այն նվազեցնելու համար: Թարմացված է CS231n-ով այս խնդրին նվիրված մեծ բաժին կա.

Գրադիենտ կտրում  — պարամետրերի գրադիենտների կրճատում ետ տարածման ժամանակ առավելագույն արժեքով կամ սահմանային նորմայով: Օգտակար է ցանկացած պայթող գրադիենտների վերացման համար, որոնց կարող եք հանդիպել երրորդ կետում:

Խմբաքանակի նորմալացում - օգտագործվում է յուրաքանչյուր շերտի մուտքային տվյալները նորմալացնելու համար, որը լուծում է ներքին կովարիատիվ հերթափոխի խնդիրը: Եթե ​​դուք օգտագործում եք Dropout-ը և Batch Norma-ը միասին, ստուգեք այս հոդվածը.

Ստոխաստիկ գրադիենտ ծագում (SGD) — Կան SGD-ի մի քանի տեսակներ, որոնք օգտագործում են իմպուլս, ուսուցման հարմարվողական տեմպեր և Նեստերովի մեթոդ: Այնուամենայնիվ, նրանցից ոչ մեկն ակնհայտ առավելություն չունի և՛ ուսուցման արդյունավետության, և՛ ընդհանրացման առումով (մանրամասները՝ այստեղ).

Կանոնավորեցում - շատ կարևոր է ընդհանրացվող մոդել կառուցելու համար, քանի որ այն ավելացնում է տուգանք մոդելի բարդության կամ ծայրահեղ պարամետրերի արժեքների համար: Սա մոդելի շեղումը նվազեցնելու միջոց է՝ առանց էականորեն մեծացնելու դրա կողմնակալությունը: Ավելին մանրամասն տեղեկություններ - այստեղ.

Ամեն ինչ ինքներդ գնահատելու համար դուք պետք է անջատեք կանոնավորացումը և ինքներդ ստուգեք տվյալների կորստի գրադիենտը:

Դուրս թողնելը ձեր ցանցը կարգավորելու ևս մեկ մեթոդ է՝ գերբեռնվածությունը կանխելու համար: Մարզումների ժամանակ դուրս գալն իրականացվում է միայն նեյրոնի ակտիվությունը որոշակի p հավանականությամբ (հիպերպարամետր) պահպանելով կամ հակառակ դեպքում զրոյացնելով։ Արդյունքում, ցանցը պետք է օգտագործի պարամետրերի տարբեր ենթաբազմություն յուրաքանչյուր ուսումնական խմբաքանակի համար, ինչը նվազեցնում է որոշակի պարամետրերի փոփոխությունները, որոնք դառնում են գերիշխող:

Կարևոր է. Եթե դուք օգտագործում եք և՛ թողարկումը, և՛ խմբաքանակի նորմալացում, զգույշ եղեք այս գործողությունների հերթականության կամ նույնիսկ դրանք միասին օգտագործելու հարցում: Այս ամենը դեռ ակտիվորեն քննարկվում ու լրացվում է։ Ահա այս թեմայի շուրջ երկու կարևոր քննարկում Stackoverflow-ի վրա и Arxiv.

Աշխատանքի վերահսկում

Խոսքը աշխատանքային հոսքերի և փորձերի փաստաթղթավորման մասին է: Եթե ​​որևէ բան չփաստաթղթավորեք, կարող եք մոռանալ, օրինակ, թե ինչ ուսուցման մակարդակ կամ դասի կշիռներ են օգտագործվում: Կառավարման շնորհիվ կարող եք հեշտությամբ դիտել և վերարտադրել նախորդ փորձերը: Սա թույլ է տալիս նվազեցնել կրկնվող փորձերի քանակը:

Այնուամենայնիվ, մեծ ծավալի աշխատանքի դեպքում ձեռքով փաստաթղթերը կարող են բարդ խնդիր դառնալ: Այստեղ են գալիս այնպիսի գործիքներ, ինչպիսիք են Comet.ml-ը, որոնք կօգնեն ձեզ ավտոմատ կերպով գրանցել տվյալների հավաքածուները, կոդերի փոփոխությունները, փորձնական պատմությունը և արտադրության մոդելները, ներառյալ ձեր մոդելի մասին հիմնական տեղեկությունները (հիպերպարամետրեր, մոդելի կատարողականի չափումներ և շրջակա միջավայրի մասին տեղեկություններ):

Նեյրոնային ցանցը կարող է շատ զգայուն լինել փոքր փոփոխությունների նկատմամբ, և դա կհանգեցնի մոդելի կատարողականի անկմանը: Ձեր աշխատանքին հետևելը և փաստաթղթավորելը առաջին քայլն է, որը կարող եք կատարել ձեր միջավայրը և մոդելավորումը ստանդարտացնելու համար:

Նեյրոնային ցանցերի հետ աշխատելը. վրիպազերծման ստուգաթերթ

Հուսով եմ, որ այս գրառումը կարող է մեկնարկային կետ լինել, որպեսզի սկսեք ձեր նեյրոնային ցանցի վրիպազերծումը:

Skillbox-ը խորհուրդ է տալիս.

Source: www.habr.com

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