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:

  1. Porta d'entrada (Input Gate): Controla quanta informació de l'entrada actual ha de ser guardada a la cel·la de memòria.
  2. Porta d'oblit (Forget Gate): Decideix quanta informació de la cel·la de memòria anterior ha de ser oblidada.
  3. 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

  1. Importació de llibreries: Importem les llibreries necessàries de TensorFlow i Keras.
  2. Definició del model: Utilitzem Sequential per crear un model seqüencial.
  3. 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.
  4. Capa densa: Afegim una capa densa amb una unitat per a la sortida.
  5. Compilació del model: Compilem el model utilitzant l'optimitzador adam i la funció de pèrdua mse (error quadràtic mitjà).
  6. 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ó

  1. Generació de dades: Generem una seqüència de 1000 nombres aleatoris.
  2. 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.
  3. Definició del model: Definim un model LSTM similar a l'exemple anterior.
  4. Entrenament del model: Entrenem el model amb les dades preparades durant 200 èpoques.
  5. 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.

© Copyright 2024. Tots els drets reservats