Lensa ML

Cara Kerja Gradient Descent

Langkah 1 dari 6: Berdiri di Atas Bukit

Bayangkan kamu tersesat dalam kabut di daerah berbukit

-2-112θLossminimumkamu di siniLoss(θ)

Kamu berdiri di kurva loss: tingginya menunjukkan seberapa salah model untuk setiap nilai parameter θ. Tujuannya adalah lembah (loss terendah), tetapi kamu hanya bisa merasakan kemiringan di bawah kakimu.

Perhatikan titik di θ = 2.0 dan lembah di sebelah kirinya. Kurvanya L(θ) = θ² + 0.3 sin(3θ): loss di titik itu 3,92, dan minimumnya −0,145 di θ ≈ −0.29. Memetakan seluruh kurva mustahil untuk model sungguhan. Mengecek 10 nilai saja untuk tiap parameter dari sejuta parameter berarti 10^1,000,000 evaluasi. Gradient descent hanya butuh informasi lokal di titik saat ini. Augustin-Louis Cauchy menjelaskan metode ini pada 1847.

Langkah 2 dari 6: Ikuti Kemiringan

Turunan menunjukkan arah yang menurun

-2-112θLossminimum−∇ (ke arah sini)
Geser untuk memindahkan titikθ = 2.00
Gradient
4.864
Arah
← kiri

Gradient (turunan) di posisimu menunjukkan kemiringan. Bergeraklah searah gradient negatif, yaitu arah turun. Kemiringan positif? Ke kiri. Kemiringan negatif? Ke kanan.

Geser titik di antara θ = −3 dan 3, lalu perhatikan tanda gradient-nya. Di sini dL/dθ = 2θ + 0.9 cos(3θ), yang bernilai 4,86 di θ = 2, jadi titik seharusnya bergerak ke kiri. Dengan banyak parameter, gradient berupa vector berisi turunan parsial, dan negatifnya adalah arah penurunan paling curam. Gradient nol hanya berarti permukaannya datar. Titik itu bisa berupa minimum, maksimum, atau saddle point, yang umum ditemukan pada permukaan loss berdimensi tinggi.

Langkah 3 dari 6: Learning Rate

Seberapa besar langkah yang diambil saat menurun

-2-112θLoss
Atur learning rateα = 0.100
Learning rate
0.100
Loss akhir
0.151

Learning rate α mengatur ukuran langkah. Kalau terlalu kecil, kemajuannya lambat sekali. Kalau terlalu besar, langkahnya melompati minimum lalu menjauh. Di antara keduanya, jalurnya turun mulus sampai ke minimum.

Geser slider learning rate dari 0,001 sampai 1 dan bandingkan loss akhir setelah 12 langkah dari θ = 2.2. Pada α = 0.01, loss masih 2,44. Pada 0,1, loss mencapai 0,151, dan pada 0,3, loss sampai ke minimum −0,145. Pada α = 1, jalurnya tidak pernah tenang. Di dekat minimum dengan kelengkungan h, gradient descent hanya konvergen jika α < 2/h. Di sini h ≈ 4.1, jadi langkah di atas sekitar 0,49 memantul melintasi lembah, bukan turun dan menetap di dalamnya.

Langkah 4 dari 6: Langkah demi Langkah

Lihat gradient descent menemukan minimum

-2-112θLossloss = 5.998
Langkah
0
Learning rate
0.12
Loss
5.998
Gradient
5.348

Di setiap langkah: hitung gradient, lalu perbarui θ = θ − α·∇L. Perhatikan loss yang menurun. Langkah mengecil di dekat minimum karena gradient-nya mengecil, sedangkan α tetap.

Tekan Jalankan, atau Satu Langkah untuk maju satu pembaruan setiap kali. Percobaan ini memakai α = 0.12 dari θ = 2.4. Gradient pertamanya 2(2.4) + 0.9 cos(7.2) ≈ 5.35, jadi pembaruan pertamanya 2.4 − 0.12 × 5.35 ≈ 1.76. Titik berikutnya 1,28, 1,06, dan 0,91, dan setelah 20 langkah θ berada di −0,289. Dalam praktik, training berhenti setelah jumlah langkah yang ditetapkan habis, saat gradient sudah sangat kecil, atau saat validation loss tidak membaik lagi.

Langkah 5 dari 6: Dalam Dua Dimensi

Network sungguhan punya jutaan parameter

θ₁θ₂minmulai
Learning rateα = 0.080
Langkah
>150
Loss akhir
0.0117
α
0.080

Dengan dua parameter, loss menjadi sebuah permukaan. Garis kontur menghubungkan titik-titik dengan loss yang sama. Jalur zigzag berayun di arah θ₂ yang curam sambil merayap pelan di arah θ₁ yang landai.

Geser learning rate di antara 0,005 dan 0,095. Loss-nya 0.1θ₁² + 10θ₂², jadi kelengkungannya 0,2 di sepanjang θ₁ dan 20 di sepanjang θ₂, dengan rasio 100. Kestabilan di sepanjang θ₂ menuntut α < 2/20 = 0.1, dan itulah sebabnya slider berhenti di 0,095. Meski begitu, θ₁ hanya mengecil sekitar 2% per langkah. Jalur di sini juga menambahkan sedikit noise pada gradient. Momentum, Adam, dan penskalaan ulang input semuanya mengurangi zigzag di lembah yang panjang dan sempit.

Langkah 6 dari 6: Stochastic dan Mini-Batch

Memakai sebagian data agar pembaruan lebih cepat, walau lebih banyak noise

θ₁θ₂minmulai
Mode
Mini-Batch
Noise
Sedang
Kecepatan
Seimbang

Batch GD memakai semua data: jalurnya mulus, tetapi setiap langkah lambat. SGD memakai satu contoh: murah, tetapi banyak noise. Mini-batch ada di antaranya: batch berisi 32–256 contoh memberi kecepatan yang baik dengan noise yang masih terkendali, dan noise itu bisa membantu keluar dari minimum lokal yang tajam.

Klik Batch GD, SGD, dan Mini-Batch. Di sini batch gradient descent membawa loss ke bawah 0,01 dalam 129 langkah, sedangkan versi yang ber-noise belum sampai ke sana setelah 150 langkah. Batch GD mengambil langkah paling sedikit, tetapi setiap langkahnya membaca seluruh dataset. Dengan sejuta contoh dan batch berisi 256 contoh, satu langkah full-batch sama mahalnya dengan sekitar 3.900 langkah mini-batch. Merata-ratakan B contoh memangkas varians gradient sebesar faktor B, dan karena itulah batch yang lebih besar menghasilkan jalur yang lebih mulus.

Apa itu gradient descent?

Gradient descent adalah metode iteratif untuk mencari titik minimum sebuah fungsi. Di setiap langkah, metode ini menghitung gradient, yaitu arah kenaikan tercepat fungsi tersebut, lalu menggeser parameter selangkah kecil ke arah sebaliknya. Aturan pembaruannya θ ← θ − α∇L(θ), dengan α sebagai learning rate.

Hampir semua neural network dilatih dengan salah satu bentuk gradient descent, dari model klasifikasi kecil sampai model bahasa besar. Backpropagation menyediakan gradient dari loss terhadap tiap weight, lalu gradient descent memakainya untuk memperbarui weight. Varian seperti SGD dengan momentum dan Adam mengubah cara langkahnya dihitung, tetapi semuanya tetap mengikuti ide yang sama: bergerak menuruni kemiringan.

Ide utama

  • Gradient descent berulang kali menggeser parameter ke arah yang berlawanan dengan gradient dari loss.
  • Learning rate menentukan ukuran langkah. Terlalu besar akan divergen, terlalu kecil akan merayap.
  • Langkah mengecil di dekat minimum karena gradient-nya mengecil.
  • Lembah yang panjang dan sempit membuat gradient descent biasa bergerak zigzag.
  • Mini-batch menukar gradient yang lebih banyak noise dengan langkah yang jauh lebih murah.
  • Pada loss non-konveks, metode ini menemukan titik rendah yang bagus, belum tentu minimum global.

Ulasan singkat tentang topik ini

Pertanyaan umum

Apakah gradient descent selalu menemukan minimum global?

Hanya pada fungsi konveks, seperti loss regresi linear atau regresi logistik, dengan learning rate yang sesuai. Loss neural network tidak konveks, jadi gradient descent bisa berhenti di minimum lokal atau melambat di dekat saddle point. Dalam praktik, minimum yang ditemukannya pada network besar cenderung bekerja dengan baik.

Bagaimana cara memilih learning rate?

Cara yang umum adalah learning rate range test: jalankan training sebentar sambil menaikkan learning rate secara eksponensial, lalu pilih nilai sedikit di bawah titik ketika loss mulai melonjak. Titik awal yang lazim adalah sekitar 0,1 untuk SGD dengan momentum dan 0,001 untuk Adam. Sebagian besar training kemudian menurunkan learning rate seiring waktu dengan schedule.

Kenapa disebut stochastic gradient descent?

Setiap langkah memakai satu contoh atau mini-batch yang dipilih secara acak, bukan seluruh dataset, sehingga gradient-nya berupa estimasi acak dari gradient yang sebenarnya. Dalam pemakaian modern, SGD hampir selalu berarti mini-batch gradient descent. Mengacak data di setiap epoch menjaga agar tiap batch tetap mewakili keseluruhan data.

Apa bedanya gradient descent dan Adam?

Gradient descent biasa menggeser setiap parameter sebesar learning rate yang sama dikali gradient-nya. Adam menyimpan rata-rata berjalan dari gradient dan kuadrat gradient tiap parameter, sehingga menambahkan momentum dan mengatur skala langkah secara terpisah untuk setiap parameter. Ini membantu pada permukaan loss yang kelengkungannya sangat berbeda di arah yang berbeda.

Penjelasan terkait

Referensi

  1. Goodfellow, Bengio & Courville (2016), "Deep Learning", section 4.3: Gradient-Based Optimization
  2. Stanford CS231n, "Optimization: Stochastic Gradient Descent"
  3. Ruder (2016), "An overview of gradient descent optimization algorithms"
  4. Smith (2017), "Cyclical Learning Rates for Training Neural Networks"

Terakhir diperbarui