第一章 介绍
强化学习的基本思想:从与环境的互动中学习
1.1 强化学习
- 强化学习的重要特征:➀、反复试验(trial-and-error search)➁、推迟奖励(delayed reward)
➀、已知状态StS_{t}St,需要做一个动作AtA_{t}At,得到一个奖励信号RtR_{t}Rt以及接下来的状态St+1S_{t+1}St+1。
目标是:通过调整AtA_{t}At,使得RtR_{t}Rt最大。
➁、推迟奖励的定义:当前动作AtA_{t}At不仅决定了即时奖励RtR_{t}Rt,还决定了下一个状态St+1S_{t+1}St+1,所以对下一个奖励Rt+1R_{t+1}Rt+1也会造成影响… …由此可知,动作AtA_{t}At会影响它之后的奖励,即,{Rtˉ}tˉ∈[t:teminal]\{R_{\bar{t}}\}_{ \bar{t}\in[t:teminal] }{Rtˉ}tˉ∈[t:teminal] - 强化学习与监督学习的区别:强化学习根据自己的经历学习;监督学习根据标签集学习。
- 强化学习与无监督学习的区别:强化学习的目标是最大化奖励信号;无监督学习的目标是找到无标签数据集的隐藏结构。
备注:或许有人会把强化学习看成是一种无监督学习,因为强化学习没有正确行为的标签集。但是这样子的想法是错误的,事实上,无监督学习背后的,以找到隐藏结构为目标的学习算法,在一定程度上使奖励信号增加,但是往往没有达到最大。并且补充一下,目前没有理论证明它们等价。所以,一般的,监督学习,无监督学习,强化学习,它们的关系是并列的。 - 强化学习的特点一:探索-利用两难问题 (exploration-exploitation dilemma)
备注:智能体需要探索大量动作,并且逐步偏向一部分,已得到最大奖励信号。这个问题还没有很好的解答。 - 强化学习特点二:具有目标、能够做决策(动作)、在未知环境下。
- 弱方法与强方法(weak methods & strong methods):基于普通法则(如搜索、学习)的方法叫弱方法;基于一些特殊准则的方法叫强方法。
1.3 强化学习的四元素
- 策略(policy):收到状态,给出动作,叫做策略。具体地,可以是确定到某一个动作;也可以是随机几个动作及它们对应的概率。
- 奖励信号(reward signal):每一个动作(策略)之后,环境都会给智能体返回一个单值,称为奖励。奖励是即时的,是预定义的。而总奖励(the total reward)称为奖励信号。奖励信号是经过长时间运行积累得到的。此外,奖励信号是是否更换策略第一次决定因素(the primary basis)。
- 值函数(value function):值函数是某个状态经过长期运行后,得到的从当前状态往后的,期望累计奖励。
备注:奖励信号的对象的某个动作,是某动作的期望累计奖励;
值函数的对象是某个状态,是某状态的期望累计奖励。
动作的选择也离不开值函数。 - 模型(model):具体来说是环境的模型——智能体通过模拟环境的行为,来与自己互动。比如,给模型当前状态和动作,模型会预测真实环境产生的奖励与下一个状态。模型的用处是规划——在智能体真正决定某一步动作前,预判某些动作带来的结果,影响最终的决策。使用模型机制的方法称为基于模型的方法(model-based methods),否则称为不使用模型的方法(model-free methods)。
1.5 实例:Tic-Tac-Toe
- 规则:背景是3*3的棋盘,两人交替出棋,先连成一条线的获胜(包括横线、竖线、斜线)。如图:
- 走棋过程中不得分,若赢得一分,平局或输都扣一分。
- 传统的优化方法,比如动态规划,也可以做连续决策问题,但需要对手的完整规范的下法,包括对手在每一个动作的概率。
- 初始时,每个状态的概率都设为0.5,表示赢的概率为0.5。之后每次更新的值都是最近的对赢的概率的估计值。每一个状态的值称为状态值,整个表格称为习得值函数(learned value function)。
- 大多数时候,我们贪婪地选择使得状态值最大的动作,但有时会选择随机动作,已解决双E难题。
- 备份思想:当我们从状态StS_{t}St走到状态St+1S_{t+1}St+1时,StS_{t}St对应的值会发生变化,这时候我们希望采取“备份”,使它们接近彼此,即:
V(St)←V(St)+α[V(St+1)−V(St)]⎵Back up with a fraction αV(S_{t}) \gets V(S_{t}) +\underbrace{\alpha [V(S_{t+1})-V(S_{t}) ]}_{Back \ up\ with\ a\ fraction\ \alpha }V(St)←V(St)+Back up with a fraction αα[V(St+1)−V(St)]
如图,V( c )的值影响了V(a)的值,V(g)的值影响了V(e)的值。事实上,V(St+1)−V(St)V(S_{t+1})-V(S_{t})V(St+1)−V(St)是两个连续时间点对应状态估计值的差分,所以这个更新规则是时序差分(temporal-difference)学习方法的一个实例,其中α\alphaα称为步长因子(step-size parameter)
- 算法效果:假设对手是固定(不完美)的,且步长因子逐步减小到0,那么这个算法最终收敛,并且习得值函数对应每个状态的获胜概率。由此我们可以找出固定的最优策略。
如果步长因子没有减小到0,那么我们的最优策略会不断变化。 - 预判的重要性:正确的行为要求规划(planning)或者预判(foresight),来顾及到决策带来的延迟影响(delayed effects)(未来的影响)。这样做有很多好处,比如,我们玩三连棋游戏时,会给对手设计多步陷阱。我们训练智能体时加入规划的思想,能避免掉入类似的陷阱中。
- 三连棋游戏是一个有限状态的游戏。
- 在无限状态的游戏里,过去的历经很重要,所以我们需要将监督学习的方法与强化学习结合起来。
练习:
备注: 这是个人答案,有错误,不完备,欢迎大家参与指正。
- 自我训练:假设我们不是跟随机固定的对手下棋,而是跟我们自己下棋,你认为为发生什么?会学习到不一样的策略吗?
解: 对于随机对手,实际上是给定一个3*3的值函数表格,我们在这个基础上训练出我们的习得值函数表格。
而自己跟自己下棋,双方的表格都会发生变化,这使得习得值函数表格不断改变,无法收敛。会学到不一样的策略。 - 对称性:三连棋游戏中许多位置是对称的,我们怎么利用这个现象去修改学习过程?在什么情况下,这个改变可以提升学习进程?进一步,如果对手没有利用对称性,我们应该利用吗?还有,对称的位置应该用同一个值,这个想法正确吗?
解:➀、类似于备份的思想,若St^\hat{S_{t}}St^是StS_{t}St的对称位置,那么当V(St)←V(St)+α[V(St+1)−V(St)]V(S_{t}) \gets V(S_{t}) +\alpha [V(S_{t+1})-V(S_{t}) ]V(St)←V(St)+α[V(St+1)−V(St)]之后,实施赋值 V(St^)←V(St^)+α[V(St)−V(St^)]V(\hat{S_{t}}) \gets V(\hat{S_{t}})+\alpha[V(S_{t}) - V(\hat{S_{t}})]V(St^)←V(St^)+α[V(St)−V(St^)],即还是以α\alphaα的比例,将原位置的值更新到对称位置上去。➁、当对手有对称相关的策略时,可以提升学习进程。➂、若对手没有利用对称性,我们也不应该利用,因为无效了。➃、不正确,举个极端的例子:加入对手的值函数如下图,那么对手前两步一定如圆圈所走,那么StS_{t}St代表当前位置,V(St)V(S_{t})V(St)是它的值,V(∗St)V(*S_{t})V(∗St)是它对称位置的值。显然,它们的值不应该相同,因为V(St)V(S_{t})V(St)应该要大于V(∗St)V(*S_{t})V(∗St),因为StS_{t}St处要更容易获胜一些。
- 贪婪玩法:假设强化学习玩家是贪婪的,即他下一步总是选择它认为胜率最大的地方。那么,它与不贪婪的玩家相比,是更好还是更坏呢?会出现哪些新的问题?
解:这涉及到双E难题。不贪婪的玩家每一步都是随机走的,经过迭代,最终习得值函数会收敛。而贪婪玩家每一步都是选择当前获胜率最大的位置。它们各有优劣——如果百分百贪婪玩法,可能会陷入局部最优,导致最后的策略不一定有不贪婪玩法好;如果有一种情况贪婪得到的是全局最优,或者接近全局最优,贪婪玩家的结局会比不贪婪玩家好。总之,要相互结合,既有exploit(贪婪)部分,也要有explore(不贪婪)部分。 - 从探索中学习:假设所有动作之后都要学习更新,除了探索阶段,步长因子逐渐减为0,那么所有的状态值都将收敛到对应的概率。探索与不探索对应的概率怎么计算?假设我们连续的进行探索,哪一个概率在学习中效果会更好?哪一种方法会得到更多的获胜概率?
解:➀、给一个特殊情况如图,t时刻的状态值为0.7,t+1时刻已知的状态值有0.6与0.4,根据公式V(St)←V(St)+α[V(St+1)−V(St)]V(S_{t}) \gets V(S_{t}) +\alpha [V(S_{t+1})-V(S_{t}) ]V(St)←V(St)+α[V(St+1)−V(St)],假设α=0.5\alpha=0.5α=0.5。若不进行探索,则取0.6对应的状态,V(St)=0.7+0.5∗(0.6−0.7)=0.65V(S_{t})=0.7 + 0.5*(0.6-0.7)=0.65V(St)=0.7+0.5∗(0.6−0.7)=0.65;若进行探索,取0.9对应的状态,V(St)=0.7+0.5∗(0.9−0.7)=0.8V(S_{t})=0.7+0.5*(0.9-0.7)=0.8V(St)=0.7+0.5∗(0.9−0.7)=0.8。这个时候,探索或许更好一点。
当然,若出现下图情况,那么探索对应的V(St)=0.7+0.5∗(0.2−0.7)=0.45V(S_{t})=0.7+0.5*(0.2-0.7)=0.45V(St)=0.7+0.5∗(0.2−0.7)=0.45,反而没有不探索好,但是下一次,系统还是会选择0.6这个状态。所以从某种角度上说,探索是有好处的。
➁、但是如果连续性探索,很可能会持续使V(St)V(S_{t})V(St)的值降低,使它失去竞争力,这时候相对而言,不探索的方法效果会好。➂、或许是开放性问题吧,如果探索不频繁,探索方法好,如果探索频繁,不探索方法好。
- 其他的改进:你可以想到别的方法去提升强化学习玩家吗?能想一个好的方法去解决三连棋问题吗?
解:暂时没有,但我觉得对于固定对手,或许动态规划也能做。