Les Xarxes Neuronals Recurrents (RNNs) són un tipus de xarxa neuronal especialment dissenyada per treballar amb dades seqüencials. A diferència de les xarxes neuronals tradicionals, les RNNs tenen connexions recurrents que permeten mantenir una "memòria" de les entrades anteriors, cosa que les fa ideals per a tasques com el processament de llenguatge natural, la traducció automàtica, la predicció de sèries temporals, entre d'altres.
Conceptes Clau
- Estructura d'una RNN
Una RNN es compon de nodes que estan connectats de manera que cada node no només rep l'entrada actual, sinó també la sortida del node anterior. Això permet que la xarxa tingui en compte la informació de les entrades anteriors.
- Funció d'Activació
Les RNNs utilitzen funcions d'activació com tanh o ReLU per introduir no linealitat en el model, permetent que la xarxa aprengui relacions complexes en les dades.
- Propagació cap endavant i cap enrere
- Propagació cap endavant: En una RNN, la sortida de cada node es calcula utilitzant l'entrada actual i la sortida del node anterior.
- Propagació cap enrere (Backpropagation Through Time - BPTT): L'entrenament d'una RNN implica ajustar els pesos de la xarxa per minimitzar l'error de predicció. Això es fa mitjançant una variant de la retropropagació anomenada BPTT, que té en compte les dependències temporals.
Exemples Pràctics
Exemple 1: Implementació d'una RNN Simple amb TensorFlow
import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import SimpleRNN, Dense # Definim el model model = Sequential() model.add(SimpleRNN(50, input_shape=(10, 1))) # 50 unitats recurrents, seqüències de longitud 10 amb 1 característica model.add(Dense(1)) # Capa de sortida # Compilació del model model.compile(optimizer='adam', loss='mse') # Resum del model model.summary()
Explicació del codi:
- Importació de llibreries: Importem TensorFlow i els mòduls necessaris per construir el model.
- Definició del model: Utilitzem
Sequential
per crear un model seqüencial. Afegim una capaSimpleRNN
amb 50 unitats recurrents i una capa d'entrada amb seqüències de longitud 10 i 1 característica. Finalment, afegim una capaDense
per a la sortida. - Compilació del model: Compilem el model utilitzant l'optimitzador 'adam' i la funció de pèrdua 'mse' (error quadràtic mitjà).
- Resum del model: Mostrem un resum del model per veure la seva estructura.
Exemple 2: Entrenament d'una RNN amb dades seqüencials
import numpy as np # Generació de dades d'exemple X_train = np.random.rand(1000, 10, 1) # 1000 mostres, seqüències de longitud 10, 1 característica y_train = np.random.rand(1000, 1) # 1000 etiquetes # Entrenament del model model.fit(X_train, y_train, epochs=10, batch_size=32)
Explicació del codi:
- Generació de dades d'exemple: Creem dades d'entrenament aleatòries amb 1000 mostres, seqüències de longitud 10 i 1 característica.
- Entrenament del model: Entrenem el model amb les dades generades durant 10 èpoques amb un batch size de 32.
Exercicis Pràctics
Exercici 1: Construir una RNN per predir sèries temporals
Descripció: Utilitza una RNN per predir els valors futurs d'una sèrie temporal sintètica.
Passos:
- Genera una sèrie temporal sintètica.
- Divideix les dades en seqüències d'entrada i sortides esperades.
- Construeix i entrena una RNN per predir els valors futurs.
Solució:
import numpy as np import tensorflow as tf from tensorflow.keras.models import Sequential from tensorflow.keras.layers import SimpleRNN, Dense # Generació de sèrie temporal sintètica time_steps = np.linspace(0, 100, 1000) data = np.sin(time_steps) # Preparació de les dades def create_sequences(data, seq_length): X, y = [], [] for i in range(len(data) - seq_length): X.append(data[i:i+seq_length]) y.append(data[i+seq_length]) return np.array(X), np.array(y) seq_length = 10 X, y = create_sequences(data, seq_length) X = X.reshape((X.shape[0], X.shape[1], 1)) # Definició del model model = Sequential() model.add(SimpleRNN(50, input_shape=(seq_length, 1))) model.add(Dense(1)) # Compilació del model model.compile(optimizer='adam', loss='mse') # Entrenament del model model.fit(X, y, epochs=20, batch_size=32) # Predicció predictions = model.predict(X)
Explicació del codi:
- Generació de sèrie temporal sintètica: Creem una sèrie temporal utilitzant la funció sinus.
- Preparació de les dades: Dividim la sèrie temporal en seqüències d'entrada i sortides esperades.
- Definició del model: Construïm una RNN amb 50 unitats recurrents i una capa de sortida.
- Compilació i entrenament del model: Compilem i entrenem el model amb les dades preparades.
- Predicció: Utilitzem el model entrenat per fer prediccions sobre les dades.
Resum
En aquesta secció, hem introduït les Xarxes Neuronals Recurrents (RNNs) i hem explorat la seva estructura i funcionament. Hem vist com implementar una RNN simple amb TensorFlow i com entrenar-la amb dades seqüencials. També hem proporcionat un exercici pràctic per reforçar els conceptes apresos. En el següent tema, aprofundirem en la construcció d'una RNN més complexa i explorarem les seves aplicacions en diferents àmbits.
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