Aula 18 - Redes Recorrentes (RNNs, LSTMs) e Sequências ⏳
Objetivo Pedagógico
Objetivo: Processamento de dados sequenciais e séries temporais com Redes Neurais Recorrentes (RNNs), células LSTM (Long Short-Term Memory) com portas de esquecimento e GRUs.
📑 1. Fundamentos Teóricos & Análise Técnica
Dados com dependência temporal ou sequencial (como linguagem natural, áudio, séries temporais financeiras e telemetria de sensores) violam a premissa fundamental de amostras independentes e identicamente distribuídas (i.i.d.). O processamento exige redes com Memória de Estado Oculto (Hidden State).
- Redes Recorrentes Clássicas (Vanilla RNNs): Mantêm um vetor de estado oculto que é atualizado a cada passo temporal \(t\): \(h_t = \tanh(W_{hh} h_{t-1} + W_{xh} x_t)\). Contudo, ao retropropagar erros por muitos passos temporais (Backpropagation Through Time - BPTT), sofrem severamente com o Desvanecimento do Gradiente (Vanishing Gradient), esquecendo contextos de longo prazo.
- Células LSTM (Hochreiter & Schmidhuber, 1997): Introduzem uma rodovia de memória protegida (Cell State \(C_t\)) controlada por três portas lógicas especializadas:
- Forget Gate (\(f_t\)): Decide quais informações antigas devem ser descartadas.
- Input Gate (\(i_t\)): Decide quais novos dados devem ser armazenados.
- Output Gate (\(o_t\)): Decide qual fatia da memória deve ser exposta no estado oculto de saída.
📐 Arquitetura Conceitual & Diagrama de Fluxo
graph TD
subgraph LSTMCell ["Célula LSTM em Tempo t"]
Ht1["Estado Oculto Anterior (h_t-1)"] --> Gates
Xt["Entrada Atual (x_t)"] --> Gates
Ct1["Estado de Célula Anterior (C_t-1)"] --> AddMemory
Gates["Portas de Controle:<br>1. Forget Gate (Sigmoid)<br>2. Input Gate (Sigmoid + Tanh)<br>3. Output Gate (Sigmoid)"] --> AddMemory["Multiplicações e Somas Ponto a Ponto"]
AddMemory --> Ct["Novo Estado de Célula (C_t)"]
AddMemory --> Ht["Novo Estado Oculto (h_t)"]
end
style LSTMCell fill:#e3f2fd,stroke:#1565c0
style Gates fill:#fff3e0,stroke:#e65100
style Ct fill:#e8f5e9,stroke:#2e7d32
style Ht fill:#f3e5f5,stroke:#7b1fa2 🔍 Pilares e Diretrizes Técnicas
Nesta unidade, aprofundamos os seguintes conceitos fundamentais: - Preservação de Gradientes de Longo Prazo: A adição linear no estado de célula permite que o gradiente flua sem amortecimento exponencial. - Funções de Ativação Sigmoid e Tanh: A sigmoid atua como válvula de 0 (bloqueia tudo) a 1 (permite passagem integral). - Bidirecionalidade (Bi-LSTM): Processamento da sequência do início ao fim e do fim ao início simultaneamente. - Gated Recurrent Units (GRU): Variação mais enxuta da LSTM que funde o estado de célula com o estado oculto, com menor número de parâmetros.
🛠️ 2. Implementação Prática em Deep Learning, Processamento Sequencial e NLP
Abaixo está a implementação técnica de referência, estruturada com padrões de engenharia de software e foco em robustez:
// lstm_timeseries.py (Modelo LSTM para Séries Temporais em PyTorch)
import torch
import torch.nn as nn
class TimeSeriesLSTM(nn.Module):
def __init__(self, input_dim: int, hidden_dim: int, num_layers: int, output_dim: int):
super().__init__()
self.lstm = nn.LSTM(
input_size=input_dim,
hidden_size=hidden_dim,
num_layers=num_layers,
batch_first=True,
dropout=0.2
)
self.fc = nn.Linear(hidden_dim, output_dim)
def forward(self, x: torch.Tensor) -> torch.Tensor:
# x shape: (batch_size, sequence_length, input_dim)
lstm_out, (hn, cn) = self.lstm(x)
# Pega a ativação do último passo da sequência
last_step = lstm_out[:, -1, :]
return self.fc(last_step)
# Exemplo: Lote de 16 séries com 30 dias de histórico e 5 métricas por dia
batch = torch.randn(16, 30, 5)
model = TimeSeriesLSTM(input_dim=5, hidden_dim=64, num_layers=2, output_dim=1)
prediction = model(batch)
print("Formato da Previsão:", prediction.shape) # (16, 1)
💡 Análise Passo a Passo do Código
- Parâmetro batch_first=True: Padroniza a entrada como
(Batch, Seq_Len, Features), facilitando a integração com loaders. - Extração do Último Passo Temporal:
lstm_out[:, -1, :]captura a síntese de todo o histórico acumulado ao longo da janela temporal. - Camada Linear Final: Mapeia a representação oculta de 64 dimensões para o valor escalar previsto da série.
🎯 3. Próximos Passos & Sequência Didática
-
Slides da Aula
-
Quiz de Fixação
-
Exercícios Práticos
-
Desafio de Projeto