b belajar.myudak

Implementasikan Layer Normalization di sepanjang axis terakhir:

μ=1d∑ixi,σ2=1d∑i(xi−μ)2,y=γ⊙x−μσ2+ε+β\mu = \frac{1}{d}\sum_i x_i,\quad \sigma^2 = \frac{1}{d}\sum_i (x_i-\mu)^2,\quad y = \gamma\odot\frac{x-\mu}{\sqrt{\sigma^2+\varepsilon}} + \beta

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. γ\gamma (diinisialisasi 1) dan β\beta (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:

  1. mu = x.mean(axis=-1, keepdims=True): rata-rata setiap vektor, berbentuk (..., 1).
  2. var = x.var(axis=-1, keepdims=True): varians “bias” (dibagi d, bukan d - 1), seperti PyTorch.
  3. (x - mu) / np.sqrt(var + eps): sekarang setiap vektor punya rata-rata 0 dan varians ≈ 1.
  4. * 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
normalisasilayernormtransformer
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̂ + β.

Python 3.14 · NumPy

Pengaturan editor

Ukuran font
Ukuran huruf di editor.
Ukuran tab
Lebar indentasi. Otomatis: 2 spasi untuk TypeScript, 4 untuk Python.
Key bindings
Ganti ke mode Vim.
Nomor baris relatif
Nomor baris dihitung dari posisi kursor (berguna untuk gerakan Vim).
Word wrap
Baris panjang dilipat agar muat di lebar editor.
IntelliSense
Saran kode otomatis saat mengetik (Ctrl+Spasi tetap bisa dipakai saat mati).

Nilai ditulis sebagai JSON. Output yang diharapkan dihitung dari solusi referensi.