强化学习(二):Q learning 算法


强化学习(一):基础知识

强化学习(二):Q learning算法


Q learning 算法是一种value-based的强化学习算法,Q是quality的缩写,Q函数 Q(state,action)表示在状态state下执行动作action的quality, 也就是能获得的Q value是多少。算法的目标是最大化Q值,通过在状态state下所有可能的动作中选择最好的动作来达到最大化期望reward。

Q learning算法使用Q table来记录不同状态下不同动作的预估Q值。在探索环境之前,Q table会被随机初始化,当agent在环境中探索的时候,它会用贝尔曼方程(ballman equation)来迭代更新Q(s,a), 随着迭代次数的增多,agent会对环境越来越了解,Q 函数也能被拟合得越来越好,直到收敛或者到达设定的迭代结束次数。

以一个例子来介绍Q learning算法

游戏介绍

下图是一个迷宫游戏,agent小老鼠最开始在(0,0)位置,它想走到(1,2)的位置去获取一大堆奶酪,当它到达(1,2)位置的时候,它能得到10分,(1,1)位置是一个毒药,小老鼠走到这个位置会得-10分,其他有的位置放有数量不同的奶酪,根据奶酪的个数得到不同的正向分数,如+1和+2,(0,2)位置什么都没有,它的reward为0。当小老鼠达到一大堆奶酪或者毒药的位置时,游戏结束。小老鼠的可以选择的动作有4个,分别是向上,向下,向左,向右移动。

强化学习(二):Q learning 算法_第1张图片 一个游戏的例子

 

Q table

我们使用Q table来存储agent在不同state下选择不同动作可以获得的Q value。state是指老鼠所在的位置,action是老鼠在这个位置上所有能选择的动作。表的每一行表示一个state,每一列表示一个action。表中的值表示在这个state和action的最大期望未来reward。Q table最开始的时候会被初始化,比如初始化为0。如下图所示:

强化学习(二):Q learning 算法_第2张图片 Q table

 

在这个游戏中,可以建立一个6*4的表,初始化的Q table如下图所示:

强化学习(二):Q learning 算法_第3张图片 初始化的Q table

选择action

游戏开始后,我们根据Q table来选择action。

但是由于Q table都被初始化为0了,所有动作的值都是一样的,怎么进行动作选择了?

exploitation-exploration

这里会采用一个exploitation-exploration的方法,它用的\varepsilon-greedy 策略选择action。

exploitation :根据当前的信息,由训练的模型做出最佳的决策,即选择Q value最大的动作。

exploration:探索未知的领域,比如在某个state下随机选择一个action。

做exploitation和exploration的目的是获得一种长期收益最高的策略,这个过程可能对short-term reward有损失。如果exploitation太多,那么模型比较容易陷入局部最优,但是exploration太多,模型收敛速度太慢。这就是exploitation-exploration权衡。

比如我们设\varepsilon=0.9,随机化一个[0,1]的值,如果它小于\varepsilon,则进行exploration,随机选择动作;如果它大于\varepsilon,则进行exploitation,选择Q value最大的动作。

在训练过程中,\varepsilon在刚开始的时候会被设得比较大,让agent充分探索,然后\varepsilon逐步减少,agent会开始慢慢选择Q value最大的动作。如下图所示:

强化学习(二):Q learning 算法_第4张图片 exploitation-exploration

 

由于刚开始,\varepsilon比较大,agent随机选择一个action。假如在start位置时,agent选择了往右走的动作,到达small cheess位置,如下图所示:

强化学习(二):Q learning 算法_第5张图片

强化学习(二):Q learning 算法_第6张图片 标题

Q value更新

agent从start位置执行一个right动作,走到small cheese位置,得到了一个实时奖励 + 1分,然后我们更新Q table里第一行第二列的值。

更新的方法是用贝尔曼方程(Bellman equation),下面是Q learning算法更新的方法:

强化学习(二):Q learning 算法_第7张图片

R(s,a)是实时奖励,maxQ^{'} (s^{'},a^{'})是指在下一个状态,选择使下一个状态达到最大的动作后得到的值。\gamma maxQ^{'} (s^{'},a^{'})表示未来的长期奖励。

R(s,a) + \gamma maxQ^{'} (s^{'},a^{'})组成在(s,a)下的实际Q 值,它由实时奖励和未来的长期奖励组成。

Q(s,a)是在(s,a)下的估计Q值,实际Q值R(s,a) + \gamma maxQ^{'} (s^{'},a^{'})和估计Q值Q(s,a)的差值表示为\Delta Q(s,a)

\alpha是学习率,表示每次更新的幅度,Q(s,a) + \alpha [R(s,a) + \gamma maxQ^{'} (s^{'},a^{'})-Q(s,a)]是指在Q(s,a)的基础上以差值\Delta Q(s,a)和学习率\alpha的乘积的幅度进行变化。

当实际值和估计值的差值趋于0的时候,Q(s,a)就不再继续变化,Q 表趋于稳定,说明得到了一个收敛的结果。

下面来看看state为start,action为right时的Q(s,a)具体是怎么计算的,设\gamma =0.9\alpha =0.1

强化学习(二):Q learning 算法_第8张图片

首先我们计算在(start,right)的位置上的\Delta Q(s,a)\Delta Q(s,a)是指实际Q值R(start,right)+\gamma maxQ^{'} (1cheess^{'},a^{'})减去估计Q值Q(start,right)。即时奖励R(start,right)加上长期奖励\gamma maxQ^{'} (1cheess^{'},a^{'})组成实际Q值,Q(start,right)是初始化的值。

在计算maxQ^{'} (1cheess^{'},a^{'})时,我们将1cheess状态下所有的状态的Q值计算出来,选择最大的。由于都是0,所以maxQ^{'} (1cheess^{'},a^{'})为0。然后将R(start,right)=1代入进去,得到NewQ(start,right)=0.1。

我们将Q表上Q(start,right)更新,如下图所示。

强化学习(二):Q learning 算法_第9张图片 标题

这时,agent到达了small cheese状态,用和上面同样的方法选择action,获得reward,然后更新Q(small\, cheese,selected\: action)

agent在每一个step的时候都会用上面的方法迭代更新一次Q table,直到Q table不在更新或者到达游戏设置的结束局数。

Q learning算法流程

总结Q learning 算法的流程如下图,我们的最终目的就是得到一个训练得比较好的Q table,Q table里面的不同位置的值就是我们要训练的结果。当模型训练好了以后,agent会学会怎么去玩这个游戏,我们就可以应用此模型了。

当开始一局的新的游戏,agent会根据Q table去查找到到达目的地的最优路径。

强化学习(二):Q learning 算法_第10张图片 Q learning 算法流程

 

Q learning算法的伪代码

如下:

强化学习(二):Q learning 算法_第11张图片

 

Q learning算法的代码实现:

以下有两个Q learing算法的代码应用:

1.用Q learning 算法学会玩走迷宫游戏:https://github.com/MorvanZhou/Reinforcement-learning-with-tensorflow/tree/master/contents/2_Q_Learning_maze

2.https://github.com/simoninithomas/Deep_reinforcement_learning_Course/tree/master/Q%20learning/FrozenLake

 

 

参考:

1. Q learning介绍:https://www.freecodecamp.org/news/diving-deeper-into-reinforcement-learning-with-q-learning-c18d0db58efe/

2. Q leaning算法:https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/2-1-A-q-learning/

你可能感兴趣的:(强化学习)