Gradient descent satu dimensi
Minimalkan f(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
Update: x ← x − α·f′(x). Coba α > 1 pada x² untuk melihat divergen.
Ide dasar
Gradien menunjuk ke arah kenaikan tercepat. Supaya turun, bergeraklah ke arah sebaliknya:
xt+1=xt−ηf′(xt)η (learning rate) mengatur besar langkah.
Learning rate
Untuk f(x)=a(x−b)2, satu langkah memberi xt+1−b=(1−2aη)(xt−b). Artinya:
- 0<2aη<1: mendekat dengan mulus.
- 1<2aη<2: melompat bolak-balik melewati minimum, tapi tetap konvergen.
- 2aη>2: divergen, karena jaraknya makin jauh setiap langkah. Coba case
lr = 1.1di 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)2, lalu kembalikan x terakhir.
Turunannya. Dengan aturan rantai, f′(x)=2a(x−b). Tandanya menunjukkan arah naik: jika x>b, turunannya positif, jadi kita harus mengurangi x. Itulah kenapa update-nya minus gradien:
x←x−η⋅2a(x−b)Langkah di kode:
x = x0.- Di setiap langkah:
grad = 2 * a * (x - b), lalux = x - lr * grad. - Setelah loop selesai,
return x.
Cek manual. a=1, b=3, x0=0, lr=0.1: gradien di 0 adalah 2(0−3)=−6, jadi x=0−0.1⋅(−6)=0.6. Itu case pertama.
Kenapa case lr = 1.1 meledak. Setiap langkah mengalikan jarak ke minimum dengan (1−2aη)=−1.2. Tandanya berganti (melompati minimum) dan besarnya bertambah 20% setiap langkah. Setelah 10 langkah, 1.210≈6.19.
Yang dikembalikan: satu float, posisi x terakhir.
Topik
Petunjuk 1
Turunan a(x − b)² adalah 2a(x − b).
Petunjuk 2
Satu langkah: x = x − lr · f'(x). Ulangi sebanyak steps kali.
Nilai ditulis sebagai JSON. Output yang diharapkan dihitung dari solusi referensi.