Belajar dengan berlatih: Memulai Pembelajaran Mendalam

  • Whatsapp
Belajar dengan berlatih: Memulai Pembelajaran Mendalam
Belajar dengan berlatih Memulai Pembelajaran Mendalam

News.nextcloud.asia

Astaga! Terakhir kali menghabiskan banyak waktu untuk mempelajari topik tertentu, adalah ketika saya ingin mempelajari lebih lanjut tentang buffer overflows. Mempelajari propagasi balik yang merupakan komponen penting dari pembelajaran mendalam, benar-benar mengharuskan saya untuk menggali lebih dalam (pun intended). Posting ini mencerminkan pemahaman saya tentang propagasi balik. Harapan saya adalah dengan pemahaman ini, saya sekarang dapat bergerak maju dengan apa yang mudah-mudahan lebih mudah dipelajari (pun intended lagi ;-)) karena saya belajar lebih banyak tentang pembelajaran yang mendalam.

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.

Bagian pertama dari pengertian back propagation, adalah memahami proses feedforward. Saya percaya ini relatif mudah. Mari kita lihat ini dalam tindakan. Mari kita cari z0, lalu O1. Ini akan diikuti oleh z1 lalu O2, lalu saya membungkus lapisan tersembunyi dengan melakukan z2 dan O2. Perhatikan bahwa zx mewakili jumlah tertimbang, sedangkan Ox mewakili output setelah fungsi aktivasi diterapkan.

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
Dengan nilai z0 ditemukan, waktu untuk menghitung O0 dengan menerapkan fungsi aktivasi. Sepanjang posting ini, saya menggunakan fungsi aktivasi Sigmoid. Lihat Wikipedia atau casio atau perangkat lunak kepiting merah dalam referensi jika Anda tidak yakin bagaimana menghitung sigmoid.
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
Selanjutnya, bagaimana pengaruh w0, w1, w2, w3, w4 dan w5 terhadap biaya.

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.

Sampai jumpa di posting berikutnya, di mana saya mengkodekan ini hanya untuk mendapatkan pemahaman dasar.

Pos terkait

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *