TLDR
Untuk -langkah Contrastive Divergence, perbarui bias terlihat , berdasarkan vektor data menggunakan:nbjd
b( t )j←b( t - 1 )j+ η(dj-v^( n )j)
Perbarui bias tersembunyi menggunakan:hi
c(t)i←c(t−1)i+η(h^(0)i−h^(n)i)
Di mana dan adalah bias setelah memperbarui nomor t, adalah tingkat pembelajaran, adalah komponen dari vektor data, dan di mana dan adalah probabilitas unit tersembunyi dan unit terlihat menjadi aktif setelah RBM telah terpapar ke data dan dijalankan untuk langkah . Ini mengasumsikan ukuran minibatch 1; untuk ukuran minibatch praktis , rata-rata pembaruan yang diperoleh dari vektor data .b(t)jc(t)iηdjjh^(n)jv^(n)jijnkk
Penjelasan lengkap
Saya memiliki masalah yang sama. Cara yang baik untuk memikirkannya adalah bahwa bias itu sendiri hanyalah bobot. Seringkali dalam model jaringan saraf, bias suatu unit dimodelkan sebagai bobot tautan yang menghubungkan unit tersebut ke unit "selalu aktif", yaitu unit imajiner yang aktivasinya selalu 1.
Dalam kasus RBM, itu berarti bahwa Anda berpikir bahwa ada satu unit ekstra terlihat yang outputnya selalu 1. Unit terlihat ini menempel pada masing-masing unit tersembunyi (seperti halnya unit lain yang terlihat), dan bobot koneksi ini. adalah bias dari masing-masing unit tersembunyi. Demikian pula, bias dari unit terlihat dapat dimodelkan dengan membayangkan unit tersembunyi tambahan, yang nilainya selalu satu, dan yang menghubungkan ke masing-masing unit yang terlihat, dengan bobot koneksi ini menjadi bias yang terlihat.
Anda bahkan dapat mengimplementasikan RBM Anda dengan cara ini, tetapi saya tidak berpikir orang biasanya melakukan itu. Intinya adalah, dengan memikirkannya dengan cara ini, Anda dapat menggunakan (pada dasarnya) aturan pembaruan yang sama untuk bias seperti yang Anda lakukan untuk bobot, karena bias hanyalah bobot yang terhubung ke unit "selalu aktif".
Mari kita konkret. Saya akan menuliskan aturan pembaruan Contrastive Divergence -step yang biasa , mengabaikan regularisasi untuk kesederhanaan. Juga untuk kesederhanaan, aturan pembaruan ini adalah untuk "minibatch" dari 1 vektor data. Pembaruan untuk minibatch dengan vektor adalah pembaruan rata-rata di atas semua vektor . Aturan pembaruan adalah:nkk
W(t)i,j←W(t−1)i,j+η(h^(0)i⋅dj−h^(n)i⋅v(n)j)
mana:
- W(t)i,j adalah bobot yang menghubungkan unit yang terlihat ke unit tersembunyi setelah nomor pembaruanvjhit
- η adalah tingkat belajar
- h^(n)i adalah probabilitas unit tersembunyi aktif setelah mesin telah terkena vektor data dan berevolusi untuk langkah .
idn
- yang berarti bahwa hanyalah aktivasi unit tersembunyi sebagai respons langsung terhadap vektor datah^(0)ii
- dj adalah komponen dari vektor datajd
- v(n)j adalah keadaan unit yang terlihat begitu mesin telah terkena vektor data dan berevolusi untuk langkah .jn
(Beberapa orang menggunakan untuk mengindeks unit yang terlihat dan untuk mengindeks unit yang tersembunyi, tetapi masih menulis --- itu tidak masalah selama Anda mengalikan nilai yang benar bersama-sama.)ijWi,j
Berhati-hatilah untuk membedakan "keadaan" suatu unit, yang dilambangkan dengan atau , dan "aktivasi" suatu unit, dilambangkan atau . The state unit adalah 0 atau 1, sedangkan aktivasi adalah setiap bilangan real antara 0 dan 1. Jika aktivasi adalah 0,8, maka negara akan cenderung 1, tetapi 20% dari waktu itu akan menjadi 0.h(n)iv(n)jh^(n)iv^(n)i
Dengan memperlakukan bias sebagai bobot untuk unit "selalu aktif", Anda akan menemukan bahwa persamaan di atas menyederhanakan persamaan yang diberikan untuk pembaruan bias di bawah " TLDR ". Namun, ada sedikit perbedaan dalam pembaruan untuk bias yang terlihat: di sini aktivasi yang terlihat digunakan sebagai ganti keadaan . Aktivasi memiliki nilai yang diharapkan sama, tetapi memiliki varians lebih rendah dari negara, jadi ini mengurangi noise dalam sinyal pembelajaran. Lihat panduan ini untuk diskusi singkat tentang kapan menggunakan aktivasi alih-alih keadaan diinginkan.§3