Deep Reinforcement Learning
Visão geral
Aprendizado por Reforço Profundo (Deep Reinforcement Learning, Deep RL) combina Conceitos de Aprendizado por Reforço (Reinforcement Learning Concepts) com Redes Neurais (Neural Networks): um agente aprende ao interagir com um ambiente e usa redes neurais profundas (deep neural networks) para aproximar funções de valor (value functions) (quão bons são estados/ações) e/ou políticas (policies) (como agir). Isso torna o aprendizado por reforço prático em cenários de alta dimensionalidade (high-dimensional), como imagens, fluxos brutos de sensores ou grandes espaços contínuos de controle, onde métodos tabulares (tabular methods) são impossíveis.
O aprendizado por reforço clássico (não profundo) frequentemente assume espaços de estado pequenos e discretos e usa tabelas para (V(s)) ou (Q(s,a)). O aprendizado por reforço profundo substitui essas tabelas por redes neurais treinadas via Descida do Gradiente (Gradient Descent) e Retropropagação (Backpropagation), permitindo:
- Observações de alta dimensionalidade (por exemplo, pixels do Atari, quadros de câmera em robótica)
- Ações contínuas (por exemplo, comandos de torque para articulações de robôs)
- Generalização entre estados (nem todo estado precisa ser visitado exatamente)
Ao mesmo tempo, a aproximação de função profunda introduz novos desafios de estabilidade e exploração (stability and exploration) (por exemplo, divergência, sensibilidade a hiperparâmetros, ineficiência amostral).
Fundamentos: MDPs, funções de valor e aproximação de função
O aprendizado por reforço profundo ainda se apoia no arcabouço padrão de Processo de Decisão de Markov (Markov Decision Process, MDP):
- Estados (s \in \mathcal{S})
- Ações (a \in \mathcal{A})
- Dinâmica de transição (P(s' \mid s,a))
- Recompensa (r = R(s,a))
- Fator de desconto (\gamma \in [0,1))
Uma política (\pi(a \mid s)) define a seleção de ações. O objetivo é maximizar o retorno esperado (expected return): [ J(\pi) = \mathbb{E}\left[\sum_{t=0}^\infty \gamma^t r_t\right] ]
Funções-chave:
- Valor de estado: (V^\pi(s) = \mathbb{E}[G_t \mid s_t=s])
- Valor de ação: (Q^\pi(s,a) = \mathbb{E}[G_t \mid s_t=s, a_t=a])
O aprendizado por reforço profundo usa redes neurais como:
- (Q_\theta(s,a)): uma rede de valor com parâmetros (\theta)
- (\pi_\theta(a \mid s)): uma rede de política
- (V_\theta(s)): uma linha de base de valor (value baseline) (frequentemente usada em métodos ator-crítico)
O sinal central de aprendizado frequentemente vem das equações de Bellman (Bellman equations), por exemplo, para valores ótimos de ação: [ Q^(s,a) = \mathbb{E}\left[r + \gamma \max_{a'} Q^(s',a')\right] ] O aprendizado por reforço profundo tenta ajustar redes para satisfazer essas relações usando transições amostradas.
Para uma base mais ampla, veja Métodos de Aprendizado por Reforço.
Por que o aprendizado por reforço profundo é mais difícil do que “aprendizado supervisionado + recompensas”
O aprendizado por reforço profundo difere do aprendizado supervisionado (supervised learning) de várias maneiras:
- Dados não i.i.d.: transições consecutivas são correlacionadas.
- Alvos não estacionários (non-stationary targets): a política do agente muda, então a distribuição de dados muda.
- Bootstrap (bootstrapping): muitos métodos aprendem a partir de estimativas de outras quantidades aprendidas.
- Atribuição de crédito atrasada (delayed credit assignment): ações afetam recompensas muito mais tarde.
Uma lente comum é a “tríade mortal (deadly triad)”: combinar (1) aproximação de função, (2) bootstrap e (3) aprendizado fora da política (off-policy) pode causar instabilidade ou divergência.
Famílias centrais de algoritmos
Métodos baseados em valor: DQN e descendentes
Redes Q Profundas (Deep Q-Networks, DQN) aproximam (Q(s,a)) com uma rede neural (Q_\theta(s,a)). Para ações discretas, a seleção de ação é tipicamente: [ a_t = \arg\max_a Q_\theta(s_t,a) ] com exploração (por exemplo, (\epsilon)-gulosa ((\epsilon)-greedy)).
O DQN minimiza a perda de diferença temporal (temporal-difference, TD): [ \mathcal{L}(\theta)=\mathbb{E}\left[\left(Q_\theta(s,a) - y\right)^2\right], \quad y = r + \gamma \max_{a'} Q_{\theta^-}(s',a') ] onde (Q_{\theta^-}) é uma rede-alvo (target network) (uma cópia atrasada de (Q_\theta)).
Técnicas-chave do DQN
- Replay de experiência (experience replay): armazenar transições ((s,a,r,s',done)) e treinar em minilotes (minibatches) aleatórios para reduzir correlação e melhorar o reúso de amostras.
- Redes-alvo: estabilizar o aprendizado usando uma rede atualizada lentamente para calcular alvos.
- Corte de recompensas (reward clipping) (estilo Atari) e pré-processamento de observações (observation preprocessing) (empilhamento de quadros, conversão para tons de cinza) podem melhorar a estabilidade em certos domínios.
Melhorias comuns do DQN
Muitas variantes de DQN em nível de produção combinam várias das seguintes:
- DQN Duplo (Double DQN): reduz superestimação ao desacoplar seleção e avaliação de ações.
- Redes de duelo (dueling networks): estimam separadamente valor de estado e vantagem, melhorando a eficiência.
- Replay priorizado (prioritized replay): amostra transições “surpreendentes” com mais frequência.
- Aprendizado por reforço distribucional (distributional RL): aprende uma distribuição sobre retornos (frequentemente melhora o desempenho).
- Retornos multi-passos (multi-step returns): mistura bootstrap com alvos de horizonte mais longo.
Um pacote bem conhecido dessas ideias é o “DQN Rainbow (Rainbow DQN)” (uma combinação de várias melhorias).
Onde o DQN se encaixa (e onde não)
- Funciona melhor com espaços de ação discretos (Atari, controle simples).
- Tem dificuldade com ações contínuas (requer discretização ou outras famílias de algoritmos).
Métodos de gradiente de política: otimização direta da política
Métodos de gradiente de política (policy gradient methods) otimizam diretamente (J(\pi_\theta)) sem precisar de (\max_a Q(s,a)). O gradiente básico do REINFORCE é: [ \nabla_\theta J(\theta) = \mathbb{E}\left[\nabla_\theta \log \pi_\theta(a\mid s), G_t\right] ] Na prática, o REINFORCE tem alta variância, então normalmente é aumentado com uma linha de base (baseline), frequentemente (V_\phi(s)), produzindo a vantagem (advantage): [ A(s,a) = Q(s,a) - V(s) ] Isso leva naturalmente a métodos ator-crítico (actor-critic).
Gradientes de política são particularmente convenientes para:
- Ações contínuas (por exemplo, políticas Gaussianas)
- Políticas estocásticas (stochastic policies) (úteis para exploração e robustez)
Métodos ator-crítico: o “cavalo de batalha” moderno
Ator-crítico combina:
- Ator (actor): uma política (\pi_\theta(a \mid s))
- Crítico (critic): uma função de valor (V_\phi(s)) ou (Q_\phi(s,a)) fornecendo sinais de aprendizado
O crítico reduz a variância ao substituir retornos de Monte Carlo por estimativas com bootstrap (e introduz algum viés).
Famílias importantes de ator-crítico incluem:
- A2C/A3C: ator-crítico com vantagem (advantage actor-critic) com trabalhadores paralelos síncronos/assíncronos.
- DDPG / TD3: ator-crítico fora da política para ações contínuas (políticas determinísticas (deterministic policies)).
- PPO: na política, estável e amplamente usado.
- SAC: fora da política, regularizado por entropia (entropy-regularized); forte desempenho e eficiência amostral.
PPO e SAC: dois algoritmos “padrão” amplamente usados em aprendizado por reforço profundo
Otimização Proximal de Políticas (Proximal Policy Optimization, PPO)
PPO é popular porque é relativamente estável e simples. Ele usa um objetivo substituto com corte (clipped surrogate objective) para evitar atualizações de política grandes demais:
[ L^{CLIP}(\theta) = \mathbb{E}\left[\min\left(r_t(\theta) A_t,; \text{clip}(r_t(\theta), 1-\epsilon, 1+\epsilon) A_t\right)\right] ] onde (r_t(\theta) = \frac{\pi_\theta(a_t|s_t)}{\pi_{\theta_{old}}(a_t|s_t)}).
Ingredientes comuns:
- Estimativa de Vantagem Generalizada (Generalized Advantage Estimation, GAE) para calcular vantagens (A_t) de baixa variância
- Múltiplas épocas de atualizações em minilotes por rollout (rollout)
- Bônus de entropia (entropy bonus) opcional para incentivar exploração
O PPO é tipicamente na política (on-policy), o que significa que usa dados gerados pela política atual (ou por políticas muito recentes). Isso pode ser menos eficiente em amostras do que métodos fora da política, mas muitas vezes é mais fácil de ajustar.
Ator-Crítico Suave (Soft Actor-Critic, SAC)
SAC é um método ator-crítico fora da política que otimiza tanto retorno quanto entropia (incentivando estocasticidade/exploração):
[ J(\pi) = \sum_t \mathbb{E}\left[r(s_t,a_t) + \alpha \mathcal{H}(\pi(\cdot|s_t))\right] ]
Propriedades-chave:
- Funciona bem em controle contínuo
- Eficiente em amostras devido ao uso de buffer de replay (replay buffer)
- Exploração mais robusta via maximização de entropia
- Usa duas redes Q (um “truque de Q gêmeo (twin Q)”, em espírito similar ao TD3) para reduzir superestimação
O SAC costuma ser um forte padrão para tarefas ao estilo robótica em simulação.
Técnicas centrais em aprendizado por reforço profundo (e por que importam)
Replay de experiência
Um buffer de replay armazena experiências passadas e permite:
- Descorrelação de amostras de treino
- Melhor eficiência amostral (reutilizar dados múltiplas vezes)
- Compatibilidade com aprendizado fora da política (DQN, SAC, TD3)
No entanto, o replay pode ser problemático em cenários altamente não estacionários ou quando dados antigos se tornam enganosos.
Redes-alvo
Redes-alvo estabilizam alvos de bootstrap ao atualizar lentamente:
- Atualização dura (hard update) a cada (K) passos: (\theta^- \leftarrow \theta)
- Atualização suave (soft update) (média de Polyak (Polyak averaging)): (\theta^- \leftarrow \tau \theta + (1-\tau)\theta^-)
Muito usadas em algoritmos no estilo DQN e em ator-crítico fora da política.
Estimação de vantagem (GAE)
GAE equilibra viés e variância nas estimativas de vantagem:
- Menor variância do que retornos de Monte Carlo
- Menos viés do que TD de um passo em muitos cenários
Implementações de PPO comumente usam GAE com parâmetro (\lambda \in [0,1]).
Normalização e escalonamento
Pequenos detalhes de implementação frequentemente importam:
- Normalizar observações (especialmente em controle contínuo)
- Normalizar vantagens dentro de um lote
- Escalonamento de recompensas (às vezes dependente da tarefa)
- Corte de gradiente (gradient clipping) para evitar atualizações instáveis
Estratégias de exploração
O aprendizado por reforço profundo frequentemente falha por exploração insuficiente, especialmente com recompensas esparsas. Abordagens comuns:
- (\epsilon)-gulosa (DQN)
- Bônus de entropia (PPO, SAC)
- Ruído em parâmetros/ações (NoisyNets, ruído OU em métodos mais antigos)
- Motivação intrínseca (intrinsic motivation) / curiosidade (curiosity) (recompensas de novidade aprendidas)
Para uma discussão mais profunda, veja Exploração vs Aproveitamento.
Estabilidade e desafios de treinamento
Sistemas de aprendizado por reforço profundo podem ser frágeis. Modos comuns de falha incluem:
- Superestimação de valores Q (mitigada por DQN Duplo, redes Q gêmeas)
- Divergência (divergence) devido a bootstrap fora da política com aproximação de função (a tríade mortal)
- Sensibilidade a hiperparâmetros (hyperparameters): taxas de aprendizado, taxas de atualização de alvo, escalonamento de recompensas, coeficientes de entropia
- Mudança de distribuição (distribution shift): a política altera a distribuição de dados conforme aprende
- Observabilidade parcial (partial observability): o estado não é totalmente observado (pode exigir recorrência (recurrence) ou memória)
Dicas práticas de depuração:
- Comece com uma implementação de linha de base conhecida (por exemplo, PPO ou SAC em uma biblioteca padrão).
- Verifique o ambiente e o sinal de recompensa (muitos “bugs de RL” são bugs do ambiente).
- Acompanhe curvas de aprendizado com retorno médio, duração do episódio, perda de valor, entropia, divergência KL (para PPO).
- Use múltiplas sementes aleatórias; a variância em aprendizado por reforço profundo é real.
Exemplo prático: loop de treinamento de DQN (conceitual)
A seguir há um pseudocódigo simplificado ilustrando a receita padrão de DQN (ações discretas):
initialize Qθ and target Qθ− (copy of Qθ)
initialize replay buffer D
for each environment step:
with probability ε select random action a
else a = argmax_a Qθ(s, a)
execute a, observe r, s', done
store (s, a, r, s', done) in D
s = s'
if time to train:
sample minibatch from D
y = r + γ * (1 - done) * max_a' Qθ−(s', a')
minimize (Qθ(s,a) - y)^2 via gradient descent
periodically update target network:
θ− = θ
Na prática, você adicionará detalhes como corte de gradiente, replay priorizado ou alvos de DQN Duplo.
Exemplo prático: rollout + atualização no estilo PPO (conceitual)
O PPO alterna entre coletar trajetórias e executar várias épocas de atualizações:
for iteration = 1..N:
collect T steps using current policy πθ:
store (s, a, r, logπθ(a|s), Vφ(s), done)
compute advantages A and returns (e.g., GAE)
for epoch = 1..K:
for minibatch:
compute ratio r(θ) = πθ(a|s) / πθ_old(a|s)
maximize clipped objective + entropy bonus
fit value function to returns
Esse padrão “coletar-em-lote e depois otimizar” é uma das razões pelas quais o PPO costuma ser estável na prática.
Aplicações de aprendizado por reforço profundo
O aprendizado por reforço profundo é mais atraente quando decisões são sequenciais, o feedback é atrasado, e o ambiente pode ser simulado ou interagido em escala.
Áreas comuns de aplicação:
- Jogos e controle em simulação: Atari, Go, ambientes ao estilo StarCraft, benchmarks de controle contínuo.
- Robótica (principalmente em simulação + transferência): locomoção, manipulação; desafios incluem segurança, custo amostral e transferência do simulado para o real (sim-to-real transfer).
- Operações e gestão de recursos: resfriamento de data centers, controle de semáforos, otimização de estoque (frequentemente requer restrições de segurança cuidadosas).
- Personalização e sistemas de recomendação: tomada de decisão sequencial com valor de longo prazo; frequentemente abordada com bandits contextuais (contextual bandits) ou restrições de aprendizado por reforço offline.
- Alinhamento de modelos de linguagem grandes (large language models, LLMs) e otimização de preferências: ideias de aprendizado por reforço profundo aparecem em pipelines no estilo RLHF (RLHF-style pipelines); veja Aprendizado por Reforço para LLMs.
Muitos domínios do mundo real restringem exploração online (você não pode “tentar ações aleatórias” em medicina ou finanças). Nesses casos, o aprendizado por reforço profundo frequentemente se desloca para:
- Aprendizado por Reforço Offline (Offline RL): aprender a partir de dados registrados
- Métodos conservadores e protocolos fortes de avaliação
- Simuladores ou gêmeos digitais (digital twins)
Aprendizado por reforço profundo em contexto: subáreas relacionadas
O aprendizado por reforço profundo não é a única forma de escalar tomada de decisão:
- Aprendizado por Reforço Baseado em Modelo (Model-Based RL) pode ser mais eficiente em amostras ao aprender dinâmicas e planejar, mas pode sofrer com viés de modelo.
- Aprendizado por Reforço Multiagente (Multi-Agent RL) trata cenários com múltiplos agentes aprendizes; a não estacionariedade fica ainda mais difícil.
- Bandits (incluindo bandits contextuais) cobrem casos sem dinâmicas de longo horizonte e frequentemente são mais práticos para tarefas ao estilo recomendação.
Escolhendo um algoritmo na prática (regra geral)
- Ações discretas + entradas de imagem: comece com variantes de DQN (ou PPO se você quiser um único método de política para diferentes tarefas).
- Controle contínuo: comece com SAC (eficiente em amostras) ou PPO (robusto, modelo conceitual mais simples).
- Interações com o ambiente muito caras: considere abordagens baseadas em modelo ou aprendizado por reforço offline.
- Exploração difícil / recompensas esparsas: considere motivação intrínseca, design de currículo (curriculum design), modelagem de recompensas (reward shaping) ou formulações alternativas do problema.
Resumo
O aprendizado por reforço profundo substitui funções de valor e políticas tabulares por redes neurais profundas, permitindo que agentes aprendam em domínios de alta dimensionalidade e contínuos. As principais famílias de algoritmos são:
- Baseados em valor (DQN e extensões): aprendem (Q(s,a)), fortes para ações discretas.
- Gradientes de política: otimizam (\pi(a|s)) diretamente, naturais para ações contínuas.
- Ator-crítico (PPO, SAC, TD3/DDPG): combinam aprendizado de política com estimação de valor; amplamente usados em sistemas modernos.
Técnicas viabilizadoras — replay de experiência, redes-alvo, estimação de vantagem e exploração cuidadosa — tornam o aprendizado por reforço profundo prático, mas o treinamento continua sensível devido à instabilidade, não estacionariedade e dificuldade de exploração.