源代码
可以参考莫烦的GitHub
概念区分
分类方式主要有
可以观看莫烦制作的三分钟的视频进行了解:
Q Learning和Sarsa
关于Q Learning可以看以下课件了解:
需要注意的是,图中1处的Q应是递推的,直到游戏结束。但在实际更新Q表时,我们可以以当前Q表的Q值来近似替代。可以这么理解:初始时刻我们可以认为Q表中的Q值都是已经递推过后的值,那么我们的近似相当于总是滞后一次更新。
在此基础上,只要了解Sarsa与Q Learning的一些区别就可以掌握两者的概念了。
两者的区别
Q-Learning的单回合算法过程:
给定初始状态s
loop until end:
- 根据初始状态s,从给定的R表中找出当前可执行的动作集合A
- 根据ε-greedy策略选择动作a,比如给定ε=0.9
- 生成一个(0,1)范围的随机数,如果该数大于ε,则这一步将在A中随机选取一个动作执行。这一步也称之为开发(Exploitation)。
- 如果该数小于ε,则这一步将按照当前的Q表选择奖励最多的动作a。
- 执行动作a,则此时状态s更新为s’=a,以此状态在当前Q表中寻找最大化奖励(Q(s’,a’))的下一步动作a’,并将这下一步的奖励乘以衰减系数加上当前动作a的奖励r赋予到这一步的Q值Q(s,a)上。
需要注意的是,第三步并没有决定下一步的动作,每一次循环仅仅是在第二步中决定了当前的动作。
Sarsa的单回合过程与Q-Learining基本类似:
给定初始状态s,如上根据ε-greedy策略选择动作a
loop until end:
- 执行动作a,更新当前状态s’=a。
- 同样的根据ε-greedy策略选择下一步动作a’。
- 令当前a=a’(为了让下一循环开始时执行a’)。
- 更新Q值Q(s,a),这个过程中涉及两个Q值,一个是s状态下采取动作a的Q(s,a),这也是我们本步需要更新的Q值,另外当我们在下一步采取动作a’后,可以查询当前Q表得到Q(s’=a,a’),然后将Q(s’=a,a’)乘以衰减系数加上当前动作a的奖励r赋予到Q(s,a)上。Sarsa有别于Q Learning的第二点就是在这一步。
Deep Q-Learning Network(DQN)
有时我们需要分析的状态可能是非常复杂的,比如下围棋,状态空间高达10,远超宇宙中的原子总和。这样的维度灾难意味着我们无法建立Q-Learning中的Q表。这时就可以通过神经网络极强的拟合性去拟合一个Q值函数,我们输入状态和拟执行的动作,输出得到相应的Q值。更进一步的,我们可以只输入状态,直接由网络输出各动作对应的Q值向量。
具体过程可以参考:
深度解读DQN算法
对DQN(深度强化学习)的理解
Proximal Policy Optimization(PPO)
建议结合B站视频和以下笔记学习,视频链接见下方笔记内容:
语雀内容
