Ini topologi saya:
Jaringan diberi makan 2 & 9 sebagai input dan mengharapkan nilai 92 sebagai output. 92 ini dapat dibuat menjadi persen seperti 0,92 agar tetap sederhana.
Berikut adalah topologi dengan input, bobot, bias, dll. Seperti yang ditunjukkan di bawah ini, target kami adalah 0,92 atau 92%. Jaringan kami memperkirakan 0,6445 atau 64%. Mari kita lihat bagaimana kita mendapatkan prediksi ini.
Catatan: Kemudian dalam diagram saya tidak sengaja menjatuhkan bias, tetapi biasnya adalah b0=0,5, b1=0,5, b2=0,5, b3-02.
Hidden Layer Node 0: z0 = (x0 * w0) + (x1 * w1) + b z0 = (2 * 0.15) + (9 * 0.23) + 0.5 = 0.3 + 2.07 + 0.5 = 2.87
O0 = sigmoid(z0) O0 = sigmoid(2.87) = 0.9463
Lakukan proses serupa untuk Hidden Layer Node 1:
z1 = (x0 * w2) + (x1 * w3) + b z1 = (2 * 0.5) + (9 * 0.8) + 0.5 = 2 + 7.2 + 0.5 = 8.7 O1 = sigmoid(z1) O1 = sigmoid(8.7) = 0.9998
Melengkapi lapisan tersembunyi Hidden Layer Node 2:
z2 = (x0 * w4) + (x1 * w5) + b z2 = (2 * 0.05) + (9 * -0.05) + 0.5 = 0.1 + (-0.45) + 0.5 = 0.15 O2 = sigmoid(z2) O2 = sigmoid(0.15) = 0.5374
Pindah ke lapisan keluaran.
Node Lapisan Keluaran 0:
z3 = (00 * w6) + (00 * w7) + (00 * w8) + b z3 = (0.9463 * 0.9) + (0.9998 * -0.5) + (0.5374 * 0.08) + 0.2 = 0.8517 + (-0.4999) + (0.0430) + 0.2 = 0.5948 O3 = sigmoid(z3) O3 = sigmoid(0.5948) = 0.6445
Baik. Setelah first past jaringan ini menghasilkan 0.6445 atau 64%. Saya membutuhkannya untuk menghasilkan 0,92 atau 92%
Menyiapkan fungsi Biaya, menggunakan Mean Squared Error (MSE)
Biaya = (aktual – prediksi)**2
cara lain untuk melihat ini dan apa yang akan saya gunakan adalah.
Biaya = (y_true – y_predicted)**2
Dengan menggunakan rumus ini, saya sekarang memasukkan nilai-nilai kita untuk mendapatkan kerugian:
Cost = (0.92 - 0.6445) ** 2 = (0.2755) ** 2 = 0.0759
Pada titik ini, kami memiliki biaya 0,0759. Bergerak …
Sakit kepala yang sebenarnya (bagi saya) Propagasi Kembali!
Saya tahu ada banyak di luar sana, yang akan mengatakan ini adalah hal yang mudah untuk dipelajari. Aku tidak marah padamu. Namun, ini membutuhkan waktu dan bagi banyak orang, mereka mungkin tidak mau repot-repot menginvestasikan waktu itu. Saya tahu Anda mungkin juga mengatakannya tetapi setidaknya Anda (saya) dapat mengetahuinya dan dengan demikian mungkin tidak sesulit yang Anda pikirkan. Saya kira tujuan membenarkan cara.
Mari kita turun ke inti masalah ini. Yang perlu kita ketahui adalah bagaimana bobot (w0, w1, w2, w3, w4, w5, w6, w7, w8) memengaruhi biaya. Untuk melakukan itu, saya perlu memanfaatkan aturan rantai dan perhitungan turunan parsial.
Saya akan menggunakan ‘d’ untuk mewakili turunan. Oleh karena itu dCost/dO3 berarti, turunan dari biaya yang berkaitan dengan turunan dari output 3 (O3). Dengan kata lain, bagaimana perubahan output 3 berdampak pada biaya. Mari kita menggali.
Catatan sederhana yang cepat tentang aturan rantai. Aturan rantai mengatakan, dCost/dO3 sama dengan dCost/dw0 * dw0/dO3.
Memecahnya lebih lanjut, katakanlah dCost adalah 3 dan dO3 adalah 2. Ini sama dengan:
Sekarang katakanlah dw0 adalah 10. Perhatikan, nomor apa pun yang dipilih harus menghasilkan hasil yang sama.
Ini berarti.
dCost/dO3 = dCost/dw0 * dw0/dO3 1.5 = 3/10 * 10/2 1.5 = 30/20 1.5 = 1.5
Seperti yang Anda lihat di atas, kami mendapat 1,5 di kedua sisi yang sama.
Dengan pemahaman dasar itu, saatnya untuk membangun lebih jauh.
Berikut adalah 6 langkah pertama, di mana pada akhirnya, saya menemukan untuk w6, w7 dan w8. Melihat dari perspektif yang berbeda dCost/dw6, dCost/dw7 dan dCost/dw8.
Mari kita cari dCost/dz3 = dCost/dO3 * dO3/dz3
First, step 1: dCost/dO3 = O3 - y_true = 0.6445 - 0.92 = -0.2755 Step 2: dO3/dz3 = O3 * (1 - O3) = 0.6445 * (1 - 0.6445) = 0.6445 * 0.3555 = 0.2291
Dengan perhitungan di atas, mencari dCost/dz3 adalah dengan mengalikan dCost/dO3 * dO3/dz3.
Step 3: dCost/dz3 = dCost/dO3 * dO3/dz3 dCost/dz3 = -0.2755 * 0.2291 = -0.0631 This value also represents dCost/db3 dCost/dBias = -0.0631
Dengan itu, waktu untuk menghitung bagaimana w6, w7, dan w8 memengaruhi biaya.
Next, step 4. Find dCost/dw6 Weight 6: dCost/dw6 = dCost/dz3 * dz3/dw6 = dCost/dz3 * O0 = -0.0631 * 0.9463 = -0.0597 Step 5. Find dCost/dw7 Weight 7: dCost/dw7 = dCost/dz3 * dz3/dw7 = dCost/dz3 * O1 = -0.0631 * 0.9998 = -0.0631 Step 6. Find dCost/dw8 Weight 8: dCost/dw8 = dCost/dz3 * dz3/dw8 = dCost/dz3 * O2 = -0.0631 * 0.5374 = -0.0339
Step 7 : Finding dCost/dO0 dCost/dO0 = dCost/dz3 * dz3/dO0 = dCost/dz3 * w6 = -0.0631 * 0.9 = -0.0568 Step 8 : Finding dO0/dz0 dO0/dz0 = O0 * (1 - O0) = 0.9463 * (1 - 0.9463) = 0.9463 * 0.0537 = 0.0508 Step 9 : Finding dCost/dz0 dCost/dz0 = -0.0568 * 0.0508 = -0.0029 Step 10 : Finding dCost/dw0 dCost/dw0 = dCost/dz0 * dz0/dw0 = dCost/dz0 * Input0 = -0.0029 * 2 = -0.0058 Step 11 : Finding dCost/dw1 dCost/dw1 = dCost/dw1 = dCost/dz0 * dz0/dw1 = dCost/dz0 * Input1 = -0.0029 * 9 = -0.0261
Step 12 : Finding dCost/dO1 dCost/dO1 = dCost/dz3 * dz3/dO1 = dCost/dz3 * w7 = -0.0631 * -0.5 = 0.0316 Step 13 : Finding dO0/dz0 dO0/dz1 = O1 * (1 - O1) = 0.9998 * (1 - 0.9998) = 0.9998 * 0.0002 = 0.0002 Step 14 : Finding dCost/dz0 dCost/dz1 = dCost/dO1 * dO1/dz1 = -0.0316 * 0.0002 = -0.0000 This value is also dCost/db1 dCost/db1 = -0.0000 Step 15 : Finding dCost/dw2 dCost/dw2 = dCost/dz1 * dz0/dw2 = dCost/dz1 * Input0 = -0.0000 * 2 = -0.0000 Step 16 : Finding dCost/dw3 dCost/dw3 = dCost/dz1 * dz1/dw3 = dCost/dz1 * Input1 = -0.0000 * 9 = -0.0000
Step 17 : Finding dCost/dO2 dCost/dO2 = dCost/dz3 * dz3/dO2 = dCost/dz3 * w8 = -0.0631 * 0.08 = -0.0050 Step 18 : Finding dO2/dz2 dO2/dz2 = O2 * (1 - O2) = 0.5374 * (1 - 0.5374) = 0.5374 * 0.4626 = 0.2486 Step 19 : Finding dCost/dz2 dCost/dz2 = dCost/dO2 * dO2/dz2 = -0.0050 * 0.2486 = -0.0012 This value is also dCost/db2 dCost/db2 = -0.0012 Step 20 : Finding dCost/dw4 dCost/dw4 = dCost/dz2 * dz0/dw4 = dCost/dz2 * Input0 = -0.0012 * 2 = -0.0024 Step 21 : Finding dCost/dw5 dCost/dw5 = dCost/dz2 * dz2/dw5 = dCost/dz2 * Input1 = -0.0012 * 9 = -0.0108
Berikut adalah diagram akhir.
Ahhhhhhhh! Angkat berat telah selesai. Selanjutnya, hitung bobot dan bias baru.
Rumus untuk bobot dan bias baru adalah sebagai berikut:
new_weight = old_weight – learning_rate(dCost/dw_n) di mana dw_n, mewakili dw0, dw1, dw2,…, dw8. Tingkat pembelajaran biasanya nilai antara 0 dan 1. Saya akan menggunakan 0,5 Oleh karena itu bobot baru adalah:
new_w0 = old_w0 - 0.5(dCost/dw0) = 0.15 - 0.5(-0.0058) = 0.15 - (-0.0029) = 0.1529 new_w1 = old_w1 - 0.5(dCost/dw1) = 0.23 - 0.5(-0.0261) = 0.23 - (-0.01305) = 0.2431 new_w2 = old_w2 - 0.5(dCost/dw2) = 0.5 - 0.5(-0.000) = 0.5 - (0) = 0.5 new_w3 = old_w3 - 0.5(dCost/dw3) = 0.8 - 0.5(-0.000) = 0.8 - (0) = 0.8 new_w4 = old_w4 - 0.5(dCost/dw4) = 0.05 - 0.5(-0.0024) = 0.05 - (-0.0012) = 0.0512 new_w5 = old_w5 - 0.5(dCost/dw5) = -0.05 - 0.5(-0.0108) = -0.05 - (-0.0054) = -0.0446 new_w6 = old_w6 - 0.5(dCost/dw6) = 0.9 - 0.5(-0.0597) = 0.9 - (-0.029854) = 0.9299 new_w7 = old_w7 - 0.5(dCost/dw7) = -0.5 - 0.5(-0.0631) = -0.5 - (-0.03155) = -0.4685 new_w8 = old_w8 - 0.5(dCost/dw8) = 0.08 - 0.5(-0.0339) = 0.08 - (-0.01695) = 0.09695 new_b0 = old_b0 - 0.5(dCost/db0) = 0.5 - 0.5(-0.0029) = 0.5 - (-0.00145) = 0.50145 new_b1 = old_b1 - 0.5(dCost/db1) = 0.5 - 0.5(0.0316) = 0.5 - (0.0158) = 0.4842 new_b2 = old_b2 - 0.5(dCost/db2) = 0.5 - 0.5(-0.005) = 0.5 - (-0.0025) = 0.5025 new_b3 = old_b3 - 0.5(dCost/db3) = 0.2 - 0.5(-0.0631) = 0.2 - (-0.03155) = 0.23155
Sighhhhh!!!! Ini adalah proses yang membosankan dan benar-benar membutuhkan kesabaran di pihak saya. Saya senang bahwa saya bisa belajar ini. Dengan selesainya ini, saya yakin proses belajar saya (pun intended) menjadi jauh lebih mudah.