b belajar.myudak

MSE dan gradiennya

Kembalikan list [loss, grad] dengan

L=1N∑i=1N(y^i−yi)2,gradi=∂L∂y^iL = \frac{1}{N}\sum_{i=1}^{N} (\hat{y}_i - y_i)^2, \qquad \text{grad}_i = \frac{\partial L}{\partial \hat{y}_i}
pred = [2, 0], y = [0, 0]  →  [2.0, [2.0, 0.0]]

MSE

Mean squared error adalah loss standar untuk regresi. Kuadrat membuat galat besar dihukum jauh lebih berat daripada galat kecil, sehingga MSE sensitif terhadap outlier. Kalau itu masalah, gunakan MAE atau Huber loss.

Gradiennya

∂L∂y^i=2N(y^i−yi)\frac{\partial L}{\partial \hat{y}_i} = \frac{2}{N}(\hat{y}_i - y_i)

Perhatikan faktor 1/N1/N: karena loss dirata-rata, gradien per contoh mengecil saat batch membesar. Itulah kenapa learning rate tidak perlu diubah ketika ukuran batch berubah, selama loss dirata-rata (bukan dijumlah).

Bandingkan dengan cross-entropy + softmax yang gradiennya p−yp - y. Keduanya berbentuk “prediksi − target”. Ini bukan kebetulan: keduanya adalah pasangan loss dan output yang “kanonis”.

Penjelasan

Yang diminta. [loss, grad], dengan loss rata-rata kuadrat galat dan grad turunannya terhadap setiap prediksi.

Turunannya. L=1N∑k(y^k−yk)2L = \frac{1}{N}\sum_k (\hat y_k - y_k)^2. Saat menurunkan terhadap satu y^i\hat y_i, hanya suku k=ik = i yang bergantung padanya:

∂L∂y^i=1N⋅2(y^i−yi)\frac{\partial L}{\partial \hat y_i} = \frac{1}{N}\cdot 2(\hat y_i - y_i)

Faktor 2 datang dari pangkat, dan 1/N1/N datang dari rata-rata.

Langkah di kode:

  1. diff = pred - y.
  2. loss = (diff ** 2).mean().
  3. grad = 2 * diff / n, dengan n = diff.size.

Cek. pred = [2, 0], y = [0, 0]: diff = [2, 0], loss =(4+0)/2=2= (4 + 0)/2 = 2, grad =[2⋅2/2, 0]=[2,0]= [2 \cdot 2/2,\ 0] = [2, 0].

Yang dikembalikan: list [float, array (N,)].

Kesalahan umum: lupa faktor 1/N1/N (gradiennya jadi N kali terlalu besar, dan learning rate yang “pas” akan bergantung pada ukuran batch); lupa faktor 2.

Topik
lossmsegradien
Petunjuk 1

L = (1/N) Σ (pred_i − y_i)².

Petunjuk 2

Turunkan terhadap satu pred_i: hanya satu suku yang bergantung padanya, jadi dL/dpred_i = 2(pred_i − y_i)/N.

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.