Машинное обучение
Svertiochnye neironnye seti (CNN)
V 2012 godu nejronnaja set' vpervye razgromila klassicheskie algoritmy v raspoznavanii izobrazhenij - s otsryvom v 10 protsentnyh punktov, chto shokirovalo vsjo soobshhestvo. I vsja eta set' byla postroena na trjoh prostjyh idejah: skol'zjashhij fil'tr (svjortka), vybor maksimuma iz okna (pooling), i slozhenie prostykh patternov v slozhnye (ierarhija). Arhitektura byla nastol'ko prostoj, chto student mog realizovat' ejo za vyhodnyje. Segodnja eti zhe tri idei lehat v osnove sistem, kotorye vedut avtomobili, stavjat diagnozy po rentgenu i generirujut izobrazhenija.
- **Bespilotnye avtomobili (Tesla, Waymo)** - CNN v real'nom vremeni raspoznajut peshehodov, znaki, razmetku i drugie avtomobili na video s kamer, obrabatyvaja desyatki kadrov v sekundu
- **Medicinskaja diagnostika** - CNN analizirujut rentgenovskie snimki, MRT i CT s tochnost'ju na urovne opytnyh radiologov, pomogaja obnaruzhivat' rak, pnevmoniju i perelomy na rannih stadijah
- **Raspoznavanie lic (Face ID)** - CNN izvlekajut unikal'nye cherty lica dlja autentifikacii pol'zovatelja, rabotaya dazhe pri izmenenii osveshhchenija, ugla i chastichnom zakrytii lica
Предварительные знания
От неокогнитрона к прорыву на ImageNet
Идея свёртки родилась в 1980 году, когда Кунихико Фукусима построил неокогнитрон - слоистую сеть, вдохновлённую зрительной корой, которая училась распознавать формы независимо от их положения. В 1989 году Янн Лекун добавил обратное распространение и обучил сеть читать рукописные цифры, а к 1998 году его LeNet-5 уже читала чеки и почтовые индексы для AT&T - первая CNN, реально приносившая пользу в продакшене. Затем свёрточные сети больше десяти лет оставались нишевым инструментом, пока в 2012 году Алекс Крижевский, Илья Суцкевер и Джеффри Хинтон не выставили AlexNet на соревнование ImageNet. Сеть снизила ошибку примерно на десять пунктов по сравнению с лучшими классическими методами, и компьютерное зрение почти мгновенно перешло на глубокое обучение.
Operacija svjortki
Predstav'te, chto vy ishhete opredeljonnyj pattern na bol'shoj kartinke - naprimer, gorizontal'nuju liniju. Vmesto togo chtoby sravnivat' kazhdyj piksel' s kazhdym drugim, vy berete malen'koe **okoshko (kernel/fil'tr)** razmera 3x3 i skol'zite im po vsemu izobrazheniju. V kazhdom polozhenii vy umnozhajete znachenija pikseley na vesa fil'tra i summiruete - poluchaetsja odno chislo, kotoroe pokazyvaet, naskol'ko tekushhij uchastok pokhozh na iskomyj pattern. Eto i est' operacija **svjortki (convolution)**. Kazhdyj fil'tr uchitsja raspoznavat' odin konkretnyj pattern: gorizontal'nuju liniju, vertikal'nyj kraj, diagonal' ili gradient cveta.
Pochemu svjortka luchshe fully connected sloja dlja izobrazhenij? Tri prichiny. **Lokal'nost':** kazhdyj nejron smotrit tol'ko na malen'kuju oblast' (3x3, 5x5), a ne na vsjo izobrazhenie. Eto logichno - kraj ili tekstura - eto lokal'nyj pattern. **Razdelenie vesov (parameter sharing):** odin i tot zhe fil'tr primenyaetsja ko vsemu izobrazheniju. Esli fil'tr nauchilsya nahodit' vertikal'nuju liniju v levom uglu, on najdjot ejo i v pravom. **Transljacionnaja invariantnost':** ob"ekt raspoznajetsya nezavisimo ot togo, gde on nahoditsya na kartinke.
**Stride i Padding:** **Stride** - shag, s kotorym kernel dvigaetsya po izobrazheniju: - Stride 1: kernel sdvigaetsya na 1 piksel' - vyhod pochti takogo zhe razmera - Stride 2: kernel sdvigaetsya na 2 pikselya - vyhod v 2 raza men'she **Padding** - dobavlenie nulevyh pikselej po krajam: - 'valid' (bez padding): vyhod men'she vhoda, krajnie pikseli uchastvujut rezhe - 'same' (s padding): vyhod takogo zhe razmera kak vhod Formula razmera vyhoda: output_size = (input_size - kernel_size + 2 * padding) / stride + 1 Primer: vhod 32x32, kernel 3x3, stride 1, padding 1: (32 - 3 + 2*1) / 1 + 1 = 32 - razmer sohranilsya!
**Kolichestvo parametrov:** v etom - sila CNN. Fully connected sloj dlja izobrazhenija 224x224x3 (150528 vhodov) s 1000 nejronami = 150 millionov parametrov. Svjortochnyj sloj s 64 fil'trami 3x3 na 3 kanala = 64 * (3*3*3 + 1) = **1792 parametra**. Raznica v 100000 raz! Malo parametrov = men'she dannyh dlja obuchenija, men'she overfitting, bystree vychislenija.
Izobrazhenie 32x32x3 prohodit cherez Conv2D sloj s 16 fil'trami razmera 5x5, stride=1, padding='same'. Skol'ko obuchaemyh parametrov v etom sloe?
Pooling i umen'shenie razmernosti
Posle svjortki my poluchili feature map, gde kazhdoe znachenie pokazyvaet, naskol'ko sil'no opredeljonnyj pattern prisutstvuet v dannoj oblasti. No feature map vsjo eshhe bol'shoj - esli vhod 224x224, to s padding='same' vyhod tozhe 224x224. **Pooling** umenjshaet prostranstvennyj razmer, sohranaja samuju vazhnuju informaciju. Samyj populjarnyj variant - **Max Pooling**: my berem okno (obychno 2x2) i iz chetyryokh znachenij ostavlyaem tol'ko maksimal'noe. Intuicija prostaja: esli fil'tr nashel kraj v odnom iz chetyryokh sosednih pikselej - nam vazhno, *chto* on nashel, a ne *gde imenno* s tochnost'ju do pikselja.
**Average Pooling** - al'ternativa Max Pooling, kotoraja vmesto maksimuma berjet srednee znachenie v okne. Average Pooling sohranjaet obshhuyu intensivnost' oblasti, a Max Pooling - naibolee jarko vyrazhennyj priznak. Na praktike Max Pooling pochti vsegda rabotaet luchshe v promezhutochnyh slojah, a **Global Average Pooling** (srednee po vsej feature map) chasto ispol'zuetsja v poslednem sloe pered klassifikaciej - on zamenjat polnosv'aznyj sloj i rezko sokrashhaet chislo parametrov.
**Zachem nuzhen pooling - tri prichiny:** 1. **Umen'shenie razmernosti:** feature map 224x224 posle pooling 2x2 stanovitsja 112x112. Eto v 4 raza men'she dannyh dlja sledujushhego sloja - bystree obuchenie i inference. 2. **Umen'shenie vychislenij:** men'she pikseley = men'she operacij umnozhenija v sledujushhem svertochnom sloe. 3. **Nebol'shaja transljacionnaja invariantnost':** esli pattern sdvinulsja na 1 piksel' - max pooling vsjo ravno vernet to zhe znachenie. Model' stanovitsja chut' menee chuvstvitel'noj k tochnomu polozheniju ob"ekta.
**Sovremennyj trend: strided convolutions vmesto pooling.** V novyh arhitekturah (ResNet, EfficientNet) vmesto otdel'nogo pooling sloja ispol'zujut svjortku s stride=2. Eto pozvoljaet seti samoj nauchit'sja, kak luchshe umen'shat' razmernost', vmesto zhestkogo pravila 'beri maksimum'. Empiricheski raznicy v kachestve pochti net, no strided convolutions dajut modeli bol'she gibkosti.
Feature map razmera 64x64 prohodit cherez Max Pooling 2x2 s stride 2. Kakoj razmer vyhoda i skol'ko dobavljaetsja obuchaemyh parametrov?
Feature maps i ierarhija priznakov
Kazhdyj fil'tr v svertochnom sloe sozdajot odnu **feature map** - dvumernuju kartu aktivacij, pokazyvajushhuju, gde na izobrazhenij prisutstvuet opredeljonnyj pattern. No odin fil'tr vidit tol'ko odin pattern. Poetomu v kazhdom sloe ispol'zujut mnogo fil'trov: tipichno 32, 64, 128 ili 256. Kazhdyj fil'tr sozdajot svoju feature map, i vmeste oni formirujut **mnogokanal'nyj vyhod**. Naprimer, sloj s 64 fil'trami preobrazuet izobrazhenie 224x224x3 v tensor 224x224x64 - 64 raznyh 'vzgljadov' na izobrazhenie.
Samoe udivitel'noe v CNN - **ierarhija priznakov**. Rannie sloi (blizhe ko vhodu) uchatsja detektirovat' prostye patterny: kraja, linii, gradienty cveta. Srednie sloi kombiniujut prostye patterny v bolee slozhnye: tekstury, ugly, prostye formy. Glubokie sloi (blizhe k vyhodu) raspoznajut celostnye ob"ekty: glaza, koljosa, mordy zhivotnyh. Set' sama vystraivaet etu ierarhiju - ej ne govoryat 'ishhi kraja', ona obnaruzhovaet, chto eto polezno dlja final'noj zadachi.
**Receptive field - chto 'vidit' kazhdyj nejron:** Nejron v pervom svertochnom sloe (kernel 3x3) 'vidit' oblast' 3x3 pikseley ishodnogo izobrazhenija. Nejron vo vtorom sloe (tozhe 3x3) 'vidit' oblast' 3x3 na pervom sloe, chto sootvetsvuet oblasti 5x5 na ishodnom izobrazhenij. S kazhdym sloem receptive field rastyot: - Sloj 1 (3x3): receptive field = 3x3 - Sloj 2 (3x3): receptive field = 5x5 - Sloj 3 (3x3): receptive field = 7x7 - Posle pooling 2x2: receptive field udvaivaetsja Glubokij nejron 'vidit' bol'shuju chast' izobrazhenija - poetomu on mozhet raspoznavat' krupnye ob"ekty. Eto ob"jasnjaet, pochemu CNN nuzhna glubina: mnogo slojov = bol'shoj receptive field = sposobnost' videt' celye ob"ekty.
**Vizualizacija fil'trov** - prakticheskij instrument dlja ponimanija CNN. Esli izvlech' vesa pervogo svertochnogo sloja obuchennoj seti (naprimer, AlexNet), my uvidim, chto fil'try dejstvitel'no vyuchili detektory krayov raznyh orientacij, cvetovye gradienty i prostye tekstury. Eto proiskhodit *bez kakogo-libo ruchnogo programirovanija* - set' sama obnaruzhila, chto eti patterny polezny dlja raspoznavanija ob"ektov. Glubzhe v seti vizualizacija stanovitsja menee interpretirueomj, no metody vvode Grad-CAM pozvolajut uvidet', na kakie oblasti izobrazhenija set' 'smotrit' pri prinjatii reshenija.
CNN imeet 3 svertochnyh sloja. Pervyj detektiruet kraja, vtoroj - tekstury, tretij - chasti ob"ektov. Kto 'prikazal' pervomy sloju iskat' kraja?
Arhitektury CNN: ot LeNet do ResNet
Istorija CNN - eto istorija uvelichenija glubiny i izobretatel'nyh reshenij dlja problem, kotorye eto uvelichenie sozdajot. Pervye CNN pojavilis' v 1990-h, no nastojashhaja revoljucija sluchilas' v 2012, kogda glubokaja set' vpervye pobedila klassicheskie metody na krupnejshem konkurse raspoznavanija izobrazhenij. Davajte projdjom po kljuchevym vekham.
**LeNet-5 (1998)** - pervaja uspeshnaja CNN, sozdannaja Yann LeCun. Vsego 5 slojov, primernjalas' dlja raspoznavanija rukopisnyh cifr na pochtovyh konvertah. Prostaja arhitektura: svjortka -> pooling -> svjortka -> pooling -> polnosvjaznyj sloj. Rabotala, no tol'ko na malen'kih cherno-belyh izobrazhenijah (28x28). 14 let CNN ostavalais' nishevoj temoj - ne hvaltalo dannyh i vychislitel'noj moshhnosti.
**AlexNet (2012)** - perelomnyj moment v istorii deep learning. Na konkurse ImageNet (1000 kategorij, 1.2 milliona izobrazhenij) AlexNet dostig oshibki 16.4%, togda kak luchshij klassicheskij metod - 26.2%. Raznica v 10% byla shokirujushhej. Kljuchevye innovacii: **ReLU** vmesto sigmoid (bystree obuchenie), **Dropout** (bor'ba s overfitting), obuchenie na **GPU** (v 10 raz bystree CPU), **data augmentation** (otrazhenija, sdvigi, cvetnye iskahzenija). S etogo momenta deep learning stal dominirujushhim podhodom v computer vision.
**VGG (2014)** pokazal silu prostoty: vmesto raznoobraznyh razmerov fil'trov (5x5, 7x7, 11x11 kak v AlexNet), VGG ispol'zuet **tol'ko 3x3 svjortki**. Pochemu eto rabotaet? Dva sloja 3x3 imejut receptive field 5x5, no vsego 2*(3*3) = 18 parametrov vmesto 5*5 = 25 u odnogo sloja 5x5. Tri sloja 3x3 pokryvajut 7x7 s 27 parametrami vmesto 49. Bolshe slojov = bolshe nelinejnostej (ReLU posle kazhdogo) pri men'shem chisle parametrov. VGG-16 s 138M parametrov dostig oshibki 7.3% na ImageNet.
**ResNet i skip connections - kljuchevoj proryv:** Pri uvelichenii glubiny seti voznikaet problema: posle opredeljonnoj glubiny kachestvo *padaet* dazhe na trenirovochnyh dannyh. Eto ne overfitting - eto problema optimizacii: gradienty zatukajut (vanishing gradient) ili vzryvajutsja. **Skip connection (shortcut)** reshaet eto naprjamuju: vmesto: output = F(x) - sloj dolzhen vyuchit' vsjo ResNet: output = F(x) + x - sloj uchit tol'ko *razniicy* (residual) Esli optimal'noe preobrazovanie blizko k tozhdesstvennomu (chto chasto byvaet v glubokih setjah), sloju dostatochno vyuchit' F(x) ~ 0 - eto gorazdo proshhe, chem vyuchit' F(x) ~ x. Rezul'tat: seti glubiny 152 sloya stali useshno obuchat'sja. ResNet-152 dostig oshibki 3.57% na ImageNet - luchshe cheloveka (5.1%).
Nuzhno proektirovat' CNN s nulja dlja kazhdoj novoj zadachi, tshatel'no podbiring arhitekturu i obuchaja na svoih dannyh
Transfer learning s predobuchennimi modeljami (ResNet, EfficientNet) rabotaet luchshe v 90% sluchaev - dostatochno zamenit' poslednij sloj i doobuchit' na svoih dannyh
Predobuchennye na ImageNet (1.2M izobrazhenij, 1000 klassov) modeli uzhe nauchilis' izvlekat' universal'nye priznaki: kraja, tekstury, formy. Eti priznaki polezny dlja pochti ljuboj vizual'noj zadachi. Obuchenie s nulja trebuet ogromnogo dataseta i vychislitel'nyh resursov, a fine-tuning predobuchennoj modeli dajet luchshij rezul'tat dazhe na 1000 izobrazhenij.
Kljuchevye idei
- **Svjortka:** malen'kij fil'tr (3x3, 5x5) skol'zit po izobrazheniju, detektiruya lokal'nye patterny - parameter sharing rezko sokrashhaet chislo parametrov (tysyachi vmesto millionov u fully connected sloja)
- **Pooling:** umenshaet prostranstvennyj razmer feature map (obychno v 2 raza), sokrashhaja vychislenija i dobavljajaja nebol'shuju transljacionnuju invariantnost' - v sovremennyh setjah chasto zamenjayetsja strided convolution
- **Ierarhija priznakov:** rannie sloi uchatsja detektirovat' kraja, srednie - tekstury i formy, glubokie - celye ob"ekty; eta ierarhija voznikaet sama cherez backpropagation, bez ruchnogo programmirovanija
- **Arhitektury:** ot LeNet (5 slojov) do ResNet (152 sloja) - skip connections reshili problemu vanishing gradient i pozvolili stroit' ochen' glubokie seti
- **Transfer learning kak praktika po umolchaniju:** ta samaja prostaja ideja iz 2012 goda - svjortka, pooling, ierarhija - segodnja rabotaet v predobuchennyhk modeljah, kotorye mozhno doobuchit' pod ljubuju zadachu za minuty, a ne proektirovat' CNN s nulja
Svjazannye temy
CNN - osnova sovremennnogo computer vision, svjazyvajushhaja bazovye koncepcii nejrosetej s prakticheskimi prilozhenijami:
- Klassifikacija izobrazhenij — Primenenie CNN na praktike: ot obuchenija na ImageNet do fine-tuning pod svoju zadachu - kak vybrat' arhitekturu, podgotovit' dannye i dostich' vysokoj tochnosti
- Transfer Learning — Kljuchevaja tehnika dlja raboty s CNN: predobuchennye modeli uzhe znajut universal'nye prizanki, i ih mozhno adaptrirovat' k novoj zadache s minimal'nyn kolichestvomom dannyh
Вопросы для размышления
- Pochemu CNN s ih lokal'nymi fil'trami i parameter sharing rabotajut tak horosho dlja izobrazhenij, no ne podhodyat dlja tabuljarnyh dannyh (naprimer, tablica s priznakmi klientov)? Kakoj inductive bias zalohen v arhitekturu CNN?
- Skip connections v ResNet pozvolili obuchat' seti glubiny 152 sloja. Mozhno li prodolhat' uvelichivat' glubinu beskonechno i kazhdyj raz poluchat' luchshe? Gde predel, i chto ego opredeljaet?
- Esli CNN sama vystravivaet ierarhiju prizanakov (kraja -> tekstury -> ob"ekty), pochemu transfer learning rabotaet - razve raznye zadachi ne trebujut raznyh prizankov?
Связанные уроки
- ml-28-optimizers — CNN обучаются этими оптимизаторами
- ml-38-image-classification — CNN лежат в основе классификации изображений
- ml-41-transfer-learning — Предобученные CNN дают transfer learning
- ml-31-transformers — Оба учат иерархию признаков, разный inductive bias
- la-07-matrix-multiply — Свёртка сводится к умножению матриц (im2col)
- aie-25-multimodal