Přeskočit na obsah
coden

Konvoluční sítě: jak síť poznává obrázky

Proč obyčejná síť nepozná posunutou číslici, konvoluční vrstva se sdílenými vahami, pooling a receptivní pole, naučené filtry a mapy příznaků, augmentace dat a cesta od LeNetu k ImageNetu — na síti napsané od nuly.

13 minut Matěj Žalmánek 2026-10-16

Série Základy AI Díl 64 z 83
  1. Mapa umělé inteligence: co je co a jak to do sebe zapadá
  2. Stručná historie umělé inteligence: od Turinga po jazykové modely
  3. Data, model, trénink, inference: základní pojmy na jednom příkladu
  4. Jak číst matematický zápis: symboly, indexy, sumy a kvantifikátory
  5. Množiny a relace: stavebnice, ze které se skládají definice v AI
  6. Funkce a zobrazení: proč je každý model v AI funkce
  7. Logika a důkazy: pravidla, podle kterých se v AI uvažuje
  8. Grafy a stromy: struktura, na které stojí hledání i neuronové sítě
  9. Lineární algebra pro strojové učení: vektory, matice a proč AI hlavně násobí
  10. Derivace, gradient a řetízkové pravidlo: jak model zjistí, kterým směrem se učit
  11. Gradientní sestup: jak se model učí
  12. Co je pravděpodobnost: od hodu kostkou ke Kolmogorovovým axiomům
  13. Podmíněná pravděpodobnost a Bayesova věta: jak změnit odhad, když se dozvíte něco nového
  14. Náhodná veličina a distribuční funkce: jedna funkce, která o rozdělení řekne všechno
  15. Funkce hustoty a pravděpodobnostní funkce: proč má spojitá veličina v bodě pravděpodobnost nula
  16. Střední hodnota, rozptyl a kovariance: kde rozdělení leží, jak je široké a co s čím souvisí
  17. Přehled pravděpodobnostních rozdělení: Bernoulli, binomické, Poisson, rovnoměrné, normální a exponenciální
  18. Zákon velkých čísel a centrální limitní věta: proč se průměry chovají tak předvídatelně
  19. Statistika a odhady parametrů: maximální věrohodnost, MAP a intervaly spolehlivosti
  20. Teorie informace: entropie, křížová entropie a KL divergence — odkud se berou ztrátové funkce
  21. Prohledávání stavového prostoru: BFS, DFS, UCS a A* s animacemi
  22. Hry a protivník: minimax, alfa-beta ořezávání a Monte Carlo tree search
  23. Splňování omezujících podmínek: backtracking, propagace omezení a AC-3 na sudoku a mapě krajů
  24. Logika a znalostní systémy: dopředné a zpětné řetězení, rezoluce a expertní systémy
  25. Plánování: STRIPS, svět kostek, heuristiky z relaxace a plánování v AI agentech
  26. Lokální hledání a simulované žíhání: obchodní cestující přes krajská města
  27. Genetické algoritmy: populace, křížení, mutace a výběr na batohu na výlet
  28. Evoluční strategie a genetické programování: od pravidla jedné pětiny po Keplerův zákon
  29. Optimalizace mravenčí kolonií: jak feromonová stopa najde krátkou cestu
  30. Optimalizace hejnem částic: setrvačnost, vlastní zkušenost a zkušenost hejna
  31. Neuroevoluce: evoluce vah i tvaru neuronových sítí a algoritmus NEAT
  32. Fuzzy množiny a funkce příslušnosti: jak zapsat „trochu teplo“
  33. Fuzzy logika a pravděpodobnost: proč „trochu teplo“ neznamená „pravděpodobně teplo“
  34. Fuzzy logika: t-normy, implikace a pravidla KDYŽ–PAK
  35. Fuzzy řízení: Mamdani a Sugeno od ventilátoru po kyvadlo na vozíku
  36. Fuzzy shlukování: algoritmus fuzzy c-means a body mezi shluky
  37. Neuro-fuzzy systémy (ANFIS): fuzzy pravidla, která se učí z dat
  38. Markovovy řetězce: přechodová matice, stacionární rozdělení a PageRank
  39. Skryté Markovovy modely: Viterbiho algoritmus a nepoctivé kasino
  40. Bayesovské sítě: proč je tráva mokrá a co z toho plyne pro postřikovač
  41. Kalmanův filtr: jak z nepřesných měření odhadnout, kde auto je a jak rychle jede
  42. Druhy strojového učení: s učitelem, bez učitele, s částečným učitelem a další
  43. Přeučení a regularizace: proč model, který zná data nazpaměť, selže
  44. Vyhodnocení modelu: křížová validace, F1 a křivka ROC
  45. Shlukování a snížení dimenze: k-means, PCA a t-SNE
  46. Klasifikace a regrese: dvě úlohy učení s učitelem
  47. Lineární regrese: nejmenší čtverce geometricky i maticově
  48. Polynomiální a nelineární regrese: jak přímku ohnout
  49. Logistická regrese: sigmoida, šance a křížová entropie
  50. Vícetřídní klasifikace a softmax: od dvou tříd k mnoha
  51. Naivní Bayesův klasifikátor: spamový filtr, který funguje lépe, než by měl
  52. Ztrátové funkce: co přesně model minimalizuje
  53. Rozhodovací stromy a k nejbližších sousedů: modely bez vzorců
  54. Ansámbly: náhodný les a gradient boosting
  55. SVM a jádrový trik: nejširší hranice a jak ji ohnout
  56. Signál a vzorkování: proč platí Nyquistův teorém
  57. Fourierova transformace: rozklad signálu na frekvence
  58. Filtry a konvoluce: vyhlazení, hrany a odstranění šumu
  59. Zvuk a řeč: spektrogram, melová škála a MFCC
  60. Obraz jako signál: pixely, barvy, konvoluce a hrany
  61. Perceptron a umělý neuron: nejjednodušší neuronová síť a co neumí
  62. Neuronová síť od nuly: zpětné šíření chyby krok za krokem
  63. Aktivace, inicializace a normalizace: drobnosti, na kterých hluboká síť stojí
  64. Konvoluční sítě: jak síť poznává obrázky
  65. Rekurentní sítě: paměť pro posloupnosti a mizející gradient
  66. LSTM a GRU: brány, které rozhodují, co si síť zapamatuje
  67. Autoenkodéry: síť, která se učí data stlačit a zase rozbalit
  68. Embeddingy a word2vec: jak se slovo stane vektorem
  69. Mechanismus pozornosti: jak se model naučí, kam se dívat
  70. Transformery a velké jazykové modely: architektura krok za krokem
  71. Tokenizace: jak se text rozseká na kousky pro model
  72. Předtrénování a škálování: proč větší model a víc dat funguje
  73. Doladění a RLHF: jak se z doplňovače textu stane asistent
  74. Prompty, kontext a RAG: jak modelu dát správné informace
  75. Variační autoenkodéry (VAE): nové obrázky ze spojitého latentního prostoru
  76. Generativní adversariální sítě (GAN): padělatel proti detektivovi
  77. Difúzní modely: jak se z čistého šumu stane obrázek
  78. Markovovy rozhodovací procesy: stavy, akce, odměny a Bellmanovy rovnice
  79. Q-learning a DQN: učení hodnoty akcí od tabulky po neuronovou síť
  80. Policy gradient a PPO: učení přímo strategie
  81. Jak funguje AI agent: jazykový model ve smyčce s nástroji
  82. Programování s AI agenty: zadání, testy a kontrola
  83. Vyhodnocení a bezpečnost AI systémů: jak měřit a jak hlídat

Celá osnova série 83 z 83 témat hotovo

Co si odnesete
  • Proč plně propojená síť nepřenese naučené na jiné místo obrázku.
  • Co dělá konvoluční vrstva a pooling a co se síť v první vrstvě naučí.
  • Proč se konvoluce a augmentace dat doplňují.

Co se hodí znát předem: Obraz jako signál: pixely, barvy, konvoluce a hrany, Neuronová síť od nuly: zpětné šíření chyby krok za krokem

V roce 2012 přihlásil tým Geoffreyho Hintona do soutěže v rozpoznávání fotografií ImageNet konvoluční neuronovou síť AlexNet. Spletla se v 15,3 % případů; druhý nejlepší tým, s ručně navrženými příznaky, v 26,2 %. Za pár let používal konvoluční sítě každý — v telefonech, autech, nemocnicích. Jejich myšlenka je přitom stará a prostá: obrázek se nemá zpracovávat jako dlouhý seznam pixelů, ale jako obrázek, ve kterém na poloze nezáleží. V tomhle dílu postavíme malou konvoluční síť od nuly a porovnáme ji s obyčejnou sítí na úloze, na které je rozdíl vidět nejlíp: číslice, které se posunou.

Navazuje na díly Obraz jako signál a Aktivace, inicializace a normalizace.

1. Proč nestačí obyčejná síť

Data: číslice 0–9 jako obrázky 8 × 8 pixelů na plátně 12 × 12. Při tréninku je číslice posunutá nejvýš o pixel od středu, 500 obrázků. Testujeme dvakrát: na nových číslicích se stejně malým posunem a na číslicích posunutých o 2 pixely — takové síť nikdy neviděla.

trénink test, posun o 2 px
Trénovací číslice (posun nejvýš o 1 pixel) a testovací číslice posunuté o 2 pixely

Plně propojená síť (144 vstupů, 32 skrytých neuronů s ReLU, 10 výstupů se softmaxem, 4 970 parametrů) se naučí trénovací data bez chyby a na nových číslicích se stejným posunem má 99,9 %. Na číslicích posunutých o 2 pixely ale jen 16,3 % — skoro jako náhodné hádání (10 %). Pro ni je pixel 37 prostě jiný vstup než pixel 39; že je na nich tatáž čárka, posunutá o kousek, neví. Co se naučila o jednom místě obrázku, nepřenese na jiné.

Definice — softmax a křížová entropie pro více tříd

Nechť K ≥ 2 je počet tříd a z = (z1, …, zK) ∈ ℝK jsou výstupy poslední vrstvy. Softmax je funkce softmax : ℝK → (0, 1)K, z ↦ p = (p1, …, pK), kde

pk = ezk/∑m=1K ezm,   k = 1, …, K.

Platí pk > 0 pro všechna k a p1 + … + pK = 1, takže p je rozdělení pravděpodobnosti na třídách.

Nechť c ∈ {1, …, K} je správná třída příkladu. Křížová entropie příkladu je číslo

E = −ln pc ≥ 0.

Jako funkce z má složení softmaxu a křížové entropie jednoduchý gradient

∂E/∂zk = pk − [k = c],   k = 1, …, K,

kde [k = c] je 1, je-li k = c, a 0 jinak — odtud začíná zpětné šíření v obou našich sítích.

pk = ezk/∑m=1K ezm

pk
pravděpodobnost, kterou síť dává třídě k
ezk
exponenciála výstupu — vždy kladná a zachová pořadí: větší výstup dá větší číslo
∑m=1K ezm
součet exponenciál všech tříd — dělením jím se pravděpodobnosti sečtou na 1
Příklad — softmax pro tři třídy

Výstupy z = (2, 1, 0): e2 = 7,389, e1 = 2,718, e0 = 1, součet 11,107, tedy

p = (7,389/11,107; 2,718/11,107; 1/11,107) = (0,665; 0,245; 0,090)

(barvy podle vzorce výše). Je-li správná třída první, ztráta je −ln 0,665 = 0,408 a gradient (0,665 − 1; 0,245; 0,090) = (−0,335; 0,245; 0,090): správný výstup se má zvednout, ostatní snížit, každý tím víc, čím víc se mýlí.

Příklad — 4 970 parametrů plně propojené sítě

Plně propojená vrstva z n vstupů na m neuronů má n · m vah a m prahů. Skrytá vrstva 144 · 32 + 32 = 4 640, výstupní 32 · 10 + 10 = 330, celkem 4 970. Každá z 4 608 vah první vrstvy patří k jednomu konkrétnímu pixelu — a to je ten problém.

2. Konvoluční vrstva

Definice — konvoluční vrstva

Nechť C ≥ 1 je počet vstupních kanálů, F ≥ 1 počet filtrů, k ≥ 1 velikost filtru a n ≥ k velikost vstupu. Vstup je X ∈ ℝC×n×n s prvky X[c, i, j], c = 1, …, C, i, j = 0, …, n − 1 (u šedého obrázku C = 1). Pro f = 1, …, F je Kf ∈ ℝC×k×k filtr (jádro) s prvky Kf[c, u, v], u, v = 0, …, k − 1, a bf ∈ ℝ jeho práh. Označme m = n − k + 1. Konvoluční vrstva (bez doplnění okrajů, s krokem 1) je zobrazení ℝC×n×n → ℝF×m×m, X ↦ Y, kde pro f = 1, …, F a i, j = 0, …, m − 1

Yf[i, j] = bf + ∑c=1C ∑u=0k−1 ∑v=0k−1 Kf[c, u, v] · X[c, i + u, j + v].

Matice Yf ∈ ℝm×m je mapa příznaků filtru f; výstup vrstvy je F map nad sebou. V naší síti se na každý prvek Y ještě použije ReLU. Filtr se tedy posouvá po vstupu a v každé poloze spočte vážený součet okénka k × k přes všechny kanály a přičte práh; jeho váhy Kf nezávisí na poloze (i, j) — jsou ve všech polohách stejné (sdílené).

Laicky řečeno

Filtr je malá šablona — třeba „svislá čárka“ — kterou síť přikládá na každé místo obrázku a zapisuje, jak moc tam sedí. Je to stejná konvoluce jako u Sobelova detektoru hran, jen váhy šablony si síť naučí sama. A protože se stejná šablona použije všude, co se síť naučí v levém horním rohu, umí automaticky i v pravém dolním.

Úspora je obrovská. Plně propojená vrstva z barevného obrázku 224 × 224 na 64 neuronů má 9 633 792 vah; konvoluční vrstva s 64 filtry 3 × 3 jen 1 728 — a navíc umí najít svůj vzor kdekoli.

Vzorec konvoluční vrstvy

Hodnota mapy příznaků filtru f v poloze (i, j) před aktivací ReLU (vzorec z definice výše):

Yf[i, j] = bf + ∑c ∑u,v Kf[c, u, v] · X[c, i + u, j + v]

Yf[i, j]
jak dobře vzor filtru f sedí na místo (i, j) — jedna hodnota mapy příznaků
bf
práh filtru — posouvá hranici, od které ReLU odezvu pustí; slabá náhodná shoda se tak dá potlačit
∑c ∑u,v
součet přes všechny vstupní kanály c a polohy u, v = 0 … k − 1 uvnitř okénka — filtr vidí najednou jen malý čtvereček, ale celou jeho hloubku (u druhé vrstvy všech 8 map první)
Kf[c, u, v]
váhy filtru — nezávisí na i, j; právě tohle sdílení dělá z vrstvy hledání téhož vzoru všude a šetří parametry
X[c, i + u, j + v]
okénko vstupu s levým horním rohem v (i, j) — posunem i, j se filtr přikládá na další místa
Přesně vzato je to vzájemná korelace; matematická konvoluce by filtr nejdřív otočila o 180°. Protože se váhy učí, je to jedno, a sítě tomu konvoluce říkají tak jako tak.
Definice — rozměr výstupu

Nechť n, k, s ∈ ℕ jsou velikost vstupu n × n, velikost okénka k × k a krok s ≥ 1 a p ∈ ℕ0 je počet nul, kterými se vstup doplní na každé straně, přičemž k ≤ n + 2p. Okénko se klade levým horním rohem do poloh t · s (v každém směru zvlášť), t = 0, 1, 2, …, dokud se celé vejde do doplněného vstupu, tj. pokud t · s + k ≤ n + 2p. Rozměr výstupu na stranu je počet takových poloh,

m = |{t ∈ ℕ0 : ts + k ≤ n + 2p}| = ⌊n + 2p − k/s⌋ + 1,

kde ⌊x⌋ je dolní celá část (největší celé číslo nejvýš x). Naše síť okraje nedoplňuje (p = 0): konvoluce 3 × 3 s krokem 1 dá z obrázku 12 × 12 mapy 10 × 10 (12 − 3 + 1 = 10), max-pooling 2 × 2 s krokem 2 z nich 10 − 2/2 + 1 = 5 a druhá konvoluce 5 − 3 + 1 = 3 — rozměry ze schématu níže.

parametrů = F · (k · k · C + 1)

F
počet filtrů — každý hledá jiný vzor a má vlastní váhy; počet parametrů roste jen s ním, ne s velikostí obrázku
k · k · C
váhy jednoho filtru — okénko k × k přes všech C vstupních kanálů
1
práh filtru — jeden na filtr, ne na polohu
Naše síť: 8 · (3 · 3 · 1 + 1) = 80, 16 · (3 · 3 · 8 + 1) = 1 168, výstupní plně propojená vrstva 16 · 10 + 10 = 170, celkem 1 418. Velikost plátna 12 × 12 ve výpočtu vůbec není.
Příklad — konvoluce ručně

Obrázek 4 × 4 se svislou čárkou, filtr „svislá čára“ a práh b = −1:

X = 0110001000100111   K = −12−1−12−1−12−1

Výstup má 4 − 3 + 1 = 2 řádky i sloupce. V poloze (0, 1) leží pod filtrem okénko se sloupci 1 až 3; po řádcích dává

((−1) · 1 + 2 · 1 + (−1) · 0) + ((−1) · 0 + 2 · 1 + (−1) · 0) + ((−1) · 0 + 2 · 1 + (−1) · 0) = 1 + 2 + 2 = 5,

s prahem 5 + (−1) = 4. V poloze (0, 0) vyjde (1 − 1 − 1) + (−1) = −2 a ReLU z toho udělá 0. Barvy podle vzorce konvoluční vrstvy výše: váhy filtru, pixely okénka, práh a hodnota mapy. Celá mapa po ReLU:

Y = 0403

Filtr „zabral“ v pravém sloupci, kde čárka opravdu je; vlevo, kde je čárka na kraji okénka, dává záporný příspěvek.

# dopředný průchod konvoluční vrstvy (bez doplnění okrajů, krok 1)
vstup X: C × n × n,  filtry K: F × C × k × k,  prahy b: F
m = n − k + 1
for f in 1 … F:
    for i in 0 … m−1, j in 0 … m−1:
        s = b[f]
        for c in 1 … C, u in 0 … k−1, v in 0 … k−1:
            s = s + K[f][c][u][v] · X[c][i+u][j+v]
        Y[f][i][j] = max(0, s)          # ReLU
return Y                                # F map m × m

3. Pooling a hierarchie příznaků

Definice — max-pooling a receptivní pole

Nechť n ≥ 2 a A ∈ ℝn×n je mapa příznaků s prvky A[i, j], i, j = 0, …, n − 1. Označme m = ⌊n/2⌋.

  1. Max-pooling 2 × 2 s krokem 2 je zobrazení ℝn×n → ℝm×m, A ↦ P, kde pro i, j = 0, …, m − 1 P[i, j] = max {A[2i + u, 2j + v] : u, v ∈ {0, 1}}. Rozdělí tedy mapu na čtverečky 2 × 2 a z každého ponechá jen největší hodnotu; mapa se zmenší na polovinu v každém směru.
  2. Globální max-pooling je funkce ℝn×n → ℝ, A ↦ max {A[i, j] : i, j = 0, …, n − 1}; z celé mapy ponechá jediné číslo.

Má-li vrstva F map, použije se pooling na každou zvlášť.

Nechť je dána síť z konvolučních a poolingových vrstev ℓ = 1, 2, … se vstupním obrázkem X ∈ ℝn×n; neuronem rozumíme jeden prvek některé mapy a jeho okénko je množina prvků předchozí vrstvy (u vrstvy 1 pixelů X), ze kterých se jeho hodnota počítá. Receptivní pole R(y) ⊆ {0, …, n − 1}2 neuronu y je definováno po vrstvách:

  1. je-li y ve vrstvě 1, je R(y) množina poloh (i, j) pixelů v jeho okénku;
  2. je-li y ve vrstvě ℓ ≥ 2, je R(y) = ⋃ {R(y′) : y′ je v okénku y}.

Hodnota y je tedy funkcí jen pixelů z R(y) a změna pixelu mimo R(y) ji nijak nezmění. V sítích, jako je naše, je R(y) čtverec r × r pixelů; jeho stranu r počítá vzorec níže.

Laicky řečeno

Pooling říká: „nezajímá mě přesně kde, jen jestli tu někde v okolí ta čárka je“. Tím přidá odolnost vůči malým posunům a zároveň zmenší obrázek, takže další vrstva vidí větší kus původního obrázku. První vrstva hledá čárky a hrany, druhá z nich skládá oblouky a rohy, hlubší vrstvy celé tvary. Naše síť má dvě konvoluční vrstvy; neuron druhé vrstvy už „vidí“ výřez 8 × 8 — celou číslici.

Max-pooling zapsaný vzorcem: P[i, j] = max { A[2i + u, 2j + v] : u, v ∈ {0, 1} }. Velikost receptivního pole se dá spočítat vrstvu po vrstvě; stačí si pamatovat, jak daleko od sebe ve vstupním obrázku leží sousední neurony vrstvy (rozestup Δ). Vrstvy číslujeme ℓ = 1, 2, … od vstupu, vrstva ℓ má okénko kℓ × kℓ a krok sℓ; na vstupu je r0 = 1 a Δ0 = 1. Pro ℓ ≥ 1:

rℓ = rℓ−1 + (kℓ − 1) · Δℓ−1,   Δℓ = Δℓ−1 · sℓ

rℓ
receptivní pole neuronu vrstvy ℓ (strana čtverce v pixelech) — kolik obrázku může jeho hodnotu ovlivnit
rℓ−1
pole jednoho neuronu předchozí vrstvy — okénko se skládá z jejích neuronů, takže dostane aspoň tolik
kℓ − 1
o kolik sousedů okénko velikosti kℓ sahá dál než jeden neuron
Δℓ−1, Δℓ
rozestup sousedních neuronů měřený v pixelech vstupu — každý soused navíc přidá právě tolik pixelů; na vstupu je 1
sℓ
krok vrstvy — pooling s krokem 2 rozestup zdvojí, a proto každá další vrstva po poolingu roste dvakrát rychleji
Příklad — receptivní pole naší sítě
  1. vstup: r = 1, Δ = 1;
  2. konvoluce 3 × 3: r = 1 + 2 · 1 = 3, Δ = 1 · 1 = 1;
  3. max-pooling 2 × 2, krok 2: r = 3 + 1 · 1 = 4, Δ = 1 · 2 = 2;
  4. konvoluce 3 × 3: r = 4 + 2 · 2 = 8, Δ = 2 · 1 = 2 — výřez 8 × 8, velikost číslice;
  5. globální max přes mapu 3 × 3: r = 8 + 2 · 2 = 12 — celé plátno.

Barvy podle vzorce výše.

12 × 12 obrázek 8 × 10 × 10 konvoluce 3 × 3, ReLU 8 × 5 × 5 max-pooling 2 × 2 16 × 3 × 3 konvoluce 3 × 3, ReLU 16 globální max 10 softmax
Naše konvoluční síť: rozměry dat mezi vrstvami (1 418 parametrů)

4. Co se síť naučila

Síť učíme stejně jako v dílu Neuronová síť od nuly: zpětné šíření chyby a gradientní sestup, 25 průchodů daty. Jediný rozdíl je, že gradient filtru se sčítá přes všechny polohy, kde byl filtr použit:

∂E/∂Kf[c, u, v] = ∑i,j δf[i, j] · X[c, i + u, j + v]

∂E/∂Kf[c, u, v]
gradient jedné váhy filtru — o kolik ji posune gradientní sestup
∑i,j
součet přes všechny polohy mapy — tatáž váha byla použita všude, a tak se o její změně „hlasuje“ ze všech míst; sem se promítne sdílení vah
δf[i, j]
chybový signál mapy v poloze (i, j), ∂E/∂Yf[i, j] — jak moc by chyba klesla, kdyby tu filtr odpověděl jinak; po ReLU a poolingu je ve většině poloh nula
X[c, i + u, j + v]
pixel, který tahle váha v poloze (i, j) násobila — stejně jako u obyčejného neuronu je gradient váhy „signál krát vstup“
Gradient prahu bf je prostě ∑i,j δf[i, j].
Věta — gradient max-poolingu

Nechť q ≥ 1 a P : ℝq → ℝ, P(a) = max(a1, …, aq). Nechť a ∈ ℝq má jediné maximum v prvku am, tj. am > at pro všechna t ≠ m. Pak je P v bodě a diferencovatelná a

∂P/∂am(a) = 1,   ∂P/∂at(a) = 0 pro t ≠ m.

Důkaz. Pro q = 1 je P(a) = a1. Pro q ≥ 2 položme ε = mint ≠ m (am − at) > 0. Pro každé h ∈ ℝq s |ht| < ε/2 pro všechna t je am + hm > at + ht pro t ≠ m, takže P(a + h) = am + hm. V okolí bodu a je tedy P lineární funkce, která závisí jen na m-té složce, a odtud plynou uvedené derivace. ∎

Slovy: malá změna kteréhokoli prvku kromě maxima výsledek nezmění, změna maxima se přenese beze změny. Pooling proto při zpětném šíření pošle celý signál jen do polohy, odkud maximum přišlo; ostatní tři ze čtverečku 2 × 2 dostanou nulu. Náš kód si tu polohu při dopředném průchodu zapamatuje.

# jeden krok učení naší konvoluční sítě na obrázku x se třídou c (η = 0,02)
dopředu:  a1 = ReLU(konvoluce(x, K1) + b1)            # 8 × 10 × 10
          p1 = maxpool2×2(a1), zapamatuj polohy maxim  # 8 × 5 × 5
          a2 = ReLU(konvoluce(p1, K2) + b2)           # 16 × 3 × 3
          g  = max přes každou mapu a2, zapamatuj polohy   # 16
          p  = softmax(W · g + b3)                    # 10
dozadu:   dz = p − (1 v místě c, jinde 0)
          dg = Wᵀ · dz                    # ještě se starým W
          W, b3  −= η · gradienty z dz
          δ2 = dg jen v poloze maxima, ReLU propustí jen kladné
          dp1 = δ2 rozprostřené zpět přes váhy K2
          K2, b2 −= η · ∑ přes polohy δ2 · okénko p1
          δ1 = dp1 jen v poloze maxima čtverečku 2 × 2, ReLU jako výše
          K1, b1 −= η · ∑ přes polohy δ1 · okénko x
8 filtrů 3 × 3 vstup a 8 map příznaků
Naučené filtry první vrstvy (světlá = kladná váha, tmavá = záporná) a jejich odezvy na jednu číslici

Filtry jsou jen 3 × 3 pixely a nejsou tak úhledné jako ručně navržený Sobel — síť je odvodila z pouhých 500 obrázků. Přesto je u řady z nich vidět světlá a tmavá strana, tedy detektor přechodu v určitém směru, a jiné připomínají šikmé čárky. Mapy příznaků ukazují, kde v obrázku který filtr „zabral“: na trojce jeden reaguje hlavně na vodorovné tahy, jiné na její pravý svislý okraj, další na celou kresbu.

5. Posun: konvoluční síť proti plně propojené

Síťparametrůtest, malý posuntest, posun o 2 px
plně propojená 144-32-104 97099,9 %16,3 %
konvoluční1 418100 %58,0 %
plně propojená, augmentovaná data4 97089,8 %82,9 %
konvoluční, augmentovaná data1 418100 %99,9 %

Konvoluční síť má třikrát méně parametrů a na číslicích posunutých víc, než kdy viděla, poznala 58,0 % — místo 16,3 % u plně propojené. Dokonalá ale není: filtry druhé vrstvy se v okrajových polohách plátna při tréninku skoro neprocvičily. Konvoluce dává síti schopnost přenést naučené na jiné místo, ne záruku.

Definice — ekvivariance a invariance vůči posunu

Obrázky a mapy zde chápeme jako funkce na celé mřížce ℤ2, které mimo plátno mají hodnotu 0: obrázek s C kanály je funkce X : {1, …, C} × ℤ2 → ℝ. Pro vektor a = (a1, a2) ∈ ℤ2 je posun o a zobrazení X ↦ TaX,

(TaX)[c, i, j] = X[c, i − a1, j − a2]

(obsah, který byl v poloze (i, j), se přesune do (i + a1, j + a2)). Nechť g je zobrazení, které obrázku přiřadí výstup.

  1. Je-li výstupem opět obrázek (mapa), je g vůči posunu ekvivariantní, právě když ∀a ∈ ℤ2 ∀X :   g(TaX) = Tag(X) — posun vstupu posune výstup o totéž.
  2. g je vůči posunu invariantní, právě když ∀a ∈ ℤ2 ∀X :   g(TaX) = g(X) — posun výstup nezmění.
Věta — konvoluce je ekvivariantní, globální maximum invariantní

Na konečném plátně se posun nedá provést beze ztrát (něco vypadne přes okraj), věta proto mluví o polohách uvnitř. Nechť X ∈ ℝC×n×n je vstup, a ∈ ℤ2 a TaX ∈ ℝC×n×n obrázek posunutý o a na témž plátně (pixely, které by ležely mimo plátno, vypadnou; prázdná místa jsou 0). Nechť Y[X] je jedna mapa konvoluční vrstvy z definice výše (s filtrem K a prahem b, před ReLU i po něm) a M = {0, …, m − 1}2 množina jejích poloh. Pak

  1. pro každé (i, j) ∈ M, pro které je i (i − a1, j − a2) ∈ M, platí Y[TaX][i, j] = Y[X][i − a1, j − a2];
  2. označme G(X) = max(i, j) ∈ M Y[X][i, j] globální maximum mapy. Nabývá-li mapa Y[X] maxima v poloze (i′, j′), pro kterou je (i′ + a1, j′ + a2) ∈ M, a mapa Y[TaX] maxima v poloze (i, j), pro kterou je (i − a1, j − a2) ∈ M (maximum se posunem nedostalo přes okraj), pak G(TaX) = G(X).

Důkaz. (1) Pro u, v = 0, …, k − 1 leží (i − a1 + u, j − a2 + v) i (i + u, j + v) na plátně, a proto (TaX)[c, i + u, j + v] = X[c, i − a1 + u, j − a2 + v]; dosazením do vzorce konvoluční vrstvy dostaneme se stejnými vahami K přesně součet pro polohu (i − a1, j − a2). Jde to jen proto, že K na poloze nezávisí. ReLU působí na každé číslo zvlášť, takže rovnost nezkazí. (2) Podle (1) je Y[TaX][i′ + a1, j′ + a2] = Y[X][i′, j′] = G(X), tedy G(TaX) ≥ G(X), a G(TaX) = Y[TaX][i, j] = Y[X][i − a1, j − a2] ≤ G(X). ∎

Max-pooling 2 × 2 s krokem 2 je ekvivariantní jen vůči posunům o sudý počet pixelů (posun o 2 v obrázku je posun o 1 v menší mapě); posun o 1 pixel rozdělí hodnoty do čtverečků jinak. I proto naše síť přesně invariantní není.

Příklad — týž filtr na posunutém obrázku

Obrázek z příkladu v oddílu o konvoluční vrstvě posunutý o pixel doleva a jeho mapa s týmž filtrem a prahem:

T(0, −1)X = 1100010001001110   Y = 4030

Mapa 0403 se posunula o sloupec doleva spolu s obrázkem — ekvivariance. Její maximum je v obou případech 4 — invariance: vrstva, která se ptá jen „je tu někde svislá čárka?“, dá stejnou odpověď.

Definice — augmentace dat

Nechť 𝒳 je množina vstupů (obrázků), D = ((x1, y1), …, (xN, yN)) trénovací data s xk ∈ 𝒳 a třídami yk a 𝒯 množina transformací t : 𝒳 → 𝒳 (posuny, otočení, zrcadlení, změny jasu …), o kterých předpokládáme, že správnou třídu nemění: pro každé t ∈ 𝒯 má t(x) touž třídu jako x. Augmentace dat učí síť místo na D na datech

D′ = ((t1(x1), y1), …, (tN(xN), yN)),   t1, …, tN ∈ 𝒯 vylosované náhodně,

případně na sjednocení D a takových upravených kopií. Síť tak uvidí tytéž příklady v různých podobách, u kterých se správná odpověď nemění. V našem pokusu je 𝒯 množina posunů o −2 až 2 pixely v každém směru; 500 trénovacích číslic jsme vygenerovali znovu, každou s náhodně vylosovaným posunem z 𝒯.

Laicky řečeno

Když chceme, aby síť poznala číslici kdekoli, ukažme jí ji kdekoli. Se stejným počtem 500 obrázků, ale posunutých až o 2 pixely, má konvoluční síť na velkých posunech 99,9 %. Plně propojená se zlepší taky, na 82,9 % — jenže musí každou polohu naučit zvlášť, a tak se zhorší i na malých posunech (89,8 %). Konvoluce a augmentace se doplňují: architektura dá síti správný předpoklad, data ho doladí.

6. Od PSČ k ImageNetu

  • Neokognitron (Kunihiko Fukušima, 1980) navrhl střídání vrstev, které hledají vzory, a vrstev, které je zobecňují — inspirován zrakovou kůrou koček.
  • LeNet (Yann LeCun, 1989 až 1998) přidal učení zpětným šířením a četl ručně psaná PSČ na amerických obálkách a částky na šecích.
  • AlexNet (2012) — osm vrstev, ReLU, dropout, augmentace a výpočet na grafických kartách — vyhrál ImageNet s velkým náskokem.
  • ResNet (2015) díky reziduálním spojením naučil sítě se 152 vrstvami.
  • Transformery pro obraz (ViT, 2020) rozdělí obrázek na čtverečky a zpracují je jako slova; na velkých datech konvolučním sítím konkurují, na menších datech mají konvoluce stále výhodu svého vestavěného předpokladu.

7. Shrnutí

  • Plně propojená síť bere každý pixel zvlášť a naučené nepřenese na jiné místo: na posunutých číslicích 16,3 %.
  • Konvoluční vrstva posouvá malé filtry po celém obrázku se sdílenými vahami — 1 728 vah místo 9,6 milionu.
  • Pooling zmenšuje mapy a zvětšuje receptivní pole; hlubší vrstvy skládají jednoduché příznaky do složitějších.
  • Naučené filtry první vrstvy jsou detektory hran; konvoluční síť s 1 418 parametry dala na posunutých číslicích 58,0 %.
  • S augmentací dat dosáhla 99,9 %, plně propojená jen 82,9 %.

Chcete si to osahat? Nechte AI agenta stáhnout dataset MNIST a natrénovat na něm malou konvoluční síť v PyTorchi — a pak jí ukázat číslice posunuté o pět pixelů. Pomůže, když přidáte augmentaci?

Máte na to jiný názor? Napište na support@coden-app.com.

Agent na vašem počítači, ovládaný z telefonu