Batch norm ileri geçişi
Zorluk: Orta Çözüldünormalizasyon
Batch normalization (yığın normalizasyonu), bir layer’ın (katman) çıktılarını her feature için batch üzerinden ortalaması 0, varyansı 1 olacak biçimde yeniden ölçekler. Ardından öğrenilebilir iki parametre, ve , ölçeği ve kaymayı geri verir.
batchnorm_forward(X, gamma, beta, eps=1e-5) fonksiyonunu yaz. X, şekli (shape) (n, d) olan bir batch’tir: her satır bir örnek (sample), her sütun bir öznitelik (feature). gamma ve beta shape’i (d,) olan vektörlerdir.
Hesap eğitim modundadır ve dört adımdan oluşur:
- Her feature’ın ortalamasını ve varyansını batch üzerinden hesapla.
- ‘ten ortalamayı çıkar.
- Sonucu ‘a böl.
- ile çarp, ‘yı ekle.
Formül, . feature için şudur:
Yani her sütun kendi ortalamasına ve yayılımına göre ayarlanır. (eps), varyans olduğunda sıfıra bölmeyi önleyen küçük bir sabittir. Shape’i (n, d) olan tek bir array döndür.
Örnekler
Girdi: X = [[1.0, 2.0, 0.0], [3.0, 6.0, 1.0], [5.0, 4.0, 5.0], [7.0, 0.0, 2.0]], gamma = [1.0, 1.0, 1.0], beta = [0.0, 0.0, 0.0], eps = 1e-05
Çıktı: array([[-1.34163944, -0.44721315, -1.06904344],
[-0.44721315, 1.34163944, -0.53452172],
[ 0.44721315, 0.44721315, 1.60356516],
[ 1.34163944, -1.34163944, 0. ]])
Girdi: X = [[1.0, 2.0], [3.0, 6.0]], gamma = [2.0, 3.0], beta = [0.5, -1.0], eps = 0.0
Çıktı: array([[-1.5, -4. ],
[ 2.5, 2. ]])
Girdi: X = [[-2.0, 10.0], [0.5, -4.0], [3.0, 7.0]], gamma = [0.5, -1.5], beta = [1.0, 2.0], eps = 0.001
Çıktı: array([[0.38770104, 0.58770512],
[1. , 4.07690424],
[1.61229896, 1.33539064]])
İpucu 1
X.mean(axis=0), her sütunun ortalamasını verir: batch boyunca iner ve shape’i (d,) olan bir vektör üretir. Varyans için de aynı ekseni kullan.
İpucu 2
X - mean ifadesinde (n, d) ile (d,) shape’leri uyuşur: her satırdan aynı ortalama vektörü çıkarılır. gamma ve beta da aynı şekilde her satıra uygulanır.
İpucu 3
Önce var + eps değerini hesapla, sonra karekökünü al. Normalleşmiş değer (X - mean) / np.sqrt(var + eps) olur. Sonunda gamma * ... + beta ile ölçekle ve kaydır.
Gereksinimler
Xshape’i(n, d)olan bir array’dir,gammavebetashape’i(d,)olan array’lerdir.- Dönüş değeri
Xile aynı(n, d)shape’inde bir NumPy array’i. - İstatistikleri her feature için batch üzerinden hesapla: ortalama ve varyans
axis=0boyuncadır. - Varyansı ‘ye böl (‘e değil); NumPy’ın
var’ı bunu varsayılan olarak yapar. epskarekökün içindedir: , değil.- Varyansı olan bir feature’da sonuç NaN olmaz; çıktı ‘ye eşit olur.
X’i,gamma’yı vebeta’yı değiştirme. Fonksiyon bittiğinde çağıran kodun array’leri aynı kalır.- Örnekler ve feature’lar üzerinde döngü kullanma.
Batch norm, layer’ın çıktılarını her feature için aynı ölçeğe getirir. Bir feature’ın değerleri ile arasında, bir diğerininki ile arasında olabilir. Normalleşmeden sonra ikisi de ortalaması , yayılımı olan değerlere dönüşür.
Bunu bir örnekle gör. İlk feature’ın batch’teki değerleri ve olsun. Ortalama , varyans olur ve normalleşmiş değerler ile ‘dir. ve ise çıktı ile olur.
ve normalizasyonun geri alınmasına izin verir. Ağ ortalama , varyans yerine başka bir ölçek isterse bunu öğrenir. Böylece normalizasyon, ağın ifade gücünü kısıtlamaz.
Bu problem yalnızca eğitim modunu ister: ortalama ve varyans, o batch’in kendisinden gelir. Çıkarımda (inference) tek bir örnek de gelebilir; bu yüzden gerçek uygulamalar eğitimde biriktirilmiş (running) ortalama ve varyansı kullanır. Bunu burada yazmıyorsun.
Daha fazlası için Normalizasyon ve düzenlileştirme dersine bak.
Ortalamayı ve varyansı axis=0 boyunca al, normalleştir, sonra ve ‘yı uygula:
import numpy as npdef batchnorm_forward(X: np.ndarray, gamma: np.ndarray, beta: np.ndarray, eps: float = 1e-5) -> np.ndarray: mean = X.mean(axis=0) var = X.var(axis=0) X_hat = (X - mean) / np.sqrt(var + eps) return gamma * X_hat + beta
Sık yapılan hata, yanlış ekseni kullanmaktır (axis=1, keepdims=True ile). O zaman istatistikler her örnek için hesaplanır; bu layer normalization olur ve batch norm değildir. Bir feature’ın sütunu normalleşmez.
Bir diğer hata eps’i karekökün dışına koymaktır (np.sqrt(var) + eps): varyans küçükken sonuç farklı çıkar.
Bu problemde bir sorun mu var?