Backpropagation di Neural Networks
pengantar
Dalam cerita ini, saya akan menjelaskan bagaimana jaringan saraf dapat dilatih dengan backpropagation. Pada cerita sebelumnya , algoritma penurunan gradien diperkenalkan, tetapi kami tidak mempertimbangkan bagaimana gradien dari fungsi sejuta variabel dapat dihitung. Sebelum menurunkan persamaan utama backpropagation, saya akan menjelaskan secara singkat bagaimana neuron di lapisan yang berbeda terhubung satu sama lain dan juga memperkenalkan notasi untuk variabel.
Jaringan syaraf
Pada Gambar 1, Anda dapat melihat NN yang terhubung sepenuhnya dengan empat lapisan: satu lapisan masukan, dua lapisan tersembunyi, dan satu lapisan keluaran. Jika kita menggunakan jaringan ini untuk mengenali gambar, gambar input akan diumpankan ke layer input dalam bentuk vektor. Jika kita menginisialisasi semua variabel secara acak, maka hasil yang diperoleh pada lapisan output tidak akan mengklasifikasikan input dengan tepat. Oleh karena itu, perlu untuk menyesuaikan variabel-variabel ini sedemikian rupa sehingga jaringan akan mengklasifikasikan input sesuai dengan itu. Untuk kesederhanaan, kami akan mempertimbangkan jaringan berikut, yang hanya berisi empat lapisan. Notasi untuk bobot dan bias yang digunakan di seluruh cerita ini tercermin dalam Gambar 1.
Pertama, mari kita pertimbangkan hubungan antara output neuron saat ini dan output dari layer sebelumnya. Persamaan berikut mewakili bagian utama dari ketergantungan ini.
Misalnya, untuk neuron ke-2 dari lapisan ke-3, kita dapat menulis persamaan ini sebagai berikut:
Nilai z ini dihitung untuk setiap neuron, dan akhirnya fungsi aktivasi diterapkan padanya untuk menghasilkan keluaran.
Contoh fungsi aktivasi yang umum digunakan adalah fungsi sigmoid, yang meningkatkan kemampuan komputasi jaringan saraf dengan menambahkan nonlinier. Akhirnya, output dari neuron ke-j dari lapisan l akan dilambangkan sebagai berikut:
di mana sigma adalah fungsi aktivasi. Perlu diingat bahwa fungsi aktivasi diterapkan mulai dari lapisan kedua, termasuk lapisan output. Oleh karena itu, output dari lapisan input hanya akan mengulang input tanpa aktivasi.
Saat kita mulai dengan bobot dan bias acak, jaringan kita akan menghasilkan angka pada lapisan keluaran yang jauh dari yang kita inginkan. Untungnya, kami dapat menyesuaikan semua bobot dan bias secara bertahap untuk mengklasifikasikan data secara akurat.
Sekarang saya akan memperkenalkan fungsi biaya dan menjelaskan dengan jelas mengapa meminimalkan fungsi ini menghasilkan klasifikasi yang lebih baik. Fungsi biaya total NN diberikan oleh rumus berikut:
Di mana:
x adalah vektor masukan
y_a adalah vektor keluaran aktual (yang merupakan fungsi dari vektor masukan, semua bobot dan bias)
y_d adalah vektor keluaran yang diinginkan (yang ditetapkan untuk setiap vektor masukan x.)
n adalah jumlah vektor input (misalnya jumlah gambar)
Karena setiap suku dalam penjumlahan adalah non-negatif, meminimalkan biaya total setara dengan meminimalkan setiap suku, dan meminimalkan setiap suku hanya dapat dicapai dengan mendekatkan keluaran aktual dengan yang diinginkan. Salah satu metode untuk meminimalkan fungsi tersebut adalah algoritma gradient descent. Namun algoritme gradien tidak memberi tahu kami cara menghitung gradien untuk fungsi dengan ribuan variabel. Untuk alasan ini, kami akan mempertimbangkan backpropagation di bagian ini.
Jelas bahwa fungsi biaya adalah jumlah dari fungsi yang berbeda. Oleh karena itu, gradien dari seluruh fungsi biaya dapat ditemukan dengan menjumlahkan gradien dari setiap suku. Oleh karena itu, mari kita coba tunjukkan fungsi biaya kita sebagai berikut:
Di mana
Rumus di atas berbentuk vektor, dengan y_a dan y_d masing-masing mewakili vektor aktual dan yang diinginkan. Dalam bentuk komponen, biaya dapat ditampilkan sebagai:
Karena y_ai mewakili lapisan keluaran NN, kita dapat menulis ulang biaya untuk Gambar 1 sebagai berikut:
Jelas bahwa untuk setiap vektor input x, kita memiliki fungsi biaya terkait yang dilambangkan dengan C_x. Rata-rata dari fungsi biaya ini sama dengan total biaya NN. Oleh karena itu, rata-rata gradien dari biaya ini akan memberikan kita gradien dari seluruh biaya.
Sekarang kita akan mempertimbangkan bagaimana kita bisa mendapatkan gradien (dengan kata lain, semua turunan parsial sehubungan dengan bobot dan bias dalam jaringan) dari C_x menggunakan algoritma backpropagation.
Sebelum memulai, mari kita perkenalkan fungsi error yang akan dihitung untuk setiap neuron dan sederhanakan tugas kita selama proses mencari turunan parsial. Kami akan mendefinisikan kesalahan untuk setiap neuron sebagai berikut:
Pertama-tama mari kita hitung kesalahan di atas untuk lapisan keluaran (dengan kata lain, lapisan ke-4). Menurut rumus berikut:
Kesalahan untuk lapisan keluaran dapat dihitung sebagai berikut, yang merupakan aturan rantai biasa:
Setelah itu, kami mendemonstrasikan cara menghitung kesalahan untuk neuron di lapisan ketiga. Dari jaringan saraf kami, jelas bahwa zj³ berdampak pada semua output dari lapisan berikutnya, yaitu z1⁴, z2⁴, z3⁴, dan z4⁴ yang pada gilirannya mempengaruhi fungsi biaya. Oleh karena itu, dengan asumsi zj³ adalah variabel independen, aturan rantai dapat diterapkan sebagai berikut:
Dari definisi:
dan ∂zk⁴/∂zj³ dapat dihitung sebagai berikut dengan menggunakan persamaan untuk zk⁴:
Akhirnya, dengan mensubstitusi turunan parsial ini kembali ke dalam persamaan untuk kesalahan pada lapisan ketiga, kita mendapatkan hasil sebagai berikut:
Dengan cara yang sama, kesalahan pada lapisan kedua adalah:
Rumus umum error pada neuron ke-j pada layer l akan dilambangkan sebagai berikut:
Sejauh ini, tampak bahwa setiap kesalahan pada lapisan tiga bergantung pada kesalahan pada lapisan empat, seperti pada lapisan dua yang bergantung pada nilai kesalahan pada lapisan ketiga. Dengan menghitung kesalahan untuk lapisan keluaran dan menyebarkannya kembali, kita sebenarnya dapat menemukan gradien dari fungsi biaya. (yang akan dijelaskan selanjutnya). Nama "backpropagation" sebenarnya berasal dari ketergantungan kesalahan searah antara neuron dari lapisan yang berdekatan.
Dengan kesalahan yang diketahui, sekarang mari kita lihat bagaimana kita dapat menghitung turunan parsial dari fungsi biaya sehubungan dengan semua yang tidak diketahui (bobot dan bias). Dimulai dengan:
Kita tahu bahwa untuk lapisan l, semua bobot wjk^l yang terhubung ke neuron ke-j dari lapisan l secara langsung memengaruhi zj^l, yang pada gilirannya berdampak pada fungsi biaya. Oleh karena itu, kita dapat menerapkan aturan rantai sebagai berikut:
Dari definisi kesalahan:
dan suku lain dari penjumlahan tersebut dapat dihitung sebagai berikut:
Dengan mengganti kembali persamaan ini, kami memperoleh rumus berikut untuk turunan parsial dari fungsi biaya sehubungan dengan semua bobot:
Sekarang mari kita hitung turunan parsial sehubungan dengan bias:
Dengan cara yang sama, perubahan bias ke-j dari lapisan l secara langsung mempengaruhi zj^l yang pada gilirannya berdampak pada fungsi biaya. Oleh karena itu, menurut aturan rantai:
Di mana:
dan
Karena itu:
Kesimpulan
Dalam cerita ini, kita membahas bagaimana jaringan saraf dibangun melalui neuron yang terhubung dengan bobot. Kami juga memperkenalkan notasi yang banyak digunakan untuk penamaan bobot dan bias. Hubungan antara lapisan output dan input dijelaskan melalui pengenalan operasi penjumlahan tertimbang antara lapisan dan fungsi aktivasi yang diterapkan padanya.
Setelah mendefinisikan fungsi error, yang dihitung untuk semua neuron mulai dari lapisan keluaran, kami menemukan bahwa kesalahan dapat dihitung secara rekursif mulai dari lapisan keluaran. Dan akhirnya, dengan asumsi kesalahan dihitung, kami memperoleh persamaan untuk turunan parsial untuk mendapatkan gradien fungsi biaya.
Sekarang, dengan beberapa kalimat, saya ingin meringkas algoritma back-propagation:
Langkah 1: Memulai jaringan dengan bobot dan bias acak (misalnya, dalam rentang [0–1])
Langkah 2: Untuk setiap vektor input x, hitung nilai z dan output (a) dari semua neuron dalam jaringan. (proses ini disebut propagasi maju). (Persamaan 1,2)
Langkah 3: Hitung kesalahan untuk setiap neuron di lapisan keluaran dan perbanyak kembali (menggunakan kesalahan dari lapisan keluaran, hitung kesalahan untuk lapisan sebelumnya dan lanjutkan proses ini secara rekursif). (ini adalah proses backpropagation). (Persamaan 3)
Langkah 4: Menggunakan hasil yang diperoleh untuk error dan output, hitung semua turunan parsial (vektor gradien). (Persamaan 4,5)
Langkah 5: Menggunakan gradien yang diperoleh, buat satu iterasi dalam Algoritma Penurunan Gradien (buat satu langkah menuju minimum lokal dari fungsi biaya)

![Apa itu Linked List? [Bagian 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































