CodeBlanks Logo Icon CodeBlanks

İleri yayılım

İleri yayılım, girdinin katmanlardan geçerek çıktı üretmesidir.

İleri yayılım

İleri yayılım, girdinin katmanlar boyunca sırayla dönüştürülüp çıktıya ulaşmasıdır. İki katmanlı bir sınıflandırıcıda:

z1 = X @ W1 + b1          # (n, gizli)
h = np.maximum(0, z1)      # ReLU
z2 = h @ W2 + b2           # (n, sınıf)  "logit"ler
p = softmax(z2)            # satır başına olasılık

Ağ eğitilirken önce ileri yayılımla tahmin yapılır, sonra hata geri yayılımla ağırlıklara dağıtılır; bunu autograd grubunda göreceksin.

Çapraz entropi kaybı

Sınıflandırmada tahminin kalitesi, doğru sınıfa verilen olasılığın negatif logaritmasıyla ölçülür. Doğru sınıfa 1'e yakın olasılık veren tahmin düşük, 0'a yakın veren yüksek kayıp alır:

def capraz_entropi(p, y):
    return -np.log(p[np.arange(len(y)), y]).mean()
p = np.array([[0.7, 0.2, 0.1], [0.1, 0.1, 0.8]])
print(round(capraz_entropi(p, np.array([0, 2])), 3))   # 0.290

p[np.arange(n), y] her satırdan doğru sınıfın olasılığını seçen gelişmiş indekslemedir.

Uygulama İki katmanlı ileri yayılım

Verilen ağırlıklarla iki katmanlı ağın ileri yayılımını yap: ReLU gizli katman, softmax çıktı (satır başına, axis=1). Olasılıkların şeklini ve satır toplamlarını np.round(..., 3) ile, ardından y için çapraz entropi kaybını round(..., 3) ile yazdır.

Başlangıç kodu

model.py
import numpy as np

rng = np.random.default_rng(0)
X = rng.normal(size=(4, 3))
y = np.array([0, 1, 2, 1])
W1 = rng.normal(size=(3, 5))
b1 = np.zeros(5)
W2 = rng.normal(size=(5, 3))
b2 = np.zeros(3)

# buraya yaz

Örnek çözüm

model.py
import numpy as np

rng = np.random.default_rng(0)
X = rng.normal(size=(4, 3))
y = np.array([0, 1, 2, 1])
W1 = rng.normal(size=(3, 5))
b1 = np.zeros(5)
W2 = rng.normal(size=(5, 3))
b2 = np.zeros(3)

h = np.maximum(0, X @ W1 + b1)
z = h @ W2 + b2
e = np.exp(z - z.max(axis=1, keepdims=True))
p = e / e.sum(axis=1, keepdims=True)
print(p.shape)
print(np.round(p.sum(axis=1), 3))
print(round(-np.log(p[np.arange(len(y)), y]).mean(), 3))

Beklenen çıktı

(4, 3)
[1. 1. 1. 1.]
1.539

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Softmax'tan önceki ham çıktılara ne ad verilir?

  • Etiket
  • Logit Doğru cevap
  • Olasılık
  • Gradyan

Açıklama: Logitler sınırsız skorlardır; softmax onları olasılığa çevirir.

2 Her satırdan doğru sınıfın olasılığını seç.

Soru
dogru = p[np.____(len(y)), y]
Cevap
dogru = p[np.arange(len(y)), y]

Açıklama: np.arange satır indekslerini, y sütun indekslerini verir.

3 Adımları eşleştir.

Kavram Anlamı
X @ W1 + b1 Birinci doğrusal adım
np.maximum(0, ·) ReLU
h @ W2 + b2 Logitler
-log p[doğru] Çapraz entropi

İleri seviye bölümündeki tüm dersler