machine-learning - example - keras tutorial pdf
Keras: diferencia entre Kernel y regularizadores de actividad (2)
El regularizador de actividad funciona como una función de la salida de la red, y se usa principalmente para regularizar unidades ocultas, mientras que weight_regularizer, como su nombre lo dice, funciona en los pesos, haciéndolos decaer.
Básicamente, puede expresar la pérdida de regularización en función de la salida (
activity_regularizer
) o de los pesos (
weight_regularizer
).
El nuevo
kernel_regularizer
reemplaza
weight_regularizer
, aunque no está muy claro en la documentación.
De la definición de
kernel_regularizer
:
kernel_regularizer: función de regularizador aplicada a la matriz de pesos del
kernel
(ver regularizador).
Y
activity_regularizer
:
activity_regularizer: función de regularizador aplicada a la salida de la capa (su "activación"). (Ver regularizador).
Edición importante : tenga en cuenta que hay un error en el regularizador de actividad que solo se corrigió en la versión 2.1.4 de Keras (al menos con el backend de Tensorflow). De hecho, en las versiones anteriores, la función de regularizador de actividad se aplica a la entrada de la capa, en lugar de aplicarse a la salida (las activaciones reales de la capa, según lo previsto). Así que tenga cuidado si está utilizando una versión anterior de Keras (antes de 2.1.4), la regularización de actividades probablemente no funcione como se esperaba.
Puedes ver el commit en GitHub
He notado que weight_regularizer ya no está disponible en Keras y que, en su lugar, hay actividad y regularizador de kernel . Me gustaría saber:
- ¿Cuáles son las principales diferencias entre el núcleo y los regularizadores de actividad ?
- ¿Puedo usar activity_regularizer en lugar de weight_regularizer ?
Esta respuesta llega un poco tarde, pero es útil para los futuros lectores. Entonces, la necesidad es la madre de la invención como dicen. Solo lo entendí cuando lo necesitaba. La respuesta anterior realmente no establece la diferencia porque ambos terminan afectando los pesos, entonces, ¿cuál es la diferencia entre castigar los pesos mismos o la salida de la capa? Aquí está la respuesta: Encontré un caso en el que los pesos de la red son pequeños y agradables, que van desde [-0.3] a [+0.3]. Entonces, realmente no puedo castigarlos, no hay nada de malo en ellos. Un regularizador de kernel es inútil. Sin embargo, la salida de la capa es ENORME, en cientos. Tenga en cuenta que la entrada a la capa también es pequeña, siempre menor que una. Pero esos pequeños valores interactúan con los pesos de tal manera que producen esos resultados masivos. Aquí me di cuenta de que lo que necesito es un regularizador de actividad, en lugar del regularizador de kernel. Con esto, estoy castigando la capa para esas salidas grandes, no me importa si los pesos en sí mismos son pequeños, solo quiero evitar que alcance ese estado porque esto satura mi activación sigmoidea y causa muchos otros problemas, como desaparecer gradiente y estancamiento.