Introducció
Les xarxes neuronals recurrents (RNNs) són molt útils per a tasques que impliquen dades seqüencials, com ara el processament de llenguatge natural o la predicció de sèries temporals. No obstant això, les RNNs tradicionals tenen dificultats per aprendre dependències a llarg termini a causa del problema del gradient que desapareix. Les unitats de memòria a llarg termini (LSTM) són una solució a aquest problema, ja que estan dissenyades per recordar informació durant períodes de temps més llargs.
Components d'una LSTM
Una LSTM està composta per diverses portes que regulen el flux d'informació a través de la cel·la de memòria. Les principals portes són:
- Porta d'entrada (Input Gate): Controla quanta informació de l'entrada actual ha de ser guardada a la cel·la de memòria.
- Porta d'oblit (Forget Gate): Decideix quanta informació de la cel·la de memòria anterior ha de ser oblidada.
- Porta de sortida (Output Gate): Determina quina part de la informació de la cel·la de memòria ha de ser utilitzada per a la sortida actual.
Arquitectura d'una LSTM
A continuació es mostra l'arquitectura d'una cel·la LSTM:
┌───────────────┐ │ Entrada │ └───────────────┘ │ ▼ ┌───────────────┐ │ Porta d'oblit │ └───────────────┘ │ ▼ ┌───────────────┐ │ Porta d'entrada│ └───────────────┘ │ ▼ ┌───────────────┐ │ Cel·la de │ │ memòria │ └───────────────┘ │ ▼ ┌───────────────┐ │ Porta de sortida│ └───────────────┘ │ ▼ ┌───────────────┐ │ Sortida │ └───────────────┘
Implementació d'una LSTM amb TensorFlow
A continuació es mostra un exemple pràctic de com implementar una LSTM utilitzant TensorFlow:
Exemple de codi
import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import LSTM, Dense # Definim el model model = Sequential() # Afegim una capa LSTM model.add(LSTM(50, activation='relu', input_shape=(100, 1))) # Afegim una capa densa per a la sortida model.add(Dense(1)) # Compilem el model model.compile(optimizer='adam', loss='mse') # Mostrem el resum del model model.summary()
Explicació del codi
- Importació de llibreries: Importem les llibreries necessàries de TensorFlow i Keras.
- Definició del model: Utilitzem
Sequential
per crear un model seqüencial. - Capa LSTM: Afegim una capa LSTM amb 50 unitats i una funció d'activació
relu
. L'entrada té una forma de(100, 1)
, on 100 és la longitud de la seqüència i 1 és el nombre de característiques. - Capa densa: Afegim una capa densa amb una unitat per a la sortida.
- Compilació del model: Compilem el model utilitzant l'optimitzador
adam
i la funció de pèrduamse
(error quadràtic mitjà). - Resum del model: Mostrem el resum del model per veure la seva estructura.
Exercici pràctic
Enunciat
Crea un model LSTM per predir la següent valor en una seqüència de nombres. Utilitza una seqüència de 50 nombres aleatoris com a dades d'entrenament.
Solució
import numpy as np # Generem dades aleatòries data = np.random.rand(1000, 1) # Preparem les dades per a l'entrenament X = [] y = [] seq_length = 50 for i in range(len(data) - seq_length): X.append(data[i:i+seq_length]) y.append(data[i+seq_length]) X = np.array(X) y = np.array(y) # Definim el model model = Sequential() model.add(LSTM(50, activation='relu', input_shape=(seq_length, 1))) model.add(Dense(1)) model.compile(optimizer='adam', loss='mse') # Entrenem el model model.fit(X, y, epochs=200, verbose=0) # Prediem el següent valor en la seqüència predicció = model.predict(X[-1].reshape(1, seq_length, 1)) print("Predicció del següent valor:", predicció)
Explicació de la solució
- Generació de dades: Generem una seqüència de 1000 nombres aleatoris.
- Preparació de les dades: Preparem les dades per a l'entrenament creant seqüències de 50 nombres i els seus valors següents com a etiquetes.
- Definició del model: Definim un model LSTM similar a l'exemple anterior.
- Entrenament del model: Entrenem el model amb les dades preparades durant 200 èpoques.
- Predicció: Utilitzem el model entrenat per predir el següent valor en la seqüència.
Conclusió
Les LSTM són una eina poderosa per treballar amb dades seqüencials, ja que poden recordar informació durant períodes de temps més llargs. En aquest tema, hem après sobre la seva arquitectura, com implementar-les amb TensorFlow i hem practicat amb un exemple pràctic. En el següent tema, explorarem les unitats recurrents amb porta (GRUs), una altra variant de les RNNs.
Curs de TensorFlow
Mòdul 1: Introducció a TensorFlow
- Què és TensorFlow?
- Configuració de TensorFlow
- Conceptes bàsics de TensorFlow
- Hola món amb TensorFlow
Mòdul 2: Conceptes bàsics de TensorFlow
Mòdul 3: Gestió de dades a TensorFlow
Mòdul 4: Construcció de xarxes neuronals
- Introducció a les xarxes neuronals
- Creació d'una xarxa neuronal simple
- Funcions d'activació
- Funcions de pèrdua i optimitzadors
Mòdul 5: Xarxes neuronals convolucionals (CNNs)
Mòdul 6: Xarxes neuronals recurrents (RNNs)
- Introducció a les RNNs
- Construcció d'una RNN
- Memòria a llarg termini (LSTM)
- Unitats recurrents amb porta (GRUs)
Mòdul 7: Tècniques avançades de TensorFlow
- Capes i models personalitzats
- TensorFlow Hub
- Aprenentatge per transferència
- Ajust de hiperparàmetres