b belajar.myudak

Gradient descent satu dimensi

Minimalkan f(x)=a (x−b)2f(x) = a\,(x - b)^2 dengan gradient descent: mulai dari x0, lakukan steps langkah dengan learning rate lr, lalu kembalikan x terakhir.

a=1, b=3, x0=0, lr=0.1, steps=1   →  0.6      // f'(0) = -6, x = 0 - 0.1·(-6)
a=1, b=3, x0=0, lr=0.1, steps=50  →  ≈ 3
Gradient descent
langkah 0x = 3.50000f′(x) = 7.0000

Update: x ← x − α·f′(x). Coba α > 1 pada x² untuk melihat divergen.

langkah 1/41

Ide dasar

Gradien menunjuk ke arah kenaikan tercepat. Supaya turun, bergeraklah ke arah sebaliknya:

xt+1=xt−η f′(xt)x_{t+1} = x_t - \eta\, f'(x_t)

η\eta (learning rate) mengatur besar langkah.

Learning rate

Untuk f(x)=a(x−b)2f(x) = a(x-b)^2, satu langkah memberi xt+1−b=(1−2aη)(xt−b)x_{t+1} - b = (1 - 2a\eta)(x_t - b). Artinya:

  • 0<2aη<10 < 2a\eta < 1: mendekat dengan mulus.
  • 1<2aη<21 < 2a\eta < 2: melompat bolak-balik melewati minimum, tapi tetap konvergen.
  • 2aη>22a\eta > 2: divergen, karena jaraknya makin jauh setiap langkah. Coba case lr = 1.1 di atas.

Di jaringan saraf sungguhan tidak ada rumus sesederhana ini, tapi intuisinya sama: kalau loss meledak menjadi nan, coba kecilkan learning rate dulu.

Penjelasan

Yang diminta. Ulangi update gradient descent sebanyak steps kali pada f(x)=a(x−b)2f(x) = a(x-b)^2, lalu kembalikan x terakhir.

Turunannya. Dengan aturan rantai, f′(x)=2a(x−b)f'(x) = 2a(x - b). Tandanya menunjukkan arah naik: jika x>bx > b, turunannya positif, jadi kita harus mengurangi xx. Itulah kenapa update-nya minus gradien:

x←x−η⋅2a(x−b)x \leftarrow x - \eta \cdot 2a(x - b)

Langkah di kode:

  1. x = x0.
  2. Di setiap langkah: grad = 2 * a * (x - b), lalu x = x - lr * grad.
  3. Setelah loop selesai, return x.

Cek manual. a=1, b=3, x0=0, lr=0.1: gradien di 0 adalah 2(0−3)=−62(0-3) = -6, jadi x=0−0.1⋅(−6)=0.6x = 0 - 0.1 \cdot (-6) = 0.6. Itu case pertama.

Kenapa case lr = 1.1 meledak. Setiap langkah mengalikan jarak ke minimum dengan (1−2aη)=−1.2(1 - 2a\eta) = -1.2. Tandanya berganti (melompati minimum) dan besarnya bertambah 20% setiap langkah. Setelah 10 langkah, 1.210≈6.191.2^{10} \approx 6.19.

Yang dikembalikan: satu float, posisi x terakhir.

Topik
optimasigradient descentlearning rate
Petunjuk 1

Turunan a(x − b)² adalah 2a(x − b).

Petunjuk 2

Satu langkah: x = x − lr · f'(x). Ulangi sebanyak steps kali.

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.