Eu tenho jogado com um algoritmo que aprende a jogar tictactoe. O pseudocódigo básico é:
repeat many thousand times {
repeat until game is over {
if(board layout is unknown or exploring) {
move randomly
} else {
move in location which historically gives highest reward
}
}
for each step in the game {
determine board layout for current step
if(board layout is unknown) {
add board layout to memory
}
update reward for board layout based on game outcome
}
}
now play a human and win :-)
Exploração: no início, o algoritmo explora agressivamente, e isso reduz linearmente. Depois de dizer mil jogos, ele explora apenas 10% dos movimentos. Todos os outros movimentos são baseados na exploração de recompensas anteriores.
Recompensas: se o jogo resultou em vitória, conceda 10 pontos. Se o jogo resultou em empate, 0 pontos, caso contrário, -5 pontos. Na verdade, essas recompensas podem ser "ajustadas", de modo que, se o jogo foi mais curto e venceu, conceda mais pontos ou, se for mais longo, conceda menos pontos. Dessa forma, o algoritmo prefere ganhar rapidamente. Isso significa que aprende a vencer o mais rápido possível, em vez de tentar vencer mais tarde. Isso é importante para que ele não perca a vitória imediatamente - se ele perdesse tal jogada, o oponente provavelmente a) se mudaria para lá para evitar que a IA vencesse da próxima vez eb) achasse que o algoritmo era estúpido porque perdeu uma "óbvia". " ganhar.
Esse algoritmo realmente aprende, para que eu possa classificá-lo como um algoritmo de aprendizado de maching.
Eu acho, mas não tenho certeza, que é um algoritmo de aprendizado reforçado. No entanto, de acordo com https://www.cse.unsw.edu.au/~cs9417ml/RL1/tdlearning.html , não se trata de aprendizado de diferenças temporais, porque não estima as recompensas até o final, e deve estar estimando a recompensa à medida que avança. Isso pode significar que não é um aprendizado reforçado.
Pergunta 1: Posso argumentar com sucesso que estou estimando a recompensa com base na história e ainda afirmar que o algoritmo é um aprendizado reforçado ou mesmo um Q-learning?
Pergunta 2: Se eu substituir a pesquisa de recompensa que é baseada no layout da placa, por uma rede neural, onde o layout da placa é a entrada e a recompensa é a saída, o algoritmo poderia ser considerado um aprendizado de reforço profundo?
Pergunta 3: Eu não acho que tenho uma taxa de aprendizado ou um fator de desconto. Isso é importante?
Percebi que o algoritmo é bastante inútil, a menos que eu o treine com pelo menos todos os movimentos que um oponente tente. Então, de certa forma, parece que estamos usando força bruta em vez de realmente "aprender". Isso me faz questionar se o tictacto de aprendizado de máquina é realmente um aprendizado. Concordo que o uso de uma rede neural para aprender o reconhecimento de imagem pode ser classificado como aprendizado porque, quando vê uma imagem desconhecida, é capaz de declarar sua classificação. Mas isso é bastante inútil para jogos como o tictactoe, onde layouts semelhantes de painéis de aparência não são totalmente relacionados (um pode levar a uma vitória, o outro pode levar a uma perda). Assim...
Pergunta 4: Os algoritmos de tictacto podem ser classificados como aprendizado real e não como força bruta?
Atualização: em relação às recompensas ... quando o algoritmo está decidindo para onde ir, calcula a recompensa para cada posição da seguinte maneira:
var total = winRewards + drawRewards + lossRewards;
move.reward = (100*(winRewards/total)) + (10*(drawRewards/total)) + (-1*(lossRewards/total));
Eu divido pelo número total de pontos (para cada jogada), porque, caso contrário, parece aprender que um lugar é GRANDE e não dá chance aos outros. Dessa forma, calculamos a proporção de vitórias, independentemente da frequência com que elas foram jogadas. É normalizado em comparação com os outros.
O código está disponível aqui: https://github.com/maxant/tictactoe/blob/master/ai.js
ATUALIZAÇÃO # 2: Desde então, descobri que esse algoritmo não pode ser classificado como força bruta, porque na verdade ele não aprende muitos jogos antes de se tornar um especialista. Detalhes aqui: http://blog.maxant.co.uk/pebble/2018/04/11/1523468336936.html