Q-learning through Flappy Bird

学习https://www.zhihu.com/search?type=content&q=Q-learning的笔记 

让小鸟学习怎么飞是一个强化学习的过程,强化学习中有状态 动作 奖赏三个要素,智能体根据状态采取动作,获得奖赏后再去改进这些动作,使下次再到相同的状态,智能体能做出更优的动作。


状态的选择

小鸟到下一根下侧管子的水平距离和垂直距离差


(图片来自原项目)

动作的选择

1 向上飞一下 2 什么都不做


奖赏的选择

活着的时候 每一帧给予1,死亡,给予-1000 成功经过一个水管,则给予50


关于Q

Q是动作效用函数,用于评价在特定状态下每个状态的优劣。可以看作智能体的大脑,把Q当做一张表,每一行是一个状态(dx,dy),每一列表示一个动作 飞与不飞(共两列)

例如:



m*n 行 表示m*n个状态,每个状态所对应的动作都有一个效用值,训练之后小鸟再某处飞与不飞的决策就是通过这张表决定的,小鸟先根据当前所在位置查到到对应的行,然后比较两列就是飞与不飞的值得大小,选择值大的作为当前帧的动作。

训练

那么选怎么样的策略呢(显然每种可能都遍历一遍 太繁琐) 提出了ε-greedy方法,即每个状态有ε的概率进行探索(即随机选取飞或不飞),而剩下的1-ε的概率则进行开发(选取当前状态下效用值较大的那个动作)。ε一般取值较小,0.01即可。当然除了ε-greedy方法还有一些效果更好的方法,不过可能复杂很多。

以此也可以看出,Q-learning并非每次迭代都沿当前Q值最高的路径前进。

2. Q(S,A) \leftarrow (1-\alpha)*Q(S,A) + \alpha*[R + \gamma*max_aQ(S',a)]

这个就是Q-learning的训练公式了。其中α学习速率(learning rate),γ折扣因子(discount factor)。根据公式可以看出,学习速率α越大,保留之前训练的效果就越少。折扣因子γ越大,max_aQ(S', a)所起到的作用就越大。但max_aQ(S', a)指什么呢?

小鸟在对状态进行更新时,会考虑到眼前利益(R),和记忆中的利益max_aQ(S', a))。

max_aQ(S', a)指的便是记忆中的利益。它是指小鸟记忆里下一个状态S'的动作中效用值的最大值。如果小鸟之前在下一个状态S'的某个动作上吃过甜头(选择了某个动作之后获得了50的奖赏),那么它就更希望提早地得知这个消息,以便下回在状态S可以通过选择正确的动作继续进入这个吃甜头的状态S'


可以看出,γ越大,小鸟就会越重视以往经验,越小,小鸟只重视眼前利益(R)。

根据上面的伪代码,就可以写出Q-learning的代码了。

https://github.com/SarvagyaVaish/FlappyBirdRL 项目自己试试




猜你喜欢

转载自blog.csdn.net/pihe7623/article/details/80234263