Dasar-dasar AI
Apa itu Gradient Descent?
Apa itu Gradient Descent?
Jika Anda telah membaca tentang bagaimana jaringan saraf dilatih, Anda pasti sudah pernah mendengar istilah “gradient descent” sebelumnya. Gradient descent adalah metode utama untuk mengoptimalkan kinerja jaringan saraf, mengurangi tingkat kesalahan/jumlah kesalahan jaringan. Namun, gradient descent dapat sedikit sulit dipahami bagi mereka yang baru dalam pembelajaran mesin, dan artikel ini akan berusaha memberikan Anda pemahaman yang cukup tentang bagaimana gradient descent bekerja.
Gradient descent adalah algoritma optimasi. Ini digunakan untuk meningkatkan kinerja jaringan saraf dengan membuat penyesuaian pada parameter jaringan sehingga perbedaan antara prediksi jaringan dan nilai sebenarnya/nilai yang diharapkan dari jaringan (yang disebut sebagai kesalahan) adalah sekecil mungkin. Gradient descent mengambil nilai awal parameter dan menggunakan operasi berbasis kalkulus untuk menyesuaikan nilai mereka ke arah nilai yang akan membuat jaringan menjadi seakurat mungkin. Anda tidak perlu mengetahui banyak kalkulus untuk memahami bagaimana gradient descent bekerja, tetapi Anda perlu memiliki pemahaman tentang gradien.
Apa itu Gradien?
Anggaplah ada grafik yang mewakili jumlah kesalahan yang dilakukan jaringan saraf. Bagian bawah grafik mewakili titik-titik dengan kesalahan terendah, sedangkan bagian atas grafik adalah tempat kesalahan tertinggi. Kami ingin bergerak dari atas grafik ke bawah. Gradien adalah cara untuk mengkuantifikasi hubungan antara kesalahan dan bobot jaringan saraf. Hubungan antara kedua hal ini dapat digambarkan sebagai kemiringan, dengan bobot yang salah menghasilkan lebih banyak kesalahan. Kemiringan kemiringan/gradien mewakili seberapa cepat model belajar.
Kemiringan yang lebih curam berarti pengurangan kesalahan yang besar sedang dilakukan dan model belajar dengan cepat, sedangkan jika kemiringan adalah nol, model berada pada dataran dan tidak belajar. Kami dapat bergerak turun kemiringan menuju kesalahan yang lebih sedikit dengan menghitung gradien, arah gerakan (perubahan pada parameter jaringan) untuk model kami.
Mari kita geser metafora sedikit dan bayangkan serangkaian bukit dan lembah. Kami ingin mencapai dasar bukit dan menemukan bagian lembah yang mewakili kesalahan terendah. Ketika kami memulai dari atas bukit, kami dapat mengambil langkah besar turun bukit dan yakin bahwa kami menuju ke titik terendah di lembah.
Namun, ketika kami mendekati titik terendah di lembah, langkah kami harus menjadi lebih kecil, atau kami bisa melebihi titik terendah sebenarnya dan berakhir di sisi lain. Serupa dengan itu, ketika menyesuaikan bobot jaringan, penyesuaian dapat sebenarnya membawa jaringan menjauh dari titik kesalahan terendah, dan oleh karena itu penyesuaian harus menjadi lebih kecil seiring waktu. Dalam konteks menuruni bukit menuju titik kesalahan terendah, gradien adalah vektor/instruksi yang menjelaskan jalur yang harus kami ambil dan seberapa besar langkah yang harus kami ambil.
Sekarang kita tahu bahwa gradien adalah instruksi yang memberitahu kita arah mana yang harus kita ambil (koefisien mana yang harus diperbarui) dan seberapa besar langkah yang harus kita ambil (seberapa banyak koefisien harus diperbarui), kita dapat menjelajahi bagaimana gradien dihitung.
Menghitung Gradien & Gradient Descent

Gradient descent dimulai dari tempat dengan kesalahan tinggi dan melalui beberapa iterasi, mengambil langkah dalam arah kesalahan terendah, berusaha menemukan konfigurasi bobot optimal. Foto: Роман Сузи via Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)
Untuk melakukan gradient descent, gradien harus dihitung terlebih dahulu. Untuk menghitung gradien, kita perlu mengetahui fungsi biaya/kesalahan. Kami akan menggunakan fungsi biaya untuk menentukan turunan. Dalam kalkulus, turunan hanya merujuk pada kemiringan fungsi pada titik tertentu, jadi kita pada dasarnya hanya menghitung kemiringan bukit berdasarkan fungsi kesalahan. Kami menentukan kesalahan dengan menjalankan koefisien melalui fungsi kesalahan. Jika kita mewakili fungsi kesalahan sebagai “f”, maka kita dapat menyatakan bahwa persamaan untuk menghitung kesalahan adalah sebagai berikut (kita hanya menjalankan koefisien melalui fungsi biaya yang dipilih):
Kesalahan = f(koefisien)
Kemudian kita menghitung turunan, atau menentukan kemiringan. Mendapatkan turunan dari kesalahan akan memberitahu kita arah mana yang menuju ke bawah kemiringan, dengan memberikan kita tanda yang tepat untuk menyesuaikan koefisien kita. Kami akan mewakili arah yang tepat sebagai “delta”.
delta = fungsi_turunan(kesalahan)
Kita sekarang telah menentukan arah mana yang menuju ke bawah kemiringan. Ini berarti kita dapat memperbarui koefisien dalam parameter jaringan dan berharap mengurangi kesalahan. Kami akan memperbarui koefisien berdasarkan koefisien sebelumnya minus perubahan nilai yang sesuai dengan arah (delta) dan argumen yang mengontrol besarnya perubahan (ukuran langkah). Argumen yang mengontrol ukuran pembaruan disebut “tingkat pembelajaran” dan kita akan mewakili sebagai “alpha”.
koefisien = koefisien – (alpha * delta)
Kemudian kita hanya mengulangi proses ini sampai jaringan telah konvergen di sekitar titik kesalahan terendah, yang seharusnya dekat dengan nol.
Sangat penting untuk memilih nilai yang tepat untuk tingkat pembelajaran (alpha). Nilai tingkat pembelajaran yang dipilih harus tidak terlalu kecil atau terlalu besar. Ingat bahwa ketika kita mendekati titik kesalahan terendah, langkah kita harus menjadi lebih kecil atau kita bisa melebihi titik kesalahan terendah sebenarnya dan berakhir di sisi lain. Titik kesalahan terendah adalah kecil dan jika laju perubahan kita terlalu besar, kesalahan bisa berakhir meningkat lagi. Jika ukuran langkah terlalu besar, kinerja jaringan akan terus bergetar di sekitar titik kesalahan terendah, melebihi di satu sisi dan kemudian di sisi lain. Jika ini terjadi, jaringan tidak akan pernah konvergen ke konfigurasi bobot optimal sebenarnya.
Sebaliknya, jika tingkat pembelajaran terlalu kecil, jaringan dapat memakan waktu lama untuk konvergen ke bobot optimal.
Jenis-Jenis Gradient Descent
Sekarang kita memahami bagaimana gradient descent bekerja secara umum, mari kita lihat beberapa jenis gradient descent.
Batch Gradient Descent: Bentuk gradient descent ini menjalankan semua contoh pelatihan sebelum memperbarui koefisien. Jenis gradient descent ini kemungkinan adalah bentuk gradient descent yang paling efisien secara komputasi, karena bobot hanya diperbarui sekali seluruh batch telah diproses, berarti ada lebih sedikit pembaruan total. Namun, jika dataset mengandung sejumlah besar contoh pelatihan, maka batch gradient descent dapat membuat pelatihan memakan waktu lama.
Stochastic Gradient Descent: Dalam Stochastic Gradient Descent, hanya satu contoh pelatihan diproses untuk setiap iterasi gradient descent dan pembaruan parameter. Ini terjadi untuk setiap contoh pelatihan. Karena hanya satu contoh pelatihan diproses sebelum parameter diperbarui, cenderung konvergen lebih cepat daripada Batch Gradient Descent, karena pembaruan dilakukan lebih awal. Namun, karena proses harus dilakukan pada setiap item dalam set pelatihan, dapat memakan waktu lama untuk menyelesaikannya jika dataset besar, dan oleh karena itu penggunaan salah satu jenis gradient descent lainnya lebih disukai.
Mini-Batch Gradient Descent: Mini-Batch Gradient Descent bekerja dengan membagi seluruh dataset pelatihan menjadi subbagian. Ini membuat mini-batch yang lebih kecil yang dijalankan melalui jaringan, dan ketika mini-batch telah digunakan untuk menghitung kesalahan, koefisien diperbarui. Mini-Batch Gradient Descent menemukan titik tengah antara Stochastic Gradient Descent dan Batch Gradient Descent. Model diperbarui lebih sering daripada dalam kasus Batch Gradient Descent, yang berarti konvergen sedikit lebih cepat dan lebih robust pada parameter optimal model. Ini juga lebih efisien secara komputasi daripada Stochastic Gradient Descent












