REINFORCE – Monte Carlo Policy Gradient

1.4.3 – Metodos Baseados em Politica
1.4.3.1 – Metodos de Gradiente de Politica
1.4.3.1.1 – REINFORCE – Monte Carlo Policy Gradient
LEGENDA
Principal
Ramo
Metodo
Problemas
Modelo
Arquitetura

O que é aprendizado por reforço baseado em política

O aprendizado por reforço treina agentes através de tentativas. Diferentemente de métodos baseados em valor, a política é aprendida diretamente. Primeiramente, a política é uma função que mapeia estados para ações. O agente não precisa estimar valores para cada ação possível. Em vez disso, ele aprende a probabilidade de executar cada ação. Este tipo de algoritmo é chamado de método baseado em política. Por exemplo, um robô pode aprender a andar sem um mapa de valores. A política é representada por uma rede neural profunda. Os parâmetros da rede são ajustados durante o treinamento. Assim, o agente melhora sua estratégia gradualmente.

Uma vantagem importante é lidar com ações contínuas. Os métodos baseados em política são mais estáveis que os baseados em valor. Eles convergem para políticas ótimas mesmo com aproximação de funções. Contudo, esses métodos podem ter alta variância nos gradientes. Para resolver isso, usa-se a linha de base (baseline). A arquitetura REINFORCE é o algoritmo mais simples desta classe. Ela foi proposta por Williams em 1992. O método usa amostragem Monte Carlo para estimar retornos. Cada episódio completo é usado para atualizar a política. Este é um algoritmo do tipo “episódio completo”.

Arquitetura do modelo reinforce (monte carlo policy gradient)

A arquitetura REINFORCE possui uma rede neural como aproximador. A entrada da rede representa o estado atual do ambiente. A saída fornece probabilidades para cada ação possível. Primeiramente, usa-se uma camada softmax na saída. Esta camada transforma os valores em probabilidades. Entre as camadas, funções de ativação ReLU são aplicadas. A arquitetura clássica contém duas ou três camadas escondidas. Cada camada escondida possui 64 ou 128 neurônios tipicamente. O tamanho da entrada varia conforme o problema resolvido. Por fim, o tamanho da saída iguala-se ao número de ações.

O algoritmo REINFORCE funciona de forma iterativa. Primeiro, um episódio completo é executado com a política atual. Todas as transições (estado, ação, recompensa) são armazenadas. Depois, o retorno descontado é calculado para cada passo. A fórmula do retorno é: \(G_t = \sum_{k=0}^{T-t-1} \gamma^k R_{t+k+1}\). Em seguida, o gradiente da política é estimado. A função objetivo é maximizar a recompensa esperada. O gradiente é calculado usando a regra da cadeia. A atualização dos parâmetros segue a direção do gradiente. Este processo é repetido até a convergência da política.

Hiperparâmetros e fórmulas matemáticas

A taxa de aprendizado (alpha) controla as atualizações da rede. Valores típicos variam entre 0.0001 e 0.001. O fator de desconto (gamma) prioriza recompensas imediatas. Geralmente, gamma entre 0.9 e 0.99 é utilizado. O número máximo de passos por episódio é um hiperparâmetro. A arquitetura da rede (número de neurônios) também é importante. O tamanho do lote (batch size) afeta a estabilidade. Para REINFORCE, um episódio inteiro é um lote. A inicialização dos pesos da rede é crucial. Usa-se inicialização uniforme ou normal pequena.

A função de perda para REINFORCE é o log-probabilidade ponderada: \(L(\theta) = -\sum_{t=0}^{T-1} \log \pi_\theta(a_t|s_t) G_t\). O gradiente da política é dado por: \(\nabla_\theta J(\theta) = \mathbb{E}\left[\sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t|s_t) G_t\right]\). A atualização dos parâmetros segue a regra: \(\theta \leftarrow \theta + \alpha \nabla_\theta J(\theta)\). Uma variante inclui uma linha de base para reduzir variância: \(\nabla_\theta J(\theta) = \mathbb{E}\left[\sum_{t=0}^{T-1} \nabla_\theta \log \pi_\theta(a_t|s_t) (G_t – b)\right]\). A linha de base b geralmente é a média dos retornos. Esta técnica melhora significativamente a convergência. O algoritmo REINFORCE é simples, mas poderoso. Ele resolve problemas onde ações contínuas são necessárias. Muitos jogos e robóticas usam esta abordagem.

Enunciado do exemplo clássico: o ambiente cartpole

Você deve equilibrar um poste sobre um carrinho móvel. O ambiente se chama CartPole-v1 na biblioteca Gymnasium. O carrinho pode mover-se para esquerda ou direita. O objetivo é manter o poste na posição vertical. Cada passo sem queda gera uma recompensa de +1. O episódio termina quando o poste cai mais de 15 graus. Ou quando o carrinho sai dos limites da pista. Seu agente REINFORCE deve aprender a política ótima. Uma rede neural representará a política diretamente. A saída da rede será uma distribuição de probabilidade sobre ações.

Primeiramente, implemente a rede neural com duas camadas. A entrada terá 4 neurônios (observações do ambiente). A saída terá 2 neurônios com ativação softmax. Em segundo lugar, execute episódios completos para coleta de dados. Depois, calcule os retornos descontados para cada passo. Normalize os retornos para reduzir a variância. Treine o agente por 1000 episódios no Google Colab. Ao final, exiba um gráfico das recompensas acumuladas. Mostre também a política aprendida pelo agente. O código abaixo resolve completamente este enunciado.

O código implementa o algoritmo REINFORCE completo. A rede neural representa diretamente a política do agente. Primeiramente, cada episódio é executado com a política atual. Todas as ações e recompensas são armazenadas durante o episódio. Depois, os retornos descontados são calculados para cada passo. Os retornos são normalizados para reduzir a variância. Em seguida, o gradiente da política é estimado e aplicado. Este processo é repetido até a política convergir. O agente aprende a equilibrar o poste por centenas de passos. Parabéns! Você implementou seu primeiro Policy Gradient.

Deixe um comentário