İçeriğe geç

MLE, MAP, Posterior: Modelleme Dilinin Grameri — Pretrain Loss'un Matematiksel Kökü

LLM pretrain loss'unun bir Maximum Likelihood Estimation (MLE) objective olduğunu, fine-tuning'in matematiksel olarak Bayesian güncelleme olduğunu, regularization'ın MAP'a karşılık geldiğini gözden geçir. Cross-entropy = NLL ilişkisi, prior seçimi, conjugate priors.

Şükrü Yusuf KAYA
40 dakikalık okuma
Orta
MLE, MAP, Posterior: Modelleme Dilinin Grameri — Pretrain Loss'un Matematiksel Kökü
🎓 Modelleme'nin gramerini öğreniyoruz
Bu derste şu denklemi tek bir cümlede özetleyeceğiz: 'LLM pretrain loss = -log likelihood = cross-entropy = NLL'. Bunu kavradığında, paper okumak çok daha kolay olur. Sıklıkla göreceksin: 'biz şu objective'i optimize ediyoruz' ve sen 'aha, bu MLE' diyebileceksin.

Ders Haritası#

  1. Likelihood: parametre verildiğinde verinin olasılığı
  2. MLE: parametre nasıl seçilir
  3. MLE → Cross-entropy → NLL denklikleri
  4. MAP: prior eklenince ne değişir
  5. MAP = MLE + regularization denkliği (LLM weight decay!)
  6. Posterior: tam Bayesian sonuç
  7. Conjugate priors: matematik kolaylığı
  8. LLM bağlamında: pretrain = MLE, fine-tuning = Bayes update
  9. Bayesian Deep Learning (kısa) — niye yaygın değil
  10. Pratik: PyTorch ile MLE, regularization eklemek

1. Likelihood — Verinin Parametreye Göre Olasılığı#

Olasılık: parametre sabit, veriyi öğrenmiyoruz →
P(D | θ)
(D = veri, θ = parametre). Likelihood: aynı şey, ama bu sefer θ'yı bilmediğimiz, veri elimizde olduğu durum →
L(θ | D) = P(D | θ)
.
Aynı matematiksel ifade — sadece farklı yorum. Likelihood fonksiyonu parametre uzayında gezer.

IID veri için#

D = {x_1, x_2, ..., x_N} bağımsız ve özdeş dağılımlı (i.i.d.):
L(θD)=i=1NP(xiθ)L(\theta | D) = \prod_{i=1}^{N} P(x_i | \theta)
Çarpım, çoğu sayısal işlemde underflow verir (çok küçük sayıların çarpımı). Bu yüzden log-likelihood kullanırız:
(θD)=logL(θD)=i=1NlogP(xiθ)\ell(\theta | D) = \log L(\theta | D) = \sum_{i=1}^{N} \log P(x_i | \theta)
Log toplamı toplam log → çarpımdan toplamaya geçtik, sayısal olarak çok daha stabil.

2. MLE — Maximum Likelihood Estimation#

"En iyi parametre, gözlemlenen veriyi en olası kılan parametredir." — istatistiksel öğrenmenin atası.
θ^MLE=argmaxθL(θD)=argmaxθilogP(xiθ)\hat{\theta}_{MLE} = \arg\max_\theta L(\theta | D) = \arg\max_\theta \sum_i \log P(x_i | \theta)

Örnek 1: Coin flip#

Veri: 10 atış, 7 yazı (1), 3 tura (0). Hangi p (yazı olasılığı) en iyi?
P(D | p) = p^7 * (1-p)^3 log L(p) = 7 log p + 3 log(1-p) d/dp log L = 7/p - 3/(1-p) = 0 => 7(1-p) = 3p => p = 7/10 = 0.7
Şaşırtıcı değil: MLE coin için deneysel sıklık. Frekansçı yorumu doğal olarak verir.

Örnek 2: Gaussian mean#

N örnek
x_1, ..., x_N ~ N(μ, σ²)
(σ biliniyor). MLE for μ?
log L(μ) = -N/2 log(2πσ²) - Σ(x_i - μ)² / (2σ²) d/dμ log L = Σ(x_i - μ) / σ² = 0 => μ_MLE = (1/N) Σ x_i (örnek ortalaması)
Yine doğal: MLE for Gaussian mean = sample mean.

3. MLE → Cross-Entropy → NLL Denklikleri#

LLM pretrain loss'un kalbi. Sırayla göstereceğiz.

Categorical model için#

Bir token
x_t
üzerinden olasılık dağılımı:
P(x_t | x_{<t}; θ)
=
softmax(z)
(z = logits).
Likelihood (tek örnek): P(xtx<t;θ)=softmax(z)xtP(x_t | x_{<t}; \theta) = \text{softmax}(z)_{x_t}
Log-likelihood: logP(xtx<t;θ)=zxtlogvezv\log P(x_t | x_{<t}; \theta) = z_{x_t} - \log \sum_v e^{z_v}
Negative log-likelihood (NLL): NLL=logP(xt)=zxt+logvezv\text{NLL} = -\log P(x_t) = -z_{x_t} + \log \sum_v e^{z_v}
Şimdi cross-entropy ile karşılaştır. True dağılım
q
(one-hot, target'ta 1) ile model dağılımı
p
arasında cross-entropy:
H(q,p)=vq(v)logp(v)=logp(target)H(q, p) = -\sum_v q(v) \log p(v) = -\log p(\text{target})
Çünkü
q
one-hot olduğu için yalnızca target index'inde 1, gerisi 0. Yani:
cross-entropy=logp(target)=NLL\text{cross-entropy} = -\log p(\text{target}) = \text{NLL}
Cümle olarak: cross-entropy loss = NLL = -log likelihood.

Tüm sequence için#

Pretrain loss: L(θ)=1Tt=1TlogP(xtx<t;θ)L(\theta) = -\frac{1}{T} \sum_{t=1}^{T} \log P(x_t | x_{<t}; \theta)
Bu, autoregressive language modelin NLL objective'idir. Aynı zamanda MLE çünkü onu minimize etmek log-likelihood'ı maksimize etmekle eşdeğer. PyTorch'un
F.cross_entropy
fonksiyonu tam olarak bunu hesaplıyor (her token için).

Sonuç (göz alıcı denklik)#

LLM pretrain loss = NLL = -log P(D | θ) = MLE objective × (-1)
Demek ki "modeli pretrain et" demek matematiksel olarak "MLE ile parametre fit et" demektir.
python
import torch
import torch.nn.functional as F
 
# Sentetik: 1 batch, 5 token, vocab=10
torch.manual_seed(0)
B, T, V = 1, 5, 10
logits = torch.randn(B, T, V, requires_grad=True)
targets = torch.tensor([[2, 5, 1, 9, 0]])
 
# Yol 1: cross_entropy
loss_ce = F.cross_entropy(logits.view(-1, V), targets.view(-1))
print("Cross-entropy:", loss_ce.item())
 
# Yol 2: log_softmax + NLL
log_probs = F.log_softmax(logits, dim=-1)
loss_nll = F.nll_loss(log_probs.view(-1, V), targets.view(-1))
print("NLL:", loss_nll.item())
 
# Yol 3: manuel — log p(target)
manual = 0.0
for b in range(B):
for t in range(T):
tok = targets[b, t]
manual += -log_probs[b, t, tok]
manual /= (B * T)
print("Manual -log p(target):", manual.item())
 
# Hepsi aynı!
# Cross-entropy: 2.4502
# NLL: 2.4502
# Manual -log p(target): 2.4502
Cross-entropy = NLL = -log p(target) — üç yol, tek sonuç.

4. MAP — Maximum A Posteriori#

MLE sadece veriye bakar, ön bilgi yok. Eğer parametre üzerinde bir prior
P(θ)
varsa, Bayes:
P(θD)P(Dθ)P(θ)P(\theta | D) \propto P(D | \theta) \cdot P(\theta)
Bunu maksimize eden θ:
θ^MAP=argmaxθ[logP(Dθ)+logP(θ)]\hat{\theta}_{MAP} = \arg\max_\theta \left[\log P(D | \theta) + \log P(\theta)\right]

MAP ≠ MLE çünkü prior var#

Eğer
P(θ)
uniform (özel bir tercih yok) → MAP = MLE. Eğer
P(θ)
informative ise → MAP, MLE'den farklı bir θ verir.

Örnek: Gaussian prior + MLE#

θ ~ N(0, σ_prior²)
, log-prior: logP(θ)=θ22σprior2+const\log P(\theta) = -\frac{\theta^2}{2 \sigma_{prior}^2} + \text{const}
MAP objective: argminθ[logL(θD)+θ22σprior2]\arg\min_\theta \left[ -\log L(\theta | D) + \frac{\theta^2}{2 \sigma_{prior}^2} \right]
İlk terim NLL; ikinci terim
λ ||θ||²
(with
λ = 1/(2σ²)
). Bu L2 regularization (weight decay)!

Sonuç (kritik)#

MAP with Gaussian prior = MLE + L2 regularization (weight decay).
Weight decay kullanıyorsan, örtük olarak Bayesian'sın — modelin küçük weight'lere prior atıyorsun.
Benzer şekilde:
  • Laplace (double-exponential) prior → L1 regularization (sparsity)
  • Spike-and-slab prior → variable selection
  • Cauchy prior → robust regularization
python
import torch
import torch.nn as nn
 
# Standart eğitim: cross-entropy + L2 regularization
model = nn.Linear(10, 5)
opt = torch.optim.AdamW(model.parameters(), lr=1e-3, weight_decay=0.01)
# weight_decay = λ (Gaussian prior strength)
# AdamW: ∇L = ∇NLL + λθ
# Bayesian yorumda: θ_t+1 = θ_t - η(∇NLL + λθ)
# Yani her step'te θ'yı sıfıra doğru biraz çekiyoruz (prior etkisi)
 
# Bu eşdeğerdir: arg max [log P(D|θ) + log N(θ | 0, 1/λ)]
 
# Eğer fine-tuning yapıyorsan:
# Prior = pretrain edilmiş weights (θ₀)
# log P(θ) = -||θ - θ₀||² / (2σ²)
# Bu "L2-SP" (L2 starting point) regularization
# Otomatik catastrophic forgetting'i engeller
Weight decay'in Bayesian yorumu.

5. Posterior — Tam Bayesian Sonuç#

MAP "posterior'un modu"nu verir (tek nokta tahmini). Ama posterior aslında bir dağılımdır:
P(θD)=P(Dθ)P(θ)P(D)P(\theta | D) = \frac{P(D | \theta) P(\theta)}{P(D)}

Niye sadece mod değil tam dağılım?#

  • Uncertainty quantification: parametremiz hakkında ne kadar emin?
  • Predictive distribution: gelecek tahminlerinde belirsizlik
  • Bayesian model averaging: tek model değil, posterior'a göre ağırlıklı ensemble

Pratikte zor: P(D) hesabı#

P(D) = ∫ P(D | θ) P(θ) dθ
— bu integral çoğu zaman analitik olarak çözülemez.
Çözümler:
  1. Conjugate priors (sonraki bölüm)
  2. MCMC (Markov Chain Monte Carlo) — sample from posterior
  3. Variational Inference — posterior'a parametrik bir yaklaşım fit et (VI, VAE'nin temeli)
  4. Laplace approximation — posterior'u MAP etrafında Gaussian olarak yaklaş

6. Conjugate Priors — Matematik Kolaylığı#

Eğer prior
P(θ)
ve likelihood
P(D | θ)
çarpıldığında posterior aynı aile dağılım çıkıyorsa, prior conjugate denir. Bu, hesabı çok kolaylaştırır.

Önemli conjugate pair'ler#

LikelihoodConjugate PriorPosterior
BernoulliBetaBeta (sayım güncellemesi)
CategoricalDirichletDirichlet
Gaussian (μ known σ)Gaussian on μGaussian on μ
Gaussian (σ known μ)Inverse-Gamma on σInverse-Gamma on σ
PoissonGammaGamma
ExponentialGammaGamma

Örnek: Beta-Bernoulli güncellemesi#

Yazı atış:
x_i ~ Bernoulli(p)
. Prior:
p ~ Beta(α, β)
.
n_y yazı, n_t tura görüldükten sonra: pDBeta(α+ny,β+nt)p | D \sim \text{Beta}(\alpha + n_y, \beta + n_t)
Yorum: prior "pseudo-counts" (α-1 yazı, β-1 tura) gibi davranıyor. Gerçek veriyle topluyoruz, posterior çıkıyor.
Bu online Bayesian güncelleme'nin temelini oluşturur — her yeni veriyle posterior'u kolayca güncellersin.
python
import torch
import torch.distributions as dist
 
# Prior: Beta(2, 2) — hafifçe coin'in dengeli olduğuna inanıyoruz
alpha_prior, beta_prior = 2.0, 2.0
 
# Veri: 7 yazı, 3 tura
n_y, n_t = 7, 3
 
# Posterior (conjugate): Beta(α + n_y, β + n_t)
alpha_post = alpha_prior + n_y
beta_post = beta_prior + n_t
 
# Posterior'un istatistikleri
post = dist.Beta(alpha_post, beta_post)
print(f"Posterior mean: {post.mean.item():.4f}")
# = (α+n_y) / (α+β+N) = 9/14 = 0.643
# MLE'de p = 7/10 = 0.7'ye karşı
 
# 95% credible interval
samples = post.sample((10000,))
print(f"95% CI: [{samples.quantile(0.025).item():.3f}, {samples.quantile(0.975).item():.3f}]")
# Yaklaşık: [0.38, 0.88]
 
# Uncertainty bilgisi — MLE point estimate (0.7) bu nüansı kaybeder
Beta-Bernoulli conjugate güncelleme + uncertainty quantification.

7. LLM Bağlamında — Pretrain = MLE, Fine-tune = Bayes Update#

Pretrain: pure MLE#

Pretrain hedefi: θpre=argminθtlogP(xtx<t;θ)\theta_{pre} = \arg\min_\theta \sum_t -\log P(x_t | x_{<t}; \theta)
= MLE on pretrain corpus. Prior yok (random initialization).

Fine-tune: Bayes update (örtük)#

Fine-tuning sırasında:
  • Prior:
    θ_pre
    (pretrain weight'leri)
  • Likelihood: fine-tuning verisi üzerinde NLL
  • Posterior: fine-tune sonrası weight'ler
Matematiksel olarak: pretrain'i prior gibi davran ve fine-tuning verisiyle güncelle.

Catastrophic forgetting'i önlemek#

Fine-tuning'de model pretrain bilgisini unutabilir. Bunu önlemek için L2-SP (L2 around starting point): Ltotal=LNLL+λθθpre2L_{total} = L_{NLL} + \lambda ||\theta - \theta_{pre}||^2
Bu Bayesian yorumda: prior P(θ) = N(θ_pre, σ²I). Model θ_pre'den çok uzaklaşmamaya cezalandırılıyor.

LoRA: prior'un en zeki biçimi#

LoRA, fine-tuning'i
θ = θ_pre + BA
ile sınırlıyor — yani parameter güncellemesini düşük-rank uzayda zorluyor. Bu çok kuvvetli bir prior: "ΔW düşük-rank olmalı" (bkz. Ders 1.2).

Sonuç#

Pretrain, fine-tuning, regularization, LoRA — hepsi Bayesian framework'te uyumlu olarak yorumlanabilir.
Bu kavrayış sana paper okurken, fine-tuning kararları verirken, yeni teknikleri sezgisel olarak değerlendirme gücü verir.

8. Mini Egzersizler#

  1. MLE for Gaussian σ²:
    x_i ~ N(0, σ²)
    .
    σ²
    için MLE'yi bul.
  2. NLL vs MLE: "Loss'u minimize etmek, log-likelihood'u maksimize etmektir" — bunun matematiksel olarak neden eşit olduğunu 2 cümlede açıkla.
  3. Weight decay = MAP: AdamW'da
    weight_decay=0.1
    . Bunu Bayesian olarak yorumla: parametre üzerindeki prior'un standard deviation'ı ne?
  4. Catastrophic forgetting: Pretrain edilmiş Llama 3 8B'i 10K Türkçe örnek ile fine-tune ediyorsun. L2-SP olmadan model İngilizce'yi unutuyor. Hangi prior eklersen unutmaz?
  5. Conjugate analiz: Beta(1,1) (uniform prior) ile 100 atış 50 yazı 50 tura. Posterior'un mean ve mode'u ne? MLE ile karşılaştır.

9. Bayesian Deep Learning — Niye Yaygın Değil?#

Tam Bayesian inference büyük NN'lerde pratik olarak imkânsız:
  • 10B parametreli model için posterior 10B-dimensional dağılım
  • MCMC: milyonlarca sample gerekiyor
  • Variational Inference: posterior approximation'ı bile büyük
Yaklaşımlar:
  • MC Dropout (Gal & Ghahramani 2016): dropout'u inference'da da kullan, multiple forward → uncertainty
  • Deep Ensembles: farklı seed'lerle eğitilmiş modeller → ensemble = approximate posterior
  • Bayesian last layer: sadece son katmana Bayesian
  • Laplace approximation: trained model + posterior'u MAP'ta Gaussian olarak yaklaş
LLM'lerde bunlar çok az kullanılıyor — pratikte point estimate (MLE/MAP) yeterli, uncertainty için başka mekanizmalar (logprobs, temperature, sampling) var.

Bu Derste Neler Öğrendik?#

Likelihood = P(D | θ), data fixed, parameter free ✓ MLE = θ that maximizes likelihood (∝ minimize NLL) ✓ Cross-entropy = NLL = -log P(target) — tek aile, üç isim ✓ LLM pretrain loss = MLE objective — autoregressive language modeling ✓ MAP = MLE + log prior — Bayes'in mode'u ✓ Weight decay (L2) = MAP with Gaussian prior — örtük Bayesian ✓ Posterior = full distribution over θ, not just mode ✓ Conjugate priors: Beta-Bernoulli, Dirichlet-Categorical, etc. ✓ Fine-tuning = Bayesian update: pretrain prior + fine-tune likelihood → posterior ✓ LoRA = strong prior: ΔW low-rank

Modül 1 yarısı tamamlandı 🎉#

Modül 1'de buraya kadar:
  • 1.1 Lineer cebir
  • 1.2 Matris ayrıştırmaları (SVD, PCA, LoRA)
  • 1.3 Türev, gradient, matrix calculus
  • 1.4 Chain rule + mini-autograd
  • 1.5 Olasılık temelleri
  • 1.6 MLE, MAP, posterior

Sıradaki Ders#

1.7 — Entropi, Cross-Entropy, KL Divergence, Mutual Information Bilgi teorisinin temelleri. KL divergence neden symmetric değil, neden RLHF'in arka planında, neden VAE'lerin loss'unda. Mutual information ve maksimum entropi prensibi.

Sık Sorulan Sorular

Var, birkaç: (1) **Overfitting**: küçük veride MLE veriye fazla fit eder (regularization gerek). (2) **Singular solutions**: tek bir Gaussian'da N=1 veriye fit edersek σ²=0 → infinite likelihood (saçma sonuç). (3) **No uncertainty**: tek nokta tahmini, parametre belirsizliği yok. (4) **Sensitive to outliers**: bir aykırı değer MLE'yi sürükler. Bu yüzden modern ML: MLE + regularization = MAP, ya da Bayesian deep learning'in approximate versiyonları (MC Dropout, ensembles).

Yorumlar & Soru-Cevap

(0)
Yorum yazmak için giriş yap.
Yorumlar yükleniyor...

İlgili İçerikler