Gradientes de Política

Visão geral

Métodos de gradiente de política (policy gradient) são uma família de algoritmos de Aprendizado por Reforço (Reinforcement Learning) que otimizam uma política diretamente ao dar passos de gradiente em um objetivo como o retorno esperado. Em vez de aprender uma função de valor e extrair uma política gulosa (greedy) (como em muitos métodos baseados em valor, como aprendizado Q (Q-learning)), gradientes de política tratam a própria política como uma função diferenciável — frequentemente uma Redes Neurais (Neural Networks) — e aplicam (uma) Descida do Gradiente (Gradient Descent) (estocástica) para melhorá-la.

Métodos de gradiente de política são especialmente úteis quando:

  • O espaço de ações é contínuo (por exemplo, torque, ângulo de direção), em que fazer argmax sobre ações é difícil.
  • Você quer uma política estocástica para exploração ou para tarefas inerentemente estocásticas.
  • Você precisa representar políticas complexas com redes profundas.

A ferramenta teórica central é o teorema do gradiente de política (policy gradient theorem), que fornece um estimador de gradiente não viesado com base em trajetórias amostradas. O algoritmo clássico REINFORCE usa esse estimador diretamente, enquanto métodos modernos práticos adicionam redução de variância (variance reduction) (linhas de base, estimativas de vantagem) e frequentemente combinam com uma função de valor aprendida na forma ator–crítico (actor–critic) (veja Métodos Ator–Crítico (Actor-Critic Methods)).

Configuração do aprendizado por reforço (notação)

Assuma um processo de decisão de Markov (Markov decision process, MDP) episódico com:

  • estados (s_t), ações (a_t), recompensas (r_t)
  • fator de desconto (\gamma \in [0,1))
  • política estocástica (\pi_\theta(a \mid s)) parametrizada por (\theta)

O retorno (return) a partir do tempo (t) é:

[ G_t = \sum_{k=t}^{T-1} \gamma^{k-t} r_k ]

Um objetivo comum é maximizar o retorno descontado esperado a partir da distribuição de estados iniciais:

[ J(\theta) = \mathbb{E}{\tau \sim \pi\theta}\left[\sum_{t=0}^{T-1}\gamma^t r_t\right] ]

onde uma trajetória (\tau = (s_0,a_0,r_0,\dots,s_{T})) é gerada ao executar (rollout) (\pi_\theta).

Por que otimizar a política diretamente?

Métodos baseados em valor aprendem (Q(s,a)) e definem uma política como (a=\arg\max_a Q(s,a)). Isso é eficaz em espaços de ação discretos, mas se torna incômodo em ações contínuas ou de alta dimensionalidade.

Gradientes de política, em vez disso:

  • evitam o (\arg\max) por completo
  • suportam naturalmente distribuições contínuas (por exemplo, Gaussianas)
  • podem representar comportamento multimodal via estocasticidade

A desvantagem é que estimadores ingênuos de gradiente de política podem ter alta variância, exigindo engenharia cuidadosa.

O teorema do gradiente de política (ideia central)

O truque principal é a identidade do log-derivativo (log-derivative / score function):

[ \nabla_\theta \pi_\theta(a\mid s) = \pi_\theta(a\mid s)\nabla_\theta \log \pi_\theta(a\mid s) ]

Usando essa identidade, pode-se mostrar (informalmente) que o gradiente do retorno esperado pode ser escrito como:

\[ \nabla_\theta J(\theta)

\mathbb{E}{\tau \sim \pi\theta} \left[ \sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t\mid s_t), G_t \right] ]

Isso diz: aumente a log-probabilidade de ações que levaram a alto retorno, e diminua-a para ações que levaram a baixo retorno.

Uma afirmação mais refinada usa a função valor-ação (Q^{\pi_\theta}(s,a)):

\[ \nabla_\theta J(\theta)

\mathbb{E}{s \sim d^{\pi\theta}, a \sim \pi_\theta} \left[ \nabla_\theta \log \pi_\theta(a\mid s), Q^{\pi_\theta}(s,a) \right] ]

onde (d^{\pi_\theta}) é a distribuição de visitação de estados descontada (state visitation distribution) sob (\pi_\theta).

Intuição

  • O termo (\nabla_\theta \log \pi_\theta(a\mid s)) diz como mudar os parâmetros para tornar a ação (a) mais/menos provável no estado (s).
  • O termo (Q^{\pi_\theta}(s,a)) (ou um estimador como (G_t)) diz se aquela ação foi boa.

REINFORCE: o gradiente de política clássico de Monte Carlo

REINFORCE (Williams, 1992) é a aplicação direta do teorema do gradiente de política usando retornos de Monte Carlo.

Esboço do algoritmo:

  1. Execute (rollout) (N) episódios sob (\pi_\theta).
  2. Para cada passo de tempo (t) em cada episódio, compute o retorno (G_t).
  3. Atualize os parâmetros ascendendo:

[ \theta \leftarrow \theta + \alpha \sum_{t}\nabla_\theta \log \pi_\theta(a_t\mid s_t), G_t ]

Exemplo prático: bandido de Bernoulli (Bernoulli bandit)

Considere um bandido de 2 braços (2-armed bandit) (sem estado). A política é uma distribuição de Bernoulli (Bernoulli):

[ \pi_\theta(a=1)=\sigma(\theta), \quad \pi_\theta(a=0)=1-\sigma(\theta) ]

Se a ação 1 produz recompensa maior em média, o REINFORCE empurrará (\theta) para cima porque:

  • quando (a=1) e a recompensa (r) é alta, (\nabla_\theta \log \pi_\theta(1)) é positivo, então (\theta) aumenta
  • quando (a=0) e a recompensa é menor, (\nabla_\theta \log \pi_\theta(0)) é negativo, também aumentando (\theta)

Isso ilustra o mecanismo central sem precisar de uma função de valor.

Pseudocode (REINFORCE)

initialize policy parameters θ
repeat:
  collect trajectories τ_i by running π_θ
  for each trajectory:
    compute returns G_t for each time step t
  g = 0
  for each (s_t, a_t, G_t) in batch:
    g += ∇_θ log π_θ(a_t | s_t) * G_t
  θ ← θ + α * (g / batch_size)

Redução de variância: linhas de base e vantagens

O estimador REINFORCE é não viesado mas frequentemente de alta variância, o que torna o aprendizado instável ou lento. A maioria dos métodos práticos de gradiente de política foca em reduzir a variância mantendo o viés aceitável.

Linhas de base: subtrair algo que não muda a expectativa

Um fato-chave: para qualquer função (b(s)) que não dependa da ação (a),

[ \mathbb{E}{a \sim \pi\theta(\cdot\mid s)} \left[\nabla_\theta \log \pi_\theta(a\mid s), b(s)\right] = 0 ]

Então você pode substituir (Q) (ou (G_t)) por (Q - b(s)) sem mudar o gradiente esperado:

\[ \nabla_\theta J(\theta)

\mathbb{E}\left[ \nabla_\theta \log \pi_\theta(a_t\mid s_t), (G_t - b(s_t)) \right] ]

Esta é a técnica mais comum de redução de variância em gradientes de política.

Linha de base por valor de estado: \(b(s) = V^{\pi}(s)\)

Uma escolha padrão é a função valor de estado:

[ V^\pi(s) = \mathbb{E}[G_t \mid s_t=s] ]

Então o sinal de aprendizado torna-se:

[ G_t - V^\pi(s_t) ]

Esse termo estima o quanto melhor/pior a ação tomada foi em comparação com o que a política tipicamente alcança a partir daquele estado.

Função vantagem: o sinal “certo” centralizado

Defina a vantagem (advantage):

[ A^\pi(s,a) = Q^\pi(s,a) - V^\pi(s) ]

Usar vantagens fornece a forma canônica do gradiente de política:

\[ \nabla_\theta J(\theta)

\mathbb{E}\left[ \nabla_\theta \log \pi_\theta(a\mid s), A^\pi(s,a) \right] ]

Na prática, usamos um estimador (\hat A_t) computado a partir de dados e (frequentemente) uma rede de valor aprendida. Isso leva naturalmente a Métodos Ator–Crítico: o ator (actor) é (\pi_\theta), o crítico (critic) estima (V) (ou (Q)).

Recompensa-a-partir-do-passo (reward-to-go): reduzir variância melhorando a atribuição de crédito

Usar o retorno do episódio completo (G_0) em todo passo de tempo atribui o mesmo crédito a todas as ações, aumentando a variância. Uma melhoria simples é recompensa-a-partir-do-passo (reward-to-go), em que cada ação usa o retorno a partir do seu próprio passo de tempo:

[ G_t = \sum_{k=t}^{T-1} \gamma^{k-t} r_k ]

Isso geralmente reduz a variância e melhora o aprendizado.

Estimativa Generalizada de Vantagem (Generalized Advantage Estimation, GAE)

Um método amplamente usado para computar vantagens de baixa variância e baixo viés é a estimativa generalizada de vantagem (GAE):

  • Defina resíduos de diferença temporal (Temporal Difference, TD) (deltas): [ \delta_t = r_t + \gamma V(s_{t+1}) - V(s_t) ]
  • Compute vantagens com parâmetro (\lambda \in [0,1]): [ \hat A_t^{\text{GAE}(\gamma,\lambda)} = \sum_{l=0}^{\infty} (\gamma\lambda)^l \delta_{t+l} ]

Interpretação:

  • (\lambda=0): mais viés, baixa variância (TD de 1 passo)
  • (\lambda \to 1): menos viés, maior variância (parecido com Monte Carlo)

GAE é um elemento básico em algoritmos modernos na política, incluindo Otimização Proximal de Política (Proximal Policy Optimization, PPO).

Parametrizações práticas de política

Ações discretas: política categórica

Para ações discretas, uma rede neural produz logits (z(s)) e:

[ \pi_\theta(a\mid s) = \text{softmax}(z(s))_a ]

O treinamento usa (\log \pi_\theta(a_t\mid s_t)), que está prontamente disponível em bibliotecas comuns de aprendizado profundo.

Ações contínuas: política Gaussiana

Para ações contínuas (por exemplo, (a \in \mathbb{R}^d)), uma escolha comum é uma Gaussiana diagonal:

[ \pi_\theta(a\mid s) = \mathcal{N}(a; \mu_\theta(s), \Sigma_\theta(s)) ]

Frequentemente (\Sigma) é diagonal e parametrizada via log-desvio-padrão. Isso fornece gradientes suaves e exploração controlável.

Exploração e regularização por entropia

Gradientes de política podem colapsar prematuramente para um comportamento quase determinístico (especialmente com vantagens positivas fortes). Uma correção comum é adicionar um bônus de entropia (entropy bonus):

[ J'(\theta) = J(\theta) + \beta, \mathbb{E}[ \mathcal{H}(\pi_\theta(\cdot\mid s)) ] ]

Maximizar a entropia incentiva a exploração e pode estabilizar o treinamento. Em código, você adiciona (-\beta \cdot \text{entropy}) à função de perda (já que a maioria dos frameworks minimiza a perda).

Uma função de perda típica de gradiente de política moderna (ator + linha de base)

Com um estimador de vantagem (\hat A_t), a perda de política (ator) geralmente é escrita para minimização como:

\[ \mathcal{L}_{\text{policy}}(\theta)

-\mathbb{E}t\left[\log \pi\theta(a_t\mid s_t), \hat A_t\right] ]

Se você também aprende uma função de valor (V_\phi(s)), adiciona uma perda do crítico, tipicamente erro quadrático médio (mean-squared error) para um alvo de retorno (\hat V_t):

[ \mathcal{L}_{\text{value}}(\phi) = \mathbb{E}t[(V\phi(s_t) - \hat V_t)^2] ]

A perda total pode incluir entropia:

[ \mathcal{L} = \mathcal{L}{\text{policy}} + c_v \mathcal{L}{\text{value}} - c_e \mathbb{E}[\mathcal{H}] ]

Essa estrutura sustenta muitos algoritmos da família ator–crítico; Otimização Proximal de Política (PPO) adiciona restrições adicionais para tornar as atualizações de política mais seguras.

Esboço mínimo de treinamento no estilo PyTorch (conceitual)

# Given a batch of (states, actions, advantages) from on-policy rollouts
# policy produces a distribution dist = πθ(.|s)
dist = policy(states)
logp = dist.log_prob(actions).sum(-1)         # sum for multivariate actions
policy_loss = -(logp * advantages).mean()

# Optional entropy bonus
entropy = dist.entropy().sum(-1).mean()
loss = policy_loss - ent_coef * entropy

optimizer.zero_grad()
loss.backward()
torch.nn.utils.clip_grad_norm_(policy.parameters(), max_norm=0.5)
optimizer.step()

Na prática, você computa advantages usando uma rede de valor e algo como GAE, e quase sempre normaliza as vantagens para terem aproximadamente média zero e variância unitária ao longo do lote.

Considerações práticas comuns (o que faz funcionar na prática)

Dados na política e eficiência amostral

Gradientes de política puros (incluindo REINFORCE e muitas variantes ator–crítico) tipicamente são na política (on-policy): os dados devem vir da política atual (ou recente). Isso pode ser menos eficiente em termos amostrais do que métodos fora da política (off-policy), porque dados antigos ficam “obsoletos”.

Algoritmos como PPO permanecem na política, mas melhoram a estabilidade, o que frequentemente os torna bons baselines na prática.

Tamanho do lote e frequência de atualização

Gradientes de política são ruidosos; lotes maiores frequentemente ajudam. Laços de treinamento típicos alternam entre:

  • coletar um número fixo de passos do ambiente (comprimento do rollout)
  • executar múltiplas épocas de otimização nesses dados (comum em treinamento no estilo PPO)

REINFORCE em sua forma pura frequentemente atualiza uma vez por episódio, o que pode ser lento.

Escalonamento e normalização de recompensas

Magnitudes grandes de recompensa podem causar gradientes grandes e instabilidade. Truques comuns:

  • normalizar recompensas (dependente da tarefa; cuidado)
  • normalizar vantagens por lote
  • recortar gradientes

Bootstrap vs Monte Carlo

Usar retornos de Monte Carlo produz alvos não viesados, mas alta variância. Alvos de valor com bootstrap reduzem a variância, mas introduzem viés. GAE fornece um compromisso suave.

Atribuição de crédito e desconto

(\gamma) afeta o quão longe no futuro o agente credita as ações:

  • (\gamma) menor: mais míope, às vezes otimização mais fácil
  • (\gamma) maior: melhor planejamento de longo horizonte, aprendizado mais difícil

Estabilidade numérica

Para políticas contínuas, restrinja faixas de log-desvio-padrão; para políticas categóricas, compute log-probabilidades via rotinas estáveis das bibliotecas. Evite computar manualmente softmax e depois log.

Relação com outras famílias de métodos de RL

  • Métodos baseados em valor (por exemplo, aprendizado Q) aprendem valores de ação e derivam uma política indiretamente. Frequentemente são mais eficientes em termos amostrais em ações discretas, mas têm dificuldade com controle contínuo sem mecanismos adicionais.
  • Métodos ator–crítico (veja Métodos Ator–Crítico) combinam gradientes de política com uma linha de base/função de valor aprendida (crítico) — esta é a forma prática dominante de gradientes de política.
  • PPO e métodos de região de confiança (trust-region) (veja Otimização Proximal de Política (PPO)) são baseados em gradiente de política, mas adicionam restrições para evitar atualizações grandes e destrutivas da política.

Pontos fortes e limitações

Pontos fortes

  • Funciona naturalmente com ações contínuas
  • Otimiza a política diretamente
  • Pode aprender comportamentos estocásticos e multimodais
  • Compatível com aprendizado profundo e treinamento fim a fim

Limitações

  • Gradientes de alta variância sem redução de variância cuidadosa
  • Frequentemente na política, levando a menor eficiência amostral
  • Pode ser sensível a hiperparâmetros (taxa de aprendizado, coeficiente de entropia, tamanho do lote)
  • Exige engenharia cuidadosa para estabilidade em ambientes complexos

Resumo

Métodos de gradiente de política otimizam uma política parametrizada (\pi_\theta(a\mid s)) ascendendo um gradiente estimado do retorno esperado. O teorema do gradiente de política produz um estimador da forma:

[ \nabla_\theta J(\theta) \approx \sum_t \nabla_\theta \log \pi_\theta(a_t\mid s_t), \text{(retorno/vantagem)} ]

REINFORCE é a instanciação mais simples, usando retornos de Monte Carlo. Na prática, a maioria das implementações bem-sucedidas reduz a variância via:

  • linhas de base (especialmente um (V(s)) aprendido)
  • estimativas de vantagem (frequentemente GAE)
  • bônus de entropia, normalização e técnicas de otimização estáveis

Essas ideias formam a base de algoritmos modernos ator–crítico e de métodos amplamente usados como Otimização Proximal de Política (PPO).