Función de pérdida para autoencoders


21

Estoy experimentando un poco de autoencoders, y con tensorflow creé un modelo que intenta reconstruir el conjunto de datos MNIST.

Mi red es muy simple: X, e1, e2, d1, Y, donde e1 y e2 son capas de codificación, d2 e Y son capas de decodificación (e Y es la salida reconstruida).

X tiene 784 unidades, e1 tiene 100, e2 tiene 50, d1 tiene 100 nuevamente e Y 784 nuevamente.

Estoy usando sigmoides como funciones de activación para las capas e1, e2, d1 e Y. Las entradas están en [0,1] y también deberían ser las salidas.

Bueno, intenté usar la entropía cruzada como función de pérdida, pero el resultado siempre fue un blob, y noté que los pesos de X a e1 siempre convergerían en una matriz de valor cero.

Por otro lado, el uso de errores cuadráticos medios como función de pérdida produciría un resultado decente, y ahora puedo reconstruir las entradas.

¿Por qué es así? Pensé que podía interpretar los valores como probabilidades y, por lo tanto, usar entropía cruzada, pero obviamente estoy haciendo algo mal.


1
Usted mencionó el uso de sigmoid para las funciones de activación en las primeras capas. Aquellos exhiben "saturación", como se explica más completamente en las Notas CS231n . ¿Has probado otra función de activación como ReLU?
Jerry

No puedo recordar en este momento si probé otro, pero gracias por compartir!
AkiRoss

Respuestas:


17

Creo que la mejor respuesta a esto es que la función de pérdida de entropía cruzada simplemente no es adecuada para esta tarea en particular.

Al adoptar este enfoque, básicamente está diciendo que los datos verdaderos de MNIST son binarios, y sus intensidades de píxeles representan la probabilidad de que cada píxel esté 'activado'. Pero sabemos que este no es realmente el caso. La incorrección de esta suposición implícita nos está causando problemas.

También podemos ver la función de costo y ver por qué podría ser inapropiado. Digamos que nuestro valor de píxel objetivo es 0.8. Si trazamos la pérdida de MSE y la pérdida de entropía cruzada-[(objetivo)Iniciar sesión(predicción)+(1-objetivo)Iniciar sesión(1-predicción)] (normalizando esto para que su mínimo sea cero), obtenemos:

entropía cruzada vs. pérdida mse

Podemos ver que la pérdida de entropía cruzada es asimétrica. ¿Por qué querríamos esto? ¿Es realmente peor predecir 0.9 para este 0.8 píxeles que predecir 0.7? Yo diría que es mejor, si acaso.

Probablemente podríamos entrar en más detalles y descubrir por qué esto conduce a los blobs específicos que está viendo. Me arriesgaría a adivinar que se debe a que las intensidades de píxeles son superiores a 0,5 en promedio en la región donde está viendo la burbuja. Pero, en general, este es un caso de los supuestos de modelado implícito que ha hecho que son inapropiados para los datos.

¡Espero que ayude!


3
¿Qué función de pérdida es adecuada si la entrada está flotando entre 0 y 1?
Jemshit Iskenderov

Pérdida de entropía cruzada binaria
torayeff
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.