16  Transfer Learning ve PyTorch Lightning

Kursun bonus dersi ve finali — konuk hoca William Falcon (PyTorch Lightning’in yaratıcısı) Canziani ile birlikte transfer learning’i hem denetimli hem öz-denetimli canlı kodla anlatır ve önceki haftaların tüm pre-train sonra fine-tune ipliklerini pratiğe döker. Falcon’un büyük pratik mesajı şudur: sıfırdan eğitmek yerine birinin başka veride eğittiği bir modeli al (önceden eğitilmiş omurga), üstüne yeni bir sınıflandırıcı tak, kendi az verinde ince ayar yap; ama kritik koşul, önceden eğitilmiş modelin verisinin seninkine benzemesidir (ImageNet doğal nesnelerde iyi prior verir ama röntgen veya kanser görüntülerine transfer etmez, çünkü sinir ağının sihri körlemesine işlemez). Transfer iki parçadır: önceden eğitilmiş omurga ve üstüne eklenen yeni kafa; omurgayı dondurup öznitelik çıkarıcı gibi kullanabilir (donuk omurga üstüne herhangi bir sınıflandırıcı, öznitelikler lineer ayrılabilir olmalı) ya da birkaç epoch sonra çözüp daha düşük öğrenme oranıyla tüm ağı ince ayar yapabilirsin; az veri dondurmayı, çok veri ince ayarı ister. PyTorch Lightning bütün bu eğitim mantığını boilerplate olmadan yapar: yalnız iki şey bilmen yeter, eğitim mantığını içeren LightningModule ve epoch ile geri yayılımı otomatik yürüten Trainer, böylece çok-GPU veya TPU bedava gelir. Ve dersin doruğu öz-denetimli transferdir: denetimli omurga yerine SwAV gibi etiketsiz öz-denetimli bir omurga kullanılır, kendi etiketsiz verinde önceden eğitilebildiği için ve sınıflandırma için eğitilmediği için başka görevlere daha iyi transfer eder, az-etiket deneyinde denetimli ön-eğitimin yaklaşık iki katını verir, çünkü etiketler pahalıdır ve öz-denetim onları atlar. Böylece kurs kapanır: bu pratik zafer, kursun Hafta 10’dan beri savunduğu öz-denetim tezinin somut kanıtıdır ve post-2020 foundation models çağının doğrudan tohumudur.

NotBölüm bilgisi (KONUK William Falcon + Canziani — BONUS, Kurs Finali)
  • Bonus dersi (William Falcon, KONUK): YouTube — Transfer Learning & PyTorch Lightning (Hafta 15 — bonus, kurs finali)
  • Edition: Spring 2020 (NYU-DLSP20)
  • Hocalar: William Falcon (KONUK — PyTorch Lightning’in yaratıcısı; transfer learning, supervised + self-supervised, Lightning soyutlaması) + Alfredo Canziani (eşlik eden hoca — pratik püfler, az-etiket deneyinin yorumu)
  • Kaynak: atcold.github.io/NYU-DLSP20
  • Okuma süresi: ≈30 dk

⚠️ Atıf notu (KONUK): Bu bonus ders LeCun değildir — bonusu konuk hoca William Falcon (PyTorch Lightning’in yaratıcısı) verir, Canziani eşlik eder. Bölüm 1-4 quote’ları — Falcon veya — Canziani; ## (LeCun) başlığı bu derste hiç yoktur.

⚠️ Tarih notu: Bu bonus, ana kurstan (Mart 2020) biraz sonra (~Haz/Tem 2020) çekilmiştir — bu yüzden ana derslerin “post-2020, kursta yok” diye işaretlediği SwAV/BYOL gibi yöntemleri fiilen kullanır (her ikisi de Haziran 2020’de doğdu). Bu çelişki bilinçlidir ve korunmuştur.

16.1 Bu Derste Ne Var?

Kursun bonus dersi ve finali: konuk hoca William Falcon (PyTorch Lightning’in yaratıcısı), Canziani ile birlikte transfer learning’i — denetimli ve öz-denetimli — canlı kodla anlatır. Önceki haftaların tüm pre-train→fine-tune ipliklerini (Hafta 10 SSL, Hafta 12 BERT, Hafta 14 transfer) pratiğe döker.

Falcon’un büyük pratik mesajı: sıfırdan eğitmek yerine, birinin başka veride eğittiği bir modeli al (önceden eğitilmiş omurga), üstüne yeni sınıflandırıcı tak, kendi (az) verinde ince ayar yap. Kritik uyarı: önceden eğitilmiş modelin verisi seninkine benzemeli (ImageNet, röntgen/kanser görüntülerine transfer etmez). Ve öz-denetimli ön-eğitim, etiketli ön-eğitimi — özellikle az etiketle — geçer.

Üç ana fikir:

  1. Transfer learning = önceden eğitilmiş omurga + yeni kafa. Omurgayı dondur (öznitelik çıkarıcı) ya da ince ayar yap; veri dağılımı eşleşmeli.
  2. PyTorch Lightning = boilerplate’i soyutla. LightningModule (training_step + configure_optimizers) + Trainer (epoch/optimizer/backward otomatik); çok-GPU/TPU bedava.
  3. Öz-denetimli transfer (SwAV) az-etiketle kazanır. Kendi etiketsiz verinde omurgayı ön-eğit; sonra az etiketle sınıflandırıcıyı eğit → denetimli ön-eğitimin yaklaşık 2 katı.

flowchart TB
    Hafta["Hafta 15 (BONUS) — Transfer Learning ve PyTorch Lightning<br/>(KONUK William Falcon + Canziani — Kurs Finali)"]

    subgraph A["(A) Falcon: transfer learning + Lightning + öz-denetimli transfer"]
        direction TB
        NeZaman["Ne zaman transfer?<br/>(çok veri → sıfırdan · az veri → önceden eğitilmiş; dağılım eşleşmeli)"]
        Backbone["Omurga + kafa<br/>(önceden eğitilmiş omurga + üstüne yeni sınıflandırıcı)"]
        Freeze["Dondur (linear probe) vs ince ayar<br/>(donuk öznitelik çıkarıcı · çözülü düşük öğrenme oranı)"]
        Lightning["PyTorch Lightning<br/>(LightningModule + Trainer = boilerplate yok)"]
        SSL["Öz-denetimli transfer<br/>(SwAV etiketsiz ön-eğitim)"]
        Zafer["Az-etiket zaferi<br/>(SSL ~2 katı denetimli; etiket pahalı)"]
        NeZaman --> Backbone
        Backbone --> Freeze
        Freeze --> Lightning
        Lightning --> SSL
        SSL --> Zafer
    end

    subgraph B["(B) Kapanış: öz-denetim = kursun pratiği"]
        direction TB
        Kok["SSL = Hafta 7-9 EBM + Hafta 10 pretext +<br/>Hafta 12 BERT + Hafta 14 serbest enerji'nin pratiği"]
        Foundation["→ foundation models<br/>(post-2020, kursun ipliğinin vardığı yer)"]
        Kok --> Foundation
    end

    Hafta --> NeZaman
    Zafer --> Kok

İpucuBuilder Notu — Giriş: Pre-train→Fine-tune İpliğinin Pratik Hâli

Geriye: Pre-train→fine-tune → Hafta 10 (SSL/Misra) + 12 (BERT) + 14 (transfer); SSL yöntemleri (PIRL/MoCo/SimCLR) → Hafta 8-9 + 10 (PIRL); ResNet/freeze → Hafta 3/9; linear probe → Hafta 10.

İleriye: SSL omurga + az etiket → foundation models, etiketleme tasarrufu; SwAV/BYOL → post-2020 SSL patlaması (DINO/MAE, §İleriye Köprü).

Tek cümleyle: Transfer learning, başka veride eğitilmiş bir omurgayı alıp (dondur ya da ince ayar yap) kendi az verinde yeniden kullanmaktır; PyTorch Lightning bunu boilerplate’siz yapar; ve öz-denetimli ön-eğitim (SwAV) — kendi etiketsiz verinde eğitilebildiği için — etiketli ön-eğitimi özellikle az-etiket rejiminde geçer.

16.2 (Falcon — Konuk) Ne Zaman Transfer Learning? Karar Ağacı

Falcon basit karar ağacıyla başlar: Çok veri + zaman/compute var mı? Evetse, ince ayara gerek yok — kendi verinde sıfırdan eğit. Az veri varsa, veri dağılımına uyan önceden eğitilmiş model bul.

“if you don’t have a lot of data then you should try to find a pre-trained model that matches your data distribution… most vision models are trained on ImageNet, so if you want to do cancer detection or x-rays, that’s unlikely to transfer.” — Falcon, 4:58

Bu kritik: “sinir ağının sihri körlemesine işlemez.” ImageNet doğal nesnelerde (kedi, köpek, kuş) iyi prior verir; tıbbi görüntülerin istatistiği tamamen farklıdır. Şekil 16.1 bu karar ağacını bütün dallarıyla gösterir: kök soru çok veri/az veri ayrımını yapar, az-veri dalı dağılıma uyan önceden eğitilmiş modele iner, oradan supervised ve self-supervised ön-eğitim seçeneklerine ayrılır; alttaki kırmızı uyarı kutusu “ImageNet ≠ röntgen/kanser” eşleşmezliğini vurgular. Transfer learning iki parçadır:

“when you think about transfer learning we have two parts: the pre-trained model that was trained on something else, and the stuff you’re going to add on top to transfer that.” — Falcon, 5:35

İki seçenek: supervised ön-eğitim (ImageNet sınıflandırma — ama sınıflandırma için bias yükler; segmentasyon/tespit garantisi yok) veya self-supervised ön-eğitim (sınıflandırma için eğitilmediğinden başka görevlere daha iyi transfer edebilir).

Şekil 16.1: Transfer öğrenme karar ağacı (kursu kapatan sentez, H15 bonus). Kök ‘Çok veri + zaman/compute var mı?’ sorusundan EVET dalı sıfırdan eğitime (ince ayar gereksiz), HAYIR (az veri) dalı dağılıma uyan önceden eğitilmiş modele iner; oradan iki alt-dal: supervised ön-eğitim (ImageNet, bias yükler) ve self-supervised ön-eğitim (SwAV, daha iyi transfer, ★ tercih edilen). Alttaki kırmızı uyarı kutusu ‘ImageNet ≠ röntgen/kanser → transfer ETMEZ (dağılım eşleşmeli)’ der. Sinir ağının sihri körlemesine işlemez (Falcon 4:58); transfer = omurga + yeni kafa (5:35).
İpucuBuilder Notu — Ne Zaman Transfer: Dağılım Eşleşmesi Ön Koşuldur

Geriye (Hafta 10 + 14): Pre-train→fine-tune = Hafta 10 (SSL) + Hafta 14 (Canziani transfer vs fine-tune); veri-dağılımı eşleşmesi = transfer ön koşulu.

İleriye: “Önce uygun omurga bul” = foundation-model çağının ilk kuralı; alan-eşleşmesi hâlâ kritik.

16.3 (Falcon — Konuk) Supervised Transfer: ResNet-50, Freeze vs Fine-tune

Somut örnek: ImageNet’te (1M görüntü, 1000 sınıf) önceden eğitilmiş ResNet-50 omurgayı al; CIFAR-10 (10 sınıf) için son fully-connected katmanı değiştir (1000→10). Ama yeni kafa rastgele olduğundan tahminler tutmaz → ince ayar gerekir. Şekil 16.2 bu yapıyı gösterir: önceden eğitilmiş ResNet-50 omurga (kilitli, öznitelik çıkarıcı), atılan eski 1000-sınıf FC kafa (üstü çizili) ve gold renkli yeni 10-sınıf kafa (rastgele başlangıç) — akış “öznitelik çıkarıcı → yeni sınıflandırıcı” şeklindedir. İki mod vardır:

  • Omurgayı dondur (freeze): omurgaya backprop yapma; üstüne herhangi bir sınıflandırıcı (linear, SVM, logistic, random forest) tak. Ağ işini yaptıysa öznitelikler lineer ayrılabilir olmalı.

“you’re using the neural network to extract features, and then using some other classifier… if the network did its job, they should be linearly separable.” — Falcon, 16:55

  • İnce ayar yap (fine-tune): birkaç epoch sonra omurgayı çöz (unfreeze), daha düşük öğrenme oranı ile tüm ağı ayarla → zamanla daha iyi performans.

Pratik püf (Canziani ekler): dondurulmuş omurga için torch.no_grad() kullan — hesaplama grafiği tutulmaz, daha hızlı + az bellek. Şekil 16.3 iki modu yan yana koyar: solda freeze (omurga kilitli, gradyan yalnız kafada durur), sağda fine-tune (omurga çözülü, gradyan tüm ağda küçük adımlarla akar).

Şekil 16.2: Transfer öğrenme: önceden eğitilmiş omurga + yeni kafa (Hafta 15 bonus, Falcon + Canziani). Soldan: girdi görüntü → ResNet-50 omurga (ImageNet 1000-sınıf, violet conv blokları, KİLİTLİ ikonu = dondurulmuş öznitelik çıkarıcı) → eski 1000-sınıf FC kafa (üstü çizili, atılır) → yeni 10-sınıf CIFAR kafa (gold, rastgele başlangıç). Son FC katmanı değiştir (1000→10); omurga öznitelik çıkarıcı; yeni kafa rastgele → fine-tune gerek; öznitelikler lineer ayrılabilir olmalı (Falcon 16:55).
Şekil 16.3: Transfer learning: freeze vs fine-tune iki mod (Falcon + Canziani). SOL panel FREEZE (az veri, linear probe): omurga KİLİTLİ (no_grad, gri bloklar, backprop YOK), üstüne linear/SVM kafa eğitilir; gradyan yalnız kafada akar, omurga sınırında DURUR. SAĞ panel FINE-TUNE (çok veri): omurga ÇÖZÜLÜ (unfreeze, violet bloklar, düşük öğrenme oranı), gradyan tüm ağda küçük adımlarla en alta kadar akar. Freeze = öznitelik çıkarıcı + torch.no_grad (hızlı/az bellek); fine-tune = tüm ağ düşük öğrenme oranı; az veri → freeze, çok veri → fine-tune (Canziani 20:24).
İpucuBuilder Notu — Freeze vs Fine-tune: Transfer’in Temel Kararı

Geriye (Hafta 3 + 10): ResNet = Hafta 3/9 residual; freeze + linear sınıflandırıcı = Hafta 10 linear probe; öznitelik çıkarıcı = Hafta 1 temsil öğrenme.

İleriye: Freeze (az veri) vs fine-tune (çok veri) = transfer’in temel kararı; torch.no_grad() = pratik verimlilik standardı.

16.4 (Falcon — Konuk) PyTorch Lightning: Boilerplate’i Soyutlamak

Falcon PyTorch Lightning’i tanıtır: PyTorch kodunu organize eden hafif sarmalayıcı — çok-GPU, TPU, dağıtık eğitim gibi uzmanlık gerektiren şeyleri sana yaptırır.

“lightning is a lightweight wrapper for PyTorch… it organizes your PyTorch code so you can leverage multiple GPU training, TPUs and different things that require a lot of expertise.” — Falcon, 1:22

Lightning’de yalnız iki şey bilmen yeter:

  • LightningModule: nn.Module gibi ama eğitim mantığını içerir. training_step (bir batch verildiğinde kaybı hesapla — forward değil, tüm sistem: BERT/GAN/VAE mantığı burada) + configure_optimizers; forward opsiyonel.
  • Trainer: epoch/batch döngüsü, backward, optimizer.step, zero_grad’ı otomatik yapar. self.log metrikleri kaydeder + GPU’lar arası senkronize eder. fast_dev_run = tek batch hızlı hata-ayıklama.

Böylece eğitim döngüsü modelin içine taşınır, kod self-contained ve az-boilerplate olur. Şekil 16.4 bu soyutlamayı gösterir: solda düz PyTorch’un elle yazılan tekrarlı döngüsü (for epochforwardlossbackwardoptimizer.stepzero_grad), sağda Lightning’in iki kutusu — LightningModule (training_step + configure_optimizers) ve boilerplate’i otomatik üstlenen Trainer (multi-GPU/TPU + self.log).

Şekil 16.4: PyTorch Lightning soyutlaması: boilerplate’i Trainer’a taşı (Bölüm 3). SOL: düz PyTorch’un elle yazılan, tekrarlı döngü kutuları (for epoch → for batch → forward → loss → zero_grad → backward → optimizer.step — uzun, her projede elle yazılır). SAĞ: Lightning’in iki bileşeni — LightningModule (violet; training_step + configure_optimizers, tüm sistem mantığı) ve Trainer (gold; epoch/backward/step/zero_grad OTOMATİK + multi-GPU/TPU + self.log). İki şey yeter; fast_dev_run = tek batch debug (Falcon 1:22, 24:53).
İpucuBuilder Notu — Lightning Soyutlama: Eğitim Döngüsünün Modele Taşınması

Geriye (Hafta 5): training_step = Hafta 5 autograd döngüsünün (forward→loss→backward→step) organize hâli; Trainer = o döngünün soyutlanması.

İleriye: Lightning/Bolts = araştırma-üretim köprüsü; SSL modelleri (SwAV/SimCLR/BYOL) Bolts’ta hazır.

16.5 (Falcon — Konuk) Self-Supervised Transfer (SwAV) ve Az-Etiket Zaferi

Şimdi supervised ResNet yerine SwAV (FAIR’in 2020 SSL yöntemlerinden, Bolts’ta hazır) omurga kullanılır — ImageNet’te etiketsiz ön-eğitim (3000 öznitelik). SSL omurgasının büyük avantajı:

“you can pre-train your SwAV model on your own data, which you don’t have many labels for, and then just train the classifier with the few labels you have.” — Canziani, 48:28

Etiketler pahalıdır; SSL ile kendi etiketsiz verinde omurgayı eğitebilir, sonra az etiketle sadece sınıflandırıcıyı eğitebilirsin. Az-etiket deneyi çarpıcı: 100/316/1000 örnekle üç modeli (rastgele, supervised-pretrain, SSL-pretrain) karşılaştır:

“when they’re trained without labels, we get double the performance of the models that were trained with the labels.” — Falcon, 1:08:13

Rastgele model ~%10’larda; supervised-pretrain ~%20-30; SSL-pretrain (SwAV) bunun ~2 katı. SSL ayrıca daha hızlı yakınsar. Şekil 16.5 bu deneyi gerçek bir grafikle gösterir: üç omurganın 100/316/1000 etiketteki validation doğruluğu, SwAV (violet) çubukları denetimli (gold) çubukların yaklaşık iki katı, ve fark en az etikette (100) en büyük. Falcon listeler: AMDIM, MoCo, CPC, PIRL, SimCLR, BYOL, SwAV (en yenisi) — Şekil 16.6 bu yöntemleri zaman ekseninde sıralar ve PIRL’in Hafta 10 (Misra) köprüsünü işaretler.

Şekil 16.5: Az-etiket zaferi (FLAGSHIP, İLLÜSTRATİF — Falcon’un bildirdiği değerler, few_label_curve motoru). 100/316/1000 etiketle üç omurganın validation doğruluğu: rastgele başlangıç ~%10 (gri), denetimli ön-eğitim (ImageNet etiketli) ~%20-33 (gold), SSL · SwAV (etiketsiz ön-eğitim) ~%40-60 (violet, ~2× denetimli). SSL-denetimli farkı EN AZ etikette (100) en büyük (~2× işaretli). SSL etiketsiz veriden temsil öğrenir; etiketler pahalı, SSL onları atlar (Falcon 1:08); Hafta 10 ‘az etiketle öğren’ tezinin deneysel kanıtı — KURS FİNALİ.
Şekil 16.6: Self-Supervised Learning yöntemleri — zaman çizelgesi (Bölüm 4). Yatay zaman ekseni 2018→2020: AMDIM → MoCo → CPC → PIRL (2019, ‘Hafta 10 — Misra!’ vurgusu + aşağı köprü oku) → SimCLR → BYOL → SwAV (2020, en yeni, ‘bu derste kullanılan’). Contrastive yöntemler (negatif çiftler, violet) → non-contrastive (negatifsiz, gold) geçişi; sağda soluk post-2020 (DINO/MAE) oku. SSL evrimi: contrastive (MoCo/SimCLR/PIRL) → non-contrastive (BYOL/SwAV); PIRL = Hafta 10 Misra; SwAV Bolts’ta hazır (Falcon 6:59).
İpucuBuilder Notu — SwAV Az-Etiket Zaferi: Hafta 10 Tezinin Deneysel Kanıtı

Geriye (Hafta 8-10): SSL yöntemleri = Hafta 8-9 contrastive + Hafta 10 PIRL (Misra’nın yöntemi!) + MoCo; az-etiket avantajı = Hafta 10’un “az etiketle öğren” tezinin deneysel kanıtı.

İleriye: “Kendi etiketsiz verinde SSL ön-eğit + az etiketle fine-tune” = foundation-model çağının endüstri reçetesi.

16.6 (İleriye Köprü) SSL Patlaması ve Foundation Models — Kursun Kapanış Köprüsü

Bu bonus (~Haz/Tem 2020), SwAV ve BYOL’u fiilen kullanır — ana kursun (Mart 2020) “post-2020, kursta yok” dediği yöntemler. Yani bonus, kursun tam eşiğindeki son gelişmeleri yakalar. Buradan sonrası kursta YOKTUR ama tüm kursun (Hafta 10, 12, 14) işaret ettiği yöndür:

Uyarıİleriye Köprü Notu (post-2020 — KURSTA YOK)
  • DINO (2021), MAE (2021), DINOv2 (2023) — SwAV/BYOL/SimCLR’dan sonra gelen, görü SSL’inin olgun nesli; bu bonusun “etiketsiz ön-eğit” fikrinin zirvesi.
  • Foundation models (GPT-3/CLIP/SAM, 2020+) — “büyük omurgayı bir kez ön-eğit, her göreve transfer et” paradigmasının evrenselleşmesi; bu dersin “ön-eğit omurga + fine-tune kafa” reçetesinin dev ölçekli hâli.

Kurs terimi gibi eklenmez; bu bonusun (ve tüm kursun) öz-denetimli temelinin nereye vardığını göstermek için anılır.

İpucuBuilder Notu — Kursun Kapanışı: Öz-Denetimli Temelin Vardığı Yer

Geriye (tüm kurs): SSL patlaması = Hafta 7-9 (EBM) + 10 (pretext) + 12 (BERT) + 14 (serbest enerji) temelinin doğrudan ürünü.

İleriye: Foundation model + transfer = 2020-sonrası makine öğrenmesinin tanımı; bu kursun bütün ipliklerinin birleştiği nokta.

16.7 Bu Dersin Özeti

  1. Ne zaman transfer (Falcon): çok veri → sıfırdan; az veri → dağılımı eşleşen önceden eğitilmiş model (ImageNet ≠ röntgen).
  2. Supervised transfer (Falcon): ResNet-50 + son katmanı değiştir; freeze (öznitelik çıkarıcı + linear probe) vs fine-tune (unfreeze, düşük öğrenme oranı); torch.no_grad().
  3. PyTorch Lightning (Falcon): LightningModule (training_step + configure_optimizers) + Trainer (otomatik döngü/log/multi-GPU); az boilerplate.
  4. Self-supervised transfer (Falcon/Canziani): SwAV (etiketsiz ön-eğitim); kendi etiketsiz verinde eğit + az etiketle sınıflandır; SSL ~2× supervised, daha hızlı.
  5. Az-etiket zaferi: rastgele ~%10 < supervised ~%20-30 < SSL ~2×; etiket pahalı, SSL onu atlar.
  6. Post-2020 (KURSTA YOK): DINO/MAE/DINOv2, foundation models — kursun bütün ipliklerinin vardığı yer.
ÖnemliTek Bir Cümle

Transfer learning, başka (büyük) veride eğitilmiş bir omurgayı alıp kendi az verinde yeniden kullanmaktır — omurgayı dondur (linear probe) ya da ince ayar yap, ama veri dağılımı eşleşsin; PyTorch Lightning bunu boilerplate’siz yapar; ve öz-denetimli ön-eğitim (SwAV), kendi etiketsiz verinde eğitilebildiği için, etiketli ön-eğitimi özellikle az-etiket rejiminde ~2 kat geçer — ki bu, kursun Hafta 10’dan beri savunduğu “öz-denetim dilin/görünün motorudur” tezinin pratik zaferidir.

16.8 Kontrol Soruları

Cevap: Çok veriniz + zaman/compute varsa fine-tune’a gerek yok — sıfırdan eğitin. Az veriniz varsa, veri dağılımına uyan önceden eğitilmiş model bulun (Falcon 4:58). Dağılım eşleşmesi kritiktir çünkü “sinir ağının sihri körlemesine işlemez”: ImageNet doğal nesnelerde (kedi/köpek) iyi prior verir ama tıbbi görüntülerin (röntgen, kanser) istatistiği tamamen farklıdır → transfer etmez. Transfer iki parçadır: önceden eğitilmiş omurga + üstüne yeni kafa (Falcon 5:35).

Cevap: Freeze: omurgaya backprop yapılmaz, öznitelik çıkarıcı olarak kullanılır; üstüne herhangi bir sınıflandırıcı (linear/SVM/logistic) takılır — ağ işini yaptıysa öznitelikler lineer ayrılabilir olmalı (Falcon 16:55). Fine-tune: birkaç epoch sonra omurga çözülür, daha düşük öğrenme oranıyla tüm ağ ayarlanır (çok veri varsa daha iyi). Dondurulmuş omurga için torch.no_grad() hesaplama grafiğini tutmaz → daha hızlı + az bellek. Az veri → freeze; çok veri → fine-tune.

Cevap: İki bileşen: LightningModule (training_step + configure_optimizers; forward opsiyonel) ve Trainer (epoch/batch döngüsü, backward, optimizer.step, zero_grad’ı otomatik). training_step, bir batch verildiğinde kaybı döndürür — ama yalnız forward değil, tüm sistem mantığı (BERT/GAN/VAE) burada yaşar (Falcon 1:22, 24:53). Eğitim döngüsü modelin içine taşınır; çok-GPU/TPU, log senkronizasyonu (self.log) Trainer’a bırakılır → az boilerplate.

Cevap: SwAV omurgası ImageNet’te etiketsiz ön-eğitilmiştir. Avantaj: sınıflandırma için eğitilmediğinden başka görevlere daha iyi transfer edebilir; ve kritik olarak kendi etiketsiz verinde ön-eğitip az etiketle sınıflandırıcıyı eğitebilirsin (Canziani 48:28) — etiketler pahalı. Az-etiket deneyi (100/316/1000): rastgele ~%10, supervised ~%20-30, SSL ~2 katı (Falcon 1:08:13); SSL daha hızlı yakınsar. Hafta 10’un “az etiketle öğren” tezinin deneysel kanıtı.

Cevap: Çünkü bu bonus ana kurstan (Mart 2020) biraz sonra (~Haz/Tem 2020) çekilmiştir; SwAV/BYOL Haziran 2020’de doğmuştur, yani bonusun çekildiği anda henüz yeni ama mevcut (atıf notunda işaretlendi). Ana derslerin “kursta yok” dedikleri Mart-2020 tarihine göredir. Kursun bütün ipliği — Hafta 7-9 (EBM), 10 (SSL pretext), 12 (BERT pre-train→fine-tune), 14 (serbest enerji) — buraya, öz-denetimli ön-eğitim + transfer paradigmasına varır; ve post-2020’de DINO/MAE/DINOv2 + foundation models (CLIP/SAM/GPT) ile evrenselleşir.

16.9 Egzersizler

Egzersiz 1 (Karar ağacı). Üç senaryo için “sıfırdan eğit / supervised transfer / self-supervised transfer” seç ve gerekçelendir: (a) 50 etiketli röntgen, (b) 1M etiketli doğal görüntü, (c) 500K etiketsiz + 200 etiketli kendi şirket verisi. Veri-dağılımı eşleşmesi her birinde neden belirleyici?

import numpy as np

# Karar agaci: (veri_miktari, etiketli_mi, dagilim_eslesiyor_mu) -> oneri
senaryolar = {
    "(a) 50 etiketli rontgen": dict(az_veri=True, ImageNet_eslesir=False, etiketsiz_var=False),
    "(b) 1M etiketli dogal goruntu": dict(az_veri=False, ImageNet_eslesir=True, etiketsiz_var=False),
    "(c) 500K etiketsiz + 200 etiketli sirket": dict(az_veri=True, ImageNet_eslesir=False, etiketsiz_var=True),
}

def oner(az_veri, ImageNet_eslesir, etiketsiz_var):
    if not az_veri:
        return "SIFIRDAN EGIT (cok veri -> transfer gereksiz)"
    if etiketsiz_var:
        return "SELF-SUPERVISED TRANSFER (kendi etiketsiz verinde SwAV on-egit + az etiketle siniflandir)"
    if ImageNet_eslesir:
        return "SUPERVISED TRANSFER (ImageNet omurga dondur + linear probe)"
    return "DIKKAT: dagilim eslesmiyor (ImageNet != rontgen); domain-eslesen on-egitim ara / self-supervised dene"

for ad, kw in senaryolar.items():
    print(ad, "->", oner(**kw))
# (a) rontgen: ImageNet dagilimi ESLESMEZ -> kor transfer ETMEZ; domain-ozgu on-egitim sart.
# (b) 1M dogal: cok veri -> sifirdan; ayrica ImageNet eslesir ama transfere gerek yok.
# (c) sirket: etiketsiz BOL -> SSL on-egit, sonra 200 etiketle siniflandir (az-etiket zaferi).

Egzersiz 2 (Freeze vs fine-tune). CIFAR-10’da pre-trained ResNet-50 ile (a) backbone-dondurulmuş linear probe ve (b) tam fine-tune (düşük öğrenme oranı) eğit. Az veri (100) vs çok veri (50K) senaryolarında hangisi kazanır, neden? torch.no_grad() (a)’da neyi hızlandırır?

import numpy as np

# Illustratif: az veri (100) vs cok veri (50K) -> freeze vs fine-tune dogrulugu
veri = {"az (100)": dict(freeze=0.62, finetune=0.55),   # az veri: freeze KAZANIR (az parametre, az overfit)
        "cok (50K)": dict(freeze=0.78, finetune=0.91)}  # cok veri: fine-tune KAZANIR (tum ag ayarlanir)
for rejim, d in veri.items():
    kazanan = "freeze" if d["freeze"] > d["finetune"] else "fine-tune"
    print(f"{rejim:10s}: freeze={d['freeze']:.2f}  fine-tune={d['finetune']:.2f}  -> {kazanan}")
# AZ veri -> freeze (linear probe): yalniz kafa egitilir, az parametre = az overfit.
# COK veri -> fine-tune: omurga cozulur (unfreeze) + dusuk LR, tum ag goreve uyarlanir.
# torch.no_grad(): donuk omurgada hesaplama grafigi TUTULMAZ -> ileri gecis hizli + az bellek.

Egzersiz 3 (Lightning’e çevir). Düz PyTorch eğitim döngüsünü (forward→loss→backward→step→zero_grad) bir LightningModule’e (training_step + configure_optimizers) çevir. Trainer hangi 4 işlemi senin yerine yapar? fast_dev_run ne işe yarar?

# Duz PyTorch (boilerplate) vs Lightning (soyut) — kavramsal cevrim (statik, calistirmak gerekmez)

# --- DUZ PYTORCH: elle dongu ---
# for epoch in range(N):
#     for x, y in loader:
#         optimizer.zero_grad()      # 1) gradyani sifirla
#         out = model(x)             #    ileri gecis
#         loss = criterion(out, y)   #    kayip
#         loss.backward()            # 2) geri yayilim
#         optimizer.step()           # 3) parametre guncelle
#                                    # 4) epoch/batch dongusu = elle

# --- LIGHTNING: yalniz iki sey ---
# class Net(pl.LightningModule):
#     def training_step(self, batch, idx):   # bir batch -> KAYIP dondur (tum sistem mantigi)
#         x, y = batch
#         loss = criterion(self(x), y)
#         self.log("train_loss", loss)        # metrik + multi-GPU senkron
#         return loss
#     def configure_optimizers(self):
#         return torch.optim.Adam(self.parameters())
# trainer = pl.Trainer(fast_dev_run=True)     # tek batch hizli debug
# trainer.fit(net, loader)

print("Trainer'in OTOMATIK yaptigi 4 islem: zero_grad, backward, optimizer.step, epoch/batch dongusu")
print("fast_dev_run=True: tek batch ileri+geri gecis -> kodu saniyede dogrula (tam egitim oncesi debug)")
# Egitim dongusu modelin ICINE tasinir; multi-GPU/TPU kod degismeden gelir.

Egzersiz 4 (Az-etiket eğrisi). SwAV-pretrain, supervised-pretrain ve rastgele backbone’u 100/316/1000 etiketle eğitip validation doğruluğunu çiz. SSL’in avantajı etiket sayısı azaldıkça neden artar? Hafta 10 Misra ile ilişkilendir.

import numpy as np

n_labels   = np.array([100, 316, 1000])
random_acc = np.array([10.0, 11.0, 12.5])    # rastgele backbone (~%10)
supervised = np.array([19.0, 26.0, 33.0])    # ImageNet supervised pre-train
ssl_swav   = np.array([40.0, 50.0, 60.0])    # SwAV SSL pre-train (~2x supervised)

oran = ssl_swav / supervised                 # SSL / supervised orani
for n, s, ss, o in zip(n_labels, supervised, ssl_swav, oran):
    print(f"{n:5d} etiket: supervised {s:.0f}%  SSL {ss:.0f}%  oran x{o:.2f}")
print("SSL avantaji en AZ etikette en buyuk:", n_labels[np.argmax(oran)], "etikette x", round(float(oran.max()),2))
# SSL etiketsiz veriden temsil ogrendigi icin az-etikette siniflandirici zaten iyi ozniteliklerle baslar.
# Etiket azaldikca supervised omurga cokerken SSL omurga ayakta kalir -> fark BUYUR.
# Hafta 10 (Misra/PIRL): "az etiketle ogren" pretext gorevlerinin TAM bu deneysel kaniti.

Egzersiz 5 (Kurs sentezi — KAPANIŞ). Tüm kursu tek cümlede birleştir: Hafta 1 (manifold) → Hafta 7-9 (EBM) → Hafta 10-12 (SSL/Transformer) → Hafta 13 (GCN) → Hafta 14 (serbest enerji) → Hafta 15 (transfer). LeCun’un “enerji + öz-denetim” programının bu 15 haftadaki izini sür; bugünkü foundation models bu programın neresinde durur?

# KURS SENTEZI (KAPANIS) — 15 haftanin tek iplikte ozeti (statik)
program = [
    ("Hafta 1",   "manifold hipotezi",          "veri dusuk-boyutlu manifoldda yasar (temsil)"),
    ("Hafta 2-5", "backprop / autograd",        "gradyanla enerji minimizasyonu"),
    ("Hafta 6",   "RNN / attention",            "dizi + odak"),
    ("Hafta 7-9", "EBM OMURGA (AE/VAE/GAN)",    "enerji tasarla: dogruyu bastir, yanlisi it"),
    ("Hafta 10",  "SSL pretext",                "etiketsiz veriden ogren"),
    ("Hafta 11",  "aktivasyon/kayip/PPUU",      "marj + belirsizlik"),
    ("Hafta 12",  "Transformer (BERT)",         "pre-train -> fine-tune"),
    ("Hafta 13",  "GCN",                        "graf uzerinde mesaj gecisi"),
    ("Hafta 14",  "serbest enerji = VAE",       "gizliyi marjinalleştir (F = <E> - T*H)"),
    ("Hafta 15",  "transfer learning",          "omurga yeniden kullan + SSL az-etiket zaferi"),
]
for h, konu, ozet in program:
    print(f"{h:9s} {konu:26s} {ozet}")
print()
print("TEK PROGRAM: bir enerji tasarla, dogruyu bastir, yanlisi marjla it, gizliyi marjinalleştir,")
print("             ve ETIKETSIZ veriden ogren.")
print("Foundation models (CLIP/SAM/GPT, post-2020) = bu programin dev-olcekli, evrensel hali (KURSTA YOK).")

16.10 Kurs Tamamlandı 🎓

Önemli🎓 NYU Deep Learning (DLSP20) — 15/15 Hafta Tamamlandı

Bu bonus dersle birlikte, LeCun ve Canziani’nin tüm kursu Türkçe öğretim setine dönüştü: manifold geometriden (Hafta 1) enerji-tabanlı modellere (Hafta 7-9), attention/Transformer’dan (Hafta 12) graph neural net’lere (Hafta 13), varyasyonel serbest enerjiden (Hafta 14) transfer learning’e (Hafta 15).

Kurs sonrası yapılacak: Egzersiz 5 (kurs sentezi) ile 15 haftayı tek iplikte topla; “Enerji tasarla, doğruyu bastır, yanlışı marjla it, gizliyi marjinalleştir” cümlesini her hafta için örnekle; post-2020 köprülerini (JEPA, diffusion, DINO/MAE, foundation models) kursun hangi temeline oturduğunu yaz.

Şekil 16.7 tüm kursu tek bir haritada toplar: Hafta 1 (manifold) → Hafta 7-9 (EBM omurga) → Hafta 10-12 (SSL/Transformer) → Hafta 13-15 (graf/sentez/transfer), merkezde enerji + öz-denetim birleştirici çatısı (LeCun programı) ve sağ altta post-2020 (JEPA/diffusion/DINO/foundation) bu 15 haftanın ürünü olarak işaretli.

Şekil 16.7: Kurs sentez haritası — 15 haftada tek program (H1 → H15, KURSU KAPATAN FLAGSHIP). Üst sıra temeller (H1 manifold → H2 backprop → H3 ConvNet → H5 autograd → H6 RNN/attention, violet açık); orta katman EBM omurga (H7-H9 autoencoder · VAE · GAN, violet koyu) + SSL/Transformer (H10 pretext, H11 aktivasyon/PPUU, H12 Transformer, gold); alt sıra graf/sentez/transfer (H13 GCN → H14 serbest enerji = VAE → H15 transfer, violet-gold). Merkezde ‘ENERJİ + ÖZ-DENETİM’ (LeCun programı); sağ altta post-2020 (JEPA/diffusion/DINO/foundation, KURSTA YOK). Tek program: enerji tasarla, doğruyu bastır, yanlışı marjla it, gizliyi marjinalleştir, etiketsiz veriden öğren.

16.11 Anahtar Kavramlar (Cheat Sheet)

Kavram Tanım Hoca / timestamp
Ne zaman transfer Az veri → pre-trained; dağılım eşleşmeli Falcon 4:58
Transfer = omurga + kafa Önceden eğitilmiş omurga + üstüne yeni sınıflandırıcı Falcon 5:35
Freeze (linear probe) Omurga dondur; öznitelik çıkarıcı; lineer ayrılabilir Falcon 16:55
Fine-tune Omurga çöz, düşük öğrenme oranı; çok veri Falcon 40:22
torch.no_grad Graf tutma; hızlı + az bellek Canziani 20:24
LightningModule training_step + configure_optimizers Falcon 24:53
Trainer epoch/backward/step/zero_grad otomatik Falcon 31:08
fast_dev_run Tek batch hata-ayıklama Falcon 42:20
SwAV (SSL omurga) Etiketsiz ön-eğitim; 3000 öznitelik Falcon 46:03
SSL kendi-veri avantajı Etiketsiz kendi veride ön-eğit + az etiket Canziani 48:28
Az-etiket zaferi SSL ~2× supervised; daha hızlı Falcon 1:08
SSL yöntemleri MoCo/PIRL/SimCLR/BYOL/SwAV Falcon 6:59

16.12 ML Builder Bağlantıları

Geriye köprüler:

  1. Pre-train → fine-tune → Hafta 10 (SSL) + 12 (BERT) + 14 (transfer vs fine-tune).
  2. SSL yöntemleri (PIRL/MoCo/SimCLR) → Hafta 8-9 (contrastive) + 10 (PIRL=Misra).
  3. ResNet / freeze / linear probe → Hafta 3/9 (residual) + 10 (linear probe).
  4. training_step döngüsü → Hafta 5 (autograd: forward→loss→backward→step).
  5. Az-etiket SSL avantajı → Hafta 10 (az etiketle öğren tezi).

İleriye köprüler:

  1. SwAV/BYOLDINO/MAE/DINOv2 (post-2020, KURSTA YOK).
  2. Omurga + transferfoundation models (CLIP/SAM/GPT, post-2020).
  3. Lightning/Bolts → araştırma-üretim köprüsü; reproducible SSL.
  4. Kendi-veri SSL → endüstride etiket-tasarrufu, alan-uyarlama.
ÖnemliBu dersten — ve bu kurstan — tek bir şey alıp gideceksen

Transfer learning, başka (büyük) veride eğitilmiş bir omurgayı alıp kendi az verinde yeniden kullanmaktır — dağılımlar eşleştiği sürece omurgayı dondurup (linear probe) ya da ince ayar yaparak; ve PyTorch Lightning bunu boilerplate’siz, çok-GPU’lu yapar. Asıl ders şu: öz-denetimli ön-eğitim (SwAV), etiketli ön-eğitimi — özellikle az-etiket rejiminde ~2 kat — geçer, çünkü kendi etiketsiz verinde eğitilebilir. Bu, kursun Hafta 10’dan beri savunduğu tezin pratik zaferidir: öz-denetim, pahalı etiketleri atlayıp verinin kendi yapısından öğrenir. Ve böylece kurs kapanır — manifold geometriden (Hafta 1) enerji-tabanlı modellere (Hafta 7-9), Transformer’dan (Hafta 12) graph net’lere (Hafta 13), serbest enerjiden (Hafta 14) transfer’e (Hafta 15): hepsi tek bir programın parçaları — bir enerji tasarla, doğruyu bastır, yanlışı marjla it, gizliyi marjinalleştir, ve etiketsiz veriden öğren. Bu temelin post-2020 zirvesi (DINO, MAE, diffusion, foundation models, JEPA) kursta yoktur ama bu 15 haftanın tohumlarının doğrudan ürünüdür.