8  Enerji-Tabanlı Modeller (EBM) ve Autoencoder

İki hocalı hafta — kursun teorik omurgası: Yann LeCun (Lecture) enerji-tabanlı modelleri (EBM) kurar; bir ağı tek çıktı veren fonksiyon olmaktan çıkarıp her olası cevaba bir uyumluluk skoru (enerji) atayan ve çıkarımı enerji minimizasyonu yapan bir çerçeveye dönüştürür — çoklu minimum, çoklu geçerli cevap. Alfredo Canziani (Practicum) autoencoder’ları gösterir — encoder, code, decoder, veri manifoldu — ve bir autoencoder’ın aslında bir EBM olduğunu ortaya koyar: manifold üzerinde düşük, dışında yüksek enerji (yeniden kurma hatası).

NotBölüm bilgisi

8.1 Bu Derste Ne Var?

Bu hafta kursun teorik omurgasına giriyoruz: Yann LeCun’un en sevdiği konu, enerji-tabanlı modeller (EBM). Hafta 1’de kısaca değinilen “cevaplar = enerji fonksiyonunun minimumları” fikri burada tam açılıyor. Alfredo Canziani ise Practicum’da autoencoder’ları gösteriyor — ve dersin sonunda göreceğin gibi, bir autoencoder aslında bir EBM’dir.

LeCun’un büyük fikri: bir ağı “girdi → tek çıktı” fonksiyonu olarak görmek kısıtlayıcıdır. Bunun yerine, her olası \((x, y)\) çiftine bir enerji (uyumsuzluk skoru) atayan bir \(F(x, y)\) tanımla; çıkarım, verilen \(x\) için enerjiyi minimize eden \(y\)’yi aramaktır. Canziani’nin autoencoder’ı bunun somut bir örneğidir: veri manifoldu üzerinde düşük, dışında yüksek “enerji” (yeniden kurma hatası).

Bu haftanın üç ana fikri:

  1. EBM = her cevaba bir enerji. Tek çıktı yerine, uyumlu çiftlere düşük, uyumsuza yüksek skor; çıkarım = enerji minimizasyonu (birden çok cevap olabilir).
  2. Enerji ≠ kayıp. Enerji çıkarımda kullanılır (hangi \(y\)?); kayıp eğitimde enerji fonksiyonunu şekillendirmek için.
  3. Autoencoder bir EBM’dir: veri manifoldu üzerini yeniden kurar (düşük enerji), dışını manifolda geri çeker (yüksek enerji).

flowchart TB
    subgraph LeCun["(A) EBM çerçevesi (LeCun)"]
        direction LR
        Enerji["Enerji = uyumluluk skoru<br/>her (x, y) çiftine F(x, y)"]
        Cikarim["Çıkarım = argmin F<br/>(enerji minimizasyonu)"]
        Sekil["Enerji ≠ kayıp<br/>veride düşük / dışında yüksek"]
        Latent["Latent EBM<br/>F(x, y, z) — z yardımcı bilgi"]
        Enerji --> Cikarim
        Cikarim --> Sekil
        Sekil --> Latent
    end

    subgraph Canziani["(B) Autoencoder (Canziani)"]
        direction LR
        AE["Encoder → code → decoder<br/>girdiyi yeniden kur"]
        Manifold["Veri manifoldu<br/>(yalnızca üzerini kur)"]
        Recon["Reconstruction = enerji<br/>manifoldda düşük, dışında yüksek"]
        AEBM["Autoencoder = EBM"]
        AE --> Manifold
        Manifold --> Recon
        Recon --> AEBM
    end

    Latent -. "code = latent z; AE = EBM'nin somut hâli" .-> AE

İpucuBuilder Notu — Tek Çıktıdan Enerjiye

Geriye (önkoşul kurslar):

  • Enerji = uyumluluk skoru → Stat 110 (energy = −log p; Boltzmann, Hafta 8-9’da) + Hafta 1 EBM teaser.
  • Çıkarım = enerji minimizasyonu → Calculus gradient descent (y yönünde) + implicit function (Calculus).
  • Manifold → Hafta 1 manifold hipotezi + 18.06 altuzay.

İleriye (production / research):

  • EBM → LeCun’un JEPA programı (post-2020 ileriye köprü); world models, planning.
  • Autoencoder → VAE (Hafta 8), denoising AE, ve temsil öğrenme.

Tek cümleyle: Enerji-tabanlı model, her \((x, y)\) çiftine bir uyumluluk skoru (enerji) atar ve çıkarımı enerji minimizasyonu yapar; autoencoder bunun pratik bir hâlidir — veri manifoldu üzerine düşük enerji koyup dışını geri çeker.

8.2 (LeCun) EBM Nedir? Tek Çıktı Yerine Her Cevaba Enerji

LeCun EBM’yi geniş bir çerçeve olarak açıyor: birçok öğrenme algoritması (olasılıksal modeller dahil) EBM’nin özel hâlidir.

“energy based models — it’s basically a framework through which we can express a lot of different learning algorithms… probabilistic methods are really kind of a special case of energy based models.” — LeCun, 0:00

Fikir şu: sıradan bir ağ bir girdiye tek çıktı üretir. EBM ise her olası çıktıya bir skor verir — her olası sınıflandırmaya bir enerji. Düşük enerji = “bu \(y\), bu \(x\) ile uyumlu”; yüksek enerji = “uyumsuz”. Şekil 8.1 bu iki bakışı yan yana koyar: solda sıradan bir ağ (bir \(x\)’e tek \(y\), dikey çizgi eğriyi tek noktada keser), sağda EBM’nin çoklu çukuru (her gold yıldız bir geçerli cevap).

“all the values of Y that are compatible with this X have low energy, and all the values that are not compatible have higher energy.” — LeCun, 7:52

Bu yüzden EBM bir örtük (implicit) fonksiyondur: \(y\)’yi doğrudan hesaplamaz; \(y\)’yi, \(F(x, y)\)’yi en küçük yapan değer olarak tanımlar. (Calculus benzetmesi: \(x^2 + y^2 - 1 = 0\) örtük fonksiyonu, bir \(x\)’e birden çok uyumlu \(y\) verir.)

Şekil 8.1: Sıradan ağ ile enerji-tabanlı model (EBM) karşılaştırması. Solda sıradan bir ağ: girdi x ile çıktı y arasında bir fonksiyon — her x’e tek bir y düşer (dikey çizgi eğriyi tek noktada keser). Sağda EBM: her olası cevaba bir enerji F(x,y) atanır; düşük enerjili çukurlar uyumlu cevaplardır. energy_1d ile (-2, 0, 2) veri noktalarında üç çukur (gold yıldız) belirir — yani EBM bir girdiye birden çok geçerli cevap verebilir.
İpucuBuilder Notu — Örtük Fonksiyon = Calculus Akrabası

Geriye (Hafta 1 + Calculus): EBM, Hafta 1’de LeCun’un kısaca açtığı fikrin tam hâli. “Örtük fonksiyon” doğrudan Calculus’tan (bir denklemin örtük tanımladığı eğri). Olasılığa köprü: düşük enerji = yüksek olasılık (energy = −log p, sabite kadar — Stat 110).

İleriye: “Her cevaba skor” görüşü, modern üretken modellerin (enerji/score-based) ve LeCun’un dünya-modeli programının temelidir.

8.3 (LeCun) Çıkarım = Enerji Minimizasyonu (Çoklu Cevap)

EBM’de çıkarım (inference) bir aramadır: verilen \(x\) için, enerjiyi minimize eden \(y\)’yi bul.

\[ \check{y} = \arg\min_y F(x, y) \]

Kritik fark: sonuç tek bir \(y\) olmak zorunda değildir — enerji fonksiyonunun birden çok minimumu varsa, bir girdiye birden çok geçerli cevap verir (Hafta 6 Egzersiz 5’in cevabı: bir cümlenin birçok çevirisi). Çıkarım algoritması bu minimumu gradient descent ile arayabilir (\(y\) yönünde enerjiyi aşağı in). Şekil 8.2 tam bunu gösterir: aynı enerji eğrisi üzerinde üç farklı başlangıç noktası, energy_1d_grad ile en yakın çukura iner — farklı başlangıç, farklı geçerli cevap.

“the inference procedure is going to find the Y that minimizes F(X,Y)… there might be multiple values.” — LeCun, 8:06

LeCun ayrıca vurguluyor: standart çok-sınıflı sınıflandırma (Hafta 2) zaten örtük olarak EBM’dir — softmax skorları enerjidir, en yüksek skor = en düşük enerji.

Şekil 8.2: Çıkarım = enerji minimizasyonu. Aynı enerji eğrisi F(x, y) üzerinde üç farklı başlangıç noktasından (y₀ = −3, 0.8, 3) gradient inişi (η = 0.05, ~150 adım) başlatılır; her yörünge nokta-çizgi ve yön okuyla en yakın yerel minimuma yakınsar (sırasıyla y̌ ≈ −2, 0, 2). Gold yıldızlar yakınsanan minimumları işaretler. Çoklu minimum = çoklu geçerli cevap: çıkarım y̌ = argmin_y F(x, y) başlangıca bağlıdır.
İpucuBuilder Notu — Çıkarım = Arama

Geriye (Hafta 2 + Calculus): “En yüksek softmax = en düşük enerji” — Hafta 2 sınıflandırması bir EBM özel hâli. Gradient-tabanlı çıkarım, Calculus gradient descent’in girdi/çıktı (parametre değil) üzerinde uygulanmasıdır.

İleriye: “Çıkarım = optimizasyon” fikri, diffusion modelleri (Hafta 9 teaser) ve modern planlama/akıl yürütme yaklaşımlarının temelidir — cevabı hesaplamak yerine ara.

8.4 (LeCun) Enerji ≠ Kayıp; Enerji Fonksiyonunun Şekli

Sık karışan bir nokta: enerji, kayıp (loss) değildir. Enerji çıkarımda kullanılır (hangi \(y\)?); kayıp ise eğitimde enerji fonksiyonunu doğru şekle sokmak için.

“this energy function is not what we mean by [loss]… it’s what we minimize during inference.” — LeCun, 7:27

İyi bir enerji fonksiyonu şu şekle sahip olmalı: veri noktalarında düşük, dışında yüksek. Eğitim, \(F\)’yi bu şekle getirir — gerçek \((x, y)\) çiftlerine çukur (düşük enerji), uyumsuzlara tepe (yüksek enerji) koyar. Şekil 8.3 bu “iyi enerji şeklini” çiziyor: veri noktalarında (\(y \in \{-2, 0, 2\}\)) çukur, aralarda tepe. EBM eğitiminin tüm zorluğu budur: dışarıyı nasıl yükseltirsin? (Bu, Hafta 8’in contrastive vs non-contrastive ayrımının konusu.)

Grafiksel modeller (graphical models) de EBM’dir: enerji, alt-küme terimlerinin toplamı olarak ayrışır; bu yapıda verimli çıkarım algoritmaları vardır.

Şekil 8.3: İyi enerji şekli (EBM, Bölüm 3): energy_1d ile çizilen 1B enerji fonksiyonu F(y), veri noktalarında (y ∈ {−2, 0, 2}) düşük çukurlar, aralarda yüksek tepeler oluşturur. Gold dikey işaretler veriyi gösterir; eğitim bu şekli kurar — veride düşük, dışında yüksek. Enerji ≠ kayıp (LeCun 7:27).
İpucuBuilder Notu — Enerji ≠ Kayıp

Geriye (Hafta 1): “Veride düşük, dışında yüksek enerji” = Hafta 1’in manifold hipotezinin enerji diliyle ifadesi (veri manifoldu = enerji vadisi).

İleriye: “Dışarıyı yükseltme” sorunu, EBM eğitiminin merkezi zorluğudur — contrastive yöntemler (negatif örnek), score matching, ve modern SSL’in (Hafta 10) ayrımı buradan doğar.

8.5 (LeCun) Latent-Variable EBM

EBM’ler gizli değişken (latent variable) içerdiğinde gerçekten güçlenir. Bazen \(y\)’yi açıklamak için gözlenmeyen bir \(z\) değişkeni gerekir; enerji artık \(F(x, y, z)\) olur ve çıkarım hem \(y\) hem \(z\) üzerinden minimize edilir:

\[ \check{y} = \arg\min_{y,\, z} F(x, y, z) \]

“[latent-variable EBMs] are really where they start becoming interesting.” — LeCun, 15:09

Gizli değişken, çıkarım problemini kolaylaştıran “yardımcı” bir bilgidir (örn. bir sahnedeki nesnenin hangi parçasının görünür olduğu). \(z\)’yi doğru seçersen \(y\)’yi bulmak kolaylaşır. Şekil 8.4 bu şemayı gösterir: gözlenen \(x\) ve \(y\) ile gözlenmeyen \(z\) birlikte \(F(x, y, z)\)’ye girer, çıkarım \(\arg\min_{y,z} F\) olur. Bu, autoencoder’ın code’u (Canziani’nin latent space’i) ve VAE’nin (Hafta 8) latent \(z\)’siyle aynı fikirdir.

Şekil 8.4: Gizli değişkenli enerji-temelli model (EBM). Gözlenen girdi \(x\) ve cevap \(y\) (violet) ile gözlenmeyen yardımcı gizli değişken \(z\) (gold, kesikli kenar) birlikte \(F(x,y,z)\) enerji fonksiyonuna girer; çıkarım \(\arg\min_{y,z} F\) ile enerji minimizasyonudur. Gizli \(z\), çıkarımı kolaylaştıran yardımcı bilgidir ve autoencoder code ile VAE latent (Hafta 8) ile aynı kavramdır.
İpucuBuilder Notu — Latent = Yardımcı Bilgi

Geriye (Stat 110): Latent değişken = gözlenmeyen rastgele değişken; üzerinden minimize/marjinalize etmek Stat 110’un latent-değişken modellerinin (mixture, EM) çekirdeğidir.

İleriye: Latent \(z\) → autoencoder code (bu hafta), VAE latent (Hafta 8), ve tüm üretken modellerin gizli uzayı.

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

LeCun EBM’nin soyut çerçevesini kurdu: enerji = uyumluluk skoru, çıkarım = minimizasyon, latent değişkenler. Şimdi Canziani bunun en somut örneğini gösteriyor: autoencoder. Bir autoencoder, veriyi bir code’a sıkıştırıp geri kurar; ve Canziani’nin vurgulayacağı gibi, “yalnızca veri manifoldu üzerini iyi kurmak” = “manifold üzerine düşük enerji koymak”. Canziani açıkça LeCun’a atıf yapıyor: “this is stuff Yann was covering yesterday” — yani autoencoder, dünün EBM’sinin pratik hâli.

8.7 (Canziani) Autoencoder: Encoder → Code → Decoder

Canziani autoencoder’ı tanıtıyor: bir encoder girdiyi küçük bir code’a (latent temsil) sıkıştırır; bir decoder code’dan girdiyi yeniden kurar. İlk akla gelen kullanım sıkıştırmadır (code girdiden küçükse). Ama Canziani uyarıyor:

“[compression] is just one type, and it’s kind of not the proper way of thinking about these guys.” — Canziani, 19:28

Latent space anlamlıdır: iki girdinin code’ları arasında yürürsen (interpolation), aradaki noktalar anlamlı görüntülere çözülür — yani latent uzay verinin semantiğini yakalar. Şekil 8.5 mimariyi huni şeklinde gösterir: geniş girdi \(x\), daralan encoder, ortadaki gold darboğazda küçük code \(z\), genişleyen decoder, kurulan \(\hat{x}\) — ve üstte yeniden kurma kaybı \(\lVert x - \hat{x} \rVert^2\).

Şekil 8.5: Autoencoder mimarisi (huni şekli): geniş girdi x, daralan encoder trapezi ile sıkıştırılır; ortadaki gold darboğazda küçük code/latent z kalır; genişleyen decoder bunu kurulan x̂’e açar. Üstteki yay yeniden kurma kaybını ‖x−x̂‖² gösterir. Amaç sıkıştırma değil veri manifoldunu kurmaktır — darboğaz (bottleneck) bu yüzden zorunludur: ağı, girdinin tüm bilgisini değil yalnızca manifold üzerindeki gerçek serbestlik derecelerini kodlamaya zorlar.
İpucuBuilder Notu — Code = Latent z

Geriye (Hafta 4): Encoder = boyut indiren afin+nonlinearite zinciri; code = düşük-boyutlu temsil (Hafta 4 SVD/boyut indirgeme akrabası). Latent interpolation, Hafta 1’in manifold sezgisinin pratiği.

İleriye: Latent space interpolation, üretken modellerin (VAE/GAN, Hafta 8-9) “latent traversal” demolarının temelidir.

8.8 (Canziani) Manifold: “Yalnızca Üzerini Yeniden Kur”

Canziani autoencoder’ın doğru amacını veriyor: sıkıştırma değil, veri manifoldu üzerini yeniden kurmak. Gerçek veri (yüzler, sahneler) yüksek-boyutlu uzayın küçük bir manifoldunda yaşar (Hafta 1). İyi bir autoencoder yalnızca bu manifold üzerindeki noktaları iyi kurar; manifold dışındaki bir noktayı verirsen, onu manifolda geri çeker.

“the task of these autoencoders [is] only to reconstruct a small subset [that lives] on the manifold.” — Canziani, 20:06

Örnek: bir yüze yama (patch) koyarsan görüntü manifolddan çıkar; manifold-üzeri kurma yapan autoencoder, yamayı kaldırıp en yakın gerçek yüzü kurar. Şekil 8.6 bunu somutlaştırır: violet eğri veri manifoldu, gold noktalar manifold dışına dağılmış bozuk girdiler, kesikli gold oklar her birini en yakın manifold noktasına geri çeker. Bu, “bozuk girdiyi düzelt” yeteneğidir (denoising’in tohumu, Hafta 8).

Şekil 8.6: Veri manifoldu (sinüs yayı, kalın violet eğri) ve manifold dışına dağılmış bozuk girdiler (gold). Her off-manifold nokta, en yakın manifold noktasına kesikli gold okla geri çekilir (project_to_manifold); varış noktaları (içi boş violet daireler) tam olarak manifold üzerine düşer. Autoencoder reconstruction sezgisi: off-manifold girdiyi manifolda geri çekmek = bozuk girdiyi düzeltmek, Hafta 8’deki denoising autoencoder’ın tohumu.
İpucuBuilder Notu — Manifoldu Öğren

Geriye (Hafta 1): Bu, Hafta 1’in manifold hipotezinin doğrudan uygulamasıdır: anlamlı veri minik bir manifoldda; autoencoder o manifoldu öğrenir.

İleriye: “Off-manifold → manifolda geri çek” = denoising autoencoder (Hafta 8) ve diffusion modellerinin (Hafta 9) çekirdek sezgisi.

8.9 (Canziani) Reconstruction Loss, Bottleneck ve Autoencoder = EBM

Autoencoder bir yeniden kurma kaybı (reconstruction loss) ile eğitilir — girdi ile kurulan çıktı arasındaki fark:

\[ \mathcal{L} = \lVert x - \text{dec}(\text{enc}(x)) \rVert^2 \]

Manifoldu öğrenmeye zorlamak için bir bilgi darboğazı (bottleneck) gerekir. İki yol: undercomplete (code girdiden küçük → zorunlu sıkıştırma) veya overcomplete (code büyük ama ek bir kısıt/düzenlileştirme ile darboğaz yaratılır). Darboğaz olmadan autoencoder her şeyi ezberler (kimlik fonksiyonu) ve manifoldu öğrenmez.

Ve işte EBM köprüsü: reconstruction loss bir enerjidir. Manifold üzerindeki noktalarda düşük (iyi kurulur), dışında yüksek (kötü kurulur). Şekil 8.7 bunu 2B bir enerji manzarası olarak gösterir: manifold (gold çizgi) düşük-enerji vadi tabanını oluşturur, uzaklaştıkça enerji yükselir. Yani autoencoder, LeCun’un dünkü EBM’sinin tam bir örneğidir — enerji = yeniden kurma hatası.

Şekil 8.7: Reconstruction error = enerji: bir autoencoder’ın öğrendiği veri manifoldu (sinüs yayı, gold çizgi) düşük-enerji vadi tabanını oluşturur; 2B girdi uzayında her noktanın manifolda en yakın kare mesafesi (reconstruction error) bir enerji manzarası tanımlar — manifoldda düşük, uzaklaştıkça yüksek. Bu yüzden autoencoder bir Enerji-Tabanlı Model (EBM) olarak okunabilir.
İpucuBuilder Notu — Reconstruction = Enerji

Geriye (LeCun bu hafta): Reconstruction error = enerji fonksiyonu: veri manifoldunda düşük, dışında yüksek (LeCun Bölüm 3’teki “iyi enerji şekli”). Autoencoder, EBM’nin en sezgisel hâli.

İleriye: Bottleneck → VAE’nin olasılıksal latent’i (Hafta 8); reconstruction = enerji → score-based/diffusion modelleri (Hafta 9).

8.10 Bu Dersin Özeti

  1. EBM = her cevaba enerji (uyumlu çift düşük, uyumsuz yüksek); olasılıksal modeller özel hâli.
  2. Çıkarım = enerji minimizasyonu: \(\check{y} = \arg\min_y F(x,y)\); birden çok cevap olabilir (örtük fonksiyon, gradient ile aranır).
  3. Enerji ≠ kayıp: enerji çıkarımda; kayıp eğitimde enerji şeklini (veride düşük, dışında yüksek) kurmak için.
  4. Latent-variable EBM: \(F(x,y,z)\), \(y\) ve \(z\) üzerinden minimize; \(z\) çıkarımı kolaylaştırır.
  5. Autoencoder (Canziani): encoder→code→decoder; amaç sıkıştırma değil, veri manifoldu üzerini kurmak; off-manifold geri çekilir.
  6. Autoencoder = EBM: reconstruction loss = enerji (manifoldda düşük, dışında yüksek); bottleneck (under/overcomplete) manifoldu öğrenmeye zorlar.
ÖnemliTek Bir Cümle

Enerji-tabanlı model, her \((x, y)\) çiftine bir uyumluluk skoru (enerji) atayıp çıkarımı \(\arg\min_y F(x,y)\) ile yapar — tek çıktı zorunluluğunu kaldırır; autoencoder bunun en somut hâlidir: veri manifoldu üzerine düşük enerji (iyi yeniden kurma) koyar, dışını manifolda geri çeker.

8.11 Kontrol Soruları

Cevap: Sıradan ağ bir girdiye tek çıktı hesaplar (ileri geçiş). EBM ise her \((x, y)\) çiftine bir enerji \(F(x, y)\) atar ve çıkarımı bir arama/minimizasyon yapar:

\[ \check{y} = \arg\min_y F(x, y) \]

Enerji fonksiyonunun birden çok minimumu varsa, bir girdiye birden çok geçerli cevap verir (örn. bir cümlenin birçok çevirisi). Çıkarım, bu minimumu gradient descent ile (\(y\) yönünde) arayabilir. Düşük enerji = uyumlu \((x, y)\); yüksek = uyumsuz (LeCun 7:52).

Cevap: Enerji çıkarımda kullanılır (verilen \(x\) için hangi \(y\)?); kayıp eğitimde kullanılır (enerji fonksiyonunu doğru şekle sokmak için) — ikisi farklı şeyler (LeCun 7:27). İyi bir enerji fonksiyonu veri noktalarında düşük (vadi), dışında yüksek (tepe) olmalıdır. Eğitim, \(F\)’yi bu şekle getirir: gerçek çiftlere çukur, uyumsuzlara tepe. EBM eğitiminin merkezi zorluğu “dışarıyı nasıl yükseltirsin?” sorusudur (Hafta 8 contrastive). Bu şekil, Hafta 1’in manifold hipotezinin enerji dilidir.

Cevap: Autoencoder’ın reconstruction loss’u bir enerjidir: veri manifoldu üzerindeki noktalarda düşük (iyi kurulur), manifold dışında yüksek (kötü kurulur). Yani autoencoder, “veride düşük, dışında yüksek enerji” EBM şeklini öğrenir. “Manifold üzerini kurmak”: autoencoder yalnızca gerçek verinin yaşadığı küçük manifoldu iyi kurar; manifold dışı (örn. yamalı yüz) bir girdiyi verirsen onu manifolda geri çeker (Canziani 20:06) — bu, bozuk girdiyi düzeltme (denoising) yeteneğidir. Darboğaz (under/overcomplete) olmadan autoencoder kimlik fonksiyonunu ezberler, manifoldu öğrenmez.

Cevap: Latent-variable EBM’de enerji \(F(x, y, z)\) gözlenmeyen bir \(z\) içerir; çıkarım hem \(y\) hem \(z\) üzerinden minimize edilir:

\[ \check{y} = \arg\min_{y,\, z} F(x, y, z) \]

\(z\), çıkarımı kolaylaştıran “yardımcı” bilgidir (LeCun 15:09). Autoencoder’ın code’u (Canziani’nin latent space’i) tam olarak bu \(z\)’dir: girdiyi açıklayan gizli temsil. VAE (Hafta 8) bu \(z\)’yi olasılıksal yapar. Yani autoencoder code = EBM latent değişken = üretken modellerin gizli uzayı — aynı fikrin farklı kılıkları.

8.12 Egzersizler

Egzersiz 1 (Enerji şekli). 1B bir örnekte, veri noktaları {−2, 0, 2} olsun. Bu üç noktada düşük, aralarda yüksek bir “enerji” \(F(y)\) çiz (örn. üç çukurlu bir eğri). argmin hangi noktaları verir? Birden çok minimum = birden çok cevap fikrini gözlemle.

import numpy as np

def energy_1d(y, data=(-2.0, 0.0, 2.0), width=0.35):
    y = np.asarray(y, float)
    F = np.ones_like(y)
    for d in data:                                  # her veri noktasi bir cukur
        F = F - np.exp(-(y - d) ** 2 / (2 * width))
    return F

y = np.linspace(-4, 4, 400)
F = energy_1d(y)
# Yerel minimumlar (cukur dipleri) = veri noktalari {-2, 0, 2}
mins = [y[i] for i in range(1, len(y) - 1)
        if F[i] < F[i - 1] and F[i] < F[i + 1]]
print("yerel minimumlar:", np.round(mins, 2))       # ~[-2, 0, 2]
# COKLU minimum = COKLU gecerli cevap (tek f(x) degil)

Egzersiz 2 (Autoencoder kur). PyTorch’ta küçük bir undercomplete autoencoder (örn. 784 → 32 → 784) kur; MNIST’te reconstruction loss (MSE) ile eğit. Kurulan görüntüleri orijinalle karşılaştır. Code boyutunu 2’ye indirip latent uzayı 2B çiz.

import torch
import torch.nn as nn

class Autoencoder(nn.Module):
    def __init__(self, code_dim=32):
        super().__init__()
        self.encoder = nn.Sequential(           # 784 -> code (sikistir)
            nn.Linear(784, 128), nn.ReLU(),
            nn.Linear(128, code_dim),
        )
        self.decoder = nn.Sequential(           # code -> 784 (kur)
            nn.Linear(code_dim, 128), nn.ReLU(),
            nn.Linear(128, 784), nn.Sigmoid(),
        )
    def forward(self, x):
        z = self.encoder(x)                     # latent code z
        return self.decoder(z), z               # x_hat, z

model = Autoencoder(code_dim=32)
loss_fn = nn.MSELoss()                          # ||x - x_hat||^2
opt = torch.optim.Adam(model.parameters(), lr=1e-3)
# egitim dongusu: x_hat, _ = model(x); loss = loss_fn(x_hat, x); loss.backward(); opt.step()
# code_dim=2 -> latent uzayi 2B scatter ile ciz (rakam siniflari kumelenir)

Egzersiz 3 (Off-manifold). Eğitilmiş autoencoder’a (a) gerçek bir rakam, (b) rastgele gürültü ver. Hangisi daha iyi kurulur (düşük reconstruction error/enerji)? Bu, autoencoder’ın EBM olduğunu nasıl gösterir?

import torch

# Egitilmis model varsayalim (Egzersiz 2)
real_digit = mnist_sample                       # manifold UZERI (gercek rakam)
noise = torch.rand(1, 784)                       # manifold DISI (rastgele gurultu)

with torch.no_grad():
    for name, x in [("gercek rakam", real_digit), ("rastgele gurultu", noise)]:
        x_hat, _ = model(x)
        energy = ((x - x_hat) ** 2).mean().item()    # reconstruction error = ENERJI
        print(f"{name:18s} enerji = {energy:.4f}")
# gercek rakam -> DUSUK enerji (manifoldda, iyi kurulur)
# gurultu      -> YUKSEK enerji (manifold disi, kotu kurulur)
# => autoencoder veride dusuk/disinda yuksek enerji ogrenir = EBM

Egzersiz 4 (Bottleneck). Aynı autoencoder’ı code boyutu girdiye eşit (overcomplete, kısıtsız) yapıp eğit. Reconstruction mükemmel ama latent anlamsız — neden? (Kimlik fonksiyonu ezberi.) Darboğazın neden gerekli olduğunu açıkla.

# undercomplete (code < girdi): darbogaz -> manifoldu OGRENMEK zorunda
under = Autoencoder(code_dim=32)     # 784 -> 32 -> 784  (sikistirma zorunlu)

# overcomplete + kisitsiz (code >= girdi): darbogaz YOK
over = Autoencoder(code_dim=784)     # 784 -> 784 -> 784
# Risk: encoder = I, decoder = I (kimlik fonksiyonu) ezberi
#   -> reconstruction MUKEMMEL ama latent ANLAMSIZ (manifold ogrenilmez)
# Cozum: bottleneck (undercomplete) VEYA overcomplete + kisit/duzenlileme
#   (sparse/denoising/contractive AE) -> manifoldu ogrenmeye zorla

Egzersiz 5 (Hafta 8 habercisi — dışarıyı yükseltmek). EBM eğitiminin zorluğu: veride enerjiyi düşürmek kolay, ama dışarıyı yükseltmek zor. (a) Yalnızca veride enerjiyi düşürürsen ne olur (enerji her yerde düşer, model çöker)? (b) Bir “negatif örnek” (uyumsuz çift) üretip onun enerjisini yükseltmek bu sorunu nasıl çözer? Bu, Hafta 8’in contrastive yöntemlerine girişi motive eder.

# (a) SADECE veride enerjiyi dusur: F(veri) asagi cek
#     -> ama hicbir sey disariyi YUKARI cekmez
#     -> enerji HER YERDE duser (sabit/duz yuzey) -> model COKER (collapse)
# (b) contrastive: pozitif (veri) + negatif (uyumsuz) ornek ciftleri
#     pozitif enerjiyi DUSUR, negatif enerjiyi YUKSELT
#     -> veride cukur, disinda tepe = iyi enerji sekli (Bolum 3)
# loss ~ F(pozitif) - F(negatif)   (margin/contrastive)
# negatif ornek nereden? -> Hafta 8: sampling, augmentation, vb.
print("non-contrastive: collapse riski | contrastive: disariyi yukselt")

8.13 Sonraki Ders İçin Hazırlık

UyarıSonraki Hafta — H8: Karşıtsal SSL, Sparse Coding ve VAE

Enerji şeklini nasıl kurarsın? Bu hafta EBM’nin merkezi zorluğunu sorduk ama çözmedik: enerji fonksiyonunu nasıl şekillendirirsin — veride düşük, dışında yüksek? Hafta 8 bunu çözüyor: LeCun contrastive yöntemleri (negatif örneklerle dışarıyı yükselt) ve regularize latent değişkenleri anlatacak; Canziani VAE’yi (olasılıksal autoencoder) gösterecek. Egzersiz 3 (off-manifold) ve Egzersiz 5 (dışarıyı yükseltme) tam bu derse hazırlar.

Hafta 8: Karşıtsal SSL, Sparse Coding ve VAE — LeCun (Lecture) + Canziani (Practicum)

Hafta 8, EBM’nin merkezi zorluğunu çözüyor: enerji fonksiyonunu nasıl şekillendirirsin? LeCun contrastive yöntemleri (negatif örneklerle dışarıyı yükselt) ve regularize latent değişkenleri anlatacak; Canziani VAE’yi (olasılıksal autoencoder) gösterecek.

Hafta 8 öncesi yapılacak:

  • Egzersiz 3 (off-manifold) ve Egzersiz 5 (dışarıyı yükseltme) çöz.
  • “EBM çıkarımı = argmin_y F(x,y)” ve “autoencoder = EBM” cümlelerini kendi sözcüklerinle yaz.
  • Hafta 1’in manifold hipotezini hatırla — EBM’nin “veride düşük enerji” şekli onunla aynı.

8.14 Anahtar Kavramlar (Cheat Sheet)

Kavram Tanım Hoca / timestamp
Enerji-tabanlı model (EBM) Her \((x,y)\) çiftine uyumluluk skoru (enerji) LeCun 0m00
Enerji fonksiyonu \(F(x,y)\) Uyumlu çiftte düşük, uyumsuzda yüksek LeCun 7m52
Çıkarım = enerji minimizasyonu \(\check{y} = \arg\min_y F(x,y)\); birden çok cevap olabilir LeCun 8m06
Örtük (implicit) fonksiyon \(y\)’yi doğrudan değil, \(F\)’yi minimize eden değer olarak tanımla LeCun 4m47
Enerji ≠ kayıp Enerji çıkarımda; kayıp eğitimde (şekillendirme) LeCun 7m27
Latent-variable EBM \(F(x,y,z)\); \(y\) ve \(z\) üzerinden minimize LeCun 15m09
Autoencoder encoder → code → decoder; girdiyi yeniden kur Canziani 14m41
Veri manifoldu Anlamlı veri küçük bir altuzayda; AE onu kurar Canziani 19m41
Reconstruction loss \(\lVert x - \text{dec}(\text{enc}(x)) \rVert^2\) = enerji Canziani 20m44
Bottleneck (under/overcomplete) Manifoldu öğrenmeye zorlayan kısıt Canziani 23m01

8.15 ML Builder Bağlantıları

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

  1. Enerji = −log olasılık → Stat 110 (Boltzmann, Hafta 8-9’da derinleşir).
  2. Çıkarım = enerji minimizasyonu → Calculus gradient descent (\(y\) üzerinde) + örtük fonksiyon.
  3. Manifold (veride düşük enerji) → Hafta 1 manifold hipotezi + 18.06 altuzay.
  4. Latent değişken → Stat 110 latent-değişken modelleri (mixture, EM).
  5. Autoencoder = EBM → bu haftanın iki yarısının birleşimi.

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

  1. EBM → JEPA / I-JEPA / V-JEPA (post-2020 ileriye köprü, LeCun programı).
  2. Reconstruction = enerji → score-based / diffusion modelleri (Hafta 9).
  3. Latent code → VAE (Hafta 8), üretken modellerin gizli uzayı.
  4. Off-manifold geri çekme → denoising AE (Hafta 8), diffusion.
ÖnemliBu dersten tek bir şey alıp gideceksen

EBM sihir değildir — bir ağı “tek çıktı veren fonksiyon” olmaktan çıkarıp, her olası cevaba bir uyumluluk skoru (enerji) atayan ve çıkarımı \(\arg\min_y F(x,y)\) ile yapan bir çerçeveye dönüştürür; böylece bir girdiye birden çok geçerli cevap verebilir. Autoencoder bunun en somut hâlidir: veri manifoldu üzerine düşük enerji koyup dışını geri çeker — LeCun enerji çerçevesini kurar, Canziani onu autoencoder’da gösterir, ve bu ikisi kursun geri kalanının (VAE, contrastive SSL, diffusion) teorik omurgasıdır.