Introducció als Autoencoders
Els autoencoders són un tipus de xarxa neuronal utilitzada per aprendre representacions eficients (codificacions) d'un conjunt de dades, típicament per a la reducció de dimensionalitat o per a la detecció d'anomalies. La idea principal darrere dels autoencoders és aprendre una representació comprimida (codificació) de les dades d'entrada i després reconstruir-les a partir d'aquesta codificació.
Components d'un Autoencoder
Un autoencoder consta de dues parts principals:
- Codificador (Encoder): Transforma l'entrada en una representació comprimida.
- Decodificador (Decoder): Reconstrueix l'entrada original a partir de la representació comprimida.
Arquitectura Bàsica
L'arquitectura bàsica d'un autoencoder es pot representar de la següent manera:
Entrada -> Codificador -> Codificació (Latent Space) -> Decodificador -> Sortida (Reconstructed Input)
Funció de Pèrdua
La funció de pèrdua en un autoencoder mesura la diferència entre l'entrada original i la sortida reconstruïda. La funció de pèrdua més comuna és l'error quadràtic mitjà (MSE):
\[ \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (x_i - \hat{x}_i)^2 \]
on \( x_i \) és l'entrada original i \( \hat{x}_i \) és la sortida reconstruïda.
Tipus d'Autoencoders
Autoencoders Clàssics
Els autoencoders clàssics tenen una estructura simètrica amb el mateix nombre de neurones a les capes d'entrada i sortida. La capa latent té menys neurones que les capes d'entrada i sortida, forçant així la xarxa a aprendre una representació comprimida.
Variational Autoencoders (VAE)
Els VAE són una variant dels autoencoders que imposen una distribució probabilística sobre la capa latent. Això permet generar noves dades similars a les dades d'entrenament.
Denoising Autoencoders
Els denoising autoencoders estan dissenyats per eliminar el soroll de les dades. S'entrenen amb dades sorolloses com a entrada i dades netes com a sortida.
Sparse Autoencoders
Els sparse autoencoders imposen una penalització de sparsity (escassetat) a la capa latent, forçant la xarxa a aprendre representacions on només unes poques unitats estan actives alhora.
Exemple Pràctic amb Keras
A continuació, es presenta un exemple pràctic d'un autoencoder simple utilitzant Keras:
import numpy as np from keras.layers import Input, Dense from keras.models import Model from keras.datasets import mnist # Carregar les dades de MNIST (x_train, _), (x_test, _) = mnist.load_data() x_train = x_train.astype('float32') / 255. x_test = x_test.astype('float32') / 255. x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:]))) x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:]))) # Dimensions de l'entrada input_dim = x_train.shape[1] encoding_dim = 32 # Dimensionalitat de la capa latent # Definir el model input_img = Input(shape=(input_dim,)) encoded = Dense(encoding_dim, activation='relu')(input_img) decoded = Dense(input_dim, activation='sigmoid')(encoded) # Crear l'autoencoder autoencoder = Model(input_img, decoded) # Compilar el model autoencoder.compile(optimizer='adam', loss='binary_crossentropy') # Entrenar l'autoencoder autoencoder.fit(x_train, x_train, epochs=50, batch_size=256, shuffle=True, validation_data=(x_test, x_test)) # Codificador per obtenir les representacions comprimides encoder = Model(input_img, encoded) # Decodificador per reconstruir les imatges encoded_input = Input(shape=(encoding_dim,)) decoder_layer = autoencoder.layers[-1] decoder = Model(encoded_input, decoder_layer(encoded_input)) # Codificar i decodificar algunes imatges encoded_imgs = encoder.predict(x_test) decoded_imgs = decoder.predict(encoded_imgs)
Explicació del Codi
- Carregar les dades: Es carreguen les dades de MNIST i es normalitzen.
- Definir el model: Es defineix l'arquitectura de l'autoencoder amb una capa d'entrada, una capa latent (codificador) i una capa de sortida (decodificador).
- Compilar el model: Es compila el model amb l'optimitzador 'adam' i la funció de pèrdua 'binary_crossentropy'.
- Entrenar l'autoencoder: Es realitza l'entrenament de l'autoencoder amb les dades d'entrenament.
- Codificador i Decodificador: Es defineixen models separats per al codificador i el decodificador per obtenir les representacions comprimides i reconstruir les imatges.
Exercici Pràctic
Objectiu
Crear un autoencoder per reduir la dimensionalitat de les dades de MNIST i visualitzar les representacions comprimides.
Passos
- Carregar les dades de MNIST.
- Definir l'arquitectura de l'autoencoder.
- Entrenar l'autoencoder.
- Visualitzar les representacions comprimides utilitzant tècniques de visualització com PCA o t-SNE.
Solució
import matplotlib.pyplot as plt from sklearn.manifold import TSNE # Visualitzar les representacions comprimides encoded_imgs = encoder.predict(x_test) # Utilitzar t-SNE per reduir la dimensionalitat a 2D tsne = TSNE(n_components=2, random_state=0) encoded_imgs_2d = tsne.fit_transform(encoded_imgs) # Visualitzar les representacions comprimides plt.figure(figsize=(6, 6)) plt.scatter(encoded_imgs_2d[:, 0], encoded_imgs_2d[:, 1], c=y_test, cmap='viridis') plt.colorbar() plt.show()
Explicació del Codi
- Visualitzar les representacions comprimides: Es codifiquen les imatges de test utilitzant el codificador.
- t-SNE: Es redueix la dimensionalitat de les representacions comprimides a 2D utilitzant t-SNE.
- Visualització: Es visualitzen les representacions comprimides en un gràfic de dispersió.
Conclusió
Els autoencoders són una eina poderosa per a la reducció de dimensionalitat i la detecció d'anomalies. Amb una comprensió clara de la seva arquitectura i funcionament, es poden aplicar a una àmplia varietat de problemes en el camp del deep learning.
Curs de Deep Learning
Mòdul 1: Introducció a Deep Learning
- Què és Deep Learning?
- Història i evolució del Deep Learning
- Aplicacions de Deep Learning
- Conceptes bàsics de xarxes neuronals
Mòdul 2: Fonaments de Xarxes Neuronals
- Perceptró i Perceptró Multicapa
- Funció d'activació
- Propagació cap endavant i cap enrere
- Optimització i funció de pèrdua
Mòdul 3: Xarxes Neuronals Convolucionals (CNN)
- Introducció a les CNN
- Capes convolutionals i de pooling
- Arquitectures populars de CNN
- Aplicacions de CNN en reconeixement d'imatges
Mòdul 4: Xarxes Neuronals Recurrentes (RNN)
- Introducció a les RNN
- LSTM i GRU
- Aplicacions de RNN en processament del llenguatge natural
- Seqüències i sèries temporals
Mòdul 5: Tècniques Avançades en Deep Learning
- Xarxes Generatives Adversarials (GAN)
- Autoencoders
- Transfer Learning
- Regularització i tècniques de millora
Mòdul 6: Eines i Frameworks
- Introducció a TensorFlow
- Introducció a PyTorch
- Comparació de frameworks
- Entorns de desenvolupament i recursos addicionals
Mòdul 7: Projectes Pràctics
- Classificació d'imatges amb CNN
- Generació de text amb RNN
- Detecció d'anomalies amb Autoencoders
- Creació d'una GAN per generació d'imatges