七月算法强化学习 第六课 学习笔记
强化学习要点大纲:
1.强化学习的难点?
1)credit assignment problem
2)the exploration-exploitation dilemma
2.怎么定义强化学习?
1)马尔科夫决策过程
3.怎么把“眼光”放长远?
1)discounted future reward
4.怎么预估“未来收益”?
1)table-based Q-learning
5.状态空间太大怎么办?
1)使用深度神经网络
6.如何实际应用?
1)“重演”策略
强化学习问题
o Atari Breakout游戏
n 三种动作:向左,向右以及开火(把球射出)
n 状态:所处的位置,屏幕上方状况等
n 奖励:得分增减
o 传统有监督?无监督?
o 强化学习:有稀疏并延时的标签——奖励
o 信用分配问题 (credit assignment problem)
n 击中砖块并且得分和前一时刻如何移动横杆没有直接关系
n 前面某一时刻的横杆移动有作用
o 探索-利用困境(exploration-exploitation dilemma)
n 游戏开始,只发射球,不移动横杆,你总是能得10分的
n 满足于得分还是去探索更多的可能性?(可能更好或者更坏)
马尔科夫决策过程(MDP)
o 操作者或智能体(agent)
o 状态(state)(比如横杆的位置,球的位置,球的方向,当前环境中的砖块等等)
o 动作(actions)(比如向左或向右移动横杆)
o 奖励(reward)(比如分数的增加)
o 策略(policy):在state下采取行动的原则
强化学习的难点?
Discounted Future Reward
Q-learning
Deep Q Network
o 能不能设计一种通用的表示游戏状态的方法呢? => 屏幕像素
o 采用连续两个游戏屏幕的像素,球速和方向等各种信息也可以表示出来
o 屏幕大小84*84,每个像素点有256个灰度值,总共256^(84*84*4)~10^67970种可能的状态
o Q-table有10^67970行,且非常稀疏(有很多状态遇不到!!)
o 用一个神经网络对Q-函数进行神经网络接收一个状态(连续四步的屏幕)和一个动作,然后输出对应的Q-函数的值
o 改造一下:只接受一个状态作为输入,然后输出所有动作的分数(具体来讲是动作个数大小的向量),这样一次前向运算可以得到所有动作的得分
Experience Replay 经验回放
1)我们可以用Q-learning的算法估计未来奖励,并能够用一个卷积神经网络近似Q-函数。
2) 但使用Q 值近似非线性的Q-函数可能非常不稳定。即使使用很多小技巧使得这个函数收敛。在单GPU上也可能需要一个星期的时间训练模型。
最重要的技巧是经验回放(experience replay)
p 在玩游戏的过程中,所有经历的都被记录起来。
p 训练神经网络时,我们从这些记录的中随机选取一些mini-batch作为训练数据训练,而不是按照时序地选取一些连续的。
p 按时序选取,训练实例之间相似性较大,网络很容易收敛到局部最小值
Exploration-Exploitation
1)Q-learning算法尝试解决信用分配问题
p 通过Q-learning,奖励被回馈到关键的决策时刻
2)依旧存在的是探索-利用困境
p 在游戏开始阶段,Q-table或Q-network是随机初始化的。它给出的Q-值最高的动作是完全随机的,智能体表现出的是随机的“探索”。
p 当Q-函数收敛时,随机“探索”的情况减少。所以,Q-learning中包含“探索”的成分。但是这种探索是“贪心”的,它只会探索当前模型认为的最好的策略。
3)一种简单修正技巧:
p \epsilon-贪心探索
p 以\epsilon的概率选取随机的动作做为下一步动作,1-\epsilon的概率选取分数最高的动作
p DeepMind的系统中,\epsilon随着时间从1减少到0.1。这意味着开始时,系统完全随机地探索状态空间,最后以固定的概率探索。