potongan Apa itu Penurunan Gradien? - Bersatu.AI
Terhubung dengan kami

AI 101

Apa itu Penurunan Gradien?

mm
Updated on

Apa itu Penurunan Gradien?

Jika Anda pernah membaca tentang cara melatih jaringan saraf, Anda hampir pasti pernah menemukan istilah “penurunan gradien” sebelumnya. Keturunan gradien adalah metode utama untuk mengoptimalkan kinerja jaringan saraf, mengurangi tingkat kehilangan/kesalahan jaringan. Namun, penurunan gradien mungkin agak sulit dipahami bagi mereka yang baru mengenal pembelajaran mesin, dan artikel ini akan berusaha memberi Anda intuisi yang baik tentang cara kerja penurunan gradien.

Turunan gradien adalah algoritma pengoptimalan. Ini digunakan untuk meningkatkan kinerja jaringan saraf dengan membuat penyesuaian pada parameter jaringan sedemikian rupa sehingga perbedaan antara prediksi jaringan dan nilai aktual/perkiraan jaringan (disebut sebagai kerugian) sekecil mungkin. Penurunan gradien mengambil nilai awal parameter dan menggunakan operasi berbasis kalkulus untuk menyesuaikan nilainya ke nilai yang akan membuat jaringan seakurat mungkin. Anda tidak perlu mengetahui banyak kalkulus untuk memahami cara kerja penurunan gradien, tetapi Anda perlu memiliki pemahaman tentang gradien.

Apa itu Gradien?

Asumsikan ada grafik yang mewakili jumlah kesalahan yang dibuat oleh jaringan saraf. Bagian bawah grafik mewakili titik kesalahan terendah sedangkan bagian atas grafik adalah tempat kesalahan tertinggi. Kami ingin bergerak dari atas grafik ke bawah. Gradien hanyalah cara mengukur hubungan antara kesalahan dan bobot jaringan saraf. Hubungan antara dua hal tersebut dapat digambarkan sebagai lereng, dengan bobot yang salah menghasilkan lebih banyak kesalahan. Kecuraman lereng/gradien menunjukkan seberapa cepat model belajar.

Kemiringan yang lebih curam berarti pengurangan kesalahan yang besar sedang dilakukan dan model belajar dengan cepat, sedangkan jika kemiringannya nol, model berada di dataran tinggi dan tidak belajar. Kita dapat bergerak menuruni lereng menuju lebih sedikit kesalahan dengan menghitung gradien, arah pergerakan (perubahan parameter jaringan) untuk model kita.

Mari kita ubah sedikit metafora dan bayangkan serangkaian bukit dan lembah. Kami ingin mencapai dasar bukit dan menemukan bagian lembah yang mewakili kerugian terendah. Saat kita mulai di puncak bukit, kita dapat mengambil langkah besar menuruni bukit dan yakin bahwa kita sedang menuju ke titik terendah di lembah.

Namun, saat kita semakin dekat ke titik terendah di lembah, langkah kita harus menjadi lebih kecil, atau kita bisa melampaui titik terendah yang sebenarnya. Demikian pula, ada kemungkinan bahwa saat menyesuaikan bobot jaringan, penyesuaian sebenarnya dapat membawanya lebih jauh dari titik kerugian terendah, dan oleh karena itu penyesuaian harus semakin kecil dari waktu ke waktu. Dalam konteks menuruni bukit menuju titik kerugian terendah, gradien adalah vektor/instruksi yang merinci jalur yang harus kita ambil dan seberapa besar langkah kita seharusnya.

Sekarang kita tahu bahwa gradien adalah instruksi yang memberi tahu kita ke arah mana harus bergerak (koefisien mana yang harus diperbarui) dan seberapa besar langkah yang harus kita ambil (berapa banyak koefisien yang harus diperbarui), kita dapat mempelajari bagaimana gradien dihitung.

Menghitung Gradien & Turunan Gradien

Penurunan gradien dimulai di tempat kehilangan tinggi dan melalui beberapa iterasi, mengambil langkah ke arah kehilangan terendah, bertujuan untuk menemukan konfigurasi bobot yang optimal. Foto: Роман Сузи melalui Wikimedia Commons, CCY BY SA 3.0 (https://commons.wikimedia.org/wiki/File:Gradient_descent_method.png)

Untuk melakukan penurunan gradien, gradien harus dihitung terlebih dahulu. Dalam urutan untuk menghitung gradien, kita perlu mengetahui fungsi kerugian/biaya. Kami akan menggunakan fungsi biaya untuk menentukan turunannya. Dalam kalkulus, turunan hanya mengacu pada kemiringan fungsi pada titik tertentu, jadi pada dasarnya kita hanya menghitung kemiringan bukit berdasarkan fungsi kerugian. Kami menentukan kerugian dengan menjalankan koefisien melalui fungsi kerugian. Jika kita menyatakan fungsi kerugian sebagai “f”, maka kita dapat menyatakan bahwa persamaan untuk menghitung kerugian adalah sebagai berikut (kita hanya menjalankan koefisien melalui fungsi biaya pilihan kita):

Rugi = f(koefisien)

Kami kemudian menghitung turunannya, atau menentukan kemiringannya. Mendapatkan turunan dari kerugian akan memberi tahu kita arah naik atau turun lereng, dengan memberi kita tanda yang sesuai untuk menyesuaikan koefisien kita. Kami akan mewakili arah yang sesuai sebagai "delta".

delta = fungsi_derivatif(kerugian)

Kami sekarang telah menentukan arah mana yang menurun menuju titik kerugian terendah. Ini berarti kami dapat memperbarui koefisien dalam parameter jaringan saraf dan semoga mengurangi kerugian. Kami akan memperbarui koefisien berdasarkan koefisien sebelumnya dikurangi perubahan nilai yang sesuai sebagaimana ditentukan oleh arah (delta) dan argumen yang mengontrol besarnya perubahan (ukuran langkah kami). Argumen yang mengontrol ukuran pembaruan disebut "kecepatan belajar” dan kami akan menyatakannya sebagai "alfa".

koefisien = koefisien – (alfa * delta)

Kami kemudian hanya mengulangi proses ini sampai jaringan berkumpul di sekitar titik kerugian terendah, yang seharusnya mendekati nol.

Sangat penting untuk memilih nilai yang tepat untuk laju pembelajaran (alfa). Tingkat pembelajaran yang dipilih tidak boleh terlalu kecil atau terlalu besar. Ingatlah bahwa saat kita mendekati titik kerugian terendah, langkah kita harus menjadi lebih kecil atau kita akan melampaui titik kerugian terendah yang sebenarnya dan berakhir di sisi lain. Titik kerugian terkecil kecil dan jika tingkat perubahan kita terlalu besar kesalahan bisa berakhir meningkat lagi. Jika ukuran langkah terlalu besar, kinerja jaringan akan terus memantul di sekitar titik kerugian terendah, melewatinya di satu sisi dan kemudian di sisi lainnya. Jika ini terjadi, jaringan tidak akan pernah menyatu pada konfigurasi bobot optimal yang sebenarnya.

Sebaliknya, jika kecepatan pembelajaran terlalu kecil, jaringan berpotensi membutuhkan waktu yang sangat lama untuk berkumpul pada bobot optimal.

Jenis Turunan Gradien

Sekarang setelah kita memahami cara kerja gradient descent secara umum, mari kita lihat beberapa perbedaannya jenis penurunan gradien.

Penurunan Gradien Batch: Bentuk penurunan gradien ini melewati semua sampel pelatihan sebelum memperbarui koefisien. Jenis penurunan gradien ini kemungkinan merupakan bentuk penurunan gradien yang paling efisien secara komputasi, karena bobot hanya diperbarui setelah seluruh kumpulan diproses, yang berarti ada lebih sedikit pembaruan total. Namun, jika dataset berisi banyak contoh pelatihan, penurunan gradien batch dapat membuat pelatihan memakan waktu lama.

Stochastic Gradient Descent: Dalam Stochastic Gradient Descent, hanya satu contoh pelatihan yang diproses untuk setiap iterasi penurunan gradien dan pembaruan parameter. Ini terjadi untuk setiap contoh pelatihan. Karena hanya satu contoh pelatihan yang diproses sebelum parameter diperbarui, ini cenderung menyatu lebih cepat daripada Penurunan Gradien Batch, karena pembaruan dilakukan lebih cepat. Namun, karena proses harus dilakukan pada setiap item dalam set pelatihan, dapat memakan waktu cukup lama untuk menyelesaikannya jika set datanya besar, dan gunakan salah satu dari jenis penurunan gradien lainnya jika lebih disukai.

Penurunan Gradien Mini-Batch: Penurunan Gradien Mini-Batch beroperasi dengan membagi seluruh kumpulan data pelatihan menjadi beberapa subbagian. Itu 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 menyerang jalan tengah antara Stochastic Gradient Descent dan Batch Gradient Descent. Model ini lebih sering diperbarui dibandingkan dengan Batch Gradient Descent, yang berarti konvergensi yang sedikit lebih cepat dan lebih kuat pada parameter optimal model. Ini juga lebih efisien secara komputasi daripada Stochastic Gradient Descent

Blogger dan programmer dengan spesialisasi di Pembelajaran mesin dan Belajar mendalam topik. Daniel berharap dapat membantu orang lain menggunakan kekuatan AI untuk kebaikan sosial.