Dueling DQN

bebê aprendendo a andar

O que é o problema baseado em valor?

Em aprendizado por reforço, métodos baseados em valor estimam a “bondade” de cada estado ou ação. Frequentemente, isso é feito por uma função chamada Q-valor. Então, o agente escolhe a ação com maior valor estimado. Contudo, estados reais são complexos e contínuos. Por isso, usamos aproximação de funções com redes neurais. A arquitetura Dueling DQN é uma evolução desse raciocínio.

Primeiramente, uma rede neural comum mapeia estado-ação diretamente. Em contraste, a Dueling DQN separa essa estimativa em duas partes. Isso permite aprendizado mais estável e eficiente. Ademais, ela foca no valor do estado e na vantagem de cada ação. Essa divisão é especialmente útil quando ações são irrelevantes em alguns estados. Consequentemente, o agente aprende mais rápido.

Características e arquitetura do modelo

A arquitetura Dueling DQN possui duas streams (caminhos) após camadas convolucionais ou densas. Um caminho estima o valor do estado \( V(s) \). O outro caminho estima a vantagem \( A(s,a) \) para cada ação. Finalmente, esses valores são combinados para gerar \( Q(s,a) \). A combinação é feita pela seguinte fórmula:

\[ Q(s,a) = V(s) + \left( A(s,a) – \frac{1}{|\mathcal{A}|} \sum_{a’} A(s,a’) \right) \]

O termo de subtração da média das vantagens garante identificabilidade. Sem isso, \( V \) e \( A \) poderiam variar arbitrariamente. A vantagem média zero foca o aprendizado no valor real do estado. Isso é uma diferença crucial em relação ao DQN padrão. Hiperparâmetros comuns incluem taxa de aprendizado (ex: 0.0001), fator de desconto (\( \gamma \approx 0.99 \)), e tamanho do buffer replay (ex: 50000). A rede é treinada minimizando o erro quadrático médio entre Q atual e Q alvo.

A equação de atualização usa a seguinte perda:

\[ \mathcal{L} = \mathbb{E}\left[ \left( r + \gamma \max_{a’} Q_{\text{target}}(s’,a’) – Q(s,a) \right)^2 \right] \]

Aqui, \( r \) é a recompensa imediata, e \( s’ \) o próximo estado. Um segundo conjunto de pesos (target network) é atualizado suavemente. Assim, o treinamento se torna mais estável. É importante notar que a Dueling DQN compartilha a memória replay do DQN. Todavia, sua arquitetura dupla reduz a superestimação do Q-valor.

Hiperparâmetros e fórmulas matemáticas

Os principais hiperparâmetros são: learning rate (\( \alpha \)), batch size (32–128), e epsilon-greedy decay. O epsilon inicial geralmente é 1.0 e final 0.01. A cada passo, o agente escolhe ação aleatória com probabilidade \( \epsilon \). Do contrário, escolhe \( a = \arg\max_a Q(s,a) \). O fator de desconto \( \gamma \) pondera recompensas futuras. Para exploração eficiente, usa-se também soft target updates (\( \tau \approx 0.001 \)).

Vamos formalizar a vantagem média centralizada novamente:

\[ A_{\text{centralizada}}(s,a) = A(s,a) – \frac{1}{|\mathcal{A}|}\sum_{a’}A(s,a’) \]

Então a saída final da Dueling DQN é:

\[ Q(s,a) = V(s) + A_{\text{centralizada}}(s,a) \]

Essa forma garante que o valor médio das vantagens seja zero. A função de perda é minimizada via gradiente descendente estocástico. Em muitos ambientes, a Dueling DQN alcança pontuações mais altas que a DQN padrão. Exemplos clássicos incluem o jogo Pong e o ambiente CartPole.

Exemplo clássico: CartPole com Dueling DQN

Enunciado: Um carrinho (agente) deve equilibrar um poste na vertical por 500 passos. A cada passo, ele pode empurrar o carrinho para esquerda ou direita. A recompensa é +1 por cada passo que o poste permanece em pé. O episódio termina se o poste cair (ângulo > ±12°) ou o carrinho sair dos limites. Você deve implementar um agente Dueling DQN que aprenda a equilibrar o poste. Use a biblioteca gymnasium (antigo gym). Treine por 500 episódios e mostre a evolução da recompensa média. Ao final, gere um gráfico da recompensa por episódio e da perda durante o treino.

O código acima treina o agente usando Dueling DQN. Primeiramente, a rede é definida com duas streams separadas. Depois, o agente interage com o ambiente CartPole. A memória replay guarda as últimas transições. Finalmente, dois gráficos mostram o progresso do aprendizado. Este exemplo pode ser executado diretamente no Google Colab. Aproximação de funções é utilizada para lidar com estados contínuos. Resultados melhores são obtidos com ajuste fino dos hiperparâmetros. Portanto, a arquitetura dupla é uma escolha poderosa para muitos problemas.

DQN com Fixed Q-Targets

bebê aprendendo a andar

O que é aprendizado por reforço baseado em valor

O aprendizado por reforço ensina um agente a tomar decisões. O agente recebe recompensas por ações corretas no ambiente. Primeiramente, ele aprende uma função chamada valor Q. Esta função estima a recompensa futura para cada ação. O problema baseado em valor busca maximizar essas recompensas. Por exemplo, um robô aprende a andar sem quedas. O agente não precisa de exemplos prontos para aprender. Ele descobre as melhores ações por tentativa e erro. Assim, o aprendizado ocorre através da interação direta. Esta abordagem é fundamental para inteligência artificial moderna.

Uma tabela simples guardaria os valores Q para cada estado. Contudo, essa tabela fica enorme em problemas complexos. Por exemplo, um jogo de video game tem milhões de estados. A tabela não conseguiria armazenar todos esses valores. É aí que entra a aproximação de funções. Uma rede neural é usada para estimar os valores Q. A rede neural generaliza entre estados semelhantes. Consequentemente, o agente aprende mesmo com muitos estados. Esta técnica permite resolver problemas do mundo real. Ela é chamada de Deep Q-Network (DQN).

Arquitetura do modelo DQN com experience replay

A DQN utiliza uma rede neural profunda como aproximador. A entrada da rede representa o estado atual do ambiente. A saída fornece os valores Q para todas as ações possíveis. Primeiramente, a rede possui camadas totalmente conectadas. Entre as camadas, funções de ativação ReLU são aplicadas. A camada final não possui ativação para valores livres. A arquitetura clássica contém três camadas escondidas. Cada camada escondida possui 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.

A Experience Replay guarda as experiências do agente. Cada experiência é armazenada como uma tupla (s, a, r, s’). O buffer de replay contém as últimas N experiências. Durante o treinamento, um lote aleatório é amostrado. Este processo quebra a correlação entre experiências sequenciais. Primeiramente, o aprendizado torna-se mais estável. Em segundo lugar, as experiências podem ser reutilizadas. Por conseguinte, a amostragem aleatória melhora a eficiência. O buffer típico armazena entre 10.000 e 1.000.000 transições. Este mecanismo foi proposto por Mnih et al. (2015).

Hiperparâmetros e fórmulas matemáticas

A taxa de aprendizado (alpha) controla a atualização 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 epsilon para exploração decai ao longo do treinamento. Começamos com epsilon=1.0 e terminamos com 0.01. O tamanho do lote (batch size) afeta a estabilidade. Valores comuns são 32, 64 ou 128 transições. A frequência de atualização da rede alvo é crucial. Atualizamos a cada C passos (geralmente C=1000).

A fórmula central do DQN é a equação de Bellman: \(Q(s,a) = r + \gamma \max_{a’} Q(s’, a’)\). O erro quadrático médio (MSE) é usado como função de perda: \(L = \mathbb{E}\left[\left(r + \gamma \max_{a’} Q_{target}(s’,a’) – Q(s,a)\right)^2\right]\). A rede alvo (Q_target) é uma cópia congelada da rede principal. Esta arquitetura reduz a correlação entre predição e alvo. O gradiente descendente atualiza os pesos da rede principal. Após cada C passos, os pesos são copiados para a rede alvo. O algoritmo completo converge para políticas ótimas. Vários jogos da Atari foram vencidos com esta técnica.

Enunciado do exemplo clássico: o ambiente cartpole

Você deve equilibrar um poste sobre um carrinho móvel. O ambiente se chama CartPole-v1 no 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 DQN deve aprender a política ótima. A rede neural aproximará os valores Q para cada ação. Experience Replay deve ser usado para estabilizar o treinamento.

Primeiramente, implemente o buffer de replay circular. Em segundo lugar, crie uma rede neural com 3 camadas. A entrada terá 4 neurônios (observações do ambiente). A saída terá 2 neurônios (esquerda ou direita). Treine o agente por 500 episódios no Google Colab. Ao final, exiba um gráfico das recompensas acumuladas. Mostre também o desempenho antes e depois do treinamento. O código abaixo resolve completamente este enunciado. Ele roda sem necessidade de ajustes adicionais. A política treinada equilibra o poste por centenas de passos.

O código implementa um agente DQN completo com Experience Replay. A rede neural aproxima os valores Q para cada ação possível. O buffer replay armazena as últimas 10.000 experiências. Primeiramente, o agente explora o ambiente aleatoriamente. Com o tempo, ele reduz a exploração e explora o conhecimento. As recompensas acumuladas aumentam significativamente. O poste permanece equilibrado por centenas de passos. Esta solução foi amplamente validada na literatura. O agente aprende sem nenhum conhecimento prévio do ambiente. Parabéns! Você implementou seu primeiro DQN funcional.