En aquest tema, aprendrem a construir una Xarxa Neuronal Recurrent (RNN) des de zero utilitzant PyTorch. Les RNNs són especialment útils per a dades seqüencials, com ara sèries temporals, text o seqüències d'ADN. A diferència de les xarxes neuronals tradicionals, les RNNs tenen connexions recurrents que permeten mantenir informació de passos anteriors en la seqüència.
Objectius
- Entendre la estructura bàsica d'una RNN.
- Implementar una RNN simple amb PyTorch.
- Entrenar la RNN amb un conjunt de dades seqüencials.
- Avaluar el rendiment de la RNN.
- Estructura Bàsica d'una RNN
Una RNN processa una seqüència d'entrades \( x_1, x_2, \ldots, x_T \) i produeix una seqüència de sortides \( h_1, h_2, \ldots, h_T \). Cada sortida \( h_t \) depèn de l'entrada actual \( x_t \) i de l'estat ocult anterior \( h_{t-1} \).
Fórmules Clau
- Estat ocult: \( h_t = \tanh(W_{xh} x_t + W_{hh} h_{t-1} + b_h) \)
- Sortida: \( y_t = W_{hy} h_t + b_y \)
On:
- \( W_{xh} \) és la matriu de pesos entre l'entrada i l'estat ocult.
- \( W_{hh} \) és la matriu de pesos entre l'estat ocult anterior i l'estat ocult actual.
- \( W_{hy} \) és la matriu de pesos entre l'estat ocult i la sortida.
- \( b_h \) i \( b_y \) són els vectors de biaix.
- Implementació d'una RNN Simple amb PyTorch
2.1. Importar Llibreries Necessàries
2.2. Definir la Classe de la RNN
class SimpleRNN(nn.Module):
def __init__(self, input_size, hidden_size, output_size):
super(SimpleRNN, self).__init__()
self.hidden_size = hidden_size
self.i2h = nn.Linear(input_size + hidden_size, hidden_size)
self.i2o = nn.Linear(hidden_size, output_size)
self.softmax = nn.LogSoftmax(dim=1)
def forward(self, input, hidden):
combined = torch.cat((input, hidden), 1)
hidden = self.i2h(combined)
output = self.i2o(hidden)
output = self.softmax(output)
return output, hidden
def initHidden(self):
return torch.zeros(1, self.hidden_size)2.3. Inicialitzar la RNN
- Entrenament de la RNN
3.1. Definir la Funció de Pèrdua i l'Optimitzador
3.2. Funció d'Entrenament
def train(input_tensor, target_tensor):
hidden = rnn.initHidden()
rnn.zero_grad()
for i in range(input_tensor.size(0)):
output, hidden = rnn(input_tensor[i], hidden)
loss = criterion(output, target_tensor)
loss.backward()
optimizer.step()
return output, loss.item()3.3. Entrenar la RNN amb un Conjunt de Dades Seqüencials
n_iters = 1000
for iter in range(1, n_iters + 1):
input_tensor = torch.randn(5, 10) # Exemple de tensor d'entrada
target_tensor = torch.tensor([1]) # Exemple de tensor objectiu
output, loss = train(input_tensor, target_tensor)
if iter % 100 == 0:
print(f'Iteració {iter} - Pèrdua: {loss:.4f}')
- Avaluació del Rendiment de la RNN
4.1. Funció de Predicció
def predict(input_tensor):
hidden = rnn.initHidden()
for i in range(input_tensor.size(0)):
output, hidden = rnn(input_tensor[i], hidden)
return output4.2. Avaluar amb un Exemple
input_tensor = torch.randn(5, 10) # Exemple de tensor d'entrada output = predict(input_tensor) print(output)
Resum
En aquest tema, hem après a construir una RNN des de zero utilitzant PyTorch. Hem cobert la definició de la classe de la RNN, la inicialització, l'entrenament i l'avaluació. Les RNNs són eines poderoses per treballar amb dades seqüencials i, amb PyTorch, podem implementar-les de manera eficient i flexible.
En el següent tema, explorarem les Xarxes de Memòria a Llarg i Curt Termini (LSTM), una variant de les RNNs que aborda alguns dels seus problemes més comuns, com el gradient vanishing.
PyTorch: De Principiant a Avançat
Mòdul 1: Introducció a PyTorch
- Què és PyTorch?
- Configuració de l'Entorn
- Operacions Bàsiques amb Tensor
- Autograd: Diferenciació Automàtica
Mòdul 2: Construcció de Xarxes Neuronals
- Introducció a les Xarxes Neuronals
- Creació d'una Xarxa Neuronal Simple
- Funcions d'Activació
- Funcions de Pèrdua i Optimització
Mòdul 3: Entrenament de Xarxes Neuronals
- Càrrega i Preprocessament de Dades
- Bucle d'Entrenament
- Validació i Prova
- Desament i Càrrega de Models
Mòdul 4: Xarxes Neuronals Convolucionals (CNNs)
- Introducció a les CNNs
- Construcció d'una CNN des de Zero
- Aprenentatge per Transferència amb Models Preentrenats
- Ajust Fi de les CNNs
Mòdul 5: Xarxes Neuronals Recurrents (RNNs)
- Introducció a les RNNs
- Construcció d'una RNN des de Zero
- Xarxes de Memòria a Llarg i Curt Termini (LSTM)
- Unitats Recurrents Gated (GRUs)
Mòdul 6: Temes Avançats
- Xarxes Generatives Adversàries (GANs)
- Aprenentatge per Reforç amb PyTorch
- Desplegament de Models PyTorch
- Optimització del Rendiment
