Bagaimana memahami Gradient Descent, algoritma ML paling populer

Gradient Descent adalah salah satu algoritme yang paling populer dan banyak digunakan untuk melatih model pembelajaran mesin.

Model pembelajaran mesin biasanya memiliki parameter (bobot dan bias) dan fungsi biaya untuk mengevaluasi seberapa baik sekumpulan parameter tertentu. Banyak masalah pembelajaran mesin berkurang menjadi menemukan satu set bobot untuk model yang meminimalkan fungsi biaya.

Misalnya, jika prediksi adalah p , targetnya adalah t , dan metrik kesalahan kita adalah kesalahan kuadrat, maka fungsi biaya J (W) = (p - t) ² .

Perhatikan bahwa nilai prediksi p tergantung pada input X serta model pembelajaran mesin dan nilai-nilai (saat ini) dari parameter W . Selama pelatihan, tujuan kami adalah menemukan sekumpulan nilai untuk W sehingga (p - t) ² kecil. Artinya prediksi kita p akan mendekati target t .

Penurunan gradien adalah metode iteratif. Kami mulai dengan beberapa set nilai untuk parameter model kami (bobot dan bias), dan memperbaikinya secara perlahan.

Untuk meningkatkan satu set bobot, kami mencoba untuk memahami nilai fungsi biaya untuk bobot yang mirip dengan bobot saat ini (dengan menghitung gradien). Kemudian kami bergerak ke arah yang mengurangi fungsi biaya.

Dengan mengulangi langkah ini ribuan kali, kami akan terus meminimalkan fungsi biaya kami.

Pseudocode untuk Gradient Descent

Gradient descent digunakan untuk meminimalkan fungsi biaya J (W) parameter dengan model parameter W .

Gradien (atau turunan) memberi tahu kita kemiringan atau kemiringan fungsi biaya. Oleh karena itu, untuk meminimalkan fungsi biaya, kita bergerak ke arah yang berlawanan dengan gradien.

  1. Inisialisasi bobot W secara acak.
  2. Hitung gradien G dari parameter fungsi biaya wrt. Ini dilakukan dengan menggunakan diferensiasi parsial: G = ∂J (W) / ∂W. Nilai gradien G bergantung pada input, nilai parameter model saat ini, dan fungsi biaya. Anda mungkin perlu meninjau kembali topik diferensiasi jika Anda menghitung gradien secara manual.
  3. Perbarui bobot dengan jumlah yang sebanding dengan G, yaitu W = W - ηG
  4. Ulangi sampai biaya J ( w ) berhenti berkurang, atau beberapa kriteria penghentian yang telah ditentukan sebelumnya terpenuhi.

Di langkah 3, η adalah kecepatan pemelajaran yang menentukan ukuran langkah yang kita ambil untuk mencapai minimum. Kita harus sangat berhati-hati dengan parameter ini. Nilai η yang tinggi mungkin melampaui nilai minimum, dan nilai yang sangat rendah akan mencapai minimum dengan sangat lambat.

Pilihan populer untuk kriteria terminasi adalah bahwa biaya J ( w ) berhenti berkurang pada dataset validasi.

Intuisi untuk Penurunan Gradien

Bayangkan Anda ditutup matanyadi medan yang berat, dan tujuan Anda adalah mencapai ketinggian terendah.

Salah satu strategi paling sederhana yang dapat Anda gunakan adalah dengan merasakan tanah di segala arah, dan mengambil langkah ke arah di mana tanah turun paling cepat.

Jika Anda terus mengulangi proses ini, Anda mungkin akan berakhir di danau, atau bahkan lebih baik, di suatu tempat di lembah yang sangat besar.

Medan yang kasar dapat dianalogikan dengan fungsi biaya, dan meminimalkan fungsi biaya dapat dianalogikan dengan mencoba mencapai ketinggian yang lebih rendah.

Anda buta, karena kami tidak memiliki kemewahan untuk mengevaluasi (atau 'melihat') nilai fungsi untuk setiap set parameter yang mungkin.

Merasakan kemiringan medan di sekitar Anda dapat dianalogikan dengan menghitung gradien, dan mengambil langkah dianalogikan dengan satu iterasi pembaruan parameter.

Ngomong-ngomong - sebagai tambahan kecil - tutorial ini adalah bagian dari Kursus Sains Data gratis dan Kursus Machine Learning gratis di Commonlounge. Kursus mencakup banyak tugas dan proyek langsung. Jika Anda tertarik mempelajari Ilmu Data / ML, rekomendasikan untuk memeriksanya.

Varian Penurunan Gradien

Ada beberapa varian penurunan gradien, bergantung pada seberapa banyak data yang digunakan untuk menghitung gradien.

Alasan utama variasi ini adalah efisiensi komputasi. Sebuah kumpulan data mungkin memiliki jutaan titik data, dan menghitung gradien di seluruh kumpulan data dapat menjadi mahal secara komputasi.

  • Penurunan gradien batch menghitung gradien dari fungsi biaya ke parameter W untuk seluruh data pelatihan . Karena kita perlu menghitung gradien untuk seluruh set data untuk melakukan satu pembaruan parameter, penurunan gradien batch bisa sangat lambat.
  • Penurunan gradien stokastik (SGD) menghitung gradien untuk setiap pembaruan menggunakan satu titik data pelatihan x_i (dipilih secara acak). Idenya adalah bahwa gradien yang dihitung dengan cara ini adalah perkiraan stokastik terhadap gradien yang dihitung menggunakan seluruh data pelatihan. Setiap pembaruan sekarang jauh lebih cepat untuk dihitung daripada dalam penurunan gradien batch, dan pada banyak pembaruan, kita akan menuju ke arah umum yang sama.
  • Dalam penurunan gradien tumpukan-mini , kami menghitung gradien untuk setiap tumpukan-mini kecil dari data pelatihan. Artinya, pertama-tama kita membagi data pelatihan menjadi beberapa batch kecil (misalnya M sampel per batch). Kami melakukan satu pembaruan per kelompok mini. M biasanya dalam kisaran 30–500, tergantung pada masalahnya. Biasanya GD batch mini digunakan karena infrastruktur komputasi - kompiler, CPU, GPU - sering dioptimalkan untuk melakukan penambahan vektor dan perkalian vektor.

Dari jumlah tersebut, SGD dan GD batch mini adalah yang paling populer.

Dalam skenario umum, kami melakukan beberapa lintasan pada data pelatihan sebelum kriteria penghentian terpenuhi. Setiap lintasan disebut epoch . Juga, perhatikan bahwa karena langkah pembaruan jauh lebih efisien secara komputasi dalam SGD dan GD batch mini, kami biasanya melakukan 100-an-1000 pembaruan di antara pemeriksaan untuk kriteria penghentian yang dipenuhi.

Memilih kecepatan pembelajaran

Biasanya, nilai kecepatan pemelajaran dipilih secara manual. Kami biasanya memulai dengan nilai kecil seperti 0,1, 0,01, atau 0,001 dan menyesuaikannya berdasarkan apakah fungsi biaya berkurang sangat lambat (meningkatkan kecepatan pembelajaran) atau meledak / menjadi tidak menentu (menurunkan kecepatan pembelajaran).

Meskipun pemilihan kecepatan pembelajaran secara manual masih merupakan praktik yang paling umum, beberapa metode seperti Adam optimizer, AdaGrad dan RMSProp telah diusulkan untuk secara otomatis memilih kecepatan pembelajaran yang sesuai.

Disusun bersama Keshav Dhandhania dan Savan Visalpara.

Awalnya diterbitkan sebagai bagian dari Kursus Machine Learning gratis dan Kursus Sains Data gratis di www.commonlounge.com.