Файл: 5 тарау. Кп абатты перцептрондар.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 22.11.2023

Просмотров: 122

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

5 тарау. Көп қабатты перцептрондар

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

Көп қабатты перцептрондар

3-тарауда біз softmax регрессиясымен (3.4-бөлім) алгоритмді нөлден бастау (3.6-бөлім) және жоғары деңгейлі API (3.7-бөлім), сондай-ақ төмен ажыратымдылықтағы суреттерден киімнің 10 санатын тануға үйрететін классификаторлармен таныстық. Сонымен қатар, біз деректерді өңдеуді, нәтижемізді ықтималдылықты бөлуге түрлендіруді, жоғалту функциясын қолдануды және оны модель параметрлеріне қатысты азайтуды үйрендік. Біз осы механиканы қарапайым сызықтық модельдер тұрғысынан игердік, енді біз терең нейрондық желілерді, осы курсқа арналған салыстырмалы түрде ауқымды модельдер класын зерттей бастаймыз.

      1. Жасырын қабаттар

Біз аффиндік түрлендіруді 3.1.1 бөлімінде сипаттадық, ол ығысу арқылы қосылған сызықтық түрлендіру болып табылады. Алдымен, 3.4.1. суретте көрсетілген softmax регрессиясының үлгісіне сәйкес келетін модель архитектурасын еске түсіріңіз. Бұл модель біздің кірістерімізді бір аффинді түрлендіру softmax операциясы арқылы шығыстарды тікелей көрсетті. Егер біздің белгілеріміз шынымен аффиндік түрлендіру арқылы енгізулерімізге қатысты болған жағдайда, онда бұл тәсіл жеткілікті болар еді. Бірақ аффиндік түрлендірулердегі сызықтық-бұл күшті болжам.


Сызықтық модельдер дұрыс болмауы мүмкін.

Мысалы, сызықтық монотондылықтың әлсіз жорамалын білдіреді: біздің функциямыздың кез-келген ұлғаюы әрқашан модельдің шығуының артуына әкелуі керек (егер тиісті салмақ оң болса) немесе әрқашан модельдің шығуының төмендеуіне әкелуі керек (егер тиісті салмақ теріс болса). Кейде мұның мағынасы бар. Мысалы, егер біз жеке тұлғаның несие төлейтінін болжауға тырыссақ, онда табысы жоғары үміткер әрдайым табысы төмен үміткерге қарағанда төлем жасау ықтималдығы жоғары деп ойлауымыз мүмкін. Бұл қатынас монотонды болғанымен, несиені қайтару ықтималдылығымен сызықтық байланысы болмауы мүмкін.

Табыстың 0-ден 50 мыңға дейін өсуі 1 миллионнан 1,05 миллионға дейін өскеннен гөрі төлем ықтималдығының жоғарылауына сәйкес келуі мүмкін. Мұны шешудің бір тәсілі сызықтық болу үшін деректерді алдын-ала өңдеу болуы мүмкін, мысалы, кіріс логарифмін біздің сипаттамамыз ретінде пайдалану.

Монотондылықты бұзатын мысалдарды табу оңай болатындығын ескеріңіз. Мысалы, біз дене температурасына негізделген өлім ықтималдығын болжағымыз келеді делік. Дене температурасы 37° C (98,6° F) жоғары адамдар үшін жоғары температура үлкен қауіп екенін көрсетеді. Дегенмен, дене температурасы 37 ° C-тан төмен адамдар үшін жоғары температура төмен тәуекелді көрсетеді! Бұл жағдайда біз мәселені алдын ала өңдеу арқылы шеше аламыз. Дәлірек айтқанда, біз 37°C дейінгі қашықтықты сипаттама ретінде пайдалана аламыз.

Бірақ мысықтар мен иттердің суреттерін жіктеу туралы не деуге болады? (13, 17) орналасқан жердегі пикселдің қарқындылығын арттыру әрқашан суреттің итті бейнелеу ықтималдығын жоғарылатса (немесе үнемі төмендесе)? Сызықтық модельді қолдану мысықтар мен иттерді ажыратудың жалғыз талабы - жеке пикселдердің жарықтығын бағалау деген болжамға сәйкес келеді. Бұл тәсіл кескінді инверттеу санатты сақтайтын әлемде сәтсіздікке ұшырайды.

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



Жасырын қабаттарды қосу

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

Төменде біз MLP схемалық түрде суреттейміз (сурет. 5.1.1). (Кітаптағы суретті қараңыз)

Бұл MLP-де 4 кіріс, 3 шығыс және оның жасырын қабаты 5 жасырын бірліктен тұрады. Кіріс қабаты ешқандай есептеулерді қамтымайтындықтан, осы желі арқылы шығыс деректерін құру жасырын және шығыс деңгейі үшін есептеулерді қажет етеді; осылайша, осы MLP-дегі қабаттар саны 2-ге тең болады. Назар аударыңыз, бұл екі қабат толығымен байланысқан. Әрбір кіріс жасырын қабаттағы әр нейронға әсер етеді, ал олардың әрқайсысы өз кезегінде шығу қабатындағы әр нейронға әсер етеді.

        1. Сызықтықтан сызықтық емеске дейін

Бұрынғыдай, X ∈ Rn × d матрицасы арқылы әрбір мысалда d кірісі (мүмкіндіктері) бар n мысалдың шағын қатарын белгілейміз. Жасырын қабаты h бірліктері бар бір жасырын қабаты бар MLP үшін жасырын көріністер болып табылатын H ∈ Rn × h жасырын қабаттың шығуын білдіреді. Математикада немесе кодта Н - жасырын деңгей айнымалысы немесе жасырын айнымалы ретінде де белгілі. Жасырын және шығыс қабаттар толығымен қосылғандықтан, бізде жасырын қабат салмағы W(1) ∈ Rd × h және ығысуы b(1) ∈ R1 × h, ал шығыс қабатының салмағы W(2) ∈ Rh × q және ығысуы b(2) ∈ R1 × q. Ресми түрде O ∈ Rn × q MLP шығысын бір жасырын қабатпен келесідей есептейміз:

H = XW(1) + b(1)

O = HW(2) + b(2) (5.1.1)
Жасырын қабатты қосқаннан кейін, біздің модель қосымша параметрлер жиынтығын бақылауды және жаңартуды талап ететінін ескеріңіз. Сонымен, біз мұнымен не аламыз? Жоғарыда анықталған модельде біз өз мәселелеріміз үшін ештеңе алмайтынымызды білгенде таң қалуыңыз мүмкін! Мұның себебі қарапайым. Жоғарыдағы жасырын бірліктер кірістердің аффиндік функциясымен берілген, ал шығыстар (pre-softmax) жасырын бірліктердің аффиндік функциясы болып табылады. Аффиндік функциялардың аффиндік функциясы аффиндік функция болып табылады. Сонымен қатар, біздің сызықтық модель кез-келген аффиндік функцияны ұсына алды.


Біз салмақтардың кез келген мәндері үшін W =W(1) W(2) және b = b(1) W(2) + b(2) параметрлері бар эквивалентті бір қабатты үлгіні ала отырып, жасырын қабатты жай ғана қысқартуға болатындығын дәлелдеу арқылы эквивалентті формальды түрде көрсете аламыз:

O = (XW(1) + b(1)) W(2) + b(2) = XW(1) W(2) + b(1) W (2) + b(2) = XW + b. (5.1.2)

Көп деңгейлі архитектуралардың әлеуетін іске асыру үшін бізге тағы бір маңызды ингредиент қажет: аффиндік түрлендіруден кейін әр жасырын бірлікке қолданылатын сызықты емес активтендіру функциясы σ. Активтендіру функциясының шығысы (мысалы, σ (·)) активтендіру деп аталады. Жалпы алғанда, активтендіру функцияларымен біздің MLP-ді сызықтық модельге айналдыру мүмкін емес:

H = σ (XW(1) + b(1)),

O = HW(2) + b(2) (5.1.3)

X-тің әрбір жолы шағын топтамадағы мысалға сәйкес келетіндіктен, кейбір белгілерді теріс пайдалану арқылы біз оның кірістеріне қолданылатын сызықтық емес σ-ны сызық бойынша анықтаймыз, яғни бір уақытта бір мысалды анықтаймыз. Назар аударыңыз, біз softmax белгісін 3.4.4 бөліміндегі сызықтық операцияны белгілеу үшін дәл осылай қолдандық. Көбінесе, осы бөлімдегідей, біз жасырын қабаттарға қолданатын активтендіру функциялары жай сызықемес, элемент болып табылады. Бұл қабаттың сызықтық бөлігін есептегеннен кейін біз басқа жасырын модульдер қабылдаған мәндерге қарамай-ақ әрбір активтендірулерді есептей алатынымызды білдіреді. Бұл көптеген активтендіру функцияларына қатысты.

Жалпы MLP құру үшін біз осындай жасырын қабаттарды бірінен соң бірін қосып, неғұрлым мәнерлі модельдер жасай аламыз, мысалы, H(1) = σ1 (XW(1) + b(1)) и H(2) = σ2(H(1) W(2) + b(2)).

        1. Әмбебап жуықтауыштар

MLP кірістеріміздің арасындағы күрделі өзара әрекеттесуді олардың жасырын нейрондары арқылы тіркей алады, олар әр кірістің мәндеріне байланысты болып келеді. Кездейсоқ есептеулерді орындау үшін жасырын түйіндерді оңай жобалай аламыз, мысалы, жұптық кірістің негізгі логикалық операциялары. Сонымен қатар, активтендіру функциясын таңдаудың кейбір нұсқалары үшін MLP әмбебап жуықтау құралы екендігі белгілі. Тіпті бір жасырын қабаты бар желіде де жеткілікті түйіндер (немесе абсурд болуы мүмкін) және салмақтың дұрыс жиынтығы болса да, біз кез-келген функцияны модельдей аламыз
, дегенмен бұл функцияны оқыту қиынға соғуы мүмкін. Сіз өзіңіздің нейрондық желіңізді C бағдарламалау тілімен қарастыра аласыз, бұл тіл, кез-келген басқа тіл сияқты, кез-келген есептелетін бағдарламаны білдіреді. Бірақ іс жүзінде сіздің талаптарыңызға сәйкес келетін бағдарлама құру қиын. Сонымен қатар, бір жасырын қабаты бар желі кез-келген функцияны зерттей алады, бірақ бұл сіздің барлық мәселелеріңізді бір жасырын қабаты бар желілер арқылы шешуге болады дегенді білдірмейді. Шын мәнінде, біз көптеген мүмкіндіктерді тереңірек (кең емес) желілерді қолдана отырып, әлдеқайда ықшам түрде жақындата аламыз. Келесі тарауларда біз неғұрлым қатаң дәлелдерге тоқталамыз.

%matplotlib inline

from d2l import mxnet as d2l

from mxnet import autograd, np, npx

npx.set_np()


      1. Белсендіру функциялары

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

        1. ReLU функциясы

Белсендірудің қарапайымдылығына және оның әртүрлі болжау есептері үшін жақсы өнімділігіне байланысты ең танымал таңдау – түзетілген сызықтық бірлік (ReLU) болып табылады. ReLU өте қарапайым сызықты емес түрлендіруді қамтамасыз етеді. x элементі үшін функция сол элементтің максимумы және 0 ретінде анықталады:

ReLU(x) = max(x, 0). (5.1.4)

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

x = np.arange (-8.0, 8.0, 0.1)

x.attach_grad ()

с autograd.record ():

у = npx.relu (х)

d2l.plot (x, y, 'x', 'relu (x)', figsize = (5, 2.5))
Кіріс теріс болғанда, ReLU функциясының туындысы 0-ге, ал кіріс оң болғанда, ReLU функциясының туындысы 1-ге тең болады. Кіріс дәл 0 болғанда ReLU функциясы дифференциалданбайтынын ескеріңіз. Бұл жағдайларда, біз сол жақ туындыға әдепкі бойынша енгіземіз және кіріс 0 болғанда туынды 0 деп айтамыз. Біз оны елемесек те болады, өйткені кірістер ешқашан нөл болмауы мүмкін. Егер жіңішке шекаралық шарттар маңызды болса, біз инженерлік емес, (нақты) математикамен айналысатын шығармыз деген ескі мақал бар. Бұл ортақ даналық осы жерде қолданылады. Төменде көрсетілгендей ReLU функциясының туындысын құрамыз.