强化学习

一、初识强化学习

1. 强化学习和蒙特卡洛树搜索

因为这两周学习了蒙特卡洛树搜索算法,当时看了相关资料介绍,蒙特卡洛方法属于强化学习的范畴,所以我就去看了西瓜书的最后一章强化学习。我看书的时候就觉得蒙特卡洛树搜索算法和强化学习有着非常紧密的联系,书上提到的exploration和exploitation、蒙特卡洛方法、奖励函数等内容和蒙特卡洛树搜索的基本思想有很多相同的地方。

2. 强化学习与机器学习

强化学习和之前学过的一些机器学习算法有着明显的不用,之前学的机器学习算法主要可以分为监督学习(分类)和非监督学习(聚类),而强化学习不同于监督学习和非监督学习,强化学习是通过奖励值来训练模型,而监督学习是通过训练数据和对应的标签来训练模型的,非监督学习没有标签也没有奖励值,是通过数据特征来训练模型的,而且强化学习的奖励值是在执行完动作后给出的,监督学习的标签是一开始就有的。

3. 强化学习八个要素

和蒙特卡洛树搜索一样,以基于强化学习的井字棋为例

  1. 环境的状态S:即棋盘的状态
  2. 个体的动作A:即某一方落子
  3. 环境的奖励R:即分出胜负后的反馈奖励
  4. 个体的策略π:即在哪落子
  5. 个体在策略π和状态s时,采取行动后的价值 \(v_π(s)\):即在当前棋盘状态s下采取策略π下了某个子后得到的价值
  6. 奖励衰减因子γ:大小在[0,1],取0表示价值 \(v_π(s)\)只与当前奖励有关,与后续奖励无关,但是大部分情况衰减因子是大于0的,表示价值 \(v_π(s)\)不仅与当前奖励有关,而且与后续奖励也有关。例如下象棋的时候,马吃车的时候不仅要考虑这个动作产生的当前收益,也要考虑后续收益。
    \[v_π(s)=E_π(R_{t+1}+γR_{t+2}+γ^2R_{t+3}+...|S_t=s)\]
  7. 状态转化模型\(P_{ss'}^a\):即在状态s下,采取动作a后转移到我状态s‘的概率
  8. 探索率?:即在选择落子时,以1-?概率选择价值最高的动作,以?概率选择其他动作

说到这就可以发现强化学习和蒙特卡洛树搜索的一些相同的地方了,前面说到蒙特卡洛树搜索中的四步选择、扩展、模拟和反向传播可以看做是上面八个要素的变形。

二、马尔科夫决策过程(MDP)

1. 为什么要引入MDP?

因为正常情况下,上面提到强化学习的状态转化模型,\(P_{ss'}^a\)不仅与上个状态有关,还跟上个状态之前状态都要关系,所以为了简化强化学习模型,我们引入MDP,假设\(P_{ss'}^a\)只跟上个状态s有关(隐马尔科夫模型也有提到),同理策略\(\pi\)和价值函数\(v_\pi(s)\)也基于这个假设。

2. MDP价值函数和贝尔曼方程

首先我们引入动作价值函数
\[q_π(s,a)=E_π(R_{t+1}+γR_{t+2}+γ^2R_{t+3}+...|S_t=s,A_t=a)\]
即在当前棋盘状态s下采取策略π执行动作a后得到的价值
我们可以推导出价值函数\(v_π(s)\)的递推关系:
\[v_π(s)=E_π(R_{t+1}+γv_π(S_{t+1})|S_t=s) \]
上面这个方程称为贝尔曼方程。
同理我们可以推导出动作价值函数\(q_π(s,a)\)的贝尔曼方程:
\[q_π(s,a)=E_π(R_{t+1}+γq_π(S_{t+1},A_{t+1})|S_t=s,A_t=a)\]

3. 价值函数和动作价值函数的关系

根据\(v_π(s)和q_π(s,a)\)两个函数的定义可以得到:
\[v_π(s) = \sum_{a∈A}π(a|s)q_π(s,a)\]
这个公式表示价值函数的值等于动作价值函数基于策略\(π\)的期望值
根据上面的贝尔曼方程可得:
\[q_π(s,a)=\sum_{s'∈s}P_{ss'}R_{ss'}+γ\sum_{s'∈s}P_{ss'}^av_π(s')\]
这个公式表示动作价值函数的值等于当前奖励的期望值加上下一状态奖励的期望值的衰减
综合上面两个式子可得:
(对应西瓜书上的公式16.8)
\[v_π(s) = \sum_{a∈A}π(a|s)(\sum_{s'∈s}P_{ss'}R_{ss'}+γ\sum_{s'∈s}P_{ss'}^av_π(s'))\]
(对应西瓜书上的公式16.10)
\[q_π(s,a)=\sum_{s'∈s}P_{ss'}R_{ss'}+γ\sum_{s'∈s}P_{ss'}^a \sum_{a'∈A}π(a'|s)'q_π(s',a')\]

3. 策略改进(最优价值函数)

基于某个策略按照上述公式求得价值函数和动作价值函数后,发现它不是最优的策略,所以我们必须要找到这个最优策略,这样就可以用强化学习解决某个问题。
最优价值函数\(v_*(s)\)
\[v_*(s) = \underset{a}{max}q_*(s,a)\]
\[q_*(s,a)=\sum_{s'∈s}P_{ss'}R_{ss'}+γ\sum_{s'∈s}P_{ss'}^av_*(s')\]
所以,同理可以得到:
(对应西瓜书上的公式16.14)
\[v_*(s) =\underset{a}{max} (\sum_{s'∈s}P_{ss'}R_{ss'}+γ\sum_{s'∈s}P_{ss'}^av_*(s'))\]
(对应西瓜书上的公式16.15)
\[q_*(s,a)=\sum_{s'∈s}P_{ss'}R_{ss'}+γ\sum_{s'∈s}P_{ss'}^a \sum_{a'∈A}π(a'|s)'q_*(s',a')\]

三、蒙特卡罗强化学习

书上一共讲了四种策略改进的方法,从而找到最优策略,四种方法分别为策略迭代和值迭代(动态规划方法)、蒙特卡罗方法、时序差分法和值函数近似方法(Sarsa和Q-学习),由于这周有考试,所以这里只介绍与MCTS联系紧密的蒙特卡罗方法,其余三种方法后面有时间再补上。
首先蒙特卡罗强化学习是基于免模型学习的,免模型学习的含义就是学习算法不依赖于环境建模,你不知道强化学习的环境状态转移概率、奖赏函数等要素,这样就无法计算状态-动作价值函数,无法使用策略迭代的方法来求解强化学习问题了,而蒙特卡罗强化学习通过多次随机采样(类比MCTS的Simulate)来近似估计状态-动作价值函数,以此来改进策略。
蒙特卡罗强化学习过程是从初始状态开始,使用某种策略采样n次,计算采样中出现的每一对状态-动作的累积奖赏采样值,得到每个状态对应的动作价值函数值,选取最大的动作价值对应的策略,不断迭代,直到满足条件选出最优策略。
采样使用的是?-贪心法(类比MCTS的UCT函数),即以1-?概率选取当前最优动作,以?概率选取其他动作,这么做和UCT函数的设计目的一样,为了平衡exploitation和exploration。
AlphaGo通过深度学习中的深度卷积神经网络,训练了大约三千万组人类的下棋数据,打败了人类围棋顶尖高手,而AlphaZero使用强化学习的方式,通过自己和自己下棋的方式训练,最终打败了AlphaGo。
Mastering the game of Go with deep neural networks and tree search这篇论文介绍了AlphaGo的基本原理,它将MCTS和神经网络结合在一起,论文我还没时间看,如果能把这个方法应用到井字棋程序效果应该会比只使用MCTS策略更好一些。

相关推荐