Beranda
Think
Topik
Propagasi balik
Diterbitkan: 2 Juli 2024
Kontributor: Dave Bergmann, Cole Stryker
Propragasi balik adalah teknik machine learning yang penting untuk optimalisasi jaringan neural buatan. Ini memfasilitasi penggunaan algoritma penurunan gradien untuk memperbarui bobot jaringan, yang merupakan cara model pembelajaran mendalam yang mendorong kecerdasan buatan (AI) modern 'belajar'.
Singkatan dari 'propagasi balik kesalahan', propagasi balik adalah metode yang elegan untuk menghitung bagaimana perubahan pada salah satu bobot atau bias jaringan neural akan memengaruhi akurasi prediksi model. Sangat penting untuk penggunaan pembelajaran yang diawasi, pembelajaran semi-diawasi, atau pembelajaran yang diawasi sendiri untuk melatih jaringan neural.
Meskipun padanan dan pendahulu dari propagasi balik diusulkan secara independen dalam berbagai konteks sejak tahun 1960-an, David E. Rumelhart, Geoffrey Hinton, dan Ronald J. Williams yang pertama kali mempublikasikan algoritma pembelajaran formal. Makalah mereka pada tahun 1986, "Learning representations by back-propagating errors," memberikan turunan dari algoritma propagasi balik seperti yang digunakan dan dipahami dalam konteks machine learning modern.
Logika propagasi balik adalah bahwa lapisan neuron dalam jaringan neural pada dasarnya adalah serangkaian fungsi matematika bersarang. Selama pelatihan, persamaan-persamaan yang saling berhubungan tersebut disatukan ke dalam fungsi lain: 'fungsi kerugian' yang mengukur perbedaan (atau 'kerugian') antara hasil yang diinginkan (atau 'kebenaran dasar') untuk input yang diberikan dan hasil sebenarnya dari jaringan neural.
Oleh karena itu, kita dapat menggunakan 'aturan rantai', sebuah prinsip kalkulus yang berasal dari abad ke-17, untuk menghitung tingkat di mana setiap neuron berkontribusi pada kerugian keseluruhan. Dengan demikian, kita dapat menghitung dampak dari perubahan pada variabel apa pun-yaitu, pada bobot atau bias apa pun-di dalam persamaan yang diwakili oleh neuron-neuron tersebut.
Secara matematis, propagasi balik bekerja mundur dari hasil untuk menghitung secara efisien 'gradien' dari fungsi kerugian: vektor turunan untuk setiap persamaan dalam jaringan. Gradien ini memberi tahu algoritma pengoptimalan seperti 'penurunan gradien' persamaan mana yang harus disesuaikan, dan ke arah mana untuk menyesuaikannya, untuk mengurangi kerugian.
Ketiga proses yang saling terkait ini—fungsi kerugian yang melacak kesalahan model di berbagai input, propagasi balik kesalahan tersebut untuk melihat bagaimana berbagai bagian jaringan berkontribusi terhadap kesalahan, dan algoritma penurunan gradien yang menyesuaikan bobot model—adalah cara model pembelajaran mendalam 'belajar'. Dengan demikian, propagasi balik sangat penting untuk melatih model jaringan neural, dari persepsi multilapis paling dasar hingga arsitektur jaringan neural mendalam yang kompleks yang digunakan untuk AI generatif.
Meskipun sebagian besar organisasi sudah memahami hasil yang mereka harapkan dari AI generatif, namun memilih model yang salah dapat sangat memengaruhi bisnis Anda. Dalam buku elektronik ini, jelajahi kerangka kerja pemilihan model untuk menyeimbangkan persyaratan kinerja dengan biaya, risiko, kebutuhan penerapan, dan persyaratan pemangku kepentingan.
Karena proses propagasi balik sangat mendasar dalam bagaimana jaringan neural dilatih, penjelasan yang membantu tentang proses ini membutuhkan pemahaman yang baik tentang bagaimana jaringan neural membuat prediksi.
Yang paling penting, sangat berguna untuk memahami tujuan dan konteks dari 'bobot' dan 'bias': parameter model yang dapat disesuaikan yang dioptimalkan melalui propagasi balik dan penurunan gradien.
Jaringan neural bertujuan untuk secara kasar meniru struktur otak manusia. Mereka terdiri dari banyak node (atau neuron) yang saling berhubungan, disusun berlapis-lapis. Jaringan neural membuat prediksi setelah data input asli melakukan 'forward pass' melalui seluruh jaringan.
Neuron di 'lapisan input' menerima data input, biasanya sebagai penyematan vektor, dengan setiap neuron input menerima fitur individual dari vektor input. Sebagai contoh, sebuah model yang bekerja dengan gambar skala abu-abu 10x10 piksel biasanya akan memiliki 100 neuron di lapisan inputnya, dengan setiap neuron input yang berhubungan dengan piksel individual. Oleh karena itu, jaringan neural biasanya membutuhkan input dengan ukuran yang tetap, meskipun teknik seperti pooling atau normalisasi dapat memberikan fleksibilitas.
Dalam jaringan neural standar, setiap neuron pada lapisan input terhubung ke setiap neuron pada lapisan berikutnya, yang juga terhubung ke neuron pada lapisan berikutnya, dan seterusnya hingga lapisan output di mana prediksi akhir dibuat. Lapisan perantara antara lapisan input dan lapisan output yang disebut lapisan tersembunyi jaringan, adalah tempat sebagian besar 'pembelajaran' terjadi.
Sementara beberapa arsitektur jaringan neural khusus, seperti campuran model pakar atau jaringan neural konvolusi, memerlukan variasi, penambahan, atau pengecualian pada pengaturan langsung ini, semua jaringan neural menggunakan struktur inti ini.
Meskipun setiap neuron menerima input dari setiap node pada lapisan sebelumnya, tidak semua input tersebut memiliki nilai yang sama. Setiap koneksi antara dua neuron diberi 'bobot' yang unik: pengali yang meningkatkan atau mengurangi kontribusi satu neuron ke neuron di lapisan berikutnya.
Setiap neuron individu juga dapat diberikan 'bias': nilai konstanta yang ditambahkan ke jumlah input tertimbang dari neuron di lapisan sebelumnya.
Tujuan utama dari propagasi balik dan penurunan gradien adalah untuk menghitung bobot dan bias yang akan menghasilkan prediksi model terbaik. Neuron yang berhubungan dengan fitur data yang secara signifikan berkorelasi dengan prediksi yang akurat diberi bobot yang lebih besar; koneksi lain dapat diberi bobot yang mendekati nol.
Jaringan neural mendalam modern, sering kali dengan puluhan lapisan tersembunyi yang masing-masing berisi banyak neuron, dapat terdiri dari ribuan, jutaan, atau-dalam kasus sebagian besar model bahasa besar (LLM)-miliaran parameter yang dapat disesuaikan.
Setiap neuron dikonfigurasikan untuk melakukan operasi matematika, yang disebut 'fungsi aktivasi', pada jumlah input berbobot yang diterimanya dari node-node di lapisan sebelumnya. Fungsi aktivasi memperkenalkan 'nonlinieritas', memungkinkan model untuk menangkap pola kompleks dalam data input dan menghasilkan gradien yang dapat dioptimalkan. Menggunakan hanya fungsi aktivasi linier pada dasarnya meruntuhkan jaringan neural menjadi model regresi linier.
Fungsi aktivasi umum dalam jaringan neural meliputi:
Pertimbangkan sebuah unit tersembunyi hipotetis z, dengan fungsi aktivasi tanh dan istilah bias t, di lapisan kedua dari jaringan neural dengan 3 node input, a, b, dan c, di lapisan inputnya. Setiap koneksi antara node input dan node z memiliki bobot yang unik, w. Kita dapat menggambarkan nilai output yang akan diteruskan oleh node z ke neuron-neuron pada lapisan berikutnya dengan persamaan yang disederhanakan z = tanh(waz*a + wbz*b + wcz*c + t).
Neuron z terhubung ke neuron di lapisan berikutnya. Oleh karena itu, persamaan untuk z adalah bagian dari fungsi aktivasi di lapisan berikutnya dan, dengan perluasan, juga merupakan bagian dari setiap fungsi aktivasi untuk setiap neuron di lapisan berikutnya.
Seperti yang akan dijelaskan pada bagian berikut, propagasi balik adalah algoritma yang sangat cepat dan efisien untuk mengurai jaringan besar variabel dan persamaan yang saling berhubungan dalam jaringan neural.
Untuk mengilustrasikan efisiensi propagasi balik, Michael Nielsen membandingkannya dengan pendekatan alternatif yang sederhana dan intuitif untuk menghitung gradien fungsi kerugian jaringan neural dalam buku teks daringnya, "Neural Networks and Deep Learning".
Seperti yang dijelaskan Nielsen, seseorang dapat dengan mudah memperkirakan dampak perubahan pada bobot tertentu wj dalam jaringan dengan hanya menyelesaikan forward pass untuk dua nilai wj yang sedikit berbeda, sambil menjaga semua parameter lainnya tidak berubah, dan membandingkan kerugian yang dihasilkan untuk setiap pass. Dengan memformalkan proses tersebut ke dalam sebuah persamaan yang mudah dan mengimplementasikan beberapa baris kode di Python, Anda dapat mengotomatiskan proses tersebut untuk setiap bobot dalam jaringan.
Namun, sekarang bayangkan ada 1 juta bobot dalam model Anda, yang akan cukup sederhana untuk model pembelajaran mendalam modern. Untuk menghitung seluruh gradien, Anda harus menyelesaikan 1.000.001 forward pass melalui jaringan: 1 untuk menetapkan garis dasar, dan kemudian pass lain untuk mengevaluasi perubahan pada tiap 1 juta bobot.
Propagasi balik dapat mencapai tujuan yang sama dalam 2 pass: 1 forward pass dan 1 backward pass.
Untuk menyederhanakan penjelasan tentang cara kerja propagasi balik, akan sangat membantu untuk meninjau secara singkat beberapa konsep dan terminologi matematika inti.
Aturan rantai sangat penting untuk menghitung turunan fungsi aktivasi dalam jaringan neural , yang terdiri dari hasil fungsi aktivasi neuron lain di lapisan sebelumnya.
Meskipun logika di balik propagasi balik relatif mudah, matematika dan notasi dapat menjadi sangat rumit, terutama bagi mereka yang tidak terbiasa dengan kalkulus variabel.
Bekerja mundur dari hasil model, propagasi balik menerapkan 'aturan rantai' untuk menghitung pengaruh perubahan pada setiap parameter jaringan neural pada keseluruhan kesalahan prediksi model.
Secara abstrak, tujuan dari propagasi balik adalah untuk melatih jaringan neural agar dapat membuat prediksi yang lebih baik melalui pembelajaran yang terawasi. Lebih mendasar lagi, tujuan dari propagasi balik adalah untuk menentukan bagaimana bobot dan bias model harus disesuaikan untuk meminimalkan kesalahan yang diukur dengan 'fungsi kerugian'.
Pada tingkat teknis dan matematis, tujuan dari propagasi balik adalah untuk menghitung gradien fungsi kerugian sehubungan dengan masing-masing parameter jaringan neural. Dalam istilah yang lebih sederhana, propagasi balik menggunakan aturan rantai untuk menghitung tingkat perubahan kerugian sebagai respons terhadap perubahan apa pun pada bobot (atau bias) tertentu dalam jaringan.
Secara umum, melatih jaringan neural dengan propagasi balik memerlukan langkah-langkah berikut:
Jaringan neural menghasilkan prediksi melalui propagasi maju. Perambatan maju pada dasarnya adalah serangkaian persamaan bersarang yang panjang, dengan output fungsi aktivasi dari satu lapisan neuron berfungsi sebagai input ke fungsi aktivasi neuron di lapisan berikutnya.
Pelatihan model biasanya dimulai dengan inisialisasi bobot dan bias secara acak. Hiperparameter model, seperti jumlah lapisan tersembunyi, jumlah node di setiap lapisan dan fungsi aktivasi untuk neuron tertentu, dikonfigurasikan secara manual dan tidak perlu dilatih.
Dalam setiap forward pass, sebuah input diambil sampelnya dari kumpulan data pelatihan. Node-node pada lapisan input menerima vektor input, dan masing-masing meneruskan nilainya-dikalikan dengan bobot awal acak-ke node-node pada lapisan tersembunyi pertama. Unit-unit tersembunyi mengambil jumlah tertimbang dari nilai output ini sebagai input ke fungsi aktivasi, yang nilai hasilnya (dikondisikan oleh bobot awal acak) berfungsi sebagai input ke neuron-neuron di lapisan berikutnya. Ini berlanjut sampai lapisan hasil, di mana prediksi akhir terjadi.
Pertimbangkan contoh sederhana jaringan neural yang mengklasifikasikan input ke dalam salah satu dari 5 kategori:
Dalam jaringan yang terlatih dengan baik, model ini akan secara konsisten menghasilkan nilai probabilitas tinggi untuk klasifikasi yang benar dan menghasilkan nilai probabilitas rendah untuk klasifikasi yang salah. Namun, jaringan neural ini belum dilatih. Pada titik ini, bobot dan biasnya memiliki nilai awal acak, sehingga prediksinya umumnya tidak akurat.
Setelah setiap forward pass, 'fungsi kerugian' mengukur perbedaan (atau 'kerugian') antara prediksi hasil model untuk input tertentu dan prediksi yang benar (atau 'kebenaran dasar') untuk input tersebut. Dengan kata lain, ini mengukur seberapa berbeda hasil aktual model dari output yang diinginkan.
Dalam pembelajaran diawasi, yang menggunakan data berlabel, kebenaran dasar disediakan oleh anotasi manual. Dalam pembelajaran yang diawasi sendiri, yang menutupi atau mengubah bagian dari sampel data yang tidak berlabel dan model tugas dengan merekonstruksinya, sampel asli berfungsi sebagai kebenaran dasar.
Tujuan dari fungsi kerugian ini adalah untuk mengukur ketidakakuratan dengan cara yang secara tepat mencerminkan sifat dan besarnya kesalahan hasil model untuk setiap input. Rumus matematika yang berbeda untuk kerugian paling cocok untuk tugas-tugas tertentu: misalnya, varian kesalahan kuadrat rata-rata bekerja dengan baik untuk masalah regresi, sedangkan varian kerugian entropi silang bekerja dengan baik untuk klasifikasi.
Karena fungsi kerugian mengambil hasil dari jaringan neural sebagai input, dan hasil jaringan neural itu adalah fungsi komposit yang terdiri dari banyak fungsi aktivasi bersarang dari masing-masing neuron, membedakan fungsi kerugian berarti membedakan seluruh jaringan. Untuk melakukannya, propagasi balik menggunakan aturan rantai.
'Fungsi kerugian', 'fungsi biaya' atau 'fungsi kesalahan'?
Perlu segera dicatat bahwa dalam beberapa konteks, istilah fungsi biaya atau fungsi kesalahan digunakan sebagai pengganti fungsi kerugian, dengan 'biaya' atau 'kesalahan' menggantikan 'kerugian'.
Meskipun beberapa literatur machine learning memberikan nuansa unik pada setiap istilah, namun pada umumnya istilah-istilah tersebut dapat dipertukarkan.1 Fungsi objektif adalah istilah yang lebih luas untuk setiap fungsi evaluasi yang ingin kita minimalkan atau maksimalkan. Fungsi kerugian, fungsi biaya atau fungsi kesalahan mengacu secara khusus pada istilah yang ingin kita minimalkan.
Dimulai dari lapisan terakhir, 'backward pass' membedakan fungsi kerugian untuk menghitung bagaimana setiap parameter individu jaringan berkontribusi terhadap kesalahan keseluruhan untuk satu input.
Kembali ke contoh model pengklasifikasi sebelumnya, kita akan mulai dengan 5 neuron di lapisan terakhir, yang akan kita sebut lapisan L. Nilai softmax dari setiap neuron hasil mewakili kemungkinan, dari 1, bahwa sebuah input termasuk dalam kategori. Dalam model yang terlatih dengan sempurna, neuron yang mewakili klasifikasi yang benar akan memiliki nilai hasil mendekati 1 dan neuron lainnya akan memiliki nilai hasil mendekati 0.
Untuk saat ini, kita akan fokus pada unit hasil yang mewakili prediksi yang benar, yang akan kita sebut Lc. Fungsi aktivasi Lc adalah fungsi gabungan, yang berisi banyak fungsi aktivasi bersarang dari seluruh jaringan neural dari lapisan input ke lapisan hasil. Meminimalkan fungsi kerugian akan memerlukan penyesuaian di seluruh jaringan yang membuat hasil dari fungsi aktivasi Lc mendekati 1.
Untuk melakukannya, kita perlu tahu bagaimana perubahan apa pun di layer sebelumnya akan mengubah hasil Lcsendiri. Dengan kata lain, kita perlu menemukan turunan parsial dari fungsi aktivasi Lc.
Hasil dari fungsi aktivasi Lcbergantung pada kontribusi yang diterima dari neuron-neuron di lapisan kedua dari belakang, yang akan kita sebut sebagai lapisan L-1. Salah satu cara untuk mengubah hasil Lc adalah dengan mengubah bobot antara neuron-neuron di L-1 dan Lc. Dengan menghitung turunan parsial dari setiap bobot L-1 sehubungan dengan bobot lainnya, kita dapat melihat bagaimana meningkatkan atau mengurangi salah satu dari mereka akan membawa hasil dari Lc lebih dekat ke (atau lebih jauh dari) 1.
Tapi itu bukan satu-satunya cara untuk mengubah hasil Lc. Kontribusi yang diterima Lc dari neuron L-1 tidak hanya ditentukan oleh bobot yang diterapkan pada nilai hasil L-1, tetapi juga oleh nilai hasil aktual (pra-bobot) itu sendiri. Nilai hasil neuron L-1 , pada gilirannya, dipengaruhi oleh bobot yang diterapkan pada input yang mereka terima dari L-2. Jadi kita dapat mendiferensiasikan fungsi aktivasi di L-1 untuk menemukan turunan parsial dari bobot yang diterapkan pada kontribusi L-2. Derivatif parsial ini menunjukkan kepada kita bagaimana setiap perubahan pada bobot L-2 akan memengaruhi hasil di L-1, yang kemudian akan memengaruhi nilai hasil Lc dan dengan demikian memengaruhi fungsi kerugian.
Dengan logika yang sama, kita juga dapat memengaruhi nilai hasil yang diterima neuron L-1 dari neuron L-2 dengan menyesuaikan kontribusi yang diterima neuron L-2 dari neuron di L-3. Jadi kita menemukan turunan parsial di L-3, dan seterusnya, secara rekursif mengulangi proses ini sampai kita mencapai lapisan input. Setelah selesai, kita akan mendapatkan gradien dari fungsi kerugian: vektor turunan parsialnya untuk setiap bobot dan parameter bias dalam jaringan.
Kami sekarang telah menyelesaikan forward pass dan backward pass untuk satu contoh pelatihan. Namun, tujuan kami adalah melatih model untuk menggeneralisasi dengan baik ke input baru. Untuk melakukan hal tersebut, diperlukan pelatihan pada sejumlah besar sampel yang mencerminkan keragaman dan rentang input yang akan ditugaskan oleh model untuk membuat prediksi setelah pelatihan.
Sekarang kita memiliki gradien fungsi kerugian sehubungan dengan setiap parameter bobot dan bias dalam jaringan, kita dapat meminimalkan fungsi kerugian—dan dengan demikian mengoptimalkan model—dengan menggunakan penurunan gradien untuk memperbarui parameter model.
Bergerak ke bawah—menurunkan—gradien fungsi kerugian akan mengurangi kerugian. Karena gradien yang kami hitung selama propagasi balik berisi turunan parsial untuk setiap parameter model, kami tahu arah mana yang harus 'dilangkahkan' untuk setiap parameter guna mengurangi kerugian.
Setiap langkah mencerminkan model 'pembelajaran' dari data pelatihannya. Tujuan kita adalah memperbarui bobot secara berulang sampai kita mencapai gradien minimum. Tujuan dari algoritma penurunan gradien adalah untuk menemukan penyesuaian parameter spesifik yang akan menggerakkan kita menuruni gradien dengan paling efisien.
Tingkat pembelajaran
Ukuran setiap langkah adalah hiperparameter yang dapat disetel, yang disebut tingkat pembelajaran. Memilih tingkat pembelajaran yang tepat penting untuk pelatihan yang efisien dan efektif.
Ingatlah bahwa fungsi aktivasi dalam jaringan neural adalah nonlinier. Beberapa gradien mungkin kira-kira berbentuk U: melangkah ke satu arah akan menurunkan gradien, tetapi terus melangkah ke arah itu pada akhirnya akan menaikkan gradien.
Tingkat pembelajaran yang rendah memastikan kita selalu melangkah ke arah yang benar, tetapi menghitung begitu banyak perubahan memakan waktu dan mahal secara komputasi. Laju pembelajaran yang tinggi memang efisien secara komputasi, tetapi berisiko melampaui batas minimum.
Ukuran batch
Pertimbangan lain dalam penurunan gradien adalah seberapa sering memperbarui bobot. Salah satu pilihannya adalah menghitung gradien untuk setiap contoh dalam kumpulan data pelatihan, kemudian mengambil rata-rata gradien tersebut dan menggunakannya untuk memperbarui parameter. Proses ini diulang secara berulang dalam serangkaian periode pelatihan sampai tingkat kesalahan stabil. Metode ini adalah penurunan gradien batch.
Ketika kumpulan data pelatihan sangat besar-seperti yang biasanya terjadi pada pembelajaran mendalam-batch penurunan gradien memerlukan waktu pemrosesan yang sangat lama. Menghitung gradien untuk jutaan contoh untuk setiap iterasi pembaruan bobot menjadi tidak efisien. Dalam penurunan gradien stokastik (SGD), setiap periode menggunakan satu contoh pelatihan untuk setiap langkah. Sementara kerugian mungkin berfluktuasi dari periode ke periode, kerugian dengan cepat menuju nilai minimal di banyak pembaruan.
Mini-batch penurunan gradien merupakan pendekatan jalan tengah. Contoh pelatihan diambil secara acak dalam kelompok dengan ukuran tetap, dan gradiennya kemudian dihitung dan dirata-ratakan. Hal ini mengurangi kebutuhan penyimpanan memori dari penurunan gradien batch sekaligus mengurangi ketidakstabilan relatif SGD.
Anda dapat melatih, memvalidasi, menyetel, dan menerapkan AI generatif, model dasar, dan kemampuan machine learning dengan mudah serta membangun aplikasi AI dalam waktu yang singkat dengan data yang sedikit.
Menata ulang cara Anda bekerja dengan AI: tim global kami yang beragam dan terdiri dari lebih dari 20.000 pakar AI dapat membantu Anda dengan cepat dan percaya diri dalam merancang dan meningkatkan skala AI serta otomatisasi di seluruh bisnis Anda, bekerja di seluruh teknologi IBM watsonx kami sendiri dan ekosistem mitra yang terbuka untuk menghadirkan model AI apa pun, di cloud mana pun, yang dipandu oleh etika dan kepercayaan.
Tingkatkan kekuatan AI dengan platform AI dan data generasi berikutnya.
Pelajari dasar-dasar membangun jaringan neural, bahkan tanpa bantuan kerangka kerja yang mungkin membuatnya lebih mudah digunakan.
Baca lebih lanjut tentang pembelajaran mendalam, yang merupakan bagian dari machine learning yang menggunakan jaringan neural berlapis, untuk menyimulasikan kekuatan pengambilan keputusan yang kompleks dari otak manusia. Pembelajaran mendalam memberdayakan sebagian besar aplikasi AI dalam kehidupan kita saat ini.
Jelajahi beberapa aspek utama AI dan subbidangnya, termasuk sejarah singkat dan konsep dasar yang akan membawa Anda dari awal algoritma prediktif hingga tonggak sejarah dalam pembelajaran mendalam modern.
¹ "Deep Learning", Goodfellow et al, MIT Press, 2016.