LayerNorm
Implementasikan Layer Normalization di sepanjang axis terakhir:
μ=d1i∑xi,σ2=d1i∑(xi−μ)2,y=γ⊙σ2+εx−μ+βdengan eps = 1e-5. x bisa berdimensi berapa pun. Normalisasi hanya dilakukan di dimensi terakhir.
x = [1, 2, 3], γ = 1, β = 0 → [-1.2247, 0, 1.2247]
Kenapa normalisasi
Saat training, distribusi aktivasi tiap layer terus berubah karena bobot di layer sebelumnya berubah. Menormalkan setiap vektor menjadi rata-rata 0 dan varians 1 membuat skala aktivasi stabil, gradien lebih sehat, dan learning rate bisa lebih besar.
LayerNorm vs BatchNorm
- BatchNorm menormalkan setiap fitur di sepanjang batch. Ia bergantung pada ukuran batch dan berperilaku berbeda saat training dan inferensi.
- LayerNorm menormalkan setiap contoh (setiap token) di sepanjang fiturnya sendiri. Ia tidak bergantung pada batch, jadi cocok untuk urutan dengan panjang bervariasi. Semua transformer memakai LayerNorm (atau RMSNorm).
γ dan β
Setelah dinormalkan, model mungkin justru butuh skala atau pergeseran tertentu. γ (diinisialisasi 1) dan β (diinisialisasi 0) adalah parameter yang dipelajari supaya normalisasi tidak membatasi apa yang bisa dinyatakan model.
Penjelasan
Yang diminta. Normalisasi setiap vektor (axis terakhir) menjadi rata-rata 0 dan varians 1, lalu skala dengan gamma dan geser dengan beta.
Langkah di kode:
mu = x.mean(axis=-1, keepdims=True): rata-rata setiap vektor, berbentuk(..., 1).var = x.var(axis=-1, keepdims=True): varians “bias” (dibagid, bukand - 1), seperti PyTorch.(x - mu) / np.sqrt(var + eps): sekarang setiap vektor punya rata-rata 0 dan varians ≈ 1.* gamma + beta: kedua parameter berbentuk(d,)dan di-broadcast ke setiap vektor.
Kenapa keepdims=True. Tanpa itu, mu untuk x berbentuk (2, 4) menjadi (2,), dan x - mu akan error atau, lebih buruk, di-broadcast dengan cara yang salah. Dengan (2, 1), setiap baris dikurangi rata-ratanya sendiri.
Kenapa ada eps. Lihat case [1, 1, 1, 1]: variansnya 0. Tanpa eps kita membagi 0 dengan 0. Dengan eps = 1e-5, hasilnya 0 dengan rapi.
Cek. [1, 2, 3]: rata-rata 2, varians 2/3, simpangan baku 0.8165, hasil [-1.2247, 0, 1.2247].
Yang dikembalikan: array berbentuk sama dengan x.
Topik
Petunjuk 1
Hitung mean dan varians di axis=-1 dengan keepdims=True supaya bisa di-broadcast kembali ke x.
Petunjuk 2
x̂ = (x − μ)/√(σ² + ε), lalu output = γ·x̂ + β.
Nilai ditulis sebagai JSON. Output yang diharapkan dihitung dari solusi referensi.