Keras: Perbedaan antara Kernel dan pengatur Aktivitas

89

Saya perhatikan bahwa weight_regularizer tidak lagi tersedia di Keras dan, sebagai gantinya, ada aktivitas dan pengatur kernel . Saya ingin tahu:

  • Apa perbedaan utama antara pengatur kernel dan pengatur aktivitas ?
  • Bisakah saya menggunakan activity_regularizer sebagai pengganti weight_regularizer ?
Simone
sumber

Jawaban:

87

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_regularizerPenggantian baru weight_regularizer- meskipun tidak begitu jelas dari dokumentasinya.

Dari definisi kernel_regularizer:

kernel_regularizer: Fungsi pengatur diterapkan ke kernelmatriks 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

Michele Tonutti
sumber
Apakah Anda benar-benar yakin tentang kernel_regularizerpenggantian itu weight_regularizer?
Simone
3
Saya menemukan banyak contoh menggunakan kernel_regularizer, tetapi tidak untuk activity_regularizer. Dapatkah Anda mengomentari kasus penggunaan activity_regularizer?
Milad M
1
Mengapa Anda ingin mengatur keluaran dari lapisan tersembunyi? Apakah karena alasan yang sama kita menormalkan input ke range (-1, 1) atau (0, 1). Itu untuk menjaga masukan ke lapisan berikutnya lebih kecil untuk membantu proses SGD?
Nagabhushan Baddi
1
@NagabhushanBaddi lihat jawaban ini: datasetcience.stackexchange.com/a/15195/32811
Michele Tonutti
1
@FinncentPrice Saya hanya bisa berasumsi dulu ada di sana dan sekarang sudah tidak lagi
Michele Tonutti
39

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.

Alex Deft
sumber
1
Benar-benar Intuitif.
Sarang Manjrekar