b belajar.myudak

Melatih regresi linear dengan gradient descent

Latih model y^=Xw+b\hat{y} = Xw + b dengan full-batch gradient descent pada loss MSE. Mulai dari w = 0 dan b = 0, lakukan tepat steps langkah dengan learning rate lr, lalu kembalikan np.append(w, b).

X = [[1],[2],[3]], y = [2,4,6], lr = 0.1, steps = 1  →  [1.8667, 0.8]
X = [[0],[1],[2],[3]], y = [1,3,5,7], lr = 0.05, steps = 2000  →  ≈ [2, 1]

Gradien MSE terhadap bobot

Dengan e=Xw+b−ye = Xw + b - y dan L=1N∥e∥2L = \frac{1}{N}\lVert e\rVert^2:

∂L∂w=2NX⊤e,∂L∂b=2N∑iei\frac{\partial L}{\partial w} = \frac{2}{N} X^\top e, \qquad \frac{\partial L}{\partial b} = \frac{2}{N}\sum_i e_i

Bentuk X⊤eX^\top e selalu cocok: (d, N) @ (N,) → (d,), sama dengan bentuk w. Gradien suatu parameter selalu berbentuk sama dengan parameter itu. Ini cara cepat mengecek rumusmu.

Satu langkah training

  1. Forward: hitung prediksi dan galat.
  2. Backward: hitung gradien.
  3. Update: param -= lr * grad.

Di PyTorch (dan minitorch), langkah 2 dikerjakan loss.backward() dan langkah 3 oleh optimizer.step(). Tapi isinya persis seperti yang kamu tulis di sini.

Solusi tertutup

Regresi linear juga punya solusi langsung w=(X⊤X)−1X⊤yw = (X^\top X)^{-1}X^\top y. Kita tetap memakai GD karena GD bisa dipakai untuk model apa pun, termasuk yang tidak punya solusi tertutup.

Penjelasan

Yang diminta. Latih w dan b dari nol dengan tepat steps langkah GD full-batch, lalu kembalikan [w..., b].

Gradiennya. Misalkan galat e=Xw+b−ye = Xw + b - y berbentuk (N,) dan L=1N∑ei2L = \frac{1}{N}\sum e_i^2:

  • ∂L/∂w=2NX⊤e\partial L / \partial w = \frac{2}{N} X^\top e. Bentuknya (d, N) @ (N,) → (d,), sama dengan w. Setiap komponen wjw_j menerima jumlah galat dikali fitur ke-j.
  • ∂L/∂b=2N∑iei\partial L / \partial b = \frac{2}{N}\sum_i e_i. Bias memengaruhi setiap prediksi dengan bobot 1.

Langkah di kode (satu iterasi):

  1. Forward: err = X @ w + b - y.
  2. Backward + update: w -= lr * (2/N) * (X.T @ err) dan b -= lr * (2/N) * err.sum().

Keduanya memakai err yang sama, yang dihitung sebelum update apa pun. Kalau w di-update dulu lalu err dihitung ulang untuk b, hasilnya berbeda dari GD yang sebenarnya.

Cek satu langkah. X = [[1],[2],[3]], y = [2,4,6], mulai dari 0: err = [-2,-4,-6], ∇w=23(−2−8−18)=−18.67\nabla w = \frac{2}{3}(-2-8-18) = -18.67, ∇b=23(−12)=−8\nabla b = \frac{2}{3}(-12) = -8. Dengan lr = 0.1, w = 1.867 dan b = 0.8.

Yang dikembalikan: np.append(w, b), array (d + 1,).

Topik
regresi lineargradient descenttraining loop
Petunjuk 1

Untuk L = mean((Xw + b − y)²): dL/dw = (2/N) Xᵀ(Xw + b − y) dan dL/db = (2/N) Σ(Xw + b − y).

Petunjuk 2

Hitung err = X @ w + b − y sekali per langkah, lalu perbarui w dan b dari err yang sama.

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.