Pengatur aktivitas bekerja sebagai fungsi dari keluaran jaringan, dan sebagian besar digunakan untuk mengatur unit tersembunyi, sedangkan pengatur_bobot, seperti namanya, bekerja pada bobot, membuatnya membusuk. Pada dasarnya Anda bisa mengekspresikan kerugian regularisasi sebagai fungsi dari output ( activity_regularizer
) atau weights ( weight_regularizer
).
kernel_regularizer
Penggantian baru weight_regularizer
- meskipun tidak begitu jelas dari dokumentasinya.
Dari definisi kernel_regularizer
:
kernel_regularizer: Fungsi pengatur diterapkan ke kernel
matriks bobot (lihat pengatur ).
Dan activity_regularizer
:
activity_regularizer: Fungsi pengatur diterapkan ke keluaran lapisan ("aktivasi" -nya). (lihat regulator).
Edit Penting : Perhatikan bahwa ada bug di activity_regularizer yang hanya diperbaiki di Keras versi 2.1.4 (setidaknya dengan backend Tensorflow). Memang, di versi yang lebih lama, fungsi pengatur aktivitas diterapkan ke masukan lapisan, alih-alih diterapkan ke keluaran (aktivasi lapisan yang sebenarnya, seperti yang diinginkan). Jadi berhati-hatilah jika Anda menggunakan Keras versi lama (sebelum 2.1.4), regularisasi aktivitas mungkin tidak berfungsi sebagaimana mestinya.
Anda dapat melihat komit di GitHub
Lima bulan lalu François Chollet memberikan perbaikan pada pengatur aktivitas, yang kemudian dimasukkan ke dalam Keras 2.1.4
kernel_regularizer
penggantian ituweight_regularizer
?Jawaban ini agak terlambat, tapi berguna untuk pembaca selanjutnya. Jadi, kebutuhan adalah ibu dari penemuan seperti yang mereka katakan. Saya hanya memahaminya saat saya membutuhkannya.
Jawaban di atas tidak benar-benar menyatakan perbedaannya karena keduanya akhirnya mempengaruhi bobot, jadi apa perbedaan antara menghukum bobot itu sendiri atau keluaran dari lapisan?
Inilah jawabannya: Saya menemukan kasus di mana bobot jaringnya kecil dan bagus, berkisar antara [-0,3] hingga [+0,3].
Jadi, saya benar-benar tidak bisa menghukum mereka, tidak ada yang salah dengan mereka. Regulator kernel tidak berguna. Namun, output dari lapisan ini BESAR, di tahun 100-an.
Perlu diingat bahwa masukan ke lapisan juga kecil, selalu kurang dari satu. Tetapi nilai-nilai kecil itu berinteraksi dengan bobot sedemikian rupa sehingga menghasilkan keluaran yang sangat besar. Di sini saya menyadari bahwa yang saya butuhkan adalah pengatur aktivitas, bukan pengatur kernel. Dengan ini, saya menghukum lapisan untuk output besar itu, saya tidak peduli jika bobotnya sendiri kecil, saya hanya ingin mencegahnya mencapai keadaan seperti itu karena ini menjenuhkan aktivasi sigmoid saya dan menyebabkan banyak masalah lain seperti menghilang gradien dan stagnasi.
sumber