MSE dan gradiennya
Kembalikan list [loss, grad] dengan
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
∂y^i∂L=N2(y^i−yi)Perhatikan faktor 1/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−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=N1∑k(y^k−yk)2. Saat menurunkan terhadap satu y^i, hanya suku k=i yang bergantung padanya:
∂y^i∂L=N1⋅2(y^i−yi)Faktor 2 datang dari pangkat, dan 1/N datang dari rata-rata.
Langkah di kode:
diff = pred - y.loss = (diff ** 2).mean().grad = 2 * diff / n, dengann = diff.size.
Cek. pred = [2, 0], y = [0, 0]: diff = [2, 0], loss =(4+0)/2=2, grad =[2⋅2/2, 0]=[2,0].
Yang dikembalikan: list [float, array (N,)].
Kesalahan umum: lupa faktor 1/N (gradiennya jadi N kali terlalu besar, dan learning rate yang “pas” akan bergantung pada ukuran batch); lupa faktor 2.
Topik
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.
Nilai ditulis sebagai JSON. Output yang diharapkan dihitung dari solusi referensi.