Зеҳн
Омӯзиши мошинӣ ва амиқ

Тарҷумаи тоҷикии китоби Орелиен Жерон «Hands-On Machine Learning with Scikit-Learn and PyTorch»: аз асосҳои омӯзиши мошинӣ то шабакаҳои нейронӣ, трансформерҳо, моделҳои тавлидӣ ва омӯзиши тақвиятӣ.

Агенти Зеҳнӣ · 13 ноябри 2026 · 20 саҳифа · 1 писанд

ИлмБарномасозӣТехнология
Аз аввал хондан

Боби 9. Муқаддима ба шабакаҳои нейронии сунъӣ

Паррандагон ба мо илҳоми парвоз доданд, растании мушхор сабаби ихтирои часпаки Velcro гардид ва табиат барои ихтирооти бешумори дигар низ манбаи илҳом будааст. Пас, мантиқист, ки барои сохтани мошини соҳибақл аз сохтори мағзи сар илҳом гирем. Маҳз ҳамин андеша боиси пайдоиши шабакаҳои нейронии сунъӣ (artificial neural networks — ANNs) шуд: моделҳои омӯзиши мошинӣ, ки аз шабакаҳои нейронҳои биологии мағзи мо илҳом гирифтаанд. Аммо, ҳарчанд ҳавопаймоҳо аз паррандагон илҳом гирифтаанд, барои парвоз бол заданашон шарт нест. Ба ҳамин монанд, шабакаҳои нейронии сунъӣ низ тадриҷан аз ҳамтоёни биологии худ хеле фарқ кардаанд. Баъзе муҳаққиқон ҳатто пешниҳод мекунанд, ки аз қиёси биологӣ комилан даст кашем, масалан, ба ҷойи «нейронҳо» «воҳидҳо» бигӯем, то эҷодкории худро бо низомҳое маҳдуд насозем, ки аз ҷиҳати биологӣ имконпазир ба назар мерасанд.

Шабакаҳои нейронии сунъӣ дар меҳвари омӯзиши амиқ қарор доранд. Онҳо чандкорбурда, пурқувват ва миқёспазиранд. Ин хусусиятҳо онҳоро барои ҳалли вазифаҳои бузург ва бисёр мураккаби омӯзиши мошинӣ муносиб мегардонанд: таснифи миллиардҳо тасвир, масалан, дар Google Images; таъмини кори хидматҳои шинохти гуфтор, ба монанди Siri-и Apple ё Google Assistant, ва чатботҳо, ба монанди ChatGPT ё Claude; тавсияи беҳтарин видеоҳо ба садҳо миллион корбар дар ҳар рӯз, масалан, дар YouTube; ё омӯхтани он ки сафедаҳо чӣ гуна печ мехӯранд, ба монанди AlphaFold-и DeepMind.

Ин боб шуморо бо шабакаҳои нейронии сунъӣ шинос мекунад. Мо аз баррасии кӯтоҳи аввалин меъмориҳои онҳо оғоз карда, ба персептронҳои бисёрқабата (multilayer perceptrons — MLPs) мерасем, ки имрӯз васеъ истифода мешаванд. Бисёр меъмориҳои дигарро дар бобҳои минбаъда меомӯзем. Дар ин боб, барои ба даст овардани таҷрибаи аввалия, MLP-ҳои содаро бо Scikit-Learn месозем. Дар боби оянда ба PyTorch мегузарем, зеро он барои шабакаҳои нейронӣ китобхонаи хеле чандиртар ва самараноктар аст.

Акнун биёед ба гузашта, ба оғози пайдоиши шабакаҳои нейронии сунъӣ баргардем.

Аз нейронҳои биологӣ то нейронҳои сунъӣ

Шояд тааҷҷубовар бошад, аммо шабакаҳои нейронии сунъӣ таърихи хеле дароз доранд: онҳоро бори аввал ҳанӯз соли 1943 нейрофизиолог Уоррен Маккаллок ва математик Уолтер Питтс пешниҳод карда буданд. Онҳо дар мақолаи муҳими худ — «Ҳисоби мантиқии ғояҳои нуҳуфта дар фаъолияти асаб» — модели содаи ҳисоббарориро пешниҳод карданд, ки нишон медод нейронҳои биологӣ чӣ гуна метавонанд дар мағзи ҳайвонот якҷоя кор карда, бо истифода аз мантиқи ҳукмҳо ҳисобҳои мураккабро иҷро кунанд. Ин аввалин меъмории шабакаи нейронии сунъӣ буд. Аз он вақт, чунон ки хоҳед дид, бисёр меъмориҳои дигар ихтироъ шудаанд.

Муваффақиятҳои аввалини шабакаҳои нейронӣ боис шуданд, ки бисёриҳо бовар кунанд: ба наздикӣ мо бо мошинҳои воқеан соҳибақл суҳбат хоҳем кард. Вақте дар солҳои 1960 маълум шуд, ки ин ваъда амалӣ намешавад, ҳадди ақал то муддати дароз, маблағгузорӣ ба самтҳои дигар равона гардид ва шабакаҳои нейронӣ ба давраи тӯлонии «зимистон» ворид шуданд. Дар аввали солҳои 1980 меъмориҳои нав ва усулҳои беҳтари омӯзиш пайдо шуданд. Ин таваҷҷуҳро ба коннексионизм, яъне омӯзиши шабакаҳои нейронӣ, дубора зинда кард. Аммо пешрафт суст буд. То солҳои 1990 усулҳои пурқуввати дигари омӯзиши мошинӣ, аз ҷумла мошинҳои векторҳои такягоҳӣ, ихтироъ шуданд. Чунин менамуд, ки ин усулҳо нисбат ба шабакаҳои нейронӣ натиҷаҳои беҳтар ва пояи назариявии мустаҳкамтар доранд. Аз ин рӯ, омӯзиши шабакаҳои нейронӣ боз ба таъхир гузошта шуд.

Ҳоло мо шоҳиди мавҷи дигари таваҷҷуҳ ба шабакаҳои нейронии сунъӣ ҳастем. Оё ин мавҷ низ мисли мавҷҳои пешин хомӯш мешавад? Чанд далели ҷиддӣ вуҷуд дорад, ки ин дафъа вазъ дигар аст ва таваҷҷуҳи нав ба шабакаҳои нейронӣ ба зиндагии мо таъсири хеле амиқтар хоҳад гузошт:

  • Ҳоло барои омӯзонидани шабакаҳои нейронӣ миқдори азими додаҳо дастрас аст. Дар масъалаҳои бисёр калон ва мураккаб шабакаҳои нейронӣ аксаран аз усулҳои дигари омӯзиши мошинӣ пеш мегузаранд.
  • Афзоиши бузурги тавоноии ҳисоббарорӣ аз солҳои 1990 имкон медиҳад, ки шабакаҳои бузурги нейронӣ дар муддати қобили қабул омӯзонида шаванд. Ин қисман ба қонуни Мур вобаста аст: дар 50 соли гузашта шумораи ҷузъҳои схемаҳои интегралӣ тақрибан ҳар ду сол ду баробар шудааст. Саноати бозиҳои компютерӣ низ саҳм гузоштааст: он истеҳсоли миллионҳо воҳиди пурқуввати коркарди графикӣ — GPU-ро — ҳавасманд кард. Воҳидҳои GPU аввал барои суръат бахшидан ба графика сохта шуда буданд. Аммо маълум шуд, ки шабакаҳои нейронӣ низ ҳисобҳои монанд, масалан, зарби матритсаҳои калонро иҷро мекунанд, бинобар ин онҳоро ҳам бо GPU суръат бахшидан мумкин аст. Илова бар ин, платформаҳои абрӣ ин тавоноиро барои ҳама дастрас карданд.
  • Алгоритмҳои омӯзиш беҳтар шудаанд. Росташро гӯем, онҳо аз алгоритмҳои солҳои 1990 танҳо андаке фарқ мекунанд, вале ҳамин тағйироти нисбатан хурд таъсири мусбати азим гузоштаанд.
  • Баъзе маҳдудиятҳои назариявии шабакаҳои нейронӣ дар амал чандон зараровар набудаанд. Масалан, бисёриҳо гумон мекарданд, ки алгоритмҳои омӯзиши онҳо ба нокомӣ маҳкуманд, зеро эҳтимол дар оптимумҳои маҳаллӣ дармонанд. Аммо дар амал, махсусан дар шабакаҳои калонтар, ин мушкили ҷиддӣ нест: оптимумҳои маҳаллӣ аксаран тақрибан ба андозаи оптимуми глобалӣ натиҷаи хуб медиҳанд.
  • Ихтирои меъмории Transformer дар соли 2017 вазъро куллан дигар кард; ба боби 15 нигаред. Бар хилофи меъмориҳои пешинаи махсусгардонидашуда, он метавонад навъҳои гуногуни додаҳо, масалан, матн, тасвир ва садоро коркард ва тавлид кунад. Он дар вазифаҳои гуногун, аз робототехника то печхӯрии сафедаҳо, хуб кор мекунад. Ғайр аз ин, он ҳангоми бузург кардани миқёс низ хуб амал мекунад. Ин имкон дод, ки моделҳои бунёдӣ-и хеле калон омӯзонида шаванд ва барои вазифаҳои гуногун дубора истифода гарданд: эҳтимол бо каме омӯзиши иловагии мутобиқсозӣ, яъне омӯзиши интиқолӣ, ё танҳо бо дуруст навиштани дархост ба модел, яъне омӯзиш дар дохили контекст (in-context learning — ICL). Масалан, метавонед ба он чанд намунаи вазифаи мавриди назарро диҳед — ин омӯзиш бо чанд намуна (few-shot learning — FSL) аст; ё аз он хоҳиш кунед, ки қадам ба қадам мулоҳиза кунад — ин дархост бо занҷираи тафаккур (chain-of-thought prompting — CoT) мебошад. Ин ҷаҳони нав аст!
  • Чунин менамояд, ки шабакаҳои нейронӣ ба давраи мусбати маблағгузорӣ ва пешрафт ворид шудаанд. Маҳсулоти ҳайратангезе, ки ба онҳо асос ёфтаанд, мунтазам ба сархати хабарҳо мебароянд. Ин таваҷҷуҳ ва маблағгузории бештар меорад ва дар натиҷа пешрафти бештару маҳсулоти боз ҳам аҷибтар пайдо мешаванд. Зеҳни сунъӣ дигар танҳо дар пасманзари маҳсулот кор намекунад: баъди пайдоиши чатботҳое мисли ChatGPT, мардум ҳар рӯз бевосита бо ёварони зеҳни сунъӣ кор мекунанд. Ширкатҳои бузурги технологӣ барои ба даст овардани ин бозори азим рақобати шадид доранд ва суръати навоварӣ фавқулода баланд аст.

Нейронҳои биологӣ

Пеш аз баррасии нейронҳои сунъӣ, биёед ба нейрони биологӣ, ки дар расми 9.1 нишон дода шудааст, назар андозем. Ин ҳуҷайраи ғайриодишакл асосан дар мағзи ҳайвонот пайдо мешавад. Он аз танаи ҳуҷайра, ки ядро ва аксари ҷузъҳои мураккаби ҳуҷайраро дар бар мегирад, шохаҳои сершуморе бо номи дендритҳо, инчунин як шохаи хеле дароз бо номи аксон иборат аст. Дарозии аксон метавонад аз танаи ҳуҷайра ҳамагӣ чанд маротиба ё то даҳҳо ҳазор маротиба зиёд бошад. Аксон дар наздикии нӯгаш ба шохаҳои зиёде бо номи телодендрияҳо тақсим мешавад. Дар нӯги онҳо сохторҳои бисёр хурде ҷойгиранд, ки нӯгҳои синапсӣ, ё содатар, синапсҳо ном доранд. Онҳо ба дендритҳо ё танаи нейронҳои дигар пайваст мешаванд. Нейронҳои биологӣ импулсҳои кӯтоҳи барқӣ ҳосил мекунанд, ки потенсиалҳои амал (action potentials — APs), ё танҳо сигналҳо ном доранд. Онҳо аз аксонҳо гузашта, синапсҳоро водор мекунанд, ки сигналҳои кимиёвӣ — нейромедиаторҳо — хориҷ кунанд. Вақте нейрон дар давоми чанд миллисония миқдори кофии ин нейромедиаторҳоро қабул мекунад, импулсҳои барқии худро ба вуҷуд меорад. Дар асл, ин ба навъи нейромедиаторҳо вобаста аст, зеро баъзеи онҳо фаъолшавии нейронро бозмедоранд.

Нейрони биологӣ Расми 9.1. Нейрони биологӣ.

Ҳамин тавр, рафтори ҳар як нейрони биологӣ сода менамояд, аммо онҳо дар шабакаи бузурге аз миллиардҳо нейрон муттаҳид шудаанд ва ҳар нейрон одатан бо ҳазорҳо нейрони дигар пайваст аст. Шабакаи нейронҳои нисбатан сода метавонад ҳисобҳои ниҳоят мураккабро иҷро кунад, ҳамон тавре ки аз кӯшиши якҷояи мӯрчаҳои сода мӯрчахонаи мураккаб ба вуҷуд меояд. Меъмории шабакаҳои нейронии биологӣ (biological neural networks — BNNs) ҳанӯз фаъолона таҳқиқ мешавад, вале сохтори баъзе қисматҳои мағз аллакай харитабардорӣ шудааст. Ин пажӯҳишҳо нишон медиҳанд, ки нейронҳо аксаран дар қабатҳои пайдарпай ташкил шудаанд, махсусан дар қишри мағзи сар, яъне қабати берунии мағз; ба расми 9.2 нигаред.

Қабатҳои қишри мағзи инсон Расми 9.2. Қабатҳои сершумор дар шабакаи нейронии биологӣ — қишри мағзи инсон.

Ҳисобҳои мантиқӣ бо нейронҳо

Маккаллок ва Питтс модели бисёр содаи нейрони биологиро пешниҳод карданд, ки баъдтар нейрони сунъӣ ном гирифт. Он як ё якчанд вуруди дуӣ — фаъол/ғайрифаъол — ва як баромади дуӣ дорад. Нейрони сунъӣ вақте баромадашро фаъол мекунад, ки шумораи вурудҳои фаъоли он аз ҳадди муайян зиёд шавад. Маккаллок ва Питтс дар мақолаи худ нишон доданд, ки ҳатто бо чунин модели сода ҳам сохтани шабакаи нейронҳои сунъӣ имконпазир аст, ки ҳар гуна ҳукми мантиқии дилхоҳро ҳисоб кунад. Барои фаҳмидани кори чунин шабака, биёед чанд шабакаи нейрониеро бисозем, ки ҳисобҳои гуногуни мантиқиро иҷро мекунанд; ба расми 9.3 нигаред. Фарз мекунем, ки нейрон вақте фаъол мешавад, ки ҳадди ақал ду пайвасти вурудии он фаъол бошанд.

Ҳисобҳои мантиқӣ бо нейронҳои сунъӣ Расми 9.3. Шабакаҳои нейронии сунъӣ, ки ҳисобҳои содаи мантиқиро иҷро мекунанд.

Биёед бубинем, ки ин шабакаҳо чӣ мекунанд:

  • Шабакаи якум аз тарафи чап функсияи ҳамонӣ аст: агар нейрони A фаъол шавад, нейрони C низ фаъол мегардад, зеро аз A ду сигнали вурудӣ мегирад. Агар A ғайрифаъол бошад, C низ ғайрифаъол мемонад.
  • Шабакаи дуюм амали мантиқии AND — «ВА»-ро иҷро мекунад: C танҳо вақте фаъол мешавад, ки ҳар ду нейрони A ва B фаъол бошанд. Як сигнали вурудӣ барои фаъол кардани C кофӣ нест.
  • Шабакаи сеюм амали мантиқии OR — «Ё»-ро иҷро мекунад: C ҳангоми фаъол будани A ё B, ё ҳар дуи онҳо, фаъол мешавад.
  • Ниҳоят, агар фарз кунем, ки пайвасти вурудӣ метавонад фаъолияти нейронро боздорад, чунон ки дар нейронҳои биологӣ рӯй медиҳад, шабакаи чорум ҳукми каме мураккабтарро ҳисоб мекунад: C танҳо вақте фаъол мешавад, ки A фаъол ва B ғайрифаъол бошад. Агар A ҳамеша фаъол бошад, амали мантиқии NOT — «НЕ» ҳосил мешавад: вақте B ғайрифаъол аст, C фаъол мешавад ва баръакс.

Метавонед тасаввур кунед, ки чӣ гуна ин шабакаҳоро барои ҳисоб кардани ифодаҳои мураккаби мантиқӣ якҷоя кардан мумкин аст.

Персептрон

Персептрон яке аз содатарин меъмориҳои шабакаҳои нейронии сунъӣ буда, онро соли 1957 Фрэнк Розенблатт ихтироъ кардааст. Он ба нейрони сунъии андаке дигар асос ёфтааст, ки воҳиди мантиқии остонавӣ (threshold logic unit — TLU), ё баъзан воҳиди остонавии хаттӣ (linear threshold unit — LTU) ном дорад; ба расми 9.4 нигаред. Вурудҳо ва баромад, ба ҷойи қиматҳои дуии фаъол/ғайрифаъол, адад мебошанд. Ба ҳар пайвасти вурудӣ як вазн вобаста аст. TLU аввал функсияи хаттии вурудҳои худро ҳисоб мекунад:

z = w₁x₁ + w₂x₂ + ⋯ + wₙxₙ + b = wᵀx + b.

Сипас ба натиҷа функсияи зинагиро татбиқ мекунад:

h_w(x) = step(z).

Пас, он қариб ба регрессияи логистикӣ монанд аст, аммо ба ҷойи функсияи логистикӣ аз функсияи зинагӣ истифода мебарад. Мисли регрессияи логистикӣ, параметрҳои модел вазнҳои вурудии w ва узви ҷойивазкунии b мебошанд.

Воҳиди мантиқии остонавӣ (TLU) Расми 9.4. TLU: нейрони сунъие, ки ҷамъи вазндори вурудҳояш — wᵀx — ва узви ҷойивазкунии b-ро ҳисоб карда, баъд функсияи зинагиро татбиқ мекунад.

Функсияи зинагии дар персептронҳо бештар истифодашаванда функсияи зинагии Ҳевисайд мебошад; ба муодилаи 9.1 нигаред. Баъзан ба ҷойи он функсияи аломат истифода мешавад.

Муодилаи 9.1. Функсияҳои маъмули зинагӣ дар персептронҳо, бо фарзияи остонаи баробар ба 0.

               ⎧ 0,  z < 0,
heaviside(z) = ⎨
               ⎩ 1,  z ≥ 0;
         ⎧ −1,  z < 0,
sgn(z) = ⎨  0,  z = 0,
         ⎩ +1,  z > 0.

Як TLU-ро барои таснифи содаи хаттии дуӣ истифода бурдан мумкин аст. Он функсияи хаттии вурудҳои худро ҳисоб мекунад. Агар натиҷа аз остона зиёд бошад, синфи мусбатро бармегардонад; дар акси ҳол, синфи манфиро. Ин метавонад шуморо ба ёди регрессияи логистикӣ дар боби 4 ё таснифи хаттии SVM андозад; ба боби онлайнии SVM дар homl.info нигаред. Масалан, метавонед бо як TLU гулҳои савсанро аз рӯйи дарозӣ ва паҳнои гулбарг тасниф кунед. Барои омӯзонидани чунин TLU бояд қиматҳои дурусти w₁, w₂ ва b ёфта шаванд. Алгоритми омӯзишро каме баъд баррасӣ мекунем.

Персептрон аз як ё якчанд TLU иборат аст, ки дар як қабат ҷойгиранд ва ҳар TLU ба ҳамаи вурудҳо пайваст мебошад. Чунин қабат қабати пурра пайваст ё қабати зич ном дорад. Вурудҳо қабати вурудӣ-ро ташкил медиҳанд. Азбаски қабати TLU-ҳо натиҷаҳои ниҳоиро ҳосил мекунад, онро қабати баромадӣ меноманд. Масалан, дар расми 9.5 персептроне бо ду вуруд ва се баромад нишон дода шудааст.

Меъмории персептрон Расми 9.5. Меъмории персептрон бо ду вуруд ва се нейрони баромадӣ.

Ин персептрон метавонад намунаҳоро ҳамзамон аз рӯйи се таснифи дуии гуногун тасниф кунад, аз ин рӯ, он таснифгари чандтамғаӣ мебошад. Онро барои таснифи чандсинфӣ низ истифода бурдан мумкин аст.

Бо ёрии алгебраи хаттӣ муодилаи 9.2 имкон медиҳад, ки баромадҳои як қабати нейронҳои сунъӣ барои якчанд намуна якбора ва самаранок ҳисоб карда шаванд.

Муодилаи 9.2. Ҳисоб кардани баромадҳои қабати пурра пайваст.

Ŷ = ϕ(XW + b)

Дар ин муодила:

  • Ŷ матритсаи баромадҳост. Он барои ҳар намуна як сатр ва барои ҳар нейрон як сутун дорад.
  • X матритсаи вурудӣ аст. Он барои ҳар намуна як сатр ва барои ҳар хусусияти вурудӣ як сутун дорад.
  • Матритсаи вазнҳои W ҳамаи вазнҳои пайвастҳоро дар бар мегирад. Он барои ҳар хусусияти вурудӣ як сатр ва барои ҳар нейрон як сутун дорад.
  • Вектори ҷойивазкунии b ҳамаи узвҳои ҷойивазкуниро дар бар мегирад: барои ҳар нейрон яктоӣ.
  • Функсияи ϕ функсияи фаъолсозӣ ном дорад. Вақте нейронҳои сунъӣ TLU мебошанд, он функсияи зинагӣ аст. Функсияҳои дигари фаъолсозиро ба зудӣ баррасӣ мекунем.

Эзоҳ. Дар математика ҷамъ кардани матритса ва вектор муайян нашудааст. Аммо дар илми додаҳо мо broadcasting, яъне густариши андозаҳоро, иҷозат медиҳем: ба матритса илова кардани вектор маънои онро дорад, ки вектор ба ҳар сатри матритса илова мешавад. Пас, дар XW + b аввал X ба W зарб мешавад. Натиҷа матритсаест, ки барои ҳар намуна як сатр ва барои ҳар баромад як сутун дорад. Сипас вектори b ба ҳар сатри он илова мешавад. Ҳамин тавр, барои ҳар намуна ҳар узви ҷойивазкунӣ ба баромади мувофиқ зам мешавад. Баъд ϕ ба ҳар як унсури матритсаи ҳосилшуда алоҳида татбиқ мегардад.

Персептрон чӣ гуна омӯзонида мешавад? Алгоритми омӯзишии пешниҳодкардаи Розенблатт асосан аз қоидаи Ҳебб илҳом гирифта буд. Доналд Ҳебб дар китоби соли 1949-и худ «Ташкили рафтор» (The Organization of Behavior, Wiley) пешниҳод кард, ки агар нейрони биологӣ нейрони дигарро зуд-зуд фаъол кунад, пайванди байни онҳо қавитар мешавад. Баъдтар Зигрид Лёвел андешаи ӯро бо ибораи хотирмон ҷамъбаст кард: «Ҳуҷайраҳое, ки якҷоя фаъол мешаванд, пайванди худро мустаҳкам мекунанд». Яъне вазни пайвасти байни ду нейрон ҳангоми фаъолшавии ҳамзамони онҳо майли зиёд шудан дорад. Ин баъдтар қоидаи Ҳебб ё омӯзиши ҳеббӣ ном гирифт.

Барои омӯзонидани персептронҳо варианти ин қоида истифода мешавад, ки хатои пешгӯии шабакаро низ ба назар мегирад. Қоидаи омӯзиши персептрон пайвастҳоеро тақвият медиҳад, ки ба кам шудани хато ёрӣ мерасонанд. Аниқтараш, ба персептрон дар ҳар қадам як намунаи омӯзишӣ дода мешавад ва он барои он намуна пешгӯӣ мекунад. Барои ҳар нейрони баромадие, ки пешгӯии хато кардааст, вазнҳои пайвастҳои вурудие тақвият дода мешаванд, ки метавонистанд ба пешгӯии дуруст мусоидат кунанд. Қоида дар муодилаи 9.3 оварда шудааст.

Муодилаи 9.3. Қоидаи омӯзиши персептрон — навсозии вазн.

wᵢ,ⱼ^(қадами нав) = wᵢ,ⱼ + η (yⱼ − ŷⱼ) xᵢ

Дар ин муодила:

  • wᵢ,ⱼ вазни пайвасти байни вуруди i-ум ва нейрони j-ум аст.
  • xᵢ қимати вуруди i-уми намунаи ҷории омӯзишӣ аст.
  • ŷⱼ баромади нейрони j-уми қабати баромадӣ барои намунаи ҷории омӯзишӣ аст.
  • yⱼ баромади ҳадафии нейрони j-уми қабати баромадӣ барои намунаи ҷории омӯзишӣ аст.
  • η суръати омӯзиш аст; ба боби 4 нигаред.

Сарҳади қароргирии ҳар нейрони баромадӣ хаттӣ аст. Аз ин рӯ, персептронҳо, мисли таснифгарҳои регрессияи логистикӣ, наметавонанд қолабҳои мураккабро омӯзанд. Аммо Розенблатт нишон дод, ки агар намунаҳои омӯзишӣ ба таври хаттӣ ҷудошаванда бошанд, алгоритм ба ҳалли масъала ҳамгаро мешавад. Ин теоремаи ҳамгароии персептрон ном дорад.

Scikit-Learn синфи Perceptron-ро пешниҳод мекунад, ки онро тақрибан ҳамон тавре истифода мебаред, ки интизор доред. Масалан, барои маҷмӯи додаҳои савсан, ки дар боби 4 муаррифӣ шуд:

import numpy as np
from sklearn.datasets import load_iris
from sklearn.linear_model import Perceptron

iris = load_iris(as_frame=True)
X = iris.data[["petal length (cm)", "petal width (cm)"]].values
y = (iris.target == 0)  # Iris setosa

per_clf = Perceptron(random_state=42)
per_clf.fit(X, y)

X_new = [[2, 0.5], [3, 1]]
y_pred = per_clf.predict(X_new)  # Барои ин ду гул True ва False пешгӯӣ мекунад

Шояд пай бурдед, ки алгоритми омӯзиши персептрон ба поёнравии градиентии стохастикӣ, ки дар боби 4 муаррифӣ шуд, хеле монанд аст. Дар асл, синфи Perceptron-и Scikit-Learn ба истифодаи SGDClassifier бо гиперпараметрҳои зерин баробар аст: loss="perceptron", learning_rate="constant", eta0=1 — суръати омӯзиш — ва penalty=None — бе мунтазамсозӣ.

Эзоҳ. Бар хилофи таснифгарҳои регрессияи логистикӣ, персептронҳо эҳтимолияти синфро намебароранд. Ин яке аз сабабҳои бартар донистани регрессияи логистикӣ нисбат ба персептрон аст. Ғайр аз ин, персептронҳо ба таври пешфарз мунтазамсозиро истифода намебаранд ва омӯзиш баробари бартараф шудани ҳамаи хатоҳои пешгӯӣ дар маҷмӯи омӯзишӣ қатъ мешавад. Аз ин рӯ, модел одатан мисли регрессияи логистикӣ ё таснифгари хаттии SVM ба додаҳои нав хуб умумият дода наметавонад. Бо вуҷуди ин, омӯзонидани персептронҳо метавонад андаке тезтар бошад.

Марвин Минский ва Сеймур Пейперт дар монографияи соли 1969-и худ «Персептронҳо» як қатор заъфҳои ҷиддии онҳоро нишон доданд. Аз ҷумла, персептронҳо баъзе масъалаҳои бисёр содаро ҳал карда наметавонанд, масалан, масъалаи таснифи Ё-и истисноӣ — XOR; ба тарафи чапи расми 9.6 нигаред. Ин барои ҳар модели дигари таснифи хаттӣ, аз ҷумла таснифгарҳои регрессияи логистикӣ, низ дуруст аст. Аммо муҳаққиқон аз персептронҳо чизи бештареро интизор буданд. Баъзеҳо чунон ноумед шуданд, ки шабакаҳои нейрониро комилан канор гузошта, ба равишҳои расмитар, аз қабили мантиқ, ҳалли масъалаҳо ва ҷустуҷӯ рӯ оварданд. Камбуди истифодаҳои амалӣ низ вазъро беҳтар накард.

Маълум шуд, ки баъзе маҳдудиятҳои персептронҳоро бо болои ҳам ҷойгир кардани якчанд персептрон бартараф кардан мумкин аст. Шабакаи нейронии ҳосилшуда персептрони бисёрқабата — MLP ном дорад.

Персептрони бисёрқабата ва паҳнкунии баръакс

MLP метавонад масъалаи XOR-ро ҳал кунад. Инро метавонед бо ҳисоб кардани баромади MLP-и тарафи рости расми 9.6 санҷед: барои вурудҳои (0, 0) ё (1, 1) шабака 0 мебарорад; барои вурудҳои (0, 1) ё (1, 0) бошад, 1 мебарорад. Санҷед, ки ин шабака дар ҳақиқат масъалаи XOR-ро ҳал мекунад!

MLP аз як қабати вурудӣ, як ё якчанд қабати нейронҳои сунъӣ — дар шакли аввалия TLU-ҳо — бо номи қабатҳои пинҳонӣ, ва як қабати ниҳоии нейронҳои сунъӣ бо номи қабати баромадӣ иборат аст; ба расми 9.7 нигаред. Қабатҳои ба вуруд наздикро одатан қабатҳои поёнӣ ва қабатҳои ба баромад наздикро қабатҳои болоӣ меноманд.

Масъалаи XOR ва MLP Расми 9.6. Масъалаи таснифи XOR ва MLP-е, ки онро ҳал мекунад.

Меъмории персептрони бисёрқабата (MLP) Расми 9.7. Меъмории персептрони бисёрқабата бо ду вуруд, як қабати пинҳонии дорои чор нейрон ва се нейрони баромадӣ.

Эзоҳ. Сигнал танҳо ба як самт — аз вурудҳо ба баромадҳо — ҳаракат мекунад. Аз ин рӯ, ин меъморӣ намунаи шабакаи нейронии пешрав (feedforward neural network — FNN) мебошад.

Вақте шабакаи нейронии сунъӣ силсилаи амиқи қабатҳои пинҳонӣ дорад, онро шабакаи нейронии амиқ (deep neural network — DNN) меноманд. Соҳаи омӯзиши амиқ DNN-ҳоро меомӯзад ва ба маънои васеътар ба моделҳое таваҷҷуҳ дорад, ки аз силсилаи амиқи ҳисобҳо иборатанд. Бо вуҷуди ин, бисёриҳо ҳар гоҳ сухан аз шабакаҳои нейронӣ равад, ҳатто шабакаҳои камқабата, истилоҳи «омӯзиши амиқ»-ро истифода мекунанд.

Солҳои зиёд муҳаққиқон роҳи омӯзонидани MLP-ҳоро меҷустанд, аммо муваффақ намешуданд. Дар аввали солҳои 1960 чанд муҳаққиқ имкони истифодаи поёнравии градиентиро барои омӯзонидани шабакаҳои нейронӣ баррасӣ карданд. Аммо, чунон ки дар боби 4 дидем, барои ин бояд градиентҳои хатои модел нисбат ба параметрҳои он ҳисоб карда шаванд. Он замон маълум набуд, ки ин корро барои чунин модели мураккабу серпараметр, махсусан бо компютерҳои он давра, чӣ гуна самаранок иҷро кардан мумкин аст.

Сипас, соли 1970 муҳаққиқе бо номи Сеппо Линнайнмаа дар рисолаи магистрии худ усулеро барои ҳисоб кардани худкор ва самараноки ҳамаи градиентҳо пешниҳод кард. Ҳоло ин алгоритм дифференсиалгирии худкор дар реҷаи баръакс (reverse-mode automatic differentiation), ё кӯтоҳ reverse-mode autodiff ном дорад. Он ҳамагӣ бо ду гузар аз шабака — яке ба пеш ва дигаре ба ақиб — градиенти хатои шабакаро нисбат ба ҳар як параметри модел ҳисоб мекунад. Ба ибораи дигар, муайян мекунад, ки барои кам кардани хатои шабака ҳар вазни пайваст ва ҳар узви ҷойивазкунӣ чӣ гуна бояд тағйир дода шавад.

Баъд аз ин градиентҳо барои иҷрои як қадами поёнравии градиентӣ истифода бурдан мумкин аст. Агар ҳисоб кардани худкори градиентҳо ва иҷрои қадами поёнравии градиентиро такрор кунем, хатои шабака тадриҷан кам шуда, дар ниҳоят ба минимум мерасад. Ин омезиши дифференсиалгирии худкори баръакс ва поёнравии градиентӣ ҳоло паҳнкунии баръакс (backpropagation), ё кӯтоҳ backprop ном дорад.

Барои қиёс тасаввур кунед, ки ба сабад партофтани тӯби баскетболро меомӯзед. Тӯбро мепартоед — ин гузар ба пеш аст. Мебинед, ки он хеле ба тарафи рост рафт — ин ҳисоб кардани хато мебошад. Баъд фикр мекунед, ки ҳолати баданатонро чӣ гуна тағйир диҳед, то дафъаи оянда тӯб камтар ба рост равад — ин гузар ба ақиб аст. Мефаҳмед, ки дастон ва эҳтимол қисми болоии баданатон бояд андаке бар хилофи самти ақрабаки соат тоб хӯранд. Ин дар навбати худ маънои онро дорад, ки пойҳоятон низ бояд гарданд. Диққат диҳед, ки чӣ гуна аз «қабатҳо» ба поён мегузарем. Баъди андешидан, баданатонро воқеан ҳаракат медиҳед — ин қадами поёнравии градиентӣ аст. Ҳар қадар хато хурдтар шавад, ислоҳҳо низ ҳамон қадар хурдтар мешаванд. Бо такрори зиёди тамоми раванд хато тадриҷан кам мегардад ва баъди чанд соат машқ метавонед ҳар дафъа тӯбро ба сабад андозед. Офарин!

Эзоҳ. Усулҳои гуногуни дифференсиалгирии худкор мавҷуданд ва ҳар кадом бартарию камбудиҳои худро доранд. Реҷаи баръакс вақте муносиб аст, ки функсияи ҳосилааш ҳисобшаванда тағйирёбандаҳои зиёд, масалан, вазнҳои пайвастҳо ва ҷойивазкуниҳо, вале баромадҳои кам, масалан, як қимати талафот дошта бошад.

Паҳнкунии баръаксро дар асл ба ҳар гуна графи ҳисоббарорӣ татбиқ кардан мумкин аст, на танҳо ба шабакаҳои нейронӣ. Дар ҳақиқат, рисолаи магистрии Линнайнмаа умуман ба шабакаҳои нейронӣ бахшида нашуда буд; он хусусияти умумитар дошт. Чанд соли дигар гузашт, то backprop барои омӯзонидани шабакаҳои нейронӣ истифода шавад, аммо ҳанӯз маъмул набуд. Соли 1985 Дэвид Румелҳарт, Ҷеффри Ҳинтон ва Роналд Уилямс мақолае нашр карданд, ки таҳлил мекард: паҳнкунии баръакс чӣ гуна ба шабакаҳои нейронӣ имкон медиҳад, ки намоишҳои муфиди дохилӣ-ро омӯзанд. Натиҷаҳо чунон таъсирбахш буданд, ки ин усул зуд дар соҳа маъмул гардид. Беш аз 40 сол баъд ҳам он то ҳол бо фарқи калон маъмултарин усули омӯзонидани шабакаҳои нейронӣ мебошад.

Биёед кори паҳнкунии баръаксро боз, ин дафъа муфассалтар, баррасӣ кунем:

  1. Алгоритм дар ҳар қадам як минибаста-ро коркард мекунад ва аз тамоми маҷмӯи омӯзишӣ чандин бор мегузарад. Агар ҳар минибаста 32 намуна ва ҳар намуна 100 хусусият дошта бошад, минибаста ҳамчун матритсаи дорои 32 сатр ва 100 сутун ифода мешавад. Ҳар як гузар аз тамоми маҷмӯи омӯзишӣ эпоха ном дорад.
  2. Барои ҳар минибаста алгоритм бо муодилаи 9.2 баромади ҳамаи нейронҳои қабати якуми пинҳониро ҳисоб мекунад. Агар қабат 50 нейрон дошта бошад, баромади он матритсаест бо як сатр барои ҳар намунаи минибаста, масалан, 32 сатр, ва 50 сутун — яктоӣ барои ҳар нейрон. Ин матритса ба қабати навбатӣ дода мешавад, баромади он ҳисоб шуда, ба қабати баъдӣ мегузарад ва ҳамин тавр то гирифтани баромади қабати охирин — қабати баромадӣ — идома меёбад. Ин гузар ба пеш аст. Он маҳз ба пешгӯӣ кардан монанд мебошад, аммо ҳамаи натиҷаҳои мобайнӣ нигоҳ дошта мешаванд, зеро барои гузар ба ақиб лозиманд.
  3. Сипас алгоритм хатои баромади шабакаро чен мекунад: функсияи талафот баромади мақсаднокро бо баромади воқеӣ муқоиса карда, ягон меъёри хаторо бармегардонад.
  4. Баъд муайян мекунад, ки ҳар параметри қабати баромадӣ ба хато чӣ қадар саҳм гузоштааст. Ин ба таври таҳлилӣ бо қоидаи занҷирӣ, яке аз қоидаҳои асосии ҳисоби дифференсиалӣ, иҷро мешавад. Аз ин рӯ, қадам тез ва дақиқ аст. Натиҷа барои ҳар параметр як градиент мебошад.
  5. Алгоритм боз бо қоидаи занҷирӣ муайян мекунад, ки аз ин саҳмҳои хато чӣ қадар ба ҳар пайвасти қабати поёнӣ рост меояд. Он ба самти ақиб ҳаракат карда, то қабати вурудӣ мерасад. Чунон ки шарҳ додем, ин гузари баръакс градиенти хаторо барои ҳамаи вазнҳои пайвастҳо ва ҷойивазкуниҳои шабака самаранок ҳисоб мекунад: градиенти хато аз шабака ба ақиб паҳн мешавад. Номи алгоритм низ аз ҳамин ҷо омадааст.
  6. Ниҳоят, алгоритм бо истифода аз градиентҳои навҳисобшуда як қадами поёнравии градиентиро иҷро мекунад, то ҳамаи вазнҳои пайвастҳо ва узвҳои ҷойивазкунии шабакаро ислоҳ кунад.

Огоҳӣ. Вазнҳои ҳамаи пайвастҳои қабатҳои пинҳонӣ бояд ба таври тасодуфӣ ибтидодиҳӣ шаванд, вагарна омӯзиш ноком мешавад. Масалан, агар ҳамаи вазнҳо ва ҷойивазкуниҳоро сифр гузоред, ҳамаи нейронҳои як қабат комилан яксон мешаванд. Паҳнкунии баръакс низ ба ҳамаи онҳо як хел таъсир мекунад ва онҳо яксон мемонанд. Ба ибораи дигар, ҳарчанд дар ҳар қабат садҳо нейрон дошта бошед ҳам, модел мисли он рафтор мекунад, ки дар ҳар қабат танҳо як нейрон дорад: он чандон зирак намешавад. Аммо ибтидодиҳии тасодуфии вазнҳо симметрияро мешиканад ва имкон медиҳад, ки паҳнкунии баръакс гурӯҳи гуногуни нейронҳоро омӯзонад.

Ҳамин тавр, паҳнкунии баръакс барои як минибаста пешгӯӣ мекунад — гузар ба пеш; хаторо чен мекунад; аз ҳар қабат ба самти баръакс гузашта, саҳми ҳар параметрро ба хато муайян мекунад — гузар ба ақиб; ва дар охир барои кам кардани хато вазнҳо ва ҷойивазкуниҳоро тағйир медиҳад — қадами поёнравии градиентӣ.

Барои дуруст кор кардани backprop, Румелҳарт ва ҳамкоронаш дар меъмории MLP тағйироти муҳим ворид карданд: функсияи зинагиро бо функсияи логистикӣ, ки сигмоид низ ном дорад, иваз намуданд:

σ(z) = 1 / (1 + exp(−z)).

Ин зарур буд, зеро функсияи зинагӣ танҳо аз порчаҳои ҳамвор иборат аст ва градиенте надорад, ки бо он кор кунем: поёнравии градиентӣ дар сатҳи ҳамвор ҳаракат карда наметавонад. Аммо сигмоид дар ҳама ҷо ҳосилаи муайяни ғайрисифрӣ дорад, ки ба поёнравии градиентӣ имкон медиҳад дар ҳар қадам андаке пеш равад. Дар асл, алгоритми паҳнкунии баръакс бо бисёр функсияҳои дигари фаъолсозӣ низ хуб кор мекунад, на танҳо бо сигмоид. Ду интихоби маъмули дигар инҳоянд:

Функсияи тангенси гиперболӣ

tanh(z) = 2σ(2z) − 1.

Ин функсия, мисли сигмоид, S-шакл, бефосила ва дифференсиалшаванда аст. Аммо қимати баромадаш аз −1 то 1 тағйир меёбад, дар ҳоле ки барои сигмоид аз 0 то 1 аст. Ба шарофати ин фосила, дар оғози омӯзиш баромади ҳар қабат одатан каму беш дар атрофи 0 марказ мегирад ва ин аксаран ҳамгароиро тезтар мекунад.

Функсияи воҳиди хаттии ислоҳшуда — ReLU

ReLU(z) = max(0, z).

Функсияи ReLU бефосила аст, аммо мутаассифона дар z = 0 дифференсиалшаванда нест: нишебӣ ногаҳон тағйир меёбад ва ин метавонад боиси ҷаҳишҳои поёнравии градиентӣ гардад. Барои z < 0 ҳосилаи он 0 аст. Бо вуҷуди ин, дар амал хеле хуб кор мекунад ва зуд ҳисоб мешавад. Аз ин рӯ, дар аксари меъмориҳо ба интихоби пешфарз табдил ёфтааст, ба истиснои меъмории Transformer, ки онро дар боби 15 мебинем. Ҳамчунин, надоштани ҳадди болоии баромад ба кам кардани баъзе мушкилоти поёнравии градиентӣ ёрӣ мерасонад; дар боби 11 ба ин бармегардем.

Ин функсияҳои маъмули фаъолсозӣ ва ҳосилаҳояшон дар расми 9.8 нишон дода шудаанд. Аммо як лаҳза! Умуман, чаро ба функсияҳои фаъолсозӣ ниёз дорем? Агар чанд табдили хаттиро пайдарпай татбиқ кунед, натиҷа боз ҳам як табдили хаттӣ мешавад. Масалан, агар f(x) = 2x + 3 ва g(x) = 5x − 1 бошанд, пайдарпай татбиқ кардани онҳо боз функсияи хаттӣ медиҳад:

f(g(x)) = 2(5x − 1) + 3 = 10x + 1.

Пас, агар байни қабатҳо ғайрихаттӣ будан вуҷуд надошта бошад, ҳатто силсилаи амиқи қабатҳо ба як қабат баробар аст. Бо ин роҳ масъалаҳои бисёр мураккабро ҳал карда наметавонед. Баръакс, DNN-и ба қадри кофӣ калон бо функсияҳои фаъолсозии ғайрихаттӣ метавонад аз ҷиҳати назариявӣ ҳар функсияи бефосиларо тақриб кунад.

Функсияҳои фаъолсозӣ ва ҳосилаҳои онҳо Расми 9.8. Функсияҳои фаъолсозӣ дар тарафи чап ва ҳосилаҳои онҳо дар тарафи рост.

Акнун медонед, ки шабакаҳои нейронӣ аз куҷо пайдо шудаанд, меъмории MLP чӣ гуна аст ва баромадҳояшро чӣ гуна ҳисоб мекунад. Бо алгоритми паҳнкунии баръакс низ шинос шудед. Вақти он расид, ки MLP-ҳоро дар амал бинем!

Сохтан ва омӯзонидани MLP бо Scikit-Learn

MLP-ҳо вазифаҳои гуногунро ҳал карда метавонанд, вале маъмултаринашон регрессия ва тасниф мебошанд. Scikit-Learn дар ҳар ду ҳолат ба мо ёрӣ мерасонад. Аз регрессия оғоз мекунем.

MLP барои регрессия

Барои вазифаи регрессия MLP-ро чӣ гуна месозем? Агар як қиматро пешгӯӣ кардан хоҳед, масалан, нархи хонаро аз рӯйи хусусиятҳои зиёди он, танҳо як нейрони баромадӣ лозим аст: баромади он қимати пешгӯишуда мебошад. Барои регрессияи чандтағйирёбанда, яъне пешгӯии якчанд қимат дар як вақт, ба ҳар андозаи баромад як нейрон лозим мешавад. Масалан, барои ёфтани маркази объект дар тасвир бояд координатаҳои дученакаро пешгӯӣ кунед, пас ду нейрони баромадӣ лозим аст. Агар хоҳед дар гирди объект чорчӯбаи маҳдудкунанда низ гузоред, ду адади дигар — паҳно ва баландии объект — лозим мешаванд. Ҳамин тавр, дар маҷмӯъ чор нейрони баромадӣ хоҳед дошт.

Scikit-Learn синфи MLPRegressor дорад. Биёед бо он MLP-е бисозем, ки се қабати пинҳонӣ ва дар ҳар кадом 50 нейрон дошта бошад ва онро бо маҷмӯи додаҳои манзили Калифорния омӯзонем. Барои содагӣ додаҳоро бо функсияи fetch_california_housing()-и Scikit-Learn бор мекунем. Ин маҷмӯа аз маҷмӯи боби 2 содатар аст, зеро танҳо хусусиятҳои ададӣ дорад — хусусияти ocean_proximity вуҷуд надорад — ва қиматҳои гумшуда низ нестанд. Қиматҳои ҳадаф низ хурдмиқёс шудаанд: ҳар воҳид 100 000 долларро ифода мекунад. Аввал ҳамаи чизҳои лозимаро ворид мекунем:

from sklearn.datasets import fetch_california_housing
from sklearn.metrics import root_mean_squared_error
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPRegressor
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler

Сипас маҷмӯи додаҳои манзили Калифорнияро гирифта, онро ба маҷмӯаҳои омӯзишӣ ва санҷишӣ тақсим мекунем:

housing = fetch_california_housing()
X_train, X_test, y_train, y_test = train_test_split(
    housing.data, housing.target, random_state=42)

Акнун модели MLPRegressor-ро бо се қабати пинҳонӣ месозем, ки ҳар кадом 50 нейрон дорад. Андозаи вуруди қабати якуми пинҳонӣ, яъне шумораи сатрҳои матритсаи вазнҳои он, ва андозаи баромади қабати баромадӣ, яъне шумораи сутунҳои матритсаи вазнҳои он, ҳангоми оғози омӯзиш мутаносибан ба андозанокии вурудҳо ва ҳадафҳо худкор мутобиқ мешаванд. Модел дар ҳамаи қабатҳои пинҳонӣ ReLU-ро истифода мебарад ва дар қабати баромадӣ умуман функсияи фаъолсозӣ надорад. Ҳамчунин, verbose=True мегузорем, то ҳангоми омӯзиш маълумоти муфассали пешрафти моделро гирем:

mlp_reg = MLPRegressor(hidden_layer_sizes=[50, 50, 50], early_stopping=True,
                       verbose=True, random_state=42)

Азбаски шабакаҳои нейронӣ метавонанд параметрҳои зиёд дошта бошанд, ба аз ҳад мутобиқшавӣ (overfitting) ба маҷмӯи омӯзишӣ майл доранд. Яке аз роҳҳои кам кардани ин хатар қатъи барвақт (early stopping) аст, ки дар боби 4 муаррифӣ шуд. Вақте early_stopping=True мегузорем, синфи MLPRegressor ба таври худкор 10%-и додаҳои омӯзиширо ҷудо мекунад ва дар ҳар эпоха барои арзёбии модел истифода мебарад. Андозаи ин маҷмӯи тасдиқиро бо validation_fraction тағйир додан мумкин аст. Агар холҳои тасдиқӣ дар давоми 10 эпоха беҳтар нашаванд, омӯзиш худкор қатъ мешавад. Ин шумораи эпохаҳоро бо n_iter_no_change тағйир додан мумкин аст.

Акнун занҷираи коркард — pipeline — месозем, то хусусиятҳои вурудӣ пеш аз ба MLPRegressor додан стандартизатсия шаванд. Ин бисёр муҳим аст, зеро, чунон ки дар боби 4 дидем, ҳангоми хеле фарқ кардани миқёси хусусиятҳо поёнравии градиентӣ хуб ҳамгаро намешавад. Баъд моделро меомӯзонем! Синфи MLPRegressor барои кам кардани хатои миёнаи квадратӣ аз варианти поёнравии градиентӣ бо номи Adam истифода мебарад; ба боби 11 нигаред. Он ҳамчунин каме мунтазамсозии ℓ₂ истифода мекунад. Қувваи онро бо гиперпараметри alpha идора кардан мумкин аст, ки қимати пешфарзаш 0.0001 мебошад:

>>> pipeline = make_pipeline(StandardScaler(), mlp_reg)
>>> pipeline.fit(X_train, y_train)
Iteration 1, loss = 0.85190332
Validation score: 0.534299
Iteration 2, loss = 0.28288639
Validation score: 0.651094
[...]
Iteration 45, loss = 0.12960481
Validation score: 0.788517
Validation score did not improve more than tol=0.000100 for 10 consecutive
epochs. Stopping.

Инак, аввалин MLP-и худро омӯзондед! Барои он 45 эпоха лозим шуд ва, чунон ки мебинед, талафоти омӯзишӣ дар ҳар эпоха кам гардид. Паёми охирин мегӯяд, ки дар 10 эпохаи пайдарпай беҳбудии холҳои тасдиқӣ аз tol=0.000100 зиёд набуд ва омӯзиш қатъ шуд.

Ин талафот ба муодилаи 4.9, ки ба 2 тақсим шудааст, мувофиқ меояд. Барои ба даст овардани MSE бояд онро ба 2 зарб кунед, ҳарчанд натиҷа комилан дақиқ нест, зеро талафот узви мунтазамсозии ℓ₂-ро низ дар бар мегирад. Холҳои тасдиқӣ дар маҷмӯъ дар ҳар эпоха зиёд мешуданд. Мисли ҳар модели регрессияи Scikit-Learn, MLPRegressor барои арзёбӣ ба таври пешфарз аз холи R² истифода мебарад. Методи score() ҳаминро бармегардонад. Чунон ки дар боби 2 дидем, R² ҳиссаи дисперсияеро чен мекунад, ки модел шарҳ медиҳад. Дар ин ҳолат он дар маҷмӯи тасдиқӣ қариб ба 80% мерасад, ки барои ин вазифа натиҷаи хуб аст:

>>> mlp_reg.best_validation_score_
0.791536125425778

Биёед RMSE-ро дар маҷмӯи санҷишӣ арзёбӣ кунем:

>>> y_pred = pipeline.predict(X_test)
>>> rmse = root_mean_squared_error(y_test, y_pred)
>>> rmse
0.5327699946812925

RMSE-и санҷишӣ тақрибан 0.53 баромад. Ин ба натиҷае монанд аст, ки аз модели регрессияи ҷангали тасодуфӣ мегирифтед. Барои кӯшиши аввал бад нест! Дар расми 9.9 пешгӯиҳои модел нисбат ба ҳадафҳо дар маҷмӯи санҷишӣ нишон дода шудаанд. Хати канда-кандаи сурх пешгӯиҳои беҳтаринро ифода мекунад, яъне вақте онҳо ба ҳадафҳо баробаранд. Аксари пешгӯиҳо ба ҳадафҳо наздиканд, вале ҳанӯз хатоҳои зиёде ҳастанд, махсусан барои ҳадафҳои калонтар.

Пешгӯиҳои модели регрессияи MLP Расми 9.9. Пешгӯиҳои модели регрессияи MLP нисбат ба қиматҳои ҳадаф.

Диққат диҳед, ки ин MLP барои қабати баромадӣ ягон функсияи фаъолсозиро истифода намебарад, аз ин рӯ метавонад ҳар гуна қиматро барорад. Умуман ин қобили қабул аст. Аммо агар хоҳед, ки баромад ҳамеша мусбат бошад, бояд дар қабати баромадӣ ReLU ё softplus-ро истифода баред. Softplus варианти ҳамвори ReLU мебошад:

softplus(z) = log(1 + exp(z)).

Вақте z манфӣ аст, softplus ба 0 наздик мешавад ва ҳангоми мусбат будани z ба худи z наздик аст. Ниҳоят, агар хоҳед пешгӯиҳо ҳамеша дар фосилаи муайян бошанд, бояд сигмоид ё тангенси гиперболиро истифода бурда, ҳадафҳоро ба фосилаи мувофиқ миқёс диҳед: аз 0 то 1 барои сигмоид ва аз −1 то 1 барои tanh. Мутаассифона, синфи MLPRegressor функсияҳои фаъолсозиро дар қабати баромадӣ дастгирӣ намекунад.

Огоҳӣ. Scikit-Learn суръатбахшӣ бо GPU-ро пешниҳод намекунад ва имкониятҳои он барои шабакаҳои нейронӣ нисбатан маҳдуданд. Аз ҳамин сабаб, аз боби 10 ба PyTorch мегузарем. Бо вуҷуди ин, қобилияти сохтану омӯзонидани MLP-и маъмулӣ бо ҳамагӣ чанд сатри код дар Scikit-Learn хеле қулай аст: шумо метавонед бисёр вазифаҳои мураккабро зуд ҳал кунед.

Умуман, хатои миёнаи квадратӣ — MSE барои вазифаҳои регрессия функсияи муносиби талафот аст. Аммо агар дар маҷмӯи омӯзишӣ қиматҳои дур аз дигар додаҳо — outliers — зиёд бошанд, баъзан истифодаи хатои миёнаи мутлақ — MAE, ё беҳтараш талафоти Ҳубер, муносибтар аст. Талафоти Ҳубер омезиши ҳар ду мебошад: вақте хато аз остонаи δ, одатан 1, хурдтар аст, он квадратӣ мебошад; вақте хато аз δ калонтар аст, хаттӣ мешавад. Қисми хаттӣ онро нисбат ба MSE ба қиматҳои дур камтар ҳассос мекунад. Қисми квадратӣ имкон медиҳад, ки нисбат ба MAE тезтар ҳамгаро ва дақиқтар шавад. Мутаассифона, MLPRegressor танҳо талафоти MSE-ро дастгирӣ мекунад.

Ҷадвали 9.1 меъмории маъмулии MLP барои регрессияро ҷамъбаст мекунад.

Ҷадвали 9.1. Меъмории маъмулии MLP барои регрессия

ГиперпараметрҚимати маъмулӣ
Шумораи қабатҳои пинҳонӣБа масъала вобаста аст, аммо одатан аз 1 то 5
Шумораи нейронҳо дар ҳар қабати пинҳонӣБа масъала вобаста аст, аммо одатан аз 10 то 100
Шумораи нейронҳои баромадӣЯкто барои ҳар андозаи ҳадаф
Фаъолсозии қабатҳои пинҳонӣReLU
Фаъолсозии баромадҲеҷ кадом; ё ReLU/softplus барои баромадҳои мусбат; ё sigmoid/tanh барои баромадҳои маҳдуд
Функсияи талафотMSE; ё Ҳубер, агар қиматҳои дур мавҷуд бошанд

Хуб, MLP-ҳо вазифаҳои регрессияро ҳал мекунанд. Боз чӣ кор карда метавонанд?

MLP барои тасниф

MLP-ҳоро барои вазифаҳои тасниф низ истифода бурдан мумкин аст. Барои таснифи дуӣ танҳо як нейрони баромадӣ бо функсияи фаъолсозии сигмоид лозим аст. Баромад ададе аз 0 то 1 мешавад, ки онро ҳамчун эҳтимолияти тахминии синфи мусбат тафсир кардан мумкин аст. Эҳтимолияти тахминии синфи манфӣ ба 1 тарҳи ин адад баробар мебошад.

MLP-ҳо таснифи дуии чандтамғаӣ-ро низ ба осонӣ иҷро мекунанд; ба боби 3 нигаред. Масалан, низоми таснифи почтаи электронӣ метавонад пешгӯӣ кунад, ки ҳар номаи воридшуда одӣ аст ё спам, ва ҳамзамон муайян кунад, ки он фаврӣ аст ё ғайрифаврӣ. Дар ин ҳолат ду нейрони баромадӣ лозим мешавад, ки ҳар ду сигмоидро истифода мебаранд: якум эҳтимолияти спам будани номаро мебарорад ва дуюм эҳтимолияти фаврӣ будани онро. Умуман, барои ҳар синфи мусбат як нейрони баромадӣ ҷудо мекунед.

Диққат диҳед, ки ҷамъи эҳтимолиятҳои баромад ҳатман 1 намешавад. Ин имкон медиҳад, ки модел ҳар омезиши тамғаҳоро барорад: номаи одии ғайрифаврӣ, номаи одии фаврӣ, спами ғайрифаврӣ ва шояд ҳатто спами фаврӣ, ҳарчанд ҳолати охирин эҳтимол хато бошад.

Агар ҳар намуна аз се ё зиёда синфи имконпазир танҳо ба як синф тааллуқ дошта бошад, масалан, синфҳои аз 0 то 9 барои таснифи тасвири рақамҳо, барои ҳар синф як нейрони баромадӣ лозим аст. Дар тамоми қабати баромадӣ бояд функсияи фаъолсозии softmax-ро истифода баред; ба расми 9.10 нигаред. Softmax, ки дар боби 4 муаррифӣ шуд, кафолат медиҳад, ки ҳамаи эҳтимолиятҳои тахминӣ аз 0 то 1 бошанд ва ҷамъашон 1 шавад, зеро синфҳо ҳамдигарро истисно мекунанд. Чунон ки дар боби 3 дидем, ин таснифи чандсинфӣ ном дорад.

Азбаски мо тақсимоти эҳтимолиятҳоро пешгӯӣ мекунем, талафоти энтропияи салибӣ (cross-entropy loss), ё кӯтоҳ x-entropy ва log loss, одатан интихоби муносиб аст; ба боби 4 нигаред.

MLP-и муосир барои тасниф Расми 9.10. MLP-и муосир барои тасниф, бо ReLU ва softmax.

Ҷадвали 9.2 меъмории маъмулии MLP барои таснифро ҷамъбаст мекунад.

Ҷадвали 9.2. Меъмории маъмулии MLP барои тасниф

ГиперпараметрТаснифи дуӣТаснифи дуии чандтамғаӣТаснифи чандсинфӣ
Шумораи қабатҳои пинҳонӣОдатан аз 1 то 5, вобаста ба вазифаОдатан аз 1 то 5, вобаста ба вазифаОдатан аз 1 то 5, вобаста ба вазифа
Шумораи нейронҳои баромадӣ1Якто барои ҳар тамғаи дуӣЯкто барои ҳар синф
Фаъолсозии қабати баромадӣSigmoidSigmoidSoftmax
Функсияи талафотЭнтропияи салибӣЭнтропияи салибӣЭнтропияи салибӣ

Чунон ки шояд интизор будед, Scikit-Learn дар бастаи sklearn.neural_network синфи MLPClassifier-ро пешниҳод мекунад. Онро барои таснифи дуӣ ё чандсинфӣ истифода бурдан мумкин аст. Он қариб ба синфи MLPRegressor яксон аст, аммо қабати баромадиаш softmax-ро истифода мебарад ва ба ҷойи MSE талафоти энтропияи салибиро кам мекунад. Ғайр аз ин, методи score() ба ҷойи холи R² саҳеҳии тасниф-и моделро бармегардонад. Биёед онро бисанҷем.

Метавонистем маҷмӯи додаҳои савсанро истифода барем, вале он барои шабакаи нейронӣ хеле сода аст: модели хаттӣ ҳам ҳамон қадар хуб кор мекард ва хавфи аз ҳад мутобиқшавиро надошт. Пас, вазифаи мураккабтар — Fashion MNIST-ро — интихоб мекунем. Он ивазкунандаи мустақими MNIST аст, ки дар боби 3 муаррифӣ шуд. Форматаш маҳз ба MNIST монанд мебошад: 70 000 тасвири хокистарранги андозаи 28 × 28 пиксел бо 10 синф. Аммо тасвирҳо ба ҷойи рақамҳои дастнавис ашёи либосу пойафзолро нишон медиҳанд. Аз ин рӯ, ҳар синф гуногунтар буда, масъала нисбат ба MNIST хеле душвортар мешавад. Масалан, модели содаи хаттӣ дар MNIST тақрибан 92% саҳеҳӣ мегирад, вале дар Fashion MNIST ҳамагӣ тақрибан 83%. Биёед бубинем, ки бо MLP натиҷаи беҳтар гирифта метавонем ё не.

Аввал маҷмӯаро бо функсияи fetch_openml() бор мекунем, тақрибан ҳамон тавре ки дар боби 3 барои MNIST карда будем. Қиматҳои ҳадаф ҳамчун сатрҳои '0', '1', …, '9' дода шудаанд, бинобар ин онҳоро ба ададҳои бутун табдил медиҳем:

from sklearn.datasets import fetch_openml

fashion_mnist = fetch_openml(name="Fashion-MNIST", as_frame=False,
                             parser="liac-arff")
targets = fashion_mnist.target.astype(int)

Эзоҳи тарҷумон. Дар манбаъ parser="liac-arff" нест. Бе он Scikit-Learn 1.9 бо pandas 3 ҳангоми боркунӣ хатои TypeError: expected string or bytes-like object, got 'int' медиҳад; бо ин параметр ҳамон додаҳо бор мешаванд.

Додаҳо аллакай ба таври тасодуфӣ омехта шудаанд. Аз ин рӯ, 60 000 тасвири аввалро барои омӯзиш ва 10 000 тасвири охирро барои санҷиш мегирем:

X_train, y_train = fashion_mnist.data[:60_000], targets[:60_000]
X_test, y_test = fashion_mnist.data[60_000:], targets[60_000:]

Ҳар тасвир ҳамчун массиви якченакаи ададҳои бутун ифода мешавад, ки 784 қимати шиддати пикселро аз 0 то 255 дар бар мегирад. Барои нишон додани тасвир метавонед plt.imshow()-ро истифода баред, аммо аввал бояд шакли массивро ба [28, 28] иваз кунед:

import matplotlib.pyplot as plt

X_sample = X_train[0].reshape(28, 28)  # Тасвири якуми маҷмӯи омӯзишӣ
plt.imshow(X_sample, cmap="binary")
plt.show()

Агар ин кодро иҷро кунед, бояд ниммӯзаеро бинед, ки дар кунҷи болоии рости расми 9.11 нишон дода шудааст.

Намунаҳои Fashion MNIST Расми 9.11. Чор намунаи аввал аз ҳар синфи Fashion MNIST.

Дар MNIST, агар тамға ба 5 баробар бошад, ин маънои онро дорад, ки тасвир рақами дастнависи 5-ро нишон медиҳад. Ҳамааш равшан аст. Аммо барои Fashion MNIST бояд рӯйхати номҳои синфҳоро дошта бошем, то фаҳмем, ки бо чӣ сарукор дорем. Scikit-Learn онро пешниҳод намекунад, пас худамон месозем:

class_names = ["T-shirt/top", "Trouser", "Pullover", "Dress", "Coat",
               "Sandal", "Shirt", "Sneaker", "Bag", "Ankle boot"]

Маънои номҳо, бо ҳамин тартиб: футболка/болопӯш, шим, пуловер, куртаи занона, палто, сандал, курта, пойафзоли варзишӣ, ҷузвдон ва ниммӯза.

Акнун тасдиқ карда метавонем, ки тасвири якуми маҷмӯи омӯзишӣ ниммӯзаро нишон медиҳад:

>>> class_names[y_train[0]]
'Ankle boot'

Ҳоло барои сохтани MLP-и таснифгар омодаем:

from sklearn.neural_network import MLPClassifier
from sklearn.preprocessing import MinMaxScaler

mlp_clf = MLPClassifier(hidden_layer_sizes=[300, 100], verbose=True,
                        early_stopping=True, random_state=42)
pipeline = make_pipeline(MinMaxScaler(), mlp_clf)
pipeline.fit(X_train, y_train)
accuracy = pipeline.score(X_test, y_test)

Ин код ба коди регрессияи пешина хеле монанд аст, вале чанд фарқ дорад:

  • Албатта, ин вазифаи тасниф аст, аз ин рӯ, ба ҷойи MLPRegressor аз MLPClassifier истифода мебарем.
  • Танҳо ду қабати пинҳонӣ дорем, ки мутаносибан 300 ва 100 нейрон доранд. Агар хоҳед, шумораи дигари қабатҳои пинҳонӣ ва нейронҳоро санҷида метавонед.
  • Ба ҷойи StandardScaler аз MinMaxScaler истифода мебарем. Он шиддати пикселҳоро аз фосилаи 0–255 ба фосилаи 0–1 меорад. Хусусиятҳо дар ин фосила одатан бо гиперпараметрҳои пешфарзи MLPClassifier, аз ҷумла суръати омӯзиш ва миқёси ибтидодиҳии вазнҳо, беҳтар кор мекунанд. Шояд пурсед: чаро StandardScaler-ро истифода набурдем? Баъзе пикселҳо дар тасвирҳои гуногун чандон тағйир намеёбанд. Масалан, пикселҳои атрофи канорҳо қариб ҳамеша сафеданд. Агар StandardScaler истифода барем, миқёси онҳо чунон калон мешавад, ки дисперсияашон ба дисперсияи ҳамаи пикселҳои дигар баробар гардад. Дар натиҷа ба ин пикселҳо аз андозаи лозим бештар аҳаммият медиҳем. Барои тасвирҳо MinMaxScaler аксаран аз StandardScaler беҳтар кор мекунад, ҳарчанд дар ҳолати шумо натиҷа метавонад дигар бошад.
  • Ниҳоят, функсияи score() саҳеҳии таснифи моделро бармегардонад.

Агар кодро иҷро кунед, мебинед, ки модел ҳангоми омӯзиш дар маҷмӯи тасдиқӣ тақрибан ба 90.2% саҳеҳӣ мерасад. Қимати дақиқро mlp_clf.best_validation_score_ медиҳад. Аммо дар охир модел андаке аз ҳад мутобиқ шудан мегирад ва саҳеҳии тасдиқии даври охир ҳамагӣ 89.9% мешавад. Дар маҷмӯи санҷишӣ accuracy тақрибан 89.3% аст (рақамҳо вобаста ба компютер ва версияи китобхонаҳо андаке фарқ карда метавонанд). Барои ин вазифа натиҷаи бад нест, ҳарчанд бо меъмориҳои дигари шабакаи нейронӣ, аз қабили шабакаҳои нейронии конволютсионӣ дар боби 12, беҳтар кор карда метавонем.

Эҳтимол пай бурдед, ки омӯзиш хеле суст буд. Сабаб ин аст, ки қабатҳои пинҳонӣ параметрҳои зиёд доранд ва дар ҳар такрор ҳисобҳои зиёдеро иҷро кардан лозим аст. Масалан, қабати якуми пинҳонӣ 784 × 300 вазни пайваст ва 300 узви ҷойивазкунӣ дорад. Дар маҷмӯъ 235 500 параметр! Ҳамаи ин параметрҳо ба модел барои мутобиқ шудан ба додаҳои омӯзишӣ чандирии зиёд медиҳанд. Аммо ин ҳам маънои онро дорад, ки хавфи аз ҳад мутобиқшавӣ баланд аст, махсусан вақте додаҳои омӯзишӣ каманд. Дар чунин ҳолат истифодаи усулҳои мунтазамсозӣ, масалан, қатъи барвақт ва мунтазамсозии ℓ₂, муфид шуда метавонад.

Баъди омӯзиш моделро барои таснифи тасвирҳои нав истифода бурдан мумкин аст:

>>> X_new = X_test[:15]  # Фарз мекунем, ки инҳо 15 тасвири наванд
>>> pipeline.predict(X_new)
array([9, 2, 1, 1, 6, 1, 4, 6, 5, 7, 4, 5, 5, 3, 4])

Пешгӯиро аз pipeline мегирем, на аз mlp_clf: танҳо ҳамин тавр тасвирҳо пеш аз модел бо MinMaxScaler ба фосилаи 0–1 оварда мешаванд, мисли ҳангоми омӯзиш.

Ҳамаи ин пешгӯиҳо дурустанд, ба истиснои пешгӯии индекси 12: ба ҷойи 5, яъне сандал, бояд 7, яъне пойафзоли варзишӣ бошад. Шояд хоҳед бидонед, ки модел ба ин пешгӯиҳо, махсусан ба пешгӯии нодуруст, то чӣ андоза бовар дошт. Барои ин, мисли боби 3, ба ҷойи model.predict() аз model.predict_proba() истифода мебарем:

>>> y_proba = pipeline.predict_proba(X_new)
>>> y_proba[12].round(3)
array([0.   , 0.   , 0.   , 0.   , 0.   , 0.999, 0.   , 0.001, 0.   ,
       0.   ])

Ин чандон хуб нест: модел мегӯяд, ки 99.9% бовар дорад тасвир сандалро нишон медиҳад, яъне синфи индекси 5-ро. Пас, модел ҳам хато мекунад ва ҳам қариб комилан бовар дорад, ки ҳақ аст. Дар маҷмӯи санҷишӣ барои қариб 60%-и тасвирҳо боварии модел аз 99% зиёд аст ва 62 пешгӯии нодуруст низ бо чунин боварӣ карда шудаанд, ҳарчанд саҳеҳии умумии модел тақрибан 89% мебошад.

Эзоҳи тарҷумон. Дар манбаъ mlp_clf.predict() ва mlp_clf.predict_proba() бевосита ба пикселҳои хоми 0–255 татбиқ мешаванд, бе гузаштан аз MinMaxScaler. Аз ҳамин сабаб он ҷо саҳеҳии санҷишӣ 87.1%, пешгӯии «ҷузвдон» бо боварии 100% ва «ҳамагӣ 16 тасвир бо боварии камтар аз 99.9%» омадааст. Рақамҳои боло аз иҷрои ҳамин код бо pipeline (Scikit-Learn 1.6) гирифта шудаанд. Аз ҳамин сабаб, ба эҳтимолиятҳои тахминӣ бояд ҳамеша бо эҳтиёт муносибат кунед: шабакаҳои нейронӣ ба боварии аз ҳад зиёд майли қавӣ доранд, махсусан агар онҳоро андаке зиёда аз ҳад омӯзонед.

Маслиҳат. Ҳадафҳои вазифаҳои тасниф метавонанд индексҳои синфҳо, масалан, 3, ё эҳтимолиятҳои синфҳо бошанд. Одатан барои эҳтимолиятҳо векторҳои one-hot, яъне векторҳое бо як 1 ва боқимонда 0, истифода мешаванд. Масалан:

[0, 0, 0, 1, 0, 0, 0, 0, 0, 0]

Аммо агар модели шумо ба боварии аз ҳад зиёд майл дошта бошад, усули ҳамворсозии тамғаҳо (label smoothing)-ро санҷида метавонед: эҳтимолияти синфи ҳадафро каме коҳиш диҳед, масалан, аз 1 то 0.9, ва боқимондаро байни синфҳои дигар баробар тақсим кунед. Масалан:

[0.1/9, 0.1/9, 0.1/9, 0.9, 0.1/9, 0.1/9, 0.1/9, 0.1/9, 0.1/9, 0.1/9]

Бо вуҷуди ин, дар Fashion MNIST гирифтани қариб 90% саҳеҳӣ хеле хуб аст. Бо танзими дақиқтари гиперпараметрҳо метавонед натиҷаи боз ҳам беҳтар гиред. Масалан, мисли боби 2, RandomizedSearchCV-ро истифода баред. Аммо фазои ҷустуҷӯ хеле калон аст, бинобар ин донистани он ки тақрибан аз куҷо бояд ҷустуҷӯ кард, муфид мебошад.

Роҳнамо барои танзими гиперпараметрҳо

Чандирии шабакаҳои нейронӣ ҳамзамон яке аз камбудиҳои асосии онҳост: гиперпараметрҳои зиёдеро бояд танзим кард. Шумо на танҳо ҳар гуна меъмории тасаввуршавандаи шабакаро истифода бурда метавонед, балки ҳатто дар MLP-и сода низ шумораи қабатҳо, шумораи нейронҳо ва навъи функсияи фаъолсозии ҳар қабат, тарзи ибтидодиҳии вазнҳо, навъи оптимизатор, суръати омӯзиши он, андозаи баста ва бисёр чизҳои дигарро тағйир дода метавонед. Барои ин гиперпараметрҳо кадом қиматҳо муносибанд?

Шумораи қабатҳои пинҳонӣ

Барои бисёр масъалаҳо метавонед аз як қабати пинҳонӣ оғоз карда, натиҷаи қобили қабул гиред. MLP-и дорои танҳо як қабати пинҳонӣ аз ҷиҳати назариявӣ ҳатто функсияҳои мураккабтаринро моделсозӣ карда метавонад, ба шарте ки нейронҳои кофӣ дошта бошад. Аммо шабакаҳои амиқ нисбат ба шабакаҳои камқабата параметрҳоро хеле самараноктар истифода мебаранд: онҳо функсияҳои мураккабро бо шумораи нейронҳое моделсозӣ карда метавонанд, ки ба таври экспоненсиалӣ камтар аст. Ин имкон медиҳад, ки бо ҳамон миқдори додаҳои омӯзишӣ натиҷаи хеле беҳтар ба даст оранд.

Сабаб дар он аст, ки сохтори қабатии онҳо имкон медиҳад хусусиятҳо дар чанд сатҳ такроран истифода ва бо ҳам якҷоя шаванд. Масалан, қабати якуми таснифгари чеҳра метавонад хусусиятҳои сатҳи поён, ба монанди нуқтаҳо, камонҳо ва хатҳои ростро шиносад. Қабати дуюм метавонад аз ин хусусиятҳои сода хусусиятҳои сатҳи болотар, ба монанди мураббаъҳо ё доираҳо созад. Қабати сеюм онҳоро ба даҳон, чашм ё бинӣ муттаҳид мекунад. Қабати болоӣ бошад, аз ин хусусиятҳои сатҳи баланд барои таснифи чеҳраҳо истифода мебарад.

Ин меъмории иерархӣ на танҳо ба DNN ёрӣ медиҳад, ки ба ҳалли хуб тезтар ҳамгаро шавад, балки қобилияти умумият додани онро ба маҷмӯаҳои нави додаҳо низ беҳтар мекунад. Масалан, фарз кунед, ки аллакай моделеро барои шинохти чеҳраҳо дар тасвирҳо омӯзондаед ва ҳоло мехоҳед шабакаи навро барои шинохти тарзи ороиши мӯй омӯзонед. Метавонед бо истифодаи дубораи қабатҳои поёнии шабакаи якум ба омӯзиш оғози хуб диҳед. Ба ҷойи ибтидодиҳии тасодуфии вазнҳо ва ҷойивазкуниҳои чанд қабати аввали шабакаи нав, ба онҳо қиматҳои вазнҳо ва ҷойивазкуниҳои қабатҳои поёнии шабакаи якумро медиҳед. Ҳамин тавр, шабака дигар маҷбур намешавад ҳамаи сохторҳои сатҳи поёнро, ки дар аксари тасвирҳо ҳастанд, аз сифр омӯзад. Он бояд танҳо сохторҳои сатҳи болотарро, масалан, тарзи ороиши мӯйро омӯзад. Ин омӯзиши интиқолӣ (transfer learning) ном дорад.

Пас, барои бисёр масъалаҳо метавонед танҳо аз як ё ду қабати пинҳонӣ оғоз кунед ва шабака хеле хуб кор мекунад. Масалан, дар MNIST бо як қабати пинҳонии дорои чандсад нейрон ба осонӣ аз 97% бештар саҳеҳӣ гирифтан мумкин аст. Бо ду қабати пинҳонӣ ва ҳамон шумораи умумии нейронҳо, дар тақрибан ҳамон вақти омӯзиш, аз 98% бештар саҳеҳӣ мегиред. Барои масъалаҳои мураккабтар метавонед шумораи қабатҳои пинҳониро то замоне зиёд кунед, ки модел ба маҷмӯи омӯзишӣ аз ҳад мутобиқ шудан гирад.

Вазифаҳои ниҳоят мураккаб, аз қабили таснифи тасвирҳо дар миқёси бузург ё шинохти гуфтор, одатан шабакаҳои дорои даҳҳо қабатро талаб мекунанд, ё ҳатто садҳо қабатро, вале на қабатҳои пурра пайваст, чунон ки дар боби 12 хоҳед дид. Барои онҳо миқдори азими додаҳои омӯзишӣ лозим аст. Кам рӯй медиҳад, ки чунин шабакаҳоро аз сифр омӯзонед. Одатан қисматҳои шабакаи пешакӣ омӯзонидашудаи пешрафтаеро дубора истифода мебаранд, ки вазифаи монандро иҷро мекунад. Дар ин сурат омӯзиш хеле тезтар мегузарад ва додаҳои хеле камтарро талаб мекунад.

Шумораи нейронҳо дар ҳар қабати пинҳонӣ

Шумораи нейронҳои қабатҳои вурудӣ ва баромадиро навъи вуруд ва баромаде муайян мекунад, ки вазифаи шумо талаб мекунад. Масалан, вазифаи MNIST ба 28 × 28 = 784 вуруд ва 10 нейрони баромадӣ ниёз дорад.

Дар гузашта маъмул буд, ки андозаи қабатҳои пинҳониро ба шакли аҳром интихоб кунанд: дар ҳар қабати нав шумораи нейронҳо камтар мешуд. Мантиқаш ин буд, ки хусусиятҳои зиёди сатҳи поён метавонанд ба шумораи хеле камтари хусусиятҳои сатҳи баланд муттаҳид шаванд. Шабакаи маъмулии MNIST метавонист се қабати пинҳонӣ дошта бошад: якум 300 нейрон, дуюм 200 ва сеюм 100 нейрон. Аммо аз ин равиш асосан даст кашидаанд, зеро ба назар мерасад, ки шумораи яксони нейронҳо дар ҳамаи қабатҳои пинҳонӣ дар аксари ҳолатҳо ҳамон қадар хуб ё ҳатто беҳтар кор мекунад. Ғайр аз ин, ба ҷойи як гиперпараметр барои ҳар қабат, танҳо як гиперпараметрро танзим мекунед. Бо вуҷуди ин, вобаста ба маҷмӯи додаҳо, баъзан калонтар кардани қабати якуми пинҳонӣ нисбат ба дигарҳо муфид аст.

Мисли шумораи қабатҳо, метавонед шумораи нейронҳоро тадриҷан зиёд кунед, то шабака аз ҳад мутобиқ шудан гирад. Роҳи дигар ин аст, ки моделро бо қабатҳо ва нейронҳои андаке бештар аз эҳтиёҷ созед ва баъд аз қатъи барвақт ва усулҳои дигари мунтазамсозӣ истифода баред, то аз ҳад мутобиқшавиро пешгирӣ кунед.

Винсент Ванҳук, муҳаққиқи Waymo ва корманди пешини Google, инро равиши «шими ёзанда» номидааст: ба ҷойи он ки барои ёфтани шими комилан мувофиқи андозаатон вақт сарф кунед, шими калони ёзандаеро интихоб кунед, ки ба андозаи лозим хурд мешавад. Бо ин равиш аз қабатҳои тангкунанда — bottleneck layers — канора мегиред, ки метавонанд модели шуморо вайрон кунанд.

Дар ҳақиқат, агар қабат нейронҳои хеле кам дошта бошад, барои моделсозии робитаҳои мураккаб иқтидори ҳисоббарории кофӣ надорад. Ҳатто мумкин аст тавоноии кофии ифода надошта бошад, ки ҳамаи иттилооти муфиди вурудҳоро нигоҳ дорад. Масалан, агар PCA, ки дар боби 7 муаррифӣ шуд, ба маҷмӯи омӯзишии Fashion MNIST татбиқ кунед, мебинед, ки барои нигоҳ доштани 95%-и дисперсияи додаҳо 187 андоза лозим аст. Пас, агар шумораи нейронҳои қабати якуми пинҳониро аз ин зиёдтар, масалан, 200 гузоред, метавонед мутмаин бошед, ки он қабат ба гулӯгоҳи танг табдил намешавад. Аммо нейронҳоро низ аз ҳад зиёд илова кардан лозим нест, вагарна параметрҳои барои беҳинасозӣ зарурӣ хеле зиёд шуда, омӯзиш вақти бештар ва додаҳои бештарро талаб мекунад.

Маслиҳат. Умуман, зиёд кардани шумораи қабатҳо нисбат ба зиёд кардани шумораи нейронҳои ҳар қабат фоидаи бештар медиҳад.

Бо вуҷуди ин, қабатҳои тангкунанда ҳамеша бад нестанд. Масалан, маҳдуд кардани андозанокии қабатҳои аввали пинҳонӣ шабакаро маҷбур мекунад, ки танҳо муҳимтарин андозаҳоро нигоҳ дорад. Ин метавонад баъзе ғавғои додаҳоро бартараф кунад, вале аз ҳад нагузаред! Ҳамчунин, қабати тангкунанда дар наздикии қабати баромадӣ метавонад шабакаро водор созад, ки дар қабатҳои пешина намоишҳои хуби додаҳоро омӯзад, яъне иттилооти муфиди бештарро дар фазои камтар ҷой диҳад. Ин ба умумиятдиҳии шабака ёрӣ мерасонад ва худ аз худ низ барои омӯзиши намоишҳо муфид буда метавонад. Дар боби 18 ба ин бармегардем.

Суръати омӯзиш

Суръати омӯзиш гиперпараметри ниҳоят муҳим аст. Умуман, суръати беҳинаи омӯзиш тақрибан нисфи суръати ҳадди аксар мебошад, яъне суръате, ки болотар аз он алгоритми омӯзиш аз ҳамгароӣ берун меравад; инро дар боби 4 дидем. Яке аз роҳҳои ёфтани суръати муносиб чунин аст: моделро чандсад такрор омӯзонед, аз суръати бисёр паст, масалан, 10⁻⁵, оғоз карда, онро тадриҷан то қимати хеле баланд, масалан, 10, зиёд кунед.

Барои ин дар ҳар такрор суръати омӯзишро ба зарбкунандаи доимӣ зарб мекунанд. Масалан, барои дар 500 такрор аз 10⁻⁵ ба 10 расидан зарбкунанда чунин аст:

(10 / 10⁻⁵)^(1/500).

Агар вобастагии талафотро аз суръати омӯзиш тасвир кунед ва барои суръати омӯзиш миқёси логарифмӣ гиред, аввал бояд коҳиши талафотро бинед. Аммо баъди муддате суръати омӯзиш аз ҳад калон мешавад ва талафот якбора боло меравад. Суръати беҳина аксаран аз нуқтаи оғози афзоиши талафот андаке пасттар аст, одатан тақрибан 10 маротиба пасттар аз қимати суръат дар нуқтаи гардиш. Баъд метавонед моделро аз нав ибтидодиҳӣ карда, бо ин суръати муносиб ба таври маъмулӣ омӯзонед.

Маслиҳат. Дар Scikit-Learn суръати омӯзишро ҳангоми омӯзиш тағйир додан чандон осон нест. Моделро метавонед бо partial_fit() баста ба баста омӯзонед, тақрибан ҳамон тавре ки дар боби 4 бо SGDRegressor карда будем. Аммо оптимизатор як бор, дар даъвати аввали partial_fit(), сохта мешавад ва суръатро аз learning_rate_init танҳо ҳамон вақт мегирад, бинобар ин тағйир додани mlp.learning_rate_init байни даъватҳо ҳеҷ таъсир надорад. Барои оптимизатори пешфарзи Adam ба ҷойи он mlp._optimizer.learning_rate_init-ро пеш аз ҳар даъват нав кунед; ин атрибути дохилист ва дар версияҳои оянда метавонад тағйир ёбад.

Эзоҳи тарҷумон. Дар манбаъ гуфта мешавад, ки warm_start=True гузошта, бо partial_fit() омӯзонидан ва «танҳо суръатро дар ҳар такрор нав кардан» кифоя аст. Scikit-Learn (санҷида шуд дар версияи 1.6) қимати нави learning_rate_init-ро баъд аз даъвати аввали partial_fit() нодида мегирад.

Андозаи баста

Андозаи баста метавонад ба натиҷаи модел ва вақти омӯзиш таъсири назаррас расонад. Бартарии асосии бастаҳои калон дар он аст, ки суръатбахшҳои сахтафзорӣ, масалан, GPU, онҳоро самаранок коркард мекунанд; инро дар боби 10 мебинем. Пас, алгоритми омӯзиш дар як сония намунаҳои бештарро мебинад. Аз ин рӯ, бисёр муҳаққиқон ва мутахассисон тавсия медиҳанд, ки аз бузургтарин бастае истифода баред, ки дар VRAM, яъне хотираи GPU, ҷой мешавад.

Аммо як мушкил ҳаст: бастаҳои калон баъзан ба ноустувории омӯзиш оварда мерасонанд, махсусан дар моделҳои хурдтар ва аввали омӯзиш. Модели ҳосилшуда низ метавонад мисли модели бо бастаҳои хурд омӯзонидашуда ба додаҳои нав хуб умумият дода натавонад. Ян Лекун боре дар Twitter навишт: «Дӯстон намегузоранд дӯстонашон минибастаҳои аз 32 калонтарро истифода баранд». Ӯ ба мақолаи соли 2018-и Доминик Мастерс ва Карло Луски истинод мекард. Онҳо ба хулосае омада буданд, ки истифодаи бастаҳои хурд, аз 2 то 32, беҳтар аст, зеро бо вақти камтари омӯзиш моделҳои беҳтар медиҳанд.

Аммо пажӯҳишҳои дигар хулосаи баръакс доранд. Масалан, соли 2017 мақолаҳои Элад Ҳоффер ва ҳамкоронаш ва Прия Гоял ва ҳамкоронаш нишон доданд, ки истифодаи бастаҳои хеле калон, то 8192 намуна, бо усулҳои гуногун, аз ҷумла тадриҷан баланд кардани суръати омӯзиш дар оғоз (learning rate warmup), имконпазир аст. Яъне омӯзишро бо суръати хурд оғоз карда, баъд онро зиёд мекунанд. Ҳамин тавр, метавон вақти омӯзишро хеле кӯтоҳ кард, бе он ки дар қобилияти умумиятдиҳӣ фарқе ба вуҷуд ояд.

Пас, як стратегия чунин аст: аз бастаи калон, эҳтимол бо баландкунии тадриҷии суръати омӯзиш дар оғоз, истифода баред. Агар омӯзиш ноустувор бошад ё натиҷаи ниҳоӣ қонеъ накунад, бастаи хурдтарро санҷед.

Гиперпараметрҳои дигар

Агар захираи ҳисоббарорӣ ва вақти кофӣ дошта бошед, ду гиперпараметри дигари зеринро низ танзим карда метавонед:

Оптимизатор. Интихоби оптимизатори беҳтар аз поёнравии маъмулии градиентӣ бо минибастаҳо ва танзими гиперпараметрҳои он метавонад омӯзишро тезтар кунад ва баъзан натиҷаи беҳтар диҳад.

Функсияи фаъолсозӣ. Пештар дар ин боб тарзи интихоби онро баррасӣ кардем. Умуман, ReLU барои ҳамаи қабатҳои пинҳонӣ интихоби хуби пешфарз аст. Дар баъзе ҳолатҳо иваз кардани ReLU бо функсияи дигар муфид мешавад.

Маслиҳат. Суръати беҳинаи омӯзиш ба гиперпараметрҳои дигар, махсусан ба андозаи баста, вобаста аст. Аз ин рӯ, агар ягон гиперпараметрро тағйир диҳед, суръати омӯзишро ҳатман аз нав танзим кунед.

Барои шиносоӣ бо таҷрибаҳои беҳтари танзими гиперпараметрҳои шабакаи нейронӣ мақолаи хуби соли 2018-и Лесли Смитро бихонед. Китоби Deep Learning Tuning Playbook, ки муҳаққиқони Google навиштаанд, низ шоистаи мутолиа аст. Китоби электронии ройгони Эндрю Нг — Machine Learning Yearning — ҳам маслиҳатҳои амалии зиёде дорад.

Ниҳоят, ба шумо сахт тавсия медиҳам, ки бо TensorFlow Playground кор карда бинед. Ин интерфейси хуби вебӣ бе навиштани код имкон медиҳад, ки меъмориҳои гуногуни шабакаи нейрониро санҷед ва баромадҳояшонро бинед. Ин барои беҳтар фаҳмидани MLP ва пайдо кардани дарки ҳиссии таъсири ҳар гиперпараметр — шумораи қабатҳо ва нейронҳо, функсияҳои фаъолсозӣ ва ғайра — хеле муфид аст.

Бо ҳамин муқаддимаи мо ба шабакаҳои нейронии сунъӣ ва татбиқи онҳо бо Scikit-Learn анҷом меёбад. Дар боби оянда ба PyTorch, китобхонаи пешсафи дорои коди кушода барои шабакаҳои нейронӣ, мегузарем. Аз он истифода мебарем, то бо баҳрабардорӣ аз тавоноии воҳидҳои коркарди графикӣ — GPU — MLP-ҳоро хеле тезтар омӯзонем ва иҷро кунем. Ҳамчунин ба сохтани моделҳои мураккабтаре оғоз мекунем, ки чанд вуруд ва чанд баромад доранд.

пешина
аз 20
навбатӣ