tutorial example espaƱol conv2d classifier machine-learning keras keras-layer

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

Hace cinco meses, François Chollet proporcionó una solución al regularizador de actividad, que luego se incluyó en Keras 2.1.4

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.