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
