强化学习之Q学习实验描述
一.强化学习简介
强化学习是一类特殊的机器学习算法,它借鉴于行为主义心理学。算法要解决的问题是智能体在环境中怎样执行动作以获得最大的累计奖励。

图1. 强化学习的基本原理
智能体是强化学习中的动作实体,对于自动驾驶的汽车,环境是当前的路况。在每个时刻智能体和环境有自己的状态,如汽车当前位置和速度,路面上的车辆和行人情况。智能体根据当前状态确定一个动作,并执行该动作。之后它和环境进入下一个状态,同时系统给它一个反馈值,对动作进行奖励或惩罚,以迫使智能体执行期望的动作。上图是智能体和环境交互的示意图。强化学习是解决这种决策问题的一类方法。与其他机器学习算法不同,算法要通过样本学习得到一个映射函数π\pi,其输入是当前时刻环境信息,输出是要执行的动作:
a=π(s)a = \pi ( s )
其中ss为状态,aa为要执行的动作,状态和动作分别来自状态集合和动作集合。强化学习其实是一种无监督学习,它不断从一个状态转移到另一个状态,直到到达目标。智能体的每一次探索称为一个片段(episode),在每个episode中,智能体从任意状态到达目标状态。当它到达目标状态后,一个episode就结束了,接着进入另一个。
时序差分学习是强化学习中的一种算法。它结合了蒙特卡洛算法与动态规划算法的思想,执行一个动作之后就进行价值函数估计,无需使用包括终止状态的完整episode。它包括Q-Learning和Sarsa 两个算法。
时序差分算法用贝尔曼方程估计价值函数的值,然后构造更新项。迭代更新公式为:
V(s)=V(s)+α(R+γV(s)V(s))V(s)=V(s)+\alpha (R+\gamma V(s^{'})-V(s))
算法用当前动作的立即回报值与下一状态当前的状态价值函数估计值之和构造更新项,更新状态的价值函数:
R+γV(s)R+\gamma V(s^{'})
这称为时间差分,这里迭代的逐步更新价值函数。在上式中没有使用状态转移概率,而是和蒙特卡洛算法一样随机产生一些样本来进行计算,因此称为无模型的算法。
用于估计状态价值函数时,算法的输入为某一策略π\pi,输出为该策略的状态值函数。完整的算法流程如下:
Step1:初始化所有状态的价值函数V(s)V(s),可以全部初始化为0
Step2: 对于所有的episode循环
2.1选择一个初始状态ss
2.2循环,对于episode中的每一步
(1) 按照策略π\pi为状态ss确定一个动作aa来执行
(2) 执行动作aa,得到立即回报RR以及下一个状态ss^{'}
(3) 更新价值函数:V(s)=V(s)+α(R+γV(s)V(s))V(s)=V(s)+\alpha (R+\gamma V(s^{'})-V(s))
(4) 进入新状态:s=ss=s^{'}
和动态规划算法一样,实现时需要将状态价值函数存在一维数组中,然后根据公式迭代更新数组中的每个元素,直到收敛。

二.Q-Learning算法
本实验“小红帽找奶奶”的游戏就是采用了Q-Learning的算法。Q学习中一个重要的中间结果是Q表。Q表格一般以状态为行,行为为列。对于状态数目未知的情形,可以让Q从一个元素出发,每次发现一个新的状态时就可以在Q中增加相应的一行。
Q学习的算法转移规则如下式所示:
Q(s,a)=Q(s,a)+α(R+γmaxaQ(s,a)Q(s,a))Q(s,a)=Q(s,a)+\alpha (R+\gamma \max_{a^{'}} Q(s^{'},a^{'})-Q(s,a))
其中,(s,a)表示当前状态和行为,(s’,a’)表示下一状态和行为,γ\gamma是学习参数,为在0到1之间的常数。(R)为reward值的矩阵。
Q学习算法估计每个动作价值函数的最大值,通过迭代可以直接找到价值函数的极值,从而确定最优策略,类似于价值迭代算法的思想。算法的流程如下:
Step1: 初始化,将所有非终止状态的(Q(s,a))初始化为任意值,终止状态的初始化为0
Step2: 对所有的episode循环
2.1选择一个初始状态(s)
2.2循环,对于episode中的每一步
(1) 根据(Q)函数为状态(s)确定一个动作(a),可以采用ε\varepsilon-greedy策略
(2) 执行动作(a),得到立即回报(R)以及下一个状态ss^{'}
(3) 更新价值函数:
Q(s,a)=Q(s,a)+α(R+γmaxaQ(s,a)Q(s,a))Q(s,a)=Q(s,a)+\alpha (R+\gamma \max_{a^{'}} Q(s^{'},a^{'})-Q(s,a))
(4) 进入新状态:s=ss=s^{'}
当中间过程计算的前后两次(Q)表的值差值小于一个阈值或者想等的时候。说明(Q)表已经学习完毕。智能体找到了本次学习的最佳结果,在本实验中就是找到了去往目标地的最短路径,学习结束。

三.Sarsa
Sarsa算法用于估计给定策略下的动作价值函数,同样是每次执行一个动作之后就进行更新。它的迭代更新公式为:
(Q(s,a)=Q(s,a)+\alpha (R+\gamma Q(s{’},a{’})-Q(s,a)))
由于更新值的构造使用了({s,a,R,s{’},a{’}})这5个变量,因此被命名为Sarsa算法。根据所有状态-动作对的价值函数可以得到最优策略。算法的流程如下:
Step1: 初始化,将所有非终止状态的(Q(s,a))初始化为任意值,终止状态的初始化为0
Step2: 对所有episode循环
2.1选择一个初始状态(s)
2.2根据(Q)函数为状态(s)确定一个动作(a),可以采用(\varepsilon)-greedy策略
2.3循环,对于episode中的每一步
(1) 执行动作(a),得到立即回报(R)以及下一个状态(s^{’})
(2) 根据(Q)函数为状态ss^{'}确定一个动aa^{'},可以采用ε\varepsilon-greedy策略
(3) 更新(Q)函数:
Q(s,a)=Q(s,a)+α(R+γQ(s,a)Q(s,a))Q(s,a)=Q(s,a)+\alpha (R+\gamma Q(s^{'},a^{'})-Q(s,a))
(4) 更新状态和动作:s=ss=s^{'}a=aa=a^{'}
对于有限的状态和动作集合,可以将动作价值函数存储在二维数组中,行代表状态,列代表动作,每个元素为在某种状态下执行某种动作的价值函数值。算法运行时迭代更新这个数组中的每个元素,直到收敛。
Sarsa和Q学习不同的地方在于,Sarsa的整个循环都是在一个路径上, 下一个状态, 和下一个行为将会变成他真正采取的状态和行为。Q-Learning 的下个一个状态和行为在算法更新的时候都还是不确定的。而 Sarsa的状态和行为在这次算法更新的时候已经确定好了。

四.实验说明
本实验中小红帽通过强化学习中的Q-Learning算法可以最终以最短路径避开大灰狼,找到老奶奶。具体可以见图2,有【1】,【2】两条最短路径。
强化学习实验
图2 最短路径
小红帽每次走动到之前未走过的一格,Q表就会新增一行。如果重复走回之前走过的格子,Q表值就在对应的行上更新。Q表有四列,代表小红帽有“上”,“下”,“左”,“右”四个动作。图3 展示的“本次Q表”即小红帽走过一种可能的路径是:(0,0)—(0,1)—(0,0)—(1,0)—(1,1)—terminal,所生成的Q表。(重复走过的格子只显示一遍)实验中默认小红帽走到大灰狼格子或者老奶奶格子都要从(0,0)重新开始训练。所以(2,1),(2,2),(1,2)代表了terminal,表示一轮的结束。
强化学习实验
图3
强化学习实验
图4
图4是新一轮的结果,“上次Q表”在左边显示,便于大家进行比较。“本次Q表”的结果说明新一轮小红帽“走过”了新的格子,它走到过(0,2)这一格。有一种它可能的路径为(0,0)—(0,1)—(0,2)—terminal。(根据重复走过的格子只显示一次的原因,有多种可能的路径)也就是说Q表在新一轮,没走过的格子保留先前的值,又重新走的格子更新新值,新增的格子增加一行值。最终的Q表会是一个(14,4)的矩阵,14代表13个没有大灰狼和老奶奶的状态,和代表terminal的终止状态,共14个状态。

相关文章:

  • 2021-12-12
  • 2021-09-02
  • 2022-12-23
  • 2021-04-04
猜你喜欢
  • 2021-09-16
  • 2021-07-08
  • 2021-04-04
  • 2021-10-04
  • 2021-08-17
  • 2021-11-26
  • 2021-06-10
相关资源
相似解决方案