最近学习了RL, 感觉RL属于机器学习中比较有意思的一个领域,监督学习、无监督学习都是扔一堆静止的数据去训练你的模型,而强化学习是让模型与环境的交互中进行学习,让人感觉更像一种有智慧的生物(然而并不是)。比如需要让机器学会玩一个游戏
有两种方法:
1. 有监督学习 (专家级玩家玩无数次,记录下结果作为有标记数据)
2. 强化学习
强化学习是在与环境的交互中不断得到反馈进行学习的,就像一个真实的生命,基本流程如下图所示。
上图中的Agent可以理解为我们的模型,在它与环境交互的过程中,不断感知环境的状态,从而做出决策,采取某个action,然后再从环境中得到reward,根据reward的大小来调整自己的策略。
强化学习在经典物理学的认知范畴内,认为时间可以切分成若干有严格先后顺序的时刻,因此可以形成
这样的状态,动作和回报系列。
强化学习还有一个重要的确定性假设,也就是说,对于某个输入状态
有了时间和确定性的假设,就有了MDP(Markov Decision Process) 这个概念用于描述这个世界。
马尔科夫决策过程(MDP)
MDP的假设:未来只取决于当前。如果我们站在上帝视角下看,我们知道这个世界的每个物体的状态,那么未来的变化只跟当前的状态相关,和过去没有关系。用公式表示也就是
即下一时刻的状态取决于当前的状态与动作。这里的状态指的是完全可观察的全部环境状态。
估值函数
使用强化学习的目标是为了让模型学习成为特定场景下的master,比如玩一个游戏,根据环境的变化采取相应的动作,取得尽量高的rewards。那么评价这个模型是否优秀,就看使用它能否取得尽量高的rewards。因此我们需要去量化rewards。
上述公式中
实际中我们一般会使用一个小于1的值
因此一个好的模型,就是能够做出决策,使得
估值函数用
Value-Action 函数
定义
也称为Q-function : 代表在给定状态下采取动作a的Quality。
我们的模型也就是要学习到这么一个Q-function,使得输入给定的状态,能够返回每个action的Q值,然后选取Q值最大的action。
Q-Learning
接下来的问题就是如何得到Q-function , 根据Bellman Equation
最简单的情形,所有状态是离散的,可以列举出所有的状态与动作。那么就可以给出Q矩阵,这时候Q函数就是一个查表的过程,我们的目的就是要将矩阵中填上相应的值。迭代的过程如下:
- 使用任意值初始化Q[num_states, num_actions]
- 获取初始状态s
repeat
选取并执行一个动作a
获取reward r 以及新的状态s’
更新Q[s,a]=Q[s,a]+α(r+γmaxa‘Q[s′,a′]−Q[s,a])
until 终止条件
现实场景中,这种求解Q函数的方案是不实用的,因为状态与动作必须全部列举出来,比如输入的状态是原始的图像,那Q矩阵就可能非常大.. 比如
拟合Q-Function
因为现实中存在无法穷举所有状态的情形,因此使用一个带有参数的函数来近似Q函数
可以使用神经网络来拟合Q函数,这个神经网络称为Q-Network。
如上图所示,神经网络接收输入状态,输出每个action的Q值。参数
如何求解
因为我们的目标是估计Q值,Q值是连续的,因此是一个回归问题。那么目标函数可以选择MSE(最小均方差)。即
因此梯度为
使用梯度下降优化迭代优化目标函数即可。
算法稳定性问题
有了Q-Network与训练样本,就可以开始训练模型了,但是Q-Network 有可能不稳定,导致不收敛。
因为神经网络有两个假设:
- 训练数据集符合i.i.d.(独立同分布)条件
- 数据分布是固定的
而在强化学习中
1. 不同时刻的状态是高度相关的。
2. 数据分布有可能改变。
因为state影响action的选取,action又导致下一个state,如果将一把游戏的所有state,action,reward作为一个batch给神经网络训练,那么不同batch的数据集的数据分布是可能不一致的。
Google的文章 [Human-level control through deep reinforcement learning]中使用Experience Replay(经验回放)策略解决上述问题。
Experience Replay
这个策略其实就是创建一个replay memory
采用这个策略就可以消除样本间的相关性,并且使数据集的分布尽量保持不变。
实践中
如何获取尽量全的样本
我们希望学习出一个模型,对于任意的状态,都能给出最优的action。在凑齐样本集的问题上就是,怎样获取尽量丰富的
所以在训练的开始阶段,应该增加样本的随机性,使用随机策略随机选取action。而在后期减少使用随机策略,使用训练出的Q-Network判断选取action。 即Exploration-Exploitation 策略。
Exploration-Exploitation
Exploration-Exploitation(探索-利用)策略即同时有两种选取action的方法,探索表示随机选取action,利用表示使用Q-Network判断得出的action。
实践中,使用