Como a perda de DQN é derivada (ou teoricamente motivada por) a equação de Bellman e como ela está relacionada à atualização do Q-learning?
Estou fazendo um projeto sobre Aprendizado por Reforço. Programei um agente que usa DDQN. Existem muitos tutoriais sobre isso, então a implementação do código não foi tão difícil.
No entanto, tenho problemas para entender como se deve chegar a esse tipo de algoritmo partindo da equação de Bellman, e não encontro uma boa explicação compreensível abordando essa derivação / caminho de raciocínio.
Então, minhas perguntas são:
- Como a perda para treinar o DQN é derivada (ou teoricamente motivada) da equação de Bellman?
- Como isso está relacionado à atualização usual do Q-learning?
De acordo com minhas notas atuais, a equação de Bellman se parece com isto
$$Q_{\pi} (s,a) = \sum_{s'} P_{ss'}^a (r_{s,a} + \gamma \sum_{a'} \pi(a'|s') Q_{\pi} (s',a')) \label{1}\tag{1} $$
que, no meu entendimento, é uma expressão recursiva que diz: O par estado-ação dá uma recompensa que é igual à soma de todos os estados possíveis $s'$ com a probabilidade de chegar a este estado depois de agir $a$ (denotado como $P_{ss'}^a$, o que significa que o ambiente atua sobre o agente) vezes a recompensa que o agente obteve ao agir $a$ no estado $s$ + soma descontada da probabilidade das diferentes ações possíveis $a'$ vezes a recompensa do estado, par de ação $s',a'$.
A iteração do Q-Learning (etapa intermediária) é frequentemente indicada como:
$$Q^{new}(s,a) \leftarrow Q(s,a) + \alpha (r + \gamma \max_a Q(s',a') - Q(s,a)) \label{2}\tag{2}$$
o que significa que o novo estado, recompensa de ação é o antigo valor Q + taxa de aprendizagem, $\alpha$, vezes a diferença temporal, $(r + \gamma \max_a Q(s',a') - Q(s,a))$, que consiste na recompensa real que o agente recebeu + um fator de desconto vezes a função Q deste novo par estado-ação menos a função Q antiga.
A equação de Bellman pode ser convertida em uma regra de atualização porque um algoritmo que usa essa regra de atualização converge, como afirma esta resposta .
No caso de (D) DQN, $Q(s,a)$ é estimado por nosso NN que leva a uma ação $a$ e nós recebemos $r$ e $s'$.
Então nós alimentamos $s$ assim como $s'$em nosso NN (com DQN duplo, os alimentamos em diferentes NNs). O$\max_a Q(s',a')$é executado na saída de nossa rede de destino. Este valor q é então multiplicado por$\gamma$ e $r$é adicionado ao produto. Então, essa soma substitui o valor q do outro NN. Uma vez que este NN básico foi enviado$Q(s,a)$ mas deveria ter produzido $r + \gamma \max_a Q(s',a')$ treinamos o NN básico para alterar os pesos, de modo que ele produza mais perto dessa diferença temporal de destino.
Respostas
A equação de Bellman em RL é geralmente definida $$v_\pi(s) = \sum_a \pi(a|s) \sum_{s', r} p(s', r|s, a)\left[r + v_\pi(s')\right] = \mathbb{E}_{s' \sim p, a \sim \pi}\left[r(s, a) + v_\pi(s')\right] \; .$$A maneira como você escreveu está correta, mas pensei apenas em apontar isso. Independentemente disso, sua intuição está correta no sentido de que expressa uma relação recursiva, de modo que o valor de seu estado atual$s$ é igual à soma da recompensa esperada desse estado mais o valor esperado do estado para o qual você faz a transição.
Na verdade, você implementa a atualização do Q-learning no Deep Q-Learning. A função de perda que você minimiza no DQN é$$ L(\theta) = \mathbb{E}_{(s,a,r,s')\sim U(D)}\left[\left( r + \gamma \max_{a'}Q(s', a'; \theta^-) - Q(s, a; \theta)\right)^2 \right]\;$$ Onde $U(D)$ denota uniformemente aleatoriamente a partir do buffer de reprodução $D$ e $\theta$ são seus parâmetros de rede (a rede parametriza a função Q), e $\theta^-$ são uma iteração anterior dos parâmetros que são atualizados a cada $c$ episódios para ajudar na convergência da rede.
Como você pode ver, a função de perda está minimizando o erro 'erro Bellman' da sua equação 2. Vamos pensar sobre o motivo disso.
A atualização TD que você fornece está mudando gradualmente o valor Q para $(s, a)$ em direção $r + \max_a Q(s', a)$ - isso é o que queremos afinal, uma vez que eventualmente converge para a função Q ótima.
Agora vamos pensar sobre o caso do Deep Q-learning. Queremos que nossa rede se aproxime$Q(s, a)$ e assim, se treinarmos a rede, usando a perda do MSE, com $r + \max_a Q(s', a)$ como nosso alvo, então nossa rede será gradualmente mudada para a previsão $r + \max_aQ(s', a)$ (o que novamente nos daria valores Q ideais para pares de ação de estado), assim como com a atualização TD.
Isso pressupõe que você saiba como funciona o treinamento de redes neurais, então, se não souber, recomendo fazer / pesquisar uma pergunta relevante que explique isso.