Q-learning com Rede Neural como aproximação de função

11

Estou tentando usar uma rede neural para aproximar o valor de Q no aprendizado de Q, como em Perguntas sobre Q-Learning usando redes neurais . Conforme sugerido na primeira resposta, estou usando uma função de ativação linear para a camada de saída, enquanto ainda estou usando a função de ativação sigmóide nas camadas ocultas (2, embora eu possa alterar isso mais tarde). Também estou usando um único NN que retorna uma saída para cada ação conforme recomendado.Q(a)

No entanto, o algoritmo ainda está divergindo pelo simples problema de balanceamento de carrinho. Então, receio que meu Q-update esteja errado. Após a inicialização, o que eu fiz em cada etapa é o seguinte:

  • Calcule usando a propagação direta do NN para todas as ações.Qt(st)
  • Selecione uma nova ação, , aterre em um novo estado s t .atst
  • Calcule usando a propagação direta do NN para todas as ações.Qt(st+1)
  • Qt+1(st,at)=Qt(st,at)+αt[rt+1+γmaxaQ(st+1,a)Qt(st,at)]atQt+1(s,at)=Qt(s,at)
  • Defina o vetor de erro comoe=QtargetQt=Qt+1Qt
  • Backpropagate o erro através do NN para atualizar as matrizes de peso.

Alguém poderia me indicar onde eu errei?

Além disso, você acha que devo incluir também um termo tendencioso na camada de entrada e na primeira camada oculta (ou seja, para as funções sigmóides)? Isso fará diferença?

Muito obrigado antecipadamente por sua ajuda. Posso ajudar a esclarecer a pergunta ou compartilhar o código, se necessário.

Enrico Anderlini
fonte

Respostas:

9

Seu alvo deve ser apenas

rt+1+γmaxaQ(st+1,a) .

Observe que seu termo de erro (correto) pode ser reescrito como rt+1+γmaxaQ(st+1,a)Qt

que é o termo entre colchetes na fórmula de atualização. Isso será multiplicado pela taxa de aprendizado de NN e outros termos de retropropagação durante o aprendizado e depois adicionados aos pesos anteriores, assim como a fórmula de atualizaçãoQ

rcpinto
fonte
Obrigado pela dica! Dessa forma, posso evitar erros numéricos no valor alvo: como você diz, não faz sentido adicionar e subtrair . Qt
Enrico Anderlini
No entanto, meu NN + Q-learning ainda não está convergindo. Assim, se o método é correto, eu acho que eu vou tentar brincar com a taxa de aprendizagem, eo número de neurônios na camada escondida (s)
Enrico Anderlini
1
Sim, você deve fazer isso (tente usar a função de transferência ReLU também). Mas observe que o Q-Learning não tem garantias de convergência com aproximação de função. Se sua próxima tentativa não funcionar, convém experimentar o Advantage Learning. E, finalmente, o problema pode ser que seus dados não são iid. Então, você precisa implementar o Experience Replay.
Rcpinto 9/03/16
Eu tenho uma extensão para a pergunta. Entendo o algoritmo como mencionado na pergunta, mas estou confuso sobre os termos e . Se a recompensa para o jogo é conhecida apenas no final do jogo (em uma condição de vitória ou perda), como devemos oferecer a recompensa para uma etapa intermediária? Qt+1rt+1
Kanishka Ganguly 26/11
1
Você não, é zero. Mas será propagado lentamente pelos valores Q para estados anteriores, porque o valor Q é uma estimativa de recompensas acumuladas no futuro .
Rcpinto