Cuprins
S21/Sesiunea 21/Deep learning/~1 săptămână

CNN I

La final știi săÎnțelegi cum funcționează o rețea convoluțională și arhitecturile clasice, și știi să calculezi dimensiunile.

Toate moduleleS21 · CNN I

CNN-urile (rețele convoluționale) sunt uneltele pentru imagini. În loc să conecteze fiecare pixel la fiecare neuron, ceea ce ar fi enorm, folosesc filtre mici care se plimbă peste imagine. Așa învață trăsături locale (margini, colțuri, apoi forme) eficient și cu puține greutăți. Ai văzut convoluția de mână la S17; aici o rețeaua o învață singură.

01

De ce nu un MLP obișnuit pe imagini

Dacă ai lega fiecare pixel dintr-o imagine de 224x224 color la fiecare neuron, ai avea sute de mii de greutăți doar în primul strat. Prea multe: model uriaș, lent, care face overfitting imediat. În plus, un MLP tratează fiecare pixel independent și pierde faptul că pixelii vecini formează structuri.

CNN-urile exploatează două idei. Localitate: trăsăturile utile (o margine) sunt locale, deci un filtru mic ajunge. Partajarea greutăților: același filtru se plimbă peste toată imaginea, deci o margine e recunoscută oriunde apare, cu aceleași greutăți. Puține greutăți, multă putere.

02

Stratul convoluțional: kernel, stride, padding

Un strat convoluțional aplică mai multe filtre învățate peste intrare, fiecare producând o hartă de trăsături care evidențiază un anumit tipar. Trei setări definesc cum se plimbă filtrul.

  • Kernel: mărimea filtrului (de obicei 3x3). Cât de mare e fereastra care se plimbă.
  • Stride: cu cât sare filtrul la fiecare pas. Stride 2 sare din doi în doi, micșorând ieșirea.
  • Padding: cât umpli cu zerouri marginile, ca ieșirea să nu se micșoreze prea repede și colțurile să conteze.

Trebuie să știi să calculezi dimensiunea ieșirii, altfel nu poți lega straturile corect. E o formulă simplă pe care o aplici pentru fiecare strat.

ieșire = (intrare - kernel + 2·padding) / stride + 1
Pentru o intrare de 32, kernel 3, padding 1, stride 1: (32 - 3 + 2) / 1 + 1 = 32. Dimensiunea se păstrează.
03

Pooling și câmpul receptiv

Pooling-ul micșorează harta de trăsături, luând de exemplu maximul din fiecare fereastră 2x2 (max pooling). Reduce dimensiunea, deci calculul, și mărește câmpul receptiv: cât din imaginea originală vede un neuron. Straturile de sus, cu câmp receptiv mare, văd forme întregi, nu doar margini.

Global average pooling e o alternativă curată la straturile dense de la final: mediază fiecare hartă de trăsături într-un singur număr. Are mai puține greutăți și face mai puțin overfitting decât straturile dense mari.

04

Arhitecturi clasice și ResNet

Tiparul clasic al unui CNN: alternezi straturi convoluționale și pooling, care extrag trăsături din ce în ce mai abstracte, apoi la final un cap de clasificare care dă clasa. LeNet (cifre) și VGG (stive de convoluții 3x3) sunt punctele de plecare istorice.

Problema rețelelor foarte adânci: gradientul dispare pe drumul înapoi prin multe straturi, iar rețeaua nu mai învață. ResNet a rezolvat asta cu conexiuni reziduale: o scurtătură care sare peste câteva straturi și adună intrarea la ieșire. Gradientul poate curge direct prin scurtătură, deci rețele de zeci sau sute de straturi devin antrenabile. De aici pornesc majoritatea modelelor moderne de imagini.

Reține
  • CNN-urile folosesc filtre mici partajate: puține greutăți, recunosc trăsături oriunde apar.
  • Stratul convoluțional are kernel, stride, padding; ieșirea se calculează cu o formulă simplă.
  • Pooling-ul micșorează harta și mărește câmpul receptiv.
  • Tiparul: convoluții plus pooling pentru trăsături, apoi cap de clasificare.
  • Conexiunile reziduale (ResNet) lasă gradientul să treacă prin rețele adânci.
Index
Convoluție, kernel, stride, padding, dilatareCalculul dimensiunilorPooling, global average poolingCâmp receptivLeNet, VGG, ResNet și conexiunile reziduale
Dacă vrei mai mult