Saltar al contenido

Codificador automático: ¿Qué es? ¿Y para qué se utiliza? (Parte 1)

septiembre 23, 2021
0i350y8TXIVUHlptb

Codificador automático: ¿Qué es? ¿Y para qué se utiliza? (Parte 1)

Una introducción suave al codificador automático y algunos de sus casos de uso comunes con código Python

Will Badr

22 de abril de 2019·6 min de lectura

Fondo:

Autoencoder es una red neuronal artificial no supervisada que aprende a comprimir y codificar datos de manera eficiente y luego aprende a reconstruir los datos. de la representación codificada reducida para una representación lo más cercana posible a la entrada original.

Autoencoder, por diseño, reduce las dimensiones de los datos al aprender a ignorar el ruido en los datos.

A continuación, se muestra un ejemplo de la imagen de entrada / salida del conjunto de datos MNIST a un codificador automático.

1*P7aFcjaMGLwzTvjW3sD 5Q

Autoencoder para MNIST

Componentes del codificador automático:

Autoencoders consta de 4 partes principales:

1- Codificador: En el cual tEl modelo aprende cómo reducir las dimensiones de entrada y comprimir los datos de entrada en una representación codificada.

2- Embotellamiento: que es la capa que contiene la representación comprimida de los datos de entrada. Estas son las dimensiones más bajas posibles de los datos de entrada.

3- Descifrador: En el que el modelo aprende a reconstruir los datos a partir de la representación codificada para que estén lo más cerca posible de la entrada original.

4- Reconstrucción Pérdida: Este es el método que mide qué tan bien está funcionando el decodificador y qué tan cerca está la salida de la entrada original.

Luego, el entrenamiento implica el uso de retropropagación para minimizar la pérdida de reconstrucción de la red.

¡Debe preguntarse por qué entrenaría una red neuronal solo para generar una imagen o datos que sean exactamente iguales a la entrada! Este artículo cubrirá los casos de uso más comunes de Autoencoder. Empecemos:

Arquitectura del codificador automático:

La arquitectura de red para codificadores automáticos puede variar entre una red FeedForward simple, una red LSTM o una red neuronal convolucional según el caso de uso. Exploraremos algunas de esas arquitecturas en las próximas líneas nuevas.

1- Autoencoder para detección de anomalías:

Hay muchas formas y técnicas para detectar anomalías y valores atípicos. He cubierto este tema en una publicación diferente a continuación:

5 formas de detectar valores atípicos que todo científico de datos debería conocer (código Python)

La detección de anomalías es fundamental para cualquier negocio, ya sea identificando fallas o siendo proactivo. Este artículo analiza …

haciadatascience.com

Sin embargo, si ha correlacionado los datos de entrada, el método del codificador automático funcionará muy bien porque la operación de codificación se basa en las funciones correlacionadas para comprimir los datos.

Digamos que hemos entrenado un codificador automático en el conjunto de datos MNIST. Usando una red neuronal FeedForward simple, podemos lograr esto construyendo una red simple de 6 capas como se muestra a continuación:

El resultado del código anterior es:

Train on 60000 samples, validate on 10000 samples
Epoch 1/10
60000/60000 [==============================] - 6s 103us/step - loss: 0.0757 - val_loss: 0.0505
Epoch 2/10
60000/60000 [==============================] - 6s 96us/step - loss: 0.0420 - val_loss: 0.0355
Epoch 3/10
60000/60000 [==============================] - 6s 95us/step - loss: 0.0331 - val_loss: 0.0301
Epoch 4/10
60000/60000 [==============================] - 6s 96us/step - loss: 0.0287 - val_loss: 0.0266
Epoch 5/10
60000/60000 [==============================] - 6s 95us/step - loss: 0.0259 - val_loss: 0.0244
Epoch 6/10
60000/60000 [==============================] - 6s 96us/step - loss: 0.0240 - val_loss: 0.0228
Epoch 7/10
60000/60000 [==============================] - 6s 95us/step - loss: 0.0226 - val_loss: 0.0216
Epoch 8/10
60000/60000 [==============================] - 6s 97us/step - loss: 0.0215 - val_loss: 0.0207
Epoch 9/10
60000/60000 [==============================] - 6s 96us/step - loss: 0.0207 - val_loss: 0.0199
Epoch 10/10
60000/60000 [==============================] - 6s 96us/step - loss: 0.0200 - val_loss: 0.0193

Como puede ver en la salida, la última pérdida / error de reconstrucción para el conjunto de validación es 0.0193, lo cual es excelente. Ahora, si paso cualquier imagen normal del conjunto de datos MNIST, la pérdida de reconstrucción será muy baja (

Observe que en el código anterior, puede usar solo la parte del codificador para comprimir algunos datos o imágenes y también puede usar solo la parte del decodificador para descomprimir los datos cargando las capas del decodificador.

Ahora, hagamos una detección de anomalías. El siguiente código usa dos imágenes diferentes para predecir la puntuación de anomalía (error de reconstrucción) utilizando la red de codificador automático que entrenamos anteriormente. la primera imagen es del MNIST y el resultado es 5.43209. Esto significa que la imagen no es una anomalía. La segunda imagen que utilicé es una imagen completamente aleatoria que no pertenece al conjunto de datos de entrenamiento y los resultados fueron: 6789.4907. Este alto error significa que la imagen es una anomalía. El mismo concepto se aplica a cualquier tipo de conjunto de datos.

2- Reducción de ruido de imagen:

close