Pergunta

Eu tenho uma rede neural artificial que joga o jogo da velha - mas ainda não está completa.


O que ainda tenho:

  • a matriz de recompensa "R [t]" com valores inteiros para cada passo de tempo ou movimento "t" (1= jogador A vence, 0= empate, -1= jogador B vence)
  • Os valores de entrada são propagados corretamente pela rede.
  • a fórmula para ajustar os pesos:

insira a descrição da imagem aqui


O que está faltando:

  • o aprendizado TD: ainda preciso de um procedimento que "retropropaga" os erros da rede usando o algoritmo TD (λ).

Mas eu realmente não entendo esse algoritmo.


Minha abordagem até agora ...

O parâmetro de redução do traço λ deve ser "0,1", pois os estados distais não devem receber tanto da recompensa.

A taxa de aprendizagem é de "0,5" em ambas as camadas (entrada e oculta).

É um caso de recompensa atrasada: a recompensa permanece "0" até o final do jogo. Em seguida, a recompensa torna-se "1" para a vitória do primeiro jogador, "-1" para a vitória do segundo jogador ou "0" em caso de empate.


Minhas perguntas:

  • Como e quando você calcula o erro da rede (erro TD)?
  • Como você pode implementar a "retropropagação" do erro?
  • Como os pesos são ajustados usando TD (λ)?

Muito obrigado desde já :)

Foi útil?

Solução

Se você quer mesmo fazer este trabalho, entender TD-lambda seria muito útil.O livro de Sutton e Barto, "Reinforcement Learning" está disponível gratuitamente emFormato HTML e cobre esse algoritmo em detalhes.Basicamente, o que TD-lambda faz é criar um mapeamento entre o estado do jogo e a recompensa esperada no final do jogo.À medida que os jogos são jogados, os estados com maior probabilidade de levar a estados vencedores tendem a obter valores de recompensa esperados mais altos.

Para um jogo simples como o jogo da velha, é melhor começar com um mapeamento tabular (apenas rastreie um valor de recompensa esperado para cada estado de jogo possível).Depois de fazer isso funcionar, você pode tentar usar um NN para o mapeamento.Mas eu sugeriria tentar um projeto NN mais simples e separado primeiro ...

Outras dicas

Também estou confuso sobre isso, mas acredito que é assim que funciona:

Começando pelo nó final, você verifica R, (saída recebida) e E, (saída esperada).Se E= R, está tudo bem e você não tem alterações a fazer.

Se E!= R, você vê o quão longe estava, com base em limites e outros enfeites, e então muda os pesos ou limite para cima ou para baixo um pouco.Em seguida, com base nos novos pesos, você volta e adivinha se estava ou não muito alto ou muito baixo e repete, com um efeito mais fraco.

Nunca tentei realmente esse algoritmo, mas essa é basicamente a versão da ideia conforme eu a entendo.

Pelo que me lembro, você faz o treinamento com um conjunto de resultados conhecido - então você calcula a saída para uma entrada conhecida e subtrai seu valor de saída conhecido - esse é o erro.

Então você usa o erro para corrigir a rede - para uma única camada NN ajustada com a regra delta eu sei que um ípsilon de 0,5 é muito alto - algo como 0,1 é melhor - mais lento, mas melhor.Com a retropropagação, é um pouco mais avançado - mas, pelo que me lembro, a descrição da equação matemática de um NN é complexa e difícil de entender - não é tão complicada.

dê uma olhada em http://www.codeproject.com/KB/recipes/BP.aspx

ou google para "backpropagation c" - provavelmente é mais fácil de entender no código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top