Grafik Komputasi
Propagasi mundur diimplementasikan dalam kerangka kerja pembelajaran yang mendalam seperti Tensorflow, Torch, Theano, dll., Dengan menggunakan grafik komputasi. Lebih penting lagi, memahami propagasi balik pada grafik komputasi menggabungkan beberapa algoritma yang berbeda dan variasinya seperti backprop melalui waktu dan backprop dengan bobot bersama. Setelah semuanya diubah menjadi grafik komputasi, mereka masih menggunakan algoritme yang sama - hanya propagasi balik pada grafik komputasi.
Apa itu Grafik Komputasi
Grafik komputasi didefinisikan sebagai grafik berarah di mana node sesuai dengan operasi matematika. Grafik komputasi adalah cara untuk mengekspresikan dan mengevaluasi ekspresi matematika.
Misalnya, berikut adalah persamaan matematika sederhana -
$$ p = x + y $$
Kita dapat menggambar grafik komputasi dari persamaan di atas sebagai berikut.
Grafik komputasi di atas memiliki node tambahan (node dengan tanda "+") dengan dua variabel input x dan y dan satu output q.
Mari kita ambil contoh lain, yang sedikit lebih rumit. Kami memiliki persamaan berikut.
$$ g = \ kiri (x + y \ kanan) \ ast z $$
Persamaan di atas diwakili oleh grafik komputasi berikut.
Grafik Komputasi dan Propagasi Balik
Grafik komputasi dan propagasi mundur, keduanya merupakan konsep inti penting dalam pembelajaran mendalam untuk melatih jaringan saraf.
Lulus ke Depan
Forward pass adalah prosedur untuk mengevaluasi nilai ekspresi matematika yang diwakili oleh grafik komputasi. Melakukan forward pass berarti kita meneruskan nilai dari variabel ke arah depan dari kiri (masukan) ke kanan tempat keluarannya.
Mari kita pertimbangkan contoh dengan memberikan beberapa nilai untuk semua input. Misalkan, nilai berikut diberikan ke semua input.
$$ x = 1, y = 3, z = −3 $$
Dengan memberikan nilai-nilai ini ke input, kita dapat melakukan forward pass dan mendapatkan nilai-nilai berikut untuk output pada setiap node.
Pertama, kita gunakan nilai x = 1 dan y = 3, untuk mendapatkan p = 4.
Kemudian kami menggunakan p = 4 dan z = -3 untuk mendapatkan g = -12. Kami pergi dari kiri ke kanan, ke depan.
Tujuan Backward Pass
Pada backward pass, maksud kami adalah menghitung gradien untuk setiap masukan terkait dengan hasil akhir. Gradien ini penting untuk melatih jaringan saraf menggunakan penurunan gradien.
Misalnya, kami menginginkan gradien berikut.
Gradien yang diinginkan
$$ \ frac {\ sebagian x} {\ sebagian f}, \ frac {\ sebagian y} {\ sebagian f}, \ frac {\ sebagian z} {\ sebagian f} $$
Pass mundur (propagasi mundur)
Kami memulai backward pass dengan mencari turunan dari hasil akhir sehubungan dengan hasil akhir (itu sendiri!). Sehingga akan menghasilkan turunan identitas dan nilainya sama dengan satu.
$$ \ frac {\ partial g} {\ partial g} = 1 $$
Grafik komputasi kami sekarang terlihat seperti yang ditunjukkan di bawah ini -
Selanjutnya, kita akan melakukan backward pass melalui operasi "*". Kami akan menghitung gradien pada p dan z. Karena g = p * z, kita tahu bahwa -
$$ \ frac {\ partial g} {\ partial z} = p $$
$$ \ frac {\ partial g} {\ partial p} = z $$
Kita sudah mengetahui nilai z dan p dari forward pass. Karenanya, kami mendapatkan -
$$ \ frac {\ partial g} {\ partial z} = p = 4 $$
dan
$$ \ frac {\ partial g} {\ partial p} = z = -3 $$
Kami ingin menghitung gradien pada x dan y -
$$ \ frac {\ sebagian g} {\ sebagian x}, \ frac {\ sebagian g} {\ sebagian y} $$
Namun, kami ingin melakukan ini secara efisien (meskipun x dan g hanya berjarak dua lompatan dalam grafik ini, bayangkan keduanya sangat jauh dari satu sama lain). Untuk menghitung nilai-nilai ini secara efisien, kita akan menggunakan aturan rantai diferensiasi. Dari aturan rantai, kami memiliki -
$$ \ frac {\ sebagian g} {\ sebagian x} = \ frac {\ sebagian g} {\ sebagian p} \ ast \ frac {\ sebagian p} {\ sebagian x} $$
$$ \ frac {\ sebagian g} {\ sebagian y} = \ frac {\ sebagian g} {\ sebagian p} \ ast \ frac {\ sebagian p} {\ sebagian y} $$
Tapi kita sudah tahu dg / dp = -3, dp / dx dan dp / dy mudah karena p langsung bergantung pada x dan y. Kami memiliki -
$$ p = x + y \ Panah kanan \ frac {\ sebagian x} {\ sebagian p} = 1, \ frac {\ sebagian y} {\ sebagian p} = 1 $$
Karenanya, kami mendapatkan -
$$ \ frac {\ partial g} {\ partial f} = \ frac {\ partial g} {\ partial p} \ ast \ frac {\ partial p} {\ partial x} = \ left (-3 \ right) .1 = -3 $$
Selain itu, untuk input y -
$$ \ frac {\ partial g} {\ partial y} = \ frac {\ partial g} {\ partial p} \ ast \ frac {\ partial p} {\ partial y} = \ left (-3 \ right) .1 = -3 $$
Alasan utama untuk melakukan ini secara terbalik adalah ketika kita harus menghitung gradien pada x, kita hanya menggunakan nilai yang telah dihitung, dan dq / dx (turunan dari keluaran simpul sehubungan dengan masukan simpul yang sama). Kami menggunakan informasi lokal untuk menghitung nilai global.
Langkah-langkah untuk melatih jaringan saraf
Ikuti langkah-langkah ini untuk melatih jaringan saraf -
Untuk titik data x dalam dataset, dilakukan forward pass dengan input x, dan menghitung biaya c sebagai output.
Kami melakukan backward pass mulai dari c, dan menghitung gradien untuk semua node dalam grafik. Ini termasuk node yang mewakili bobot jaringan neural.
Kami kemudian memperbarui bobot dengan melakukan gradien W = W - kecepatan pembelajaran *.
Kami mengulangi proses ini sampai kriteria berhenti terpenuhi.