我一直在玩一种学习如何玩tictactoe的算法。基本伪代码是:
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 :-)
探索:算法一开始是积极探索的,这会线性减少。在说一千场比赛之后,它只探索了 10% 的动作。所有其他动作都是基于对先前奖励的利用。
奖励:如果游戏获胜,则奖励 10 分。如果比赛结果为平局,则为 0 分,否则为 -5 分。实际上,这些奖励是可以“调整”的,如果游戏时间较短并且获胜,则奖励更多积分,或者如果游戏较长则奖励较少积分。这样,算法更喜欢快速获胜。这意味着它学会了尽快取胜,而不是以后再取胜。这很重要,这样它就不会立即错过胜利——如果它错过了这样的一步,对手可能会 a) 移动到那里以避免让 AI 下次获胜,并且 b) 认为算法很愚蠢,因为它错过了一个“明显的“ 赢。
该算法确实可以学习,因此我可以将其归类为机加工学习算法。
我认为,但我不确定,这是一种强化学习算法。但是,根据https://www.cse.unsw.edu.au/~cs9417ml/RL1/tdlearning.html这不是时间差异学习,因为它直到最后才估计奖励,应该是估计随之而来的奖励。这可能意味着它不是强化学习。
问题 1:我能否成功地辩称我是根据历史估算奖励,并且仍然声称该算法是强化学习甚至 Q 学习?
问题 2:如果我将基于棋盘布局的奖励查找替换为以棋盘布局为输入、奖励为输出的神经网络,该算法是否可以视为深度强化学习?
问题 3:我不认为我有学习率或折扣因子。那很重要吗?
我注意到该算法非常无用,除非我至少用对手尝试的每一个动作来训练它。所以在某种程度上,感觉就像是在使用蛮力,而不是真正的“学习”。这让我质疑机器学习 tictactoe 是否真的在学习。我同意使用神经网络学习图像识别可以归类为学习,因为当它看到未知图像时,它能够说明其分类。但这对于像 tictactoe 这样看起来相似的棋盘布局完全不相关的游戏来说毫无用处(一个可能会导致胜利,另一个可能会导致失败)。所以...
问题 4:tictactoe 算法能否被归类为真正的学习而不是简单的蛮力?
更新:关于奖励......当算法决定去哪里时,它计算出每个位置的奖励如下:
var total = winRewards + drawRewards + lossRewards;
move.reward = (100*(winRewards/total)) + (10*(drawRewards/total)) + (-1*(lossRewards/total));
我除以总点数(每次移动),因为否则它似乎知道一个地方很棒并且不给其他地方机会。通过这种方式,无论播放频率如何,我们都能计算出胜率。与其他人相比,它是标准化的。
代码可在此处获得:https ://github.com/maxant/tictactoe/blob/master/ai.js
更新#2:我后来发现这个算法不能被归类为使用蛮力,因为它在成为专家之前实际上并没有学习那么多游戏。详情在这里:http ://blog.maxant.co.uk/pebble/2018/04/11/1523468336936.html