上一节中我们介绍了解决问题的动态规划算法和蒙特卡洛方法,以及RL的一些需要注意的问题,从这一节开始,我们开始对强化学习的每一个类族进行比较详细的介绍。由于本系列的主旨在于“浅浅地谈”,因此需要参考原理和公式推导的小伙伴们可以参看别的文献。本人知识有限,因此博文中难免出现失误,希望有小伙伴可以指出并不吝赐教。
model-free算法族
有很多小伙伴可能会感到疑惑:既然算法是model-free的,就意味着我们在构建策略选取方案是不依靠一个能够准确表达出来的类似于f(x)的模型的,那我们究竟是根据什么进行action选择的呢?实际上,这里的model-free指的是我们不会对环境进行建模。举个例子,我们在对无人小车进行RL过程时,实际上我们会得到一个model,但是这个model不会包含关于env的任何信息(例如model中不会对某处有没有转角,或者这条直线路会有多长进行反映)。这个model我们一般称为策略,一般用π(s,a)表示。策略反映的是agent对于经验的学习成果。再举个简单的例子,同样是前面遇到了障碍,model告诉小车的是“我看到了前面有障碍所以我要转弯”,而策略告诉小车的是“我之前碰到过前面有障碍的情况,当时我转弯了,所以现在我也要转弯”。(这里说的可能有点啰嗦,也不知道有没有说清楚。。。个中意思请大家自己体会一下)。
说了这么多,下面正式进入算法介绍。model-free算法族包括了最经典的Q-learning,Q-learning的改进版Sarsa和DL与RL结合的Deep Q Network(DQN)。接下来我将一个一个地进行介绍。
重要的事情说三遍
下面没有公式和原理推导!
下面没有公式和原理推导!
下面没有公式和原理推导!
Q - Learning
Q-learning通过构造Q表来对获得的经验进行表述。这个Q表的具体含义表述为一个概率-行为转移矩阵。简单来说,如果我们以States作为row index,Actions作为column index,那么我们可以获得一个二维的矩阵,这个矩阵里的值代表在当前的st上,agent能够以多大的概率采取ak而转移到st+1上。在初始化构建这个Q表的时候可以采用random的方式,然后,在每一次选取action时,用Bellman公式来对当前的概率矩阵里的值进行更新(对Bellman公式不太清楚的小伙伴可以移步这里贝尔曼方程详解)。要注意,这里对action的选取并不是完全根据这里每一个st的概率进行选取的,也就是说,我们并不是直接选取概率大的action,而是通过前面谈过的ε-greedy策略,以一定的ε根据概率转移矩阵选取action,另外1-ε概率进行的是随机游走的策略进行选action的动作。在进行了有限个epoch之后,我们可以得到一个不再具有超越阈值变化的Q表,这时我们的训练过程就可以结束了。
回想一下我们的训练过程,存在下面几个问题:
1.Q表的初始值会对最后结果产生影响吗?举一个最简单的ML的例子,在进行梯度下降的过程中,我们通常通过寻找在当前点上具有最大梯度的方向进行参数更新。但是,如果我们选择的初始点并不处在全局最优点附近,那么在更新时可能会陷入局部最优不能自拔。对应到Q表中,就会产生agent不能对全局的经验作出反应,陷入到一个局部最安全的策略当中。解决这个问题的一个比较直观的尝试是对于Q表中的所有概率进行平均初始化,即在某个st上,所有的ak能够享受到相同的选取概率,这样相当于平滑了概率曲线,使得在更新的过程中所有的action能够享受到均等的机会被更新。但是这样做又会有什么问题呢?留个悬念,请大家思考一下~
2.Q表是具有可解释性的吗?可解释性表征一个模型(策略)参数能够用自然语言表述的程度。例如在线性回归或者LR中,我们可以很清楚地看出每个特征对于结果的影响(即权值),但是在multi-layer NN中,我们对于参数的理解更像是一个黑箱。我们放入数据,得到输出,然后根据梯度进行参数更新,最后得到的参数其实是有发掘数据非线性关系的能力的,但是我们不能清楚地指出哪个参数是干嘛的。这个时候,我们就说LR的可解释性是好的,NN的解释性是不好的。反观我们的Q表,Q表带表的是一个状态-行为概率转移矩阵,因此它的每一个参数都是能够解释的。但是在RL过程中由于引入了ε,使得最后得出的结果带有一定的随机性,这个结果又是很难解释的了(例如某个action具有很大的概率,但是由于ε没有选到它)。