深度强化学习是以什么为基础的
深度强化学习是计算机语言为基础的。深度强化学习最简单的理解就是在训练的过程中,不断的去尝试,错了就扣分,对了就奖励,由此训练得到在各个状态环境当中较好的决策。其中有几个重要的组成元素,包括前面说到的奖励reward,可以认为是学习过程中的一个反馈;另外一个就是智能体agent,是一个被抽象出来感知周围环境的单元,可以想想为一个小的机器人,在实际的应用当中可能是一个游戏玩家,一个棋手,一辆自动驾驶的汽车等等。
一、值函数(value-function)
强化学习是通过奖励或惩罚来学习怎样选择能产生最大积累奖励的行动的算法。为了找到较好的行动,非常有效的方式是,找到那些奖励最大的状态就好了,即在我们目前的环境(environment)中首先找到最有价值的状态states。例如,在赛车跑道上最有价值的是终点线(这里好像就是你冲刺要达到deadline的前一步,这个状态肯定最有价值),这也是奖励非常多的状态,因此在跑道之上的状态也比在跑道之外的状态更有价值。(其实这里面就是递归的思想,当你找到了最有价值的状态,你只需要想办法得到这个状态就好了)
最有价值的state可能不只一个,一旦我们确定了哪些状态是最有价值的,我们就可以给这些状态赋奖励值。例如,当赛车偏离跑道时,这些状态就被赋予惩罚;而当赛车跑完一圈时,就会收到一个奖励;当赛车跑出当前最短的时间时,也会收到一个奖励;等等。
我们可以将这些状态和奖励当成一个离散函数,比如在跑道上每隔100m就设定为一个状态点,距离越近的状态价值越高。文章中是把跑道看作 1×1 的方格。对应到这些方格中的奖励就可以用数字表示。例如目标状态的奖励可能为 10,而偏离跑道的方格的惩罚为 -2,其它方格的奖励为 0。优异的行动是让函数的值越高越好(即最大奖励)的行动。
这些状态中,有些中间状态并不一定有奖励(奖励为 0),但是这些状态是通向奖励状态的必经之路。例如,你必须在跑完一圈之前转弯,或者必须跑完一圈才有机会跑出最短时间。而对于越是接近于终点的状态则可以设置比较高的reward,这也是比较合理的。
需要注意的一点是值函数求解的是一个 累积奖励,通过找到最大的值的状态,然后朝着这个方向前进,但是想想是有问题的:在一场的跑步比赛当中距离终点很远的一个状态只要朝着目标前进,它的奖励值也会很大。但是这显然不合理。因此,在值函数当中会引入一个折扣因子discount Factor,由此使得离他较远的状态给他的奖励贡献是比较小的。因此,折扣因子是一个0~1之间的数,,并且随着距离的增加,这个值会越来越小。当折扣因子为 0.5 时,仅经过 3 次状态改变,奖励值就会变成初始值的八分之一,所以 agent 更倾向于搜索临近状态的奖励值。(其实不加discount factor,累积的时候除以总的迭代次数也是一样的道理)
值迭代算法: 首先把所有状态的奖励值初始化为 0 或者一个特定的值,然后搜索所有状态的可能的下一个状态(从当前状态转移到其中的任意一个状态都有一个概率),并估计下一个状态 agent 可能得到的奖励,通过这种方式学习每一个状态特有的局部奖励值。如果 agent 在下一个状态得到奖励,那么这个奖励就会累计到当前的状态中。重复这个过程,直到每个状态的局部奖励值不再改变(其实这就是迭代的终止条件),意味着每次变换状态采取的可能转向以及每个状态的奖励值都被考虑在内。
这种方法也许起初看起来并不高效,但是动态规划(dynamic programming)的技巧可以让它更加高效。在子问题已经解决的前提下,动态规划能解决更高层次的问题:B 到 C 的奖励值可以被用于计算 A->B->C 和 D→B->C 的链式状态的奖励值。
总之,价值函数和价值迭代提供了一个局部值的决策图,agent 根据它就可以朝着奖励值增加的状态方向运动,因此得到各个状态下的决策。
- 策略函数(policy function)
值函数相当于是将所有的策略都计算在内求出来的一个期望额奖励值,而策略函数则是对不同的策略求解值函数(相当于值函数在某一策略的条件概率下求解),这样的做的目标很明确,就是我最终的结果是要求解到一个较好的策略,那为什么不在进行值函数计算的时候就分不同的策略求解勒?实际上上文最后的例子也是采用了贪婪的策略,就是每一个的策略都是朝着奖励值最大的方向去,但实际上这并不一定好:
策略函数(policy function)是根据价值函数选择产生最大(长期)奖励的行动的一组策略。在所有可能的下一步行动中,通常没有明确的优胜者。例如,agent 面临选择下一步进入 4 个状态 A, B, C, D 中的一个,它们的奖励分别为 A=10, B=10, C=5, D=5。A 与 B 都是好的即刻选择,但是随着时间的推移,A 状态之后的路径得到的奖励可能比 B 状态好得多,或者进入 C 状态的行动甚至是较好的选择。所以在训练的过程中,探索所有的选择是值得的,但同时,如果只看到即刻奖励,就可能会导致非优异的选择。那么,我们如何在探索尽量高的奖励和探索尽量少的路径之间找到一个平衡点呢?
一个聪明的方法是按照奖励值的比例随机选取状态。在这个例子中,选择 A 的概率为 33% ( 10/(10+10+5+5) ),同样选择 B, C, D 的概率分别为 33%, 16%, 16%。策略函数的随机选择的原理对学习一个好的策略至关重要。因为,也许存在一个看上去是反直觉的,但是有效甚至关键的成功策略。
例如,如果你以跑得快来训练赛车,它会尝试以非常快的速度在转弯抄近道。但是当你把其它选手也纳入模型时,这个策略并不是优异的。agent 会将其他选手在转弯处减速考虑在内,以免发生超车甚至撞车。另一个场景是,在转弯处高速行驶可能会更快的磨损轮胎,导致赛程中的停顿,浪费宝贵的时间。
值得注意的是,策略函数和价值函数相互依赖。给定一个价值函数,不同的策略会导致不同的选择;同样给定一个策略函数,agent 会将不同行动赋予不同的价值。给一个棋类游戏赋予「快去赢」的策略,价值函数就会对赢棋可能性高的行动赋予高价值(牺牲棋子以获得赢棋胜算会被赋予高价值)。但是如果赋予「以大比分名列前茅获胜」的策略,那么策略函数会学习在特定的游戏中选择能最大化得分的行动(从不牺牲棋子)。
这些只是许多例子中的两个。如果想得到特定的结果,我们可以同时使用策略和价值函数来指导 agent 学习策略,最终达到特定的结果。这使得强化学习既灵活又强大。
我们训练策略函数通过:
(1)随机初始化——例如,让每一个状态被选择的概率与它的奖励值成正比(可能要先进行归一化,而周志华的教材当中其实每一种策略的概率是一样的)——然后用这些奖励值初始化价值函数;即把所有没有直接奖励值状态的奖励值设成 0(如跑道终点的奖励为 10,偏离跑道外的惩罚为 -2,所有跑道上的状态的奖励值为 0)。
(2)训练价值函数直到收敛(或者指定的训练次数)
(3)对于特定状态(状态 A),增大能让奖励增加非常多的行动(从 A 移动到 B)的概率值(相比从 A 到 C,这种移动也许会导致很低甚至负的奖励值,像牺牲棋子,但是它仍可以最终赢得游戏)。(对于各个状态,找到此时各个策略的值,用最大值的策略更新各个状态下的策略)
(4)最后,重复步骤(1)直到策略不再改变。
三、Q-函数(Q-function)
我们已经看到策略和价值函数是高度相依的:我们的策略大多取决于我们看重什么,而我们看重什么决定了我们的行动。因此我们或许可以把策略和价值函数结合起来,这个结合就叫 Q-函数(Q-function)。其实就是状态-动作值函数。
同样用条件概率来理解它: 策略迭代的思想就是 在每一个状态下面分各个 策略来计算值函数,但是其实每一个策略同样对应了多种的动作Action。Q函数就是,那我直接计算采取某种动作的值函数就好了啊。也就是说:在某种的状态s下,计算在一种动作a的条件概率的情况下,该值函数的值。就是直接 直接!!!!
Q-函数考虑了当前的状态(如价值函数)和下一步行动(如策略函数),然后针对状态-行动组合,返回局部奖励值。在更复杂的情况下,Q-函数可能会结合更多状态来预测下一步状态。例如,如果行动的方向是很重要的,我们需要至少 2 个状态去预测下一步状态,因为只用一个状态(如一幅静止图像)去推断精确的方向几乎是不可能的。我们也可以将输入状态传给 Q-函数去得到每个可能状态的局部奖励值。然后我们可以按照局部奖励值的比例,随机选取下一步的行动(这种方法叫探索(exploration));或者直接选取较高价值的行动(这种方法叫利用(exploitation))。(通常会采用的方式是概率p随机的从所有的动作当中选取一个动作,以1-p的概率选取当前优异的动作)。
然而,Q-函数的要旨实际上并不在此。设想一辆自动驾驶汽车:有太多的「状态」以至于无法建立一个覆盖所有状态的价值函数;地球上的所有道路的每一个可能的位置和可能的速度实在太多,要计算它们的局部奖励值几乎是不可能的。相反,Q-函数:
(1)只在一步的范围内查找所有可能的下一步状态;
(2)基于当前状态和下一步状态,查看优异的可能行动。所以对于每一个下一步状态,Q-函数会向前探索一步(并不会探索所有可能的步数直到终止,如价值函数)。
在有些情况下我们需要为绝对无限状态建模。例如,自动驾驶汽车的「状态」经常会被表示为一个连续函数,如神经网络,神经网络会将所有状态的变量(如速度和位置)纳入,然后对每一个行动输出 Q-值。为什么只获取一些状态的信息是有益的呢?很多状态是非常相关的,所以在两个不同但是相似的状态采取相同的行动可能都会取得成功。例如,跑道上每一个转弯是不同的,但是每一个左转弯赛车学到的内容——什么时候开始转弯,怎样调整速度等等——对下一个左转弯时有用的。所以,随着时间的推移,一个赛车 agent 会学到越来越好的左转弯技术,将来即使遇到没见过的赛道也会轻松应对。
最后,推荐我们的管理工具给大家。