4  Evrişimli Ağlar (ConvNets) ve Doğal Sinyaller

NYU’nun iki hocalı ritmi: LeCun convolution’ın nedenini verir — doğal dünya kompozisyoneldir, kökü görsel kortekstedir (Hubel-Wiesel → LeNet5); Canziani bunu sistematikleştirir — doğal sinyallerin üç özelliği (stationarity, locality, compositionality) doğrudan üç mimari karara (parameter sharing, sparsity, hiyerarşi) çevrilir

NotBölüm bilgisi

4.1 Bu Derste Ne Var?

Hafta 2’nin sonunda bir sorun bırakmıştık: tam-bağlı (fully connected) bir ağ bir görüntüyü işlemek için onu uzun bir vektöre düzleştirir — ve bu, hem parametre sayısını patlatır hem de komşu piksellerin uzamsal yapısını yok eder. Bu hafta çözümü görüyoruz: convolution ve evrişimli ağlar (ConvNets).

Yine iki hocalı. Yann LeCun (Lecture) convolution’ın neden doğru araç olduğunu anlatır: doğal dünya kompozisyoneldir (kenarlar köşeleri, köşeler nesneleri oluşturur) ve bu fikrin kökü biyolojidedir — görsel korteks (Hubel & Wiesel). Sonra Alfredo Canziani (Practicum) bunu somutlaştırır: doğal sinyallerin üç özelliğini (stationarity, locality, compositionality) tanımlar ve her birinin hangi mimari seçime (parameter sharing, sparsity) yol açtığını gösterir.

Bu haftanın üç ana fikri:

  1. Convolution = kayan pencere + paylaşılan ağırlıklar (kernel). Aynı küçük filtreyi tüm görüntüde gezdirirsin; bu, parametreyi azaltır ve öteleme-değişmezlik kazandırır.
  2. ConvNet = convolution + nonlinearite + pooling, hiyerarşik olarak istiflenir; çünkü dünya kompozisyoneldir.
  3. Mimari, verinin yapısından doğar: locality → sparsity (seyrek bağlantı), stationarity → parameter sharing (ağırlık paylaşımı).

flowchart TB
    subgraph Ozellik["Doğal sinyalin üç özelliği (Canziani)"]
        direction LR
        Stat["Stationarity<br/>(durağanlık):<br/>aynı desen her yerde"]
        Loc["Locality<br/>(yerellik):<br/>bilgi yerel komşulukta"]
        Comp["Compositionality<br/>(kompozisyonellik):<br/>parçalar bütünü kurar"]
    end

    subgraph Karar["Üç mimari karar (ConvNet)"]
        direction LR
        Share["Parameter Sharing:<br/>aynı kernel her konumda"]
        Sparse["Sparsity:<br/>yalnızca yerel pencere"]
        Hier["Hiyerarşi / Derinlik:<br/>katmanları istifle"]
    end

    Stat -- "türetir" --> Share
    Loc -- "türetir" --> Sparse
    Comp -- "türetir" --> Hier

    Karar --> Ritim["ConvNet ritmi:<br/>convolution → nonlinearite → pooling"]
    Ritim --> Biyoloji["Biyolojik kök (V1 görsel korteks):<br/>simple cell = convolution<br/>complex cell = pooling"]

İpucuBuilder Notu — Convolution: Hafta 2’nin Açık Sorusunu Kapatmak

Geriye (önkoşul kurslar):

  • Convolution = kayan iç çarpım → 18.06 dot product / lineer operatör + Hafta 1 “filtre·yama” sezgisi.
  • Hiyerarşik öznitelik → Hafta 1 (elle vs öğrenilen hiyerarşi) + Calculus fonksiyon bileşkesi.
  • Parameter sharing / öteleme-değişmezlik → §4.J “equivariance vs invariance”; 18.06 öteleme-değişmez operatör.

İleriye (production / research):

  • ConvNet omurgası → ResNet, U-Net, YOLO, ve görü foundation modelleri.
  • “Veri yapısı → mimari” ilkesi → geometric deep learning (graf ağları, Hafta 13) ve transformer’ların (Hafta 12) tasarım felsefesi.

Tek cümleyle: Convolution, doğal sinyallerin yerel, tekrar eden, kompozisyonel yapısını sömüren bir kayan-filtre işlemidir; ConvNet bu filtreleri nonlinearite ve pooling ile hiyerarşik istifleyerek görüntüden öznitelikleri uçtan uca öğrenir.

4.2 (LeCun) Neden Tam-Bağlı Ağ Yetmez?

LeCun convolution’a, tam-bağlı ağın görüntüde neden başarısız olduğunu göstererek giriyor. Bir görüntüyü nn.Linear’a vermek için onu tek bir vektöre düzleştirmen gerekir. İki büyük sorun çıkar:

  1. Parametre patlaması. 1000×1000×3 = 3 milyon girdiyi 1000 nöronlu bir katmana bağlamak 3 milyar ağırlık demektir — tek bir katmanda. Eğitilemez, belleğe sığmaz.
  2. Uzamsal yapı kaybı. Düzleştirme, komşu piksellerin komşuluğunu yok eder; ağ “şu piksel şunun yanında” bilgisini baştan kaybeder. Oysa bir görüntüde anlam tam da bu yerel komşuluktadır.

Çözüm, görüntünün yapısını kullanan bir operatördür. LeCun’un cevabı: aynı küçük yerel öznitelik dedektörünü (filtre) tüm görüntüde gezdir, çıktılarını topla — ve öteleme-değişmez bir tespit elde et.

“[you have] local feature detectors and then [you] sum up their activity, and what you get is an invariant detection.” — LeCun, 25:41

Şekil 4.1 her iki sorunu da somutlaştırır: solda tam-bağlı katman convolution’a göre ~7000× fazla parametre ister, sağda düzleştirme komşu pikselleri 1B vektöre dağıtarak uzamsal yapıyı bozar — convolution ikisini birden çözer.

Şekil 4.1: Tam-bağlı bir katman görüntü girdisinde parametreyi patlatır (3.145.728’e karşı 432, ~7000× fazla) ve düzleştirme komşu pikselleri 1B vektöre dağıtarak uzamsal yapıyı yok eder; convolution her iki sorunu da çözer.
İpucuBuilder Notu — Parametre Patlaması

Geriye (Hafta 2): Bu, Hafta 2 Egzersiz 5’in cevabıdır: 1000×1000 RGB için tam-bağlı ilk katman milyarlarca parametre ister; convolution bunu birkaç bine indirir (kernel paylaşımı).

İleriye: “Yapıyı sömür” ilkesi her modern mimaride var: convolution uzamsal yapıyı, attention diziyi/grafı, GNN graf yapısını sömürür.

4.3 (LeCun) Weight Sharing ve Convolution Operatörü

İki fikir convolution’ı kurar. Birincisi weight sharing (ağırlık paylaşımı): bir ağırlık grubunu görüntünün her konumunda aynen kullanmaya zorlarsın.

“you change all the copies of W at the same time, in a very simple manner — and that’s called weight sharing: when two weights are forced to be [equal].” — LeCun, 12:06

İkincisi convolution’ın tanımı: küçük bir pencereyi (kernel) girdinin üzerinde kaydırıp her konumda bir iç çarpım hesaplamak.

“an input window, and then swiping it over — that’s a convolution.” — LeCun, 26:49

1B durumda, sinyal \(x\) ile kernel \(w\)’nin convolution’ı:

\[ (x * w)[i] = \sum_{k} x[i+k]\, w[k] \]

Aynı \(w\) her \(i\) konumunda kullanılır (paylaşım). 2B/3B/4B kernel’lere genelleşir; çok-boyutlu kernel’e LeCun “kernel” der. (Teknik not: matematiksel convolution kernel’i ters okur; ML’de genelde ters okumadan kullanırız — buna aslında cross-correlation denir, ama pratikte “convolution” deriz.)

Somut örnek. \(x = [1, 2, 3, 4, 5]\), kernel \(w = [1, 0, -1]\) (basit bir kenar/fark dedektörü). Pencereyi kaydırarak her konumda iç çarpım: konum 0 → \(1 \cdot 1 + 2 \cdot 0 + 3 \cdot (-1) = -2\); konum 1 → \(2 \cdot 1 + 3 \cdot 0 + 4 \cdot (-1) = -2\); konum 2 → \(3 \cdot 1 + 4 \cdot 0 + 5 \cdot (-1) = -2\). Çıktı \([-2, -2, -2]\): sinyal düzgün arttığı için fark dedektörü her yerde aynı yanıtı verir. İşte stationarity (aynı desen) + weight sharing (aynı kernel) birlikte: aynı yapı nerede olursa olsun aynı tepki. Şekil 4.2 bu üç kayma konumunu ve her konumda aynı iç çarpımı somut olarak gösterir.

Şekil 4.2: x=[1,2,3,4,5] sinyaline w=[1,0,-1] kenar dedektörünün üç konumda kaydırılması: her konumda aynı çekirdek aynı iç çarpımı (= -2) üretir, böylece ağırlık paylaşımı çıktı [-2,-2,-2] ile durağanlığı (stationarity) somutlaştırır.

Bu yüzden convolution doğal olarak bir öznitelik dedektörüdür: kernel belli bir yerel deseni (kenar, köşe) arar; çıktısı yüksekse “burada o desen var” der. Yerel dedektörlerin çıktılarını topladığında, desenin konumundan görece bağımsız bir tespit elde edersin. Şekil 4.3 aynı fikri 2B’de gösterir: farklı kernel’ler aynı görüntüden farklı yerel desenleri (kenar yönlerini) çeker.

Şekil 4.3: Aynı sentetik görüntüye uygulanan dört farklı 3×3 kernel: Sobel-X dikey kenarları, Sobel-Y yatay kenarları, Laplace ise tüm kenarları yakalar — her kernel ayrı bir yerel deseni vurgulayan bir öznitelik haritası (feature map) üretir.
İpucuBuilder Notu — Kernel = Kayan İç Çarpım

Geriye (18.06 + Hafta 1): Kernel·yama iç çarpımı, 18.06 dot product’tır; her konumda aynı kernel, Hafta 1’in “filtre bir yamaya bakar” sezgisinin tüm görüntüye yayılmış hâli.

İleriye: Weight sharing parametreyi dramatik azaltır ve öteleme-değişmezlik (equivariance) kazandırır — nesne nerede olursa olsun aynı filtre onu yakalar. Donanımda convolution, optimize edilmiş bir GEMM/kernel çağrısıdır.

4.4 (LeCun) ConvNet’in Üç İşlemi: Conv, Nonlinearite, Pooling

LeCun bir ConvNet’i üç işlemin dönüşümlü tekrarı olarak tanımlıyor:

“[a convnet is an] alternation of linear operators [convolution] and pointwise non-linearity… and there’s going to be a third type of operation called pooling, which is actually optional.” — LeCun, 30:24

  1. Convolution — yerel öznitelikleri çıkarır (paylaşılan kernel).
  2. Nonlinearite (ReLU) — Hafta 1-2’deki gerekçeyle, doğrusal çöküşü önler.
  3. Pooling (opsiyonel) — küçük bir pencerede özetler (örn. 2×2 ortalama/maksimum), çözünürlüğü düşürür ve küçük konum değişimlerine dayanıklılık katar.

Önemli bir ayar stride (adım): kernel’i 1 yerine \(s\) piksel kaydırırsan çıktı küçülür. Girdi boyutu \(n\), kernel \(k\), stride \(s\) için çıktı boyutu:

\[ o = \left\lfloor \frac{n - k}{s} \right\rfloor + 1 \]

Örneğin \(n = 100\), \(k = 5\), \(s = 1\) → çıktı 96. Stride > 1, hem hesabı azaltır hem de pooling gibi alt-örnekleme (downsampling) yapar. Şekil 4.4 bu üç-işlem ritmini ve çıktı boyutu formülünü tek şemada toplar.

Şekil 4.4: ConvNet’in üç-işlem ritmi: her katman girdiyi Konvolüsyon (öznitelik tespiti) → ReLU (doğrusal-olmayan) → Havuzlama (alt-örnekleme) sırasıyla işler ve bu blok katmanlar boyunca tekrarlanır; çıktı boyutu o = ⌊(n−k)/s⌋ + 1 ile verilir (n=100, k=5, s=1 → 96).

Pooling’e biraz daha yakından. Pooling, küçük bir pencerede (örn. 2×2) öznitelikleri özetler — en yaygın iki yol max pooling (penceredeki en güçlü yanıtı al) ve average pooling (ortalamasını al). LeNet5 ortalama pooling kullanıyordu; modern ağlar çoğunlukla max tercih eder. Pooling’in iki işlevi var: (1) çözünürlüğü düşürerek bir sonraki katmanın daha geniş bir alanı görmesini sağlar (etkin receptive field büyür); (2) bir öznitelliğin tam konumundaki küçük kaymalara dayanıklılık (invariance) katar — birazdan göreceğimiz “complex cell” fikrinin tam karşılığı. Yani conv “nerede” bilgisini korur (equivariance), pooling onu kasıtlı olarak biraz bulanıklaştırır (invariance); ikisinin dengesi, ConvNet’in hem konuma duyarlı hem konuma dayanıklı olmasını sağlar. Şekil 4.5 hem havuzlamanın özetlemesini hem de kaymaya dayanıklılığını sayısal olarak gösterir.

Şekil 4.5: Havuzlama (pooling) iki işi yapar: üstte 4×4 öznitelik haritasının 2×2 maks ve ortalama havuzlamayla özetlenmesi, altta ise küçük bir piksel kaymasına rağmen maks havuz çıktısının neredeyse değişmeden kalması (ortalama fark ≈ 0.38) gösterilerek complex cell konum değişmezliği örneklenir.
İpucuBuilder Notu — Conv-Nonlin-Pool Ritmi

Geriye (Hafta 2): “Conv + nonlinearite” çifti, Hafta 2’nin “afin + nonlinearite” (döndür-ez) atomunun uzamsal versiyonudur — afin yerine ağırlık-paylaşımlı convolution.

İleriye: Modern ağlarda pooling yerini çoğunlukla strided convolution’a bıraktı; ama “çıkar → büz → özetle” ritmi her görü mimarisinde sürer (ResNet, ConvNeXt).

4.5 (LeCun) Hiyerarşik Temsil ve Kompozisyonel Dünya

Neden katmanları istifleriz? Çünkü doğal dünya kompozisyoneldir: küçük parçalar birleşip daha büyük yapıları oluşturur.

“we want to build hierarchical representations because the world is compositional… edges kind of assemble to form local features like corners and T-junctions [and so on].” — LeCun, 34:17

Yani: pikseller → kenarlar → köşeler/eğriler → motifler → nesne parçaları → nesneler. Her ConvNet katmanı bir alt seviyenin öznitelliklerini birleştirip bir üst seviyeyi kurar. LeCun’un vurgusu: bu hiyerarşi keyfi değil, dünyanın kendi yapısını yansıtır — ve belki de derin öğrenmenin neden bu kadar iyi çalıştığının sebebi budur. Şekil 4.6 bu piramidi pikselden nesneye kadar gösterir.

Şekil 4.6: Kompozisyonel hiyerarşi piramidi: bir ConvNet katman katman pikselleri kenarlara, kenarları köşelere/eğrilere, onları motiflere/parçalara ve en sonunda nesnelere dönüştürerek dünyanın parçalardan kurulu yapısını yeniden inşa eder.
İpucuBuilder Notu — Kompozisyonel Dünya

Geriye (Calculus + Hafta 1): Katman istifleme = fonksiyon bileşkesi (Calculus zincir kuralı dünyası); hiyerarşik öznitelik, Hafta 1’in “düşük→orta→yüksek seviye özellik” sezgisinin somutlaşması.

İleriye: “Kompozisyonel hiyerarşi” fikri, transfer learning’in (önceki katmanlar genel, son katmanlar göreve özel) ve foundation modellerin temel gerekçesidir.

4.6 (LeCun) Biyoloji: Görsel Korteks, Hubel-Wiesel ve Complex Cells

LeCun bu fikirlerin biyolojik kökenini anlatıyor. Görsel sinyal gözden beynin arkasındaki birincil görsel kortekse (V1) gider; oradan V2, V4, IT boyunca bir hiyerarşi (ventral pathway) izler.

“this idea — hierarchy and local feature detection — comes from biology.” — LeCun, 37:36

İki anahtar kavram, Hubel & Wiesel’in keşfi:

  • Receptive field (alıcı alan): Bir nöronun yalnızca görsel alanın küçük bir bölgesine duyarlı olması. Bar o bölgenin dışına çıkınca nöron tepki vermez. Aynı işi yapan nöronlar tüm görsel alana kopyalanmıştır (bu, weight sharing’in biyolojik karşılığıdır).
  • Complex cells (karmaşık hücreler): Bir öznitelliğin tam konumundaki küçük değişimlere değişmez (invariant) tepki verir — pooling’in biyolojik karşılığı.

Hubel & Wiesel aslında iki hücre tipi buldu: simple cells (basit hücreler) belirli bir konumda belirli bir yönelimdeki kenarlara tepki verir — convolution filtresinin biyolojik karşılığı; complex cells (karmaşık hücreler) ise aynı yönelimi konumdan görece bağımsız tanır (bir grup simple cell’in çıktısını özetler) — pooling’in karşılığı. Yani görsel korteksin “kenar bul, sonra konumu bulanıklaştır” ritmi, convolution + pooling ritminin ta kendisidir.

Bu fikirler 1980’lerde Fukushima’nın neocognitron’una, oradan LeCun’un ConvNet’ine ilham verdi. Neocognitron simple/complex cell katmanlarını taklit ediyordu ama backprop ile eğitilmiyordu; LeCun’un katkısı tam da bu yapıyı uçtan uca gradient ile eğitilebilir kılmaktı. Modelin bazı öznitelik dedektörleri elle tasarlanmış, bazıları öğrenilmişti — derin öğrenmenin “elle mühendislikten öğrenmeye” geçişinin (Hafta 1) görüdeki somut anı.

İpucuBuilder Notu — Görsel Korteks ↔︎ ConvNet

Geriye (§4.J): Receptive field + replikasyon = equivariance (öteleme-eşdeğişkenlik, convolution); complex cell = invariance (pooling). §4.J’deki “equivariance vs invariance” ayrımının biyolojik kökü budur.

İleriye: Görsel korteks ↔︎ ConvNet benzerliği, nörobilim-ML kesişiminin (NeuroAI) klasik örneğidir; ama modern ağlar artık biyolojiyi taklit etmekten çok mühendislik kısıtlarıyla şekillenir.

4.7 (LeCun) LeNet5: İlk ConvNet’ler

LeCun kendi tarihî ağını, LeNet5’i anlatıyor (el yazısı rakam tanıma). Yapı taşları bugünküyle aynı: strided convolution + pooling (2×2 ortalama) + nonlinearite, hiyerarşik istiflenmiş. Her katman bir öznitelik haritaları (feature maps) kümesi üretir; bir sonraki katman, önceki haritaların kombinasyonlarını algılamak için her biri farklı kernel’lerle convolve eder.

İlginç bir tarihsel ayrıntı: LeNet5’te öznitelik haritaları arasındaki bağlantı tam değildi — her harita önceki tüm haritalara bağlı değildi; belirli bir kombinasyon şeması vardı (hesabı azaltmak ve çeşitlilik için). Convolution kernel’ine bazen filtre de denir. En üstteki haritalar tek bir konuma indiğinde, bunlar artık çıktı sınıfları olur.

Akışı izlemek aydınlatıcı: giriş görüntüsü → convolution (birkaç öznitelik haritası) → pooling (çözünürlük yarıya) → tekrar convolution (önceki haritaların kombinasyonları, daha zengin öznitelikler) → tekrar pooling → … → en sonunda haritalar 1×1’e indiğinde tam-bağlı bir sınıflandırıcı. Yani LeNet5, “çıkar → büz → çıkar → büz → karar ver” ritmidir. Erken katmanlar basit kenarları, derin katmanlar nesne-benzeri parçaları yakalar — Bölüm 4’teki kompozisyonel hiyerarşinin somut hâli. Dikkat: tüm bu yapı, Hafta 2’deki aynı backprop ile uçtan uca eğitilir; “elle tasarım” yalnızca mimaridedir (kernel boyutu, katman sayısı), ağırlıklar öğrenilir. Şekil 4.7 bu akışı gerçek öznitelik haritalarıyla gösterir.

Şekil 4.7: LeNet5/ConvNet mimari akışı: girdi görüntüden conv katmanlarının ürettiği gerçek kenar öznitelik haritaları (üst), pooling ile çözünürlüğün yarıya inmesi ve çıkar→buz→çıkar→buz→karar ritmiyle düzleştirme-FC-sınıf akışı (alt); erken katmanlar kenar, derin katmanlar parça yakalar ve tüm kernel’ler backprop ile öğrenilir.
İpucuBuilder Notu — LeNet5 Soyağacı

Geriye (Hafta 2): LeNet5 de aynı “modül + maliyet + backprop” iskeletiyle eğitilir; tek fark, lineer modüllerin yerini ağırlık-paylaşımlı convolution modüllerinin almasıdır.

İleriye: LeNet5 (1998) → AlexNet (2012, Hafta 1’deki “ikinci devrim”) → VGG/ResNet. Çekirdek aynı kaldı; ölçek, derinlik ve donanım değişti.

4.8 Geçiş: LeCun’dan Canziani’ye

LeCun convolution’ın nedenini verdi: kompozisyonel dünya, biyolojik hiyerarşi, ağırlık paylaşımı, LeNet5. Şimdi Canziani bunu sistematikleştiriyor: convolution’ı “icat etmek” yerine, doğal sinyallerin hangi özelliklerinin convolution’ı zorunlu kıldığını gösteriyor. Üç kelime: stationarity, locality, compositionality — ve her biri bir mimari kararına çevriliyor.

4.9 (Canziani) Doğal Sinyallerin Üç Özelliği

Canziani, convolutional ağların neden bu kadar iyi olduğunu doğal sinyallerin üç özelliğine bağlıyor (görüntü, ses, metin — “doğada olduğu için doğal sinyal”).

  1. Stationarity (durağanlık): Aynı tür desen, sinyal boyunca tekrar tekrar görünür. Bir kenar görüntünün her yerinde aynı kenardır.
  2. Locality (yerellik): Bilgi yereldir — anlam, yakın komşu örneklerde toplanır, uzaktakilerle değil.
  3. Compositionality (kompozisyonellik): Dünya açıklanabilir biçimde parçalardan kurulur; küçük yapılar birleşip büyükleri oluşturur (LeCun’un hiyerarşisi).

“the key words for understanding convolutions [are]: stationarity, locality, compositionality.” — Canziani, 0:58

Canziani sezgiyi somutlaştırıyor: bir sinyali kendisiyle convolve edersen (flip + kaydır + iç çarpım) tekrar eden desenleri yakalarsın — durağanlığın matematiksel izi. Şekil 4.8 bu üç özelliğin her birini bir mimari karara nasıl eşlediğini tek şemada toplar.

Şekil 4.8: Canziani’nin doğal-sinyal özelliklerini ConvNet mimari kararlarına eşleyen üç satırlı şema: Stationarity→Parameter Sharing, Locality→Sparsity, Compositionality→Hiyerarşi/Derinlik — convolution’ın verinin yapısından türediğini gösterir.
İpucuBuilder Notu — Üç Özellik = İnductive Bias

Geriye (Hafta 1): Compositionality, Hafta 1’deki manifold/hiyerarşi sezgisinin sinyal-yapısı diliyle ifadesidir; stationarity ve locality, görüntü verisinin neden 3-milyon-boyutlu uzayın minik bir bölgesinde yaşadığını açıklar.

İleriye: Bu üç özellik bir “tümevarımsal önyargı (inductive bias)” listesidir; bir veriye doğru mimariyi seçmek, o verinin hangi özellikleri taşıdığını sormakla başlar (Hafta 13 graf ağları, Hafta 8 Bishop’ın inductive bias tartışmasına köprü).

4.10 (Canziani) Özellikten Mimariye: Locality → Sparsity, Stationarity → Parameter Sharing

Canziani’nin en güçlü adımı: her özelliği bir mimari karara çevirmek.

  • Locality → sparsity (seyrek bağlantı). Bilgi yerelse, bir çıktı nöronunun tüm girdiye bağlı olması gereksizdir; yalnızca küçük bir yerel pencereye bağlanır. Bu, tam-bağlı katmanın bağlantılarını dramatik azaltır.
  • Stationarity → parameter sharing (ağırlık paylaşımı). Aynı desen her yerde görünüyorsa, onu yakalayan filtreyi her konumda yeniden öğrenmek gerekmez; aynı kernel tüm konumlarda paylaşılır.

Canziani mantığı tersinden de vurguluyor: özellik yoksa teknik de geçersizdir.

“if my data doesn’t show locality, can I use sparsity? No.” — Canziani, 21:10

Yani sparsity ve parameter sharing “bedava” numaralar değil; doğrudan verinin yapısına dayanan, gerekçeli tasarım kararlarıdır. İkisi birlikte, tam-bağlı katmanı bir convolution katmanına dönüştürür.

İpucuBuilder Notu — Özellik → Mimari

Geriye (Hafta 2): Tam-bağlı katman (\(Wx + b\)) her girdiyi her çıktıya bağlardı; sparsity bunu yerel pencereye indirir, parameter sharing aynı \(W\)’yi her konumda kullanır. Convolution = “kısıtlanmış” bir lineer katmandır.

İleriye: “Doğru inductive bias = daha az parametre + daha iyi genelleme” denklemi, model verimliliğinin (data efficiency) temelidir; yanlış bias ise (örn. görüntüye saf MLP) veri ve compute israfıdır.

4.11 (Canziani) Kernel’ler: 1B, 2B, 3B ve Boyutlar

Canziani kernel’i somutlaştırıyor: bir convolution katmanı bir kernel topluluğudur. 1B sinyalde (ses) kernel küçük bir ağırlık penceresidir; her kernel bağımsızdır, dolayısıyla paralel eğitilebilir. Çok kanallı durumda kernel boyutları şöyle okunur: kaç kernel (çıktı kanalı) × kalınlık (girdi kanalı) × pencere boyutu.

Örneğin 7 girdi kanalından 3 çıktı kanalı üreten 1B kernel’ler “2 kernel” gibi gruplanabilir; görüntüde (2B) kernel’ler 3 boyutlu olur (yükseklik × genişlik × girdi kanalı), ve katman bunlardan birden çok tutar. Her kernel bir öznitelik haritası üretir; haritalar üst üste binerek bir sonraki katmanın girdisi olur — LeCun’un LeNet5 anlattığı yapının ta kendisi.

Bu, hem connection sparsity (her çıktı yalnızca yerel pencereye bakar) hem parameter sharing (aynı kernel her konumda) sağlar; ikisi olmadan parametre sayısı yine patlardı.

Sayılarla. 32×32×3 bir görüntüyü düşün. Tam-bağlı bir katman 1024 çıktı üretmek isterse: \(32 \cdot 32 \cdot 3 \cdot 1024 \approx\) 3,1 milyon ağırlık. Aynı işi 16 adet 3×3 convolution kernel’i ile yaparsan: \(16 \cdot (3 \cdot 3 \cdot 3) =\) 432 ağırlık (artı 16 bias). Yani convolution parametreyi binlerce kat azaltır — ve bu azalma “kalite kaybı” değil, doğru inductive bias’tır: parametreyi azaltmak aynı zamanda genelleme gücünü artırır, çünkü model verinin gerçek yapısına (yerel + durağan) uygun kısıtlanmıştır. Convolution çıktısının kanal sayısı kaç kernel kullandığınla belirlenir; her kernel girdinin tüm kanallarına bakar (kalınlık = girdi kanalı), tek bir öznitelik haritası üretir. Bu binlerce-kat azalma Şekil 4.1’de görselleştirilmiştir.

İpucuBuilder Notu — Kernel Topluluğu

Geriye (18.06): Kernel topluluğu = bir dizi yerel lineer operatör; çok-kanallı convolution, kanallar üzerinde toplanan iç çarpımlardır (18.06 matris-tensör işlemi).

İleriye: Kernel sayısı (genişlik) ve katman sayısı (derinlik) ConvNet’in kapasite eksenleridir; 1×1 convolution (kanal karıştırma), depthwise/separable convolution gibi varyantlar verimlilik için bunları yeniden düzenler.

4.12 (Canziani) Pratik: PyTorch’ta Bir ConvNet

Tüm bu fikirler PyTorch’ta birkaç satıra iner. Bir convolution katmanı nn.Conv2d, pooling nn.MaxPool2d; geri kalan Hafta 2’nin aynısı (forward → loss → backward → step). LeNet5-benzeri minik bir ağ:

import torch
import torch.nn as nn

convnet = nn.Sequential(
    nn.Conv2d(3, 16, kernel_size=3, padding=1), nn.ReLU(),  # 3 kanal -> 16 ozellik haritasi
    nn.MaxPool2d(2),                                         # cozunurluk yariya (invariance)
    nn.Conv2d(16, 32, kernel_size=3, padding=1), nn.ReLU(), # 16 -> 32: kombinasyonlar
    nn.MaxPool2d(2),
    nn.Flatten(),
    nn.Linear(32 * 8 * 8, 10),                              # son siniflandirici
)

x = torch.randn(64, 3, 32, 32)   # batch=64, 3x32x32 goruntu
y = convnet(x)                   # cikti: (64, 10) sinif skorlari

Dikkat edilecek noktalar: nn.Conv2d(in_channels, out_channels, kernel_size) ağırlık paylaşımını ve seyrek bağlantıyı otomatik yapar — sen yalnızca kanal sayılarını ve kernel boyutunu verirsin. padding=1, kenar etkilerini telafi eder (çıktı boyutunu korur). Flatten sadece en sonda, haritalar yeterince küçüldükten sonra çağrılır — Hafta 2’de yaptığımız erken düzleştirmenin (uzamsal yapı kaybı) tam tersi. Bu ağ da aynı loss.backward() + optimizer.step() döngüsüyle eğitilir; convolution sadece yeni bir modül tipidir.

İpucuBuilder Notu — nn.Conv2d Pratiği

Geriye (Hafta 2): Bu ağ Hafta 2’nin eğitim döngüsünün birebir aynısıyla eğitilir — convolution bir modül olduğundan backprop (LeCun’un Jacobian zinciri) onun için de otomatik çalışır.

İleriye: nn.Conv2d + nn.BatchNorm2d + residual bağlantı = modern ResNet bloğunun iskeleti; padding, stride, dilation parametreleri pratikte alıcı alanı (receptive field) ve çözünürlüğü ayarlamanın araçlarıdır.

4.13 Bu Dersin Özeti

  1. Tam-bağlı ağ görüntüde yetmez: parametre patlar, uzamsal yapı kaybolur (Hafta 2 köprüsü).
  2. Convolution = kayan pencere (kernel) + ağırlık paylaşımı. Aynı filtre tüm görüntüde gezer; iç çarpım hesaplar.
  3. ConvNet = convolution + nonlinearite + pooling (opsiyonel), hiyerarşik istiflenir; stride alt-örnekleme yapar.
  4. Hiyerarşi, dünyanın kompozisyonelliğinden gelir: pikseller → kenarlar → köşeler → nesneler.
  5. Biyolojik kök: görsel korteks V1-V2-V4-IT; simple cell = conv (equivariance), complex cell = pooling (invariance); Hubel-Wiesel → neocognitron → LeNet5.
  6. Mimari, verinin yapısından doğar (Canziani): locality → sparsity, stationarity → parameter sharing, compositionality → hiyerarşi/derinlik.
ÖnemliTek Bir Cümle

Convolution, doğal sinyallerin yerel (locality), tekrar eden (stationarity) ve kompozisyonel yapısını sömüren, ağırlık-paylaşımlı bir kayan-filtre işlemidir; ConvNet bu filtreleri nonlinearite ve pooling ile hiyerarşik istifleyerek — tıpkı görsel korteks gibi — görüntüden öznitelikleri uçtan uca öğrenir.

4.14 Kontrol Soruları

Cevap: İki sorun: (1) parametre patlaması — 1000×1000×3 girdiyi düzleştirip 1000 nörona bağlamak ~3 milyar ağırlık ister; (2) uzamsal yapı kaybı — düzleştirme komşu piksellerin komşuluğunu yok eder. Convolution ikisini de çözer: parameter sharing (aynı küçük kernel her konumda) parametreyi binlere indirir; connection sparsity (her çıktı yalnızca yerel pencereye bakar) uzamsal yapıyı korur. Convolution aslında ağırlıkları kısıtlanmış (paylaşımlı + seyrek) bir lineer katmandır.

Cevap: Çıktı boyutu:

\[ o = \left\lfloor \frac{n - k}{s} \right\rfloor + 1 \]

\(n = 32\), \(k = 5\), \(s = 1\)\(o = \lfloor 27/1 \rfloor + 1 = 28\). Stride’ı artırmak (\(s > 1\)) çıktıyı küçültür: hem hesabı/belleği azaltır hem de pooling gibi alt-örnekleme (downsampling) yapar — çözünürlüğü düşürüp daha soyut, daha geniş kapsamlı öznitelikler kurar.

Cevap: (1) Stationarity (aynı desen her yerde tekrar eder) → parameter sharing (aynı kernel her konumda); (2) Locality (bilgi yereldir) → sparsity (her çıktı yalnızca yerel pencereye bağlanır); (3) Compositionality (parçalar büyükleri oluşturur) → hiyerarşi/derinlik (katmanları istifle). Canziani’nin uyarısı: özellik yoksa teknik geçersizdir — “data locality göstermiyorsa sparsity kullanamazsın” (21:10). Yani convolution, verinin yapısına dayanan gerekçeli bir tasarımdır.

Cevap: Hubel-Wiesel’in receptive field’ı (nöron yalnızca yerel bir bölgeye duyarlı, ve aynı dedektör tüm görsel alana kopyalanmış) = convolution’ın equivariance’ı (öteleme-eşdeğişkenlik): nesne nerede olursa olsun aynı kernel onu yakalar, çıktı da konumla birlikte kayar. Complex cell (öznitelliğin küçük konum değişimlerine değişmez tepkisi) = pooling’in sağladığı invariance (değişmezlik). §4.J: equivariance = konumla birlikte değişir; invariance = konumdan bağımsız. ConvNet ikisini de kullanır: conv equivariant, pooling invariant.

4.15 Egzersizler

Egzersiz 1 (Convolution elle). 1B bir sinyal \(x = [1, 2, 3, 4, 5]\) ve kernel \(w = [1, 0, -1]\) için convolution (cross-correlation) çıktısını elle hesapla, sonra torch.nn.functional.conv1d ile doğrula. Çıktı boyutunu formülle önceden tahmin et.

import torch
import torch.nn.functional as F
x = torch.tensor([1., 2., 3., 4., 5.]).view(1, 1, -1)   # (batch, kanal, uzunluk)
w = torch.tensor([1., 0., -1.]).view(1, 1, -1)          # tek kernel
print(F.conv1d(x, w).flatten())                          # -> [-2, -2, -2]

Egzersiz 2 (Parametre karşılaştırması). 32×32×3 girdi için: (a) 1024 çıktılı tam-bağlı katman kaç parametre? (b) 16 adet 3×3 kernel’li convolution katmanı kaç parametre? Aradaki farkı yorumla — parameter sharing + sparsity ne kazandırdı?

Egzersiz 3 (Öteleme-değişmezlik). Bir görüntüdeki nesneyi birkaç piksel kaydır. (a) Tam-bağlı bir ağda çıktı nasıl değişir? (b) Bir conv+pooling ağında? nn.Conv2d + nn.MaxPool2d ile küçük bir deney kur ve equivariance/invariance farkını gözlemle.

Egzersiz 4 (Üç özellik). Şu üç veriden hangisi locality/stationarity gösterir, hangisi göstermez, neden: (a) doğal görüntü, (b) tablo verisi (her sütun farklı bir özellik), (c) ses dalgası? Hangisi için convolution uygundur?

Egzersiz 5 (Hafta 4 habercisi). Convolution’ı bir matris çarpımı olarak yazabilir misin? (a) Küçük bir 1B convolution’ı, ağırlıkları kaydırarak doldurulmuş bir Toeplitz matrisi ile ifade et. (b) Bu, convolution’ın aslında “yapısı kısıtlanmış bir lineer katman” olduğunu gösterir — Hafta 4’te Canziani convolution’ı tam olarak lineer cebir diliyle (Toeplitz/dolaşım matrisleri) ele alacak. Neden bu bakış faydalı?

4.16 Sonraki Ders İçin Hazırlık

UyarıSonraki Hafta — H4: Konvolüsyonun Cebiri (Toeplitz) ve Optimizasyon

Convolution’dan lineer cebire. Bu hafta convolution’ın ne olduğunu ve neden gerektiğini gördük. Hafta 4’te Canziani convolution’ı lineer cebir diliyle (Toeplitz/dolaşım matrisleri olarak) açacak — Egzersiz 5’in “convolution = yapısı kısıtlanmış lineer katman” sezgisi tam burada formelleşir; LeCun ise optimizasyonu derinleştirecek (SGD’nin ötesinde Adam, momentum, normalization katmanları).

Hafta 4: Konvolüsyonun Cebiri ve Optimizasyon I-II — Canziani (Lecture) + LeCun (Lecture)

Bu hafta convolution’ın ne olduğunu ve neden gerektiğini gördük. Hafta 4’te Canziani convolution’ı lineer cebir diliyle (Toeplitz/dolaşım matrisleri olarak) açacak; LeCun ise optimizasyonu derinleştirecek (SGD’nin ötesinde Adam, momentum, normalization katmanları).

Hafta 4 öncesi yapılacak:

  • Egzersiz 2 (parametre karşılaştırması) ve Egzersiz 5 (convolution = Toeplitz matris) çöz.
  • “Stationarity → parameter sharing, locality → sparsity” eşlemesini kendi sözcüklerinle yaz.
  • Hafta 2’nin SGD’sini hatırla — Hafta 4’te onu Adam ve normalization ile geliştireceğiz.

4.17 Anahtar Kavramlar (Cheat Sheet)

Kavram Tanım Hoca / timestamp
Weight sharing Aynı ağırlıkları her konumda kullanmaya zorlama LeCun 12m06
Convolution Kernel’i girdide kaydırıp her konumda iç çarpım LeCun 26m49
Kernel / filtre Convolution’ın küçük, paylaşılan ağırlık penceresi LeCun 29m50
ConvNet üç işlem convolution + nonlinearite + pooling (opsiyonel) LeCun 30m24
Stride Kernel’in kaydırma adımı; > 1 ise alt-örnekleme LeCun 30m53
Kompozisyonel hiyerarşi Kenarlar → köşeler → nesneler; derinliğin sebebi LeCun 34m17
Receptive field Nöronun duyarlı olduğu yerel bölge; equivariance LeCun 44m15
Simple / complex cell Simple = conv (kenar), complex = pooling (invariance) LeCun 45m29
LeNet5 / feature map İlk ConvNet; her kernel bir öznitelik haritası üretir LeCun 49m05
Stationarity Aynı desen her yerde tekrar eder → parameter sharing Canziani 4m29
Locality Bilgi yereldir → sparsity (seyrek bağlantı) Canziani 6m53
Compositionality Parçalar büyükleri kurar → hiyerarşi/derinlik Canziani 11m58

4.18 ML Builder Bağlantıları

Geriye köprüler (önkoşul kurslar):

  1. Convolution = kayan iç çarpım → 18.06 dot product / lineer operatör + Hafta 1 filtre·yama.
  2. Hiyerarşi = fonksiyon bileşkesi → Calculus zincir kuralı + Hafta 1 öznitelik hiyerarşisi.
  3. equivariance / invariance → §4.J + 18.06 öteleme-değişmez operatör.
  4. ConvNet eğitimi → Hafta 2 (modül + maliyet + backprop); convolution da bir modüldür.
  5. Kernel topluluğu = kanal üzerinde toplanan iç çarpımlar → 18.06 matris-tensör.

İleriye köprüler (production / research):

  1. LeNet5 omurgası → AlexNet, VGG, ResNet, ConvNeXt.
  2. inductive bias (üç özellik) → geometric deep learning, transformer tasarım felsefesi.
  3. stride / pooling → modern strided-conv downsampling, U-Net encoder-decoder.
  4. 1×1 / depthwise convolution → verimli mimariler (MobileNet, EfficientNet).
ÖnemliBu dersten tek bir şey alıp gideceksen

Convolution sihir değildir — doğal sinyallerin üç özelliğinin (stationarity, locality, compositionality) doğrudan mimariye çevrilmesidir: aynı küçük filtreyi her yerde paylaş (stationarity → parameter sharing), yalnızca yerele bak (locality → sparsity), katmanları istifle (compositionality → hiyerarşi). LeCun bunu kompozisyonel dünya ve görsel korteksle motive eder, Canziani üç özellikten mimariyi türetir — ve LeNet5’ten bugünkü görü modellerine giden yol işte bu çekirdeğin üstünde durur.