Métodos
Visão geral: três famílias de métodos de AR
A maioria dos algoritmos modernos de aprendizado por reforço (reinforcement learning, RL) pode ser agrupada em três famílias intimamente relacionadas:
- Métodos baseados em valor (value-based methods) (ex.: aprendizado Q (Q-learning)): aprendem quão boas são as ações e então agem escolhendo a melhor ação.
- Métodos baseados em política (policy-based methods) (ex.: gradientes de política (policy gradients)): aprendem diretamente uma política que mapeia estados para probabilidades de ação.
- Métodos ator–crítico (actor–critic methods): combinam ambos — um ator (actor) (política) e um crítico (critic) (estimador de valor).
Todos os três se apoiam na mesma base formal descrita em Conceitos: o Processo de Decisão de Markov (Markov Decision Process, MDP), com estados (s), ações (a), recompensas (r), transições e um fator de desconto (\gamma \in [0,1)).
Na prática, a escolha entre essas famílias depende de:
- Espaço de ações (action space): discreto vs contínuo
- Estabilidade e facilidade de ajuste fino
- Eficiência amostral (sample efficiency) (quanta interação com o ambiente é necessária)
- Se é possível fazer aprendizado fora da política (off-policy) (reutilizando dados antigos) ou se é preciso permanecer na política (on-policy) (aprendendo apenas a partir da política atual)
Este artigo foca em: aprendizado Q, gradientes de política e abordagens ator–crítico — sua teoria, como são implementadas e onde funcionam melhor.
Aprendizado Q (AR Baseado em Valor)
Ideia central
O aprendizado Q aprende uma função valor-ação (action-value function):
[ Q^*(s,a) = \mathbb{E}\left[\sum_{t=0}^{\infty}\gamma^t r_{t} \mid s_0=s, a_0=a, \pi^* \right] ]
Se você conhece (Q^*(s,a)), pode agir de forma ótima sendo guloso (greedy):
[ \pi^*(s) = \arg\max_a Q^*(s,a) ]
O aprendizado Q é poderoso porque é fora da política: ele pode aprender a política gulosa ótima mesmo enquanto se comporta com uma política exploratória (ex.: (\epsilon)-gulosa ((\epsilon)-greedy)). Isso se conecta diretamente a Exploração vs Aproveitamento.
A regra de atualização (otimalidade de Bellman)
A atualização tabular clássica do aprendizado Q é:
[ Q(s,a) \leftarrow Q(s,a) + \alpha \left( r + \gamma \max_{a'} Q(s',a') - Q(s,a) \right) ]
Onde:
- (\alpha) é a taxa de aprendizado
- (r + \gamma \max_{a'} Q(s',a')) é um alvo por bootstrap (bootstrap target)
- A quantidade entre parênteses é o erro de diferença temporal (temporal-difference, TD)
Essa atualização tenta impor a equação de otimalidade de Bellman (Bellman optimality equation).
Quando o aprendizado Q tabular funciona?
O aprendizado Q tabular pode convergir para (Q^*) sob condições padrão:
- Cada par estado–ação é visitado infinitas vezes (exploração suficiente)
- Taxas de aprendizado satisfazem as condições de Robbins–Monro (ex.: (\sum \alpha_t = \infty), (\sum \alpha_t^2 < \infty))
- MDP finito
Em problemas realistas, os espaços de estado são enormes/contínuos, então usamos aproximação de função (function approximation) (aprendizagem profunda). É aí que as coisas ficam mais delicadas.
Exemplo prático: aprendizado Q tabular em um pequeno mundo em grade (gridworld)
Abaixo está um esboço mínimo para um ambiente discreto:
import random
from collections import defaultdict
Q = defaultdict(lambda: 0.0)
alpha = 0.1
gamma = 0.99
epsilon = 0.1
def eps_greedy_action(s, actions):
if random.random() < epsilon:
return random.choice(actions)
return max(actions, key=lambda a: Q[(s, a)])
for episode in range(num_episodes):
s = env.reset()
done = False
while not done:
actions = env.actions(s)
a = eps_greedy_action(s, actions)
s2, r, done = env.step(a)
# Q-learning target uses max over next actions (off-policy)
next_actions = env.actions(s2)
target = r + (0 if done else gamma * max(Q[(s2, a2)] for a2 in next_actions))
Q[(s, a)] += alpha * (target - Q[(s, a)])
s = s2
Rede Q Profunda (Deep Q-Network, DQN): escalando com redes neurais
Para lidar com grandes espaços de estado, substitua a tabela Q por uma rede neural (neural network) (Q_\theta(s,a)) (ver Redes Neurais). A abordagem ingênua — treinar diretamente em alvos de TD — frequentemente diverge porque tanto o alvo quanto a predição dependem da mesma rede em constante mudança.
A DQN estabiliza o aprendizado com duas ideias-chave:
- Repetição de experiência (experience replay): armazenar transições ((s,a,r,s',done)) em um buffer e treinar em minilotes (mini-batches) aleatórios (reduz correlação).
- Rede-alvo (target network): usar uma rede separada, atualizada lentamente, (Q_{\bar{\theta}}) para computar alvos.
Uma perda comum da DQN:
[ \mathcal{L}(\theta) = \mathbb{E}\left[\left(r + \gamma \max_{a'} Q_{\bar{\theta}}(s',a') - Q_{\theta}(s,a)\right)^2\right] ]
Limitações de métodos no estilo do aprendizado Q
- Ações discretas: (\arg\max_a) é fácil apenas quando as ações são discretas/pequenas.
- Viés de superestimação (overestimation bias): o (\max) sobre estimativas ruidosas tende a superestimar; a DQN Dupla (Double DQN) ajuda.
- Desafios de exploração: (\epsilon)-gulosa pode ser fraca em cenários com recompensas esparsas.
- Instabilidade com aproximação de função: bootstrap fora da política + aproximação de função é uma conhecida “zona de perigo”.
Gradientes de Política (Otimização Direta de Política)
Ideia central
Em vez de aprender valores e então derivar uma política, métodos de gradiente de política otimizam diretamente uma política parametrizada (parameterized policy) (\pi_\theta(a\mid s)) para maximizar o retorno esperado:
[ J(\theta) = \mathbb{E}{\tau \sim \pi\theta}\left[\sum_{t=0}^{T} \gamma^t r_t\right] ]
Aqui (\tau) é uma trajetória (trajectory) amostrada ao seguir (\pi_\theta).
Isso é especialmente natural para espaços de ações contínuas (continuous action spaces), em que “escolher a ação máxima” não é direto.
O teorema do gradiente de política (REINFORCE)
Um resultado fundamental é:
[ \nabla_\theta J(\theta) = \mathbb{E}\left[\sum_{t} \nabla_\theta \log \pi_\theta(a_t\mid s_t); G_t \right] ]
Onde (G_t) é o retorno a partir do tempo (t).
Isso leva ao REINFORCE (gradiente de política de Monte Carlo (Monte Carlo policy gradient)). Intuitivamente:
- Se uma ação leva a alto retorno, aumente sua log-probabilidade.
- Se leva a baixo retorno, diminua-a.
Gradientes de política são treinados com Descida do Gradiente usando retropropagação através da rede de política (ver Retropropagação).
Redução de variância: linhas de base e vantagens
O REINFORCE “cru” tem alta variância. Um truque-chave é subtrair uma linha de base (baseline) (b(s_t)) que não depende da ação:
[ \nabla_\theta J(\theta) = \mathbb{E}\left[\sum_t \nabla_\theta \log \pi_\theta(a_t\mid s_t); (G_t - b(s_t)) \right] ]
Uma escolha comum: (b(s_t)=V_\phi(s_t)), uma função de valor aprendida. Então (G_t - V(s_t)) é uma estimativa da vantagem (advantage) — o quanto a ação foi melhor do que o esperado.
Exemplo prático: atualização no estilo REINFORCE (pseudocódigo tipo PyTorch)
# Pseudocode: REINFORCE with baseline
for episode in range(num_episodes):
states, actions, rewards = rollout(env, policy)
returns = compute_discounted_returns(rewards, gamma)
# Optional baseline: value network V(s)
baselines = value_net(states).detach()
advantages = returns - baselines
logp = policy.log_prob(states, actions) # sum over action dims if continuous
policy_loss = -(logp * advantages).mean()
policy_opt.zero_grad()
policy_loss.backward()
policy_opt.step()
# Fit baseline with regression to returns
value_loss = ((value_net(states) - returns) ** 2).mean()
value_opt.zero_grad()
value_loss.backward()
value_opt.step()
Forças e limitações dos gradientes de política
Forças
- Funciona naturalmente com ações contínuas (políticas Gaussianas, políticas Beta etc.)
- Pode representar políticas estocásticas (stochastic policies), úteis para exploração e comportamentos multimodais
- Otimiza a política diretamente, evitando (\arg\max) ou restrições de ações discretas
Limitações
- Muitas vezes é na política: os dados devem vir da política atual, reduzindo a eficiência amostral
- Pode ser instável sem restrições de região de confiança (trust-region) ou ajuste fino cuidadoso
- Gradientes de alta variância, a menos que você use linhas de base/críticos
Algoritmos modernos de gradiente de política frequentemente usam restrições para melhorar a estabilidade (ex.: PPO/TRPO), muitos dos quais são melhor compreendidos como variantes ator–crítico.
Métodos Ator–Crítico (Combinando Aprendizado de Política e de Valor)
Ideia central
Métodos ator–crítico aprendem:
- Ator: (\pi_\theta(a\mid s)), a política
- Crítico: (V_\phi(s)) ou (Q_\phi(s,a)), um estimador de valor usado para guiar/melhorar o ator
Eles combinam o sinal de aprendizado de baixa variância de métodos de diferença temporal (bootstrapping) com a otimização direta de gradientes de política.
A atualização ator–crítico com vantagem
Uma forma comum usa um crítico (V_\phi(s)) e uma estimativa de vantagem baseada em TD:
[ \hat{A}t = r_t + \gamma V\phi(s_{t+1}) - V_\phi(s_t) ]
Atualização do ator:
[ \nabla_\theta J(\theta) \approx \mathbb{E}\left[\nabla_\theta \log \pi_\theta(a_t\mid s_t); \hat{A}_t \right] ]
Atualização do crítico: ajustar por regressão as predições de valor em direção a alvos TD, por exemplo:
[ \mathcal{L}(\phi)=\mathbb{E}\left[\left(r_t + \gamma V_\phi(s_{t+1}) - V_\phi(s_t)\right)^2\right] ]
Isso produz um algoritmo que tipicamente é:
- De menor variância do que gradiente de política via Monte Carlo
- Frequentemente mais eficiente em amostras
- Ainda sensível a hiperparâmetros e questões de estabilidade (especialmente variantes fora da política)
Exemplo prático: esboço no estilo A2C (advantage actor–critic síncrono)
# Pseudocode: A2C-style update with TD(0) advantage
batch = collect_n_steps(env, policy, n_steps)
states, actions, rewards, next_states, dones = batch
V = value_net(states)
V_next = value_net(next_states).detach()
td_target = rewards + gamma * (1 - dones) * V_next
advantage = (td_target - V).detach()
logp = policy.log_prob(states, actions)
entropy = policy.entropy(states) # encourages exploration
actor_loss = -(logp * advantage).mean() - ent_coef * entropy.mean()
critic_loss = ((V - td_target) ** 2).mean()
loss = actor_loss + vf_coef * critic_loss
opt.zero_grad()
loss.backward()
opt.step()
A regularização por entropia (entropy regularization) é um truque prático comum: ela desencoraja o colapso prematuro para comportamento determinístico e apoia a exploração.
Ator–crítico na política vs fora da política
Ator–crítico é um padrão, não um único algoritmo. A maior bifurcação na prática é se o aprendizado é na política ou fora da política.
Ator–crítico na política
- Exemplos: A2C/A3C, PPO (frequentemente formulado como ator–crítico)
- Prós: teoria mais simples; tende a ser estável
- Contras: menor eficiência amostral
Ator–crítico fora da política
- Exemplos: DDPG, TD3, SAC
- Prós: pode reutilizar buffers de repetição → muito mais eficiente em amostras
- Contras: mais partes móveis; pode ser instável sem projeto cuidadoso
O aprendizado fora da política se conecta conceitualmente ao Aprendizado por Reforço Offline, em que você pode apenas ter dados registrados e não consegue interagir mais.
Controle contínuo: por que ator–crítico domina
Em tarefas de robótica e controle (comandos contínuos de torque/velocidade), métodos ator–crítico são amplamente usados porque:
- O ator pode produzir ações contínuas diretamente.
- O crítico fornece um sinal de aprendizado estruturado.
- Variantes fora da política com buffers de repetição podem ser muito mais eficientes em dados.
Uma escolha moderna comum é o Ator–Crítico Suave (Soft Actor–Critic, SAC), que maximiza tanto retorno quanto a entropia da política:
[ J(\pi) = \mathbb{E}\left[\sum_t \gamma^t \left(r_t + \alpha \mathcal{H}(\pi(\cdot\mid s_t))\right)\right] ]
Isso incentiva a exploração e frequentemente melhora a robustez.
Como Esses Métodos se Relacionam (Visão Unificadora)
Um modelo mental útil:
- Aprendizado Q aprende uma política gulosa implicitamente ao tornar (Q(s,a)) preciso e escolher (\arg\max_a Q(s,a)).
- Gradientes de política aprendem a política explicitamente ao diferenciar através de (\log \pi_\theta(a\mid s)).
- Ator–crítico usa uma função de valor (crítico) para produzir um sinal de vantagem, e então aplica uma atualização de gradiente de política ao ator.
Você pode ver ator–crítico como uma ponte entre os dois:
- Como aprendizado Q, ele usa bootstrap (bootstrapping) (alvos TD).
- Como gradientes de política, ele atualiza diretamente uma política parametrizada.
Escolhendo um Método na Prática
Se as ações são discretas e pequenas
- Comece com métodos no estilo aprendizado Q / DQN.
- Aplicações típicas: jogos tipo Atari, roteamento com pequenos conjuntos de ações, escalonamento com escolhas discretas.
Se as ações são contínuas ou de alta dimensionalidade
- Prefira gradientes de política ou (mais frequentemente) ator–crítico.
- Aplicações típicas: controle robótico, locomoção, alocação contínua de recursos.
Se interações com o ambiente são caras
- Prefira métodos fora da política (variantes de DQN, SAC/TD3) que podem reutilizar experiência via repetição.
- Considere AR Baseado em Modelo quando for possível aprender a dinâmica e planejar para reduzir interações reais.
Se estabilidade e simplicidade importam mais
- Ator–crítico no estilo PPO é um padrão comum em muitos domínios devido à estabilidade razoável e forte desempenho empírico.
Considerações Práticas Comuns (Entre Métodos)
Estratégias de exploração
- Baseados em valor: (\epsilon)-gulosa, exploração de Boltzmann, redes ruidosas
- Baseados em política/ator–crítico: bônus de entropia, ruído de parâmetros Exploração é tão central que vale a pena ler Exploração vs Aproveitamento junto com qualquer método.
Escalonamento e modelagem de recompensas
- Recompensas mal escalonadas podem desestabilizar o treinamento.
- Modelagem de recompensa (reward shaping) pode acelerar o aprendizado, mas pode alterar a política ótima se não for baseada em potencial (potential-based).
Aproximação de função e estabilidade
Combinar estes três ingredientes pode causar instabilidade:
- Bootstrap (alvos TD)
- Aprendizado fora da política
- Aproximação de função (redes neurais)
Esta é uma fonte clássica de divergência em aprendizado por reforço profundo (deep RL). Muitas melhorias “modernas” (redes-alvo, repetição, objetivos com recorte, críticos gêmeos) são estabilizadores para esse problema.
Armadilhas de avaliação
- Curvas de aprendizado em RL têm alta variância; rode múltiplas sementes (seeds).
- Meça tanto o retorno de treinamento quanto o retorno de avaliação (sem ruído de exploração).
- Cuidado com “manipulação de recompensa (reward hacking)” e problemas de especificação — especialmente em implantações no mundo real e contextos de alinhamento (alignment) (veja AR para Modelos de Linguagem Grandes para uma perspectiva aplicada e orientada a alinhamento).
Resumo
- Aprendizado Q aprende (Q(s,a)) via a atualização de otimalidade de Bellman e age de forma gulosa; ele é naturalmente fora da política e se ajusta bem a problemas com ações discretas (especialmente com estabilizadores da DQN em aprendizado por reforço profundo).
- Gradientes de política otimizam diretamente uma política parametrizada (\pi_\theta) usando o truque da derivada do log; eles suportam naturalmente ações contínuas, mas podem ter alta variância e frequentemente são na política.
- Métodos ator–crítico combinam um ator (política) com um crítico (estimador de valor), produzindo atualizações de menor variância e forte desempenho prático; eles dominam o RL moderno de controle contínuo e sustentam muitos algoritmos amplamente usados (PPO, SAC, TD3).
Juntos, esses métodos formam a espinha dorsal da prática contemporânea de RL, e entender suas suposições — na política vs fora da política, ações discretas vs contínuas e como a estimação de valor interage com a aproximação de função — é essencial para aplicar RL de forma eficaz.