Intuisi Gradient Descent

Cara model benar-benar belajar: meminimalkan fungsi biaya melalui gradient descent.

Daftar isi

Melatih model linear berarti mencari koefisien yang membuat fungsi biaya sekecil mungkin, dan gradient descent adalah metode pencariannya. Metode yang sama berlaku jauh melampaui model linear. Topik ini membahas fungsi biaya sebagai permukaan yang dituruni, aturan pembaruan parameter beserta peran learning rate, dan variasi batch, mini-batch, serta stochastic sebagai peta praktik. Praktiknya berupa gradient descent manual dengan NumPy pada data kecil, lalu hasilnya dibandingkan dengan solusi bentuk tertutup dari scikit-learn. Setelah topik ini dipahami, proses pelatihan yang selama ini berjalan sebagai kotak hitam dapat dibaca langkah demi langkah.

Fungsi biaya sebagai permukaan yang dituruni#

Fungsi biaya (cost function) mengukur seberapa buruk satu set parameter pada data latih, dan pelatihan adalah pencarian set parameter yang paling baik. Untuk model garis dengan koefisien ww dan intercept bb, fungsi biayanya adalah MSE:

L(w,b)=1n∑i=1n(wxi+b−yi)2 L(w, b) = \frac{1}{n} \sum_{i=1}^{n} \left( w x_i + b - y_i \right)^2

Setiap pasangan nilai ww dan bb menghasilkan satu angka biaya, sehingga seluruh kemungkinan membentuk permukaan berdimensi dua di atas bidang parameter. Model dengan pp fitur membangun permukaan serupa di ruang berdimensi p+1p+1, tetapi intuisinya tetap sama. Titik terendah permukaan itu adalah parameter model terbaik menurut data latih, karena di sanalah rata-rata kuadrat kesalahan prediksinya paling kecil. Nilai biaya nol jarang tercapai pada data nyata yang mengandung derau, sehingga target pelatihan adalah biaya serendah mungkin, bukan nol.

Permukaan ini yang benar-benar dituruni oleh algoritma pelatihan. Regresi linear mempunyai jalan pintas berupa solusi bentuk tertutup (closed form), sedangkan model lain seperti regresi logistik dan SVM tidak memilikinya dan wajib menuruni permukaan secara iteratif. Mekanisme penurunan itulah gradient descent.

Aturan pembaruan dan learning rate#

Gradient di suatu titik adalah arah kenaikan paling curam dari permukaan biaya. Karena tujuannya menurun, langkah diambil ke arah berlawanan dengan gradien. Aturan pembaruannya ditulis:

w←w−α∂L∂w w \leftarrow w - \alpha \frac{\partial L}{\partial w}

dengan α\alpha menyatakan learning rate, yaitu panjang langkah yang ditempuh pada setiap pembaruan. Tanda negatif pada aturan itu bermakna sederhana: parameter bergeser ke arah penurunan biaya yang paling curam. Apabila gradien positif, kenaikan ww menaikkan biaya sehingga ww perlu dikurangi, dan sebaliknya.

Untuk fungsi biaya MSE model garis, gradien terhadap ww adalah ∂L∂w=2n∑i=1n(wxi+b−yi) xi\frac{\partial L}{\partial w} = \frac{2}{n} \sum_{i=1}^{n} (w x_i + b - y_i)\, x_i, dan gradien terhadap bb memiliki bentuk serupa tanpa faktor xix_i. Parameter diperbarui pada setiap iterasi, biaya dihitung ulang, dan perulangan berhenti ketika gradien sudah cukup kecil atau jumlah iterasi maksimum tercapai. Kriteria berhenti lain yang umum adalah perubahan biaya, yaitu perulangan dihentikan ketika biaya hampir tidak turun lagi antar iterasi. Di sekitar titik terendah, gradien mendekati nol sehingga langkah otomatis makin kecil.

Nilai α\alpha menentukan jalannya seluruh proses. Learning rate yang terlalu kecil membuat penurunan bergerak lambat, sehingga biaya komputasinya membengkak. Learning rate yang terlalu besar membuat langkah melewati dasar lembah dan berosilasi dari satu sisi ke sisi lainnya.

Skrip berikut membangun dua puluh titik yang mengikuti garis y=3x+8y = 3x + 8 dengan derau kecil, lalu menuruni biayanya secara manual. Parameter dimulai dari w=0w = 0 dan b=0b = 0, dengan α=0.01\alpha = 0.01 selama 500 iterasi. Biaya dicetak pada iterasi 0, 10, 100, dan 500, kemudian parameter akhirnya dibandingkan dengan LinearRegression dari scikit-learn yang menghitung solusi langsung. Gradien pada skrip dihitung dari sisa prediksi, yaitu selisih prediksi terhadap target, dengan gradien terhadap ww berupa dua kali rata-rata sisa yang dikalikan fitur. Seluruh perulangan hanya menggunakan operasi array NumPy, sehingga mekanisme pelatihan terlihat utuh tanpa pustaka pelatihan apa pun.

python turuni-gradien.py
import numpy as np
from sklearn.linear_model import LinearRegression

rng = np.random.default_rng(42)
n = 20
x = rng.uniform(-5.0, 5.0, n)
y = 3.0 * x + 8.0 + rng.normal(0.0, 1.0, n)


def biaya(w, b):
    """MSE untuk model garis w*x + b pada data yang dituruni."""
    return float(np.mean((w * x + b - y) ** 2))


w, b = 0.0, 0.0
alpha = 0.01
for i in range(501):
    if i in (0, 10, 100, 500):
        print(f"iterasi {i:3d}: biaya = {biaya(w, b):.4f}, w = {w:.4f}, b = {b:.4f}")
    sisa = (w * x + b) - y
    grad_w = 2.0 * np.mean(sisa * x)
    grad_b = 2.0 * np.mean(sisa)
    w -= alpha * grad_w
    b -= alpha * grad_b

reg = LinearRegression().fit(x.reshape(-1, 1), y)
print(f"LinearRegression: w = {reg.coef_[0]:.4f}, b = {reg.intercept_:.4f}")
text Keluaran
iterasi   0: biaya = 174.4950, w = 0.0000, b = 0.0000
iterasi  10: biaya = 42.4537, w = 3.0010, b = 1.6393
iterasi 100: biaya = 1.9300, w = 3.0794, b = 6.9417
iterasi 500: biaya = 0.5871, w = 2.9584, b = 8.1396
LinearRegression: w = 2.9583, b = 8.1402

Keluarannya memperlihatkan pola yang khas pada gradient descent. Biaya anjlok dari 174.4950 menjadi 42.4537 dalam sepuluh iterasi pertama, karena langkah awal dilakukan pada wilayah permukaan yang paling curam. Penurunan berikutnya makin landai, dari 1.9300 pada iterasi 100 menjadi 0.5871 pada iterasi 500, dan nilai itulah batas bawah biaya yang tersisa karena derau pada data. Parameter akhir w=2.9584w = 2.9584 dan b=8.1396b = 8.1396 cocok dengan hasil LinearRegression sebesar 2.9583 dan 8.1402 sampai dua angka desimal. Kecocokan ini menjadi pemeriksa silang bagi implementasi manual, dan dua jalan menuju parameter terbaik tersebut terbukti berakhir pada titik yang sama.

Batch, mini-batch, dan stochastic sebagai peta#

Aturan pembaruan di atas menghitung gradien dari seluruh data latih sekaligus, dan cara ini disebut batch gradient descent. Satu langkahnya akurat tetapi mahal, karena seluruh dataset harus diproses sebelum parameter bergerak sekali. Dua variasi mengubah kompromi tersebut. Stochastic gradient descent menghitung gradien dari satu sampel acak setiap langkah, sehingga langkahnya murah tetapi bising, dan biayanya naik-turun mengelilingi dasar lembah alih-alih turun mulus. Mini-batch gradient descent menggunakan kelompok kecil berisi belasan hingga ratusan sampel dan menjadi pilihan standar pada data besar karena biaya per langkah dan kestabilannya berada di tengah.

Pemilihan variasi bergantung pada ukuran data dan sumber daya komputasi, bukan pada keindahan teorinya. Untuk dataset kecil seperti contoh di atas, batch penuh sudah cukup dan paling mudah dipahami. Kerangka pembaruan, learning rate, dan kriteria berhentinya tetap identik pada ketiga variasi, sehingga intuisi yang dibangun di sini dapat dibawa langsung ke model yang lebih besar.

Kesalahan umum#

  • Menilai konvergensi hanya dari satu iterasi terakhir. Satu angka biaya tidak memperlihatkan arah geraknya, sehingga keputusan berdasarkan satu titik mudah keliru. Biaya yang masih turun berarti iterasi kurang, sedangkan biaya yang mendatar menandakan titik terendah sudah dekat. Perbaikannya, cetak biaya pada beberapa titik iterasi dan bacalah kecenderungannya, sebagaimana praktik pada topik ini.
  • Membandingkan kecepatan dua learning rate hanya pada jumlah iterasi yang sama. Learning rate besar bergerak lebih jauh per langkah, tetapi berisiko melewati dasar lembah dan membuat biaya naik. Kekeliruannya adalah menghukum learning rate besar atas biaya yang masih tinggi pada iterasi tertentu, padahal jarak tempuh keduanya berbeda. Perbaikannya, bandingkan kurva biaya keduanya secara utuh, lalu pilih yang mencapai biaya serendah mungkin dengan iterasi paling sedikit.
  • Berharap biaya akhir bernilai nol. Data dengan derau selalu menyisakan kesalahan yang tidak dapat dijelaskan oleh model apa pun, sehingga selalu ada batas bawah biaya. Harapan itu muncul karena ilustrasi buku sering menggunakan data tanpa derau. Perbaikannya, jadikan batas bawah tersebut sebagai target yang wajar dan nyatakan pelatihan berhasil apabila biaya mendekatinya.

Ringkasan#

  • Pelatihan adalah minimisasi fungsi biaya, dan untuk regresi linear fungsinya berupa MSE di atas ruang parameter.
  • Gradien menunjuk arah kenaikan paling curam, sehingga pembaruan w←w−α∂L∂ww \leftarrow w - \alpha \frac{\partial L}{\partial w} melangkah ke arah berlawanan.
  • Learning rate menentukan panjang langkah, dengan bahaya lambat pada nilai kecil dan osilasi atau peluapan pada nilai besar.
  • Batch penuh, mini-batch, dan stochastic adalah tiga variasi kompromi antara biaya per langkah dan kestabilan gradien, dengan aturan pembaruan yang sama.

Referensi#