Un uso típico de una red neuronal es un caso de aprendizaje supervisado. Implica datos de entrenamiento que contienen una etiqueta de salida . La red neuronal intenta aprender el mapeo de la entrada dada a la etiqueta de salida dada. Pero, ¿qué sucede si la etiqueta de salida se reemplaza por el propio vector de entrada? Luego, la red intentará encontrar el mapeo de la entrada a sí misma. Esta sería la función de identidad que es un mapeo trivial. Pero si a la red no se le permite simplemente copiar la entrada, entonces la red se verá obligada a capturar solo las características más destacadas.. Esta restricción abre un campo diferente de aplicaciones para las Redes Neuronales que se desconocía. Las aplicaciones principales son la reducción de la dimensionalidad y la compresión de datos específicos. La red primero se entrena en la entrada dada. La red intenta reconstruir la entrada dada a partir de las características que recogió y da una aproximación a la entrada como salida. El paso de entrenamiento implica el cálculo del error y la propagación hacia atrás del error. La arquitectura típica de un codificador automático se asemeja a un cuello de botella. La estructura esquemática de un autoencoder es la siguiente:
La parte del codificador de la red se utiliza para codificar y, a veces, incluso para fines de compresión de datos, aunque no es muy eficaz en comparación con otras técnicas generales de compresión como JPEG . La codificación se logra mediante la parte del codificador de la red que tiene un número decreciente de unidades ocultas en cada capa. Por lo tanto, esta parte se ve obligada a recoger solo las características más significativas y representativas de los datos. La segunda mitad de la red realiza la función de decodificación . Esta parte tiene un número creciente de unidades ocultas en cada capa y, por lo tanto, intenta reconstruir la entrada original a partir de los datos codificados. Por lo tanto, los codificadores automáticos son una técnica de aprendizaje no supervisada .
Ejemplo: vea el siguiente código, en los datos de entrenamiento del codificador automático, se ajusta a sí mismo. Por eso, en lugar de ajustar X_train a Y_train, hemos usado X_train en ambos lugares.
Python3
autoencoder.fit(X_train, X_train, epochs=200)
Entrenamiento de un codificador automático para la compresión de datos: Para un procedimiento de compresión de datos, el aspecto más importante de la compresión es la confiabilidad de la reconstrucción de los datos comprimidos. Este requisito dicta la estructura del codificador automático como un cuello de botella. Paso 1: Codificación de los datos de entrada El codificador automático primero intenta codificar los datos utilizando los pesos y sesgos inicializados.
Paso 2: Decodificación de los datos de entrada El codificador automático intenta reconstruir la entrada original a partir de los datos codificados para probar la confiabilidad de la codificación.
Paso 3: retropropagación del error Después de la reconstrucción, se calcula la función de pérdida para determinar la fiabilidad de la codificación. El error generado se propaga hacia atrás.
El proceso de formación descrito anteriormente se repite varias veces hasta que se alcanza un nivel aceptable de reconstrucción.
Después del proceso de entrenamiento, solo se retiene la parte del codificador del codificador automático para codificar un tipo de datos similar al utilizado en el proceso de entrenamiento. Las diferentes formas de restringir la red son: –
- Mantenga pequeñas capas ocultas: si el tamaño de cada capa oculta se mantiene lo más pequeño posible, la red se verá obligada a recoger solo las características representativas de los datos, codificando así los datos.
- Regularización: en este método, se agrega un término de pérdida a la función de costo que alienta a la red a capacitarse de formas distintas a copiar la entrada.
- Eliminación de ruido: otra forma de restringir la red es agregar ruido a la entrada y enseñarle a la red cómo eliminar el ruido de los datos.
- Ajuste de las funciones de activación: este método implica cambiar las funciones de activación de varios Nodes para que la mayoría de los Nodes estén inactivos , lo que reduce efectivamente el tamaño de las capas ocultas.
Las diferentes variaciones de codificadores automáticos son: –
- Codificador automático de eliminación de ruido: este tipo de codificador automático funciona en una entrada parcialmente corrupta y entrena para recuperar la imagen original sin distorsiones. Como se mencionó anteriormente, este método es una forma efectiva de impedir que la red simplemente copie la entrada.
- Codificador automático disperso: este tipo de codificador automático generalmente contiene más unidades ocultas que la entrada, pero solo unas pocas pueden estar activas a la vez. Esta propiedad se denomina dispersión de la red. La escasez de la red se puede controlar ya sea poniendo a cero manualmente las unidades ocultas requeridas, ajustando las funciones de activación o agregando un término de pérdida a la función de costo.
- Codificador automático variacional: este tipo de codificador automático hace suposiciones sólidas sobre la distribución de variables latentes y utiliza el estimador bayesiano variacional de gradiente estocástico en el proceso de entrenamiento. Asume que los datos son generados por un Modelo Gráfico Dirigido y trata de aprender una aproximación a la propiedad condicional donde y son los parámetros del codificador y del decodificador respectivamente.
A continuación se muestra el código de intuición básico de cómo construir el modelo de codificador automático y ajustar X_train a sí mismo.
Python3
#build the simple encoder-decoder model. #Notice the number of neurons in each Dense layer. #The model will contract in the encoder then expand in the decoder. encoder = keras.models.Sequential([keras.layers.Dense(2, input_shape=[3])]) decoder = keras.models.Sequential([keras.layers.Dense(3, input_shape=[2])]) autoencoder = keras.models.Sequential([encoder, decoder]) #compile the model autoencoder.compile(loss="mse", optimizer=keras.optimizers.SGD(lr=0.1)) #train the model history = autoencoder.fit(X_train, X_train, epochs=200) # encode the data codings = encoder.predict(X_train) # decode the encoder output decodings = decoder.predict(codings)
Publicación traducida automáticamente
Artículo escrito por AlindGupta y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA