本实录是根据“博文视点在线课堂”线上分享内容汇总整理而成 分享嘉宾:冯超 相关图书:《深度学习轻松学:核心算法与视觉实践》
然后我们还可以仔细再观察一下这个序列,就像刚才发的这张图片一样,这个序列其实是两种类型的事物之间交替出现的一个过程。一种类型就是State,另一种类型是Action,所以其中的这个状态或者说事物跳变有两种形式,一种形式就是从S到A,就是说我们现在有了State,那么我们需要下一个状态是Action。还有一种情况是我们现在的有了Action那么下一个状态又要跳到S,也就是说有这么两种过渡的形式,如果我们想把整个序列的过程说清楚,那么就要把这两种变换的过程也去把它说清楚。
在这个过程当中,我们怎么用一些更形式化的方法去把它表达出来?我们就可以引入下面的两个定义,第一个是从S到A,也就是说回到我们刚才的那个画面,当Environment提供了一个State的时候,我们的Agent要输出一个Action、要做一个行动,这个过程就可以用我们刚才提到的那个Policy来表示,Policy就是一个策略,相当于说我们身处于什么样的环境,我们就要采取什么样的行动。对于AlphaGo来说,就是我们现在在这个棋局下,我们该怎么下,于是乎我们就需要考虑基于历史的一些状态的情况下,我们下一步该怎么行动,其实包括像小鸟一样,也是有这样的问题,就是如果我们已经已知了S_1到S_N这个序列,那么我们怎么能猜出来下一个行动该是什么样呢?
我们就可以根据前面这些东西做这么一个建模:我们去估计一下下一个行动大概是什么样子的或者下一个行行动是什么概率,这样我们就可以建立起来一个概率分布去分析策略大概该怎么安排。比方说,对于小鸟来说,如果现在比两个水管间的空隙低很多的话,那么让小鸟往上挑这个概率肯定会高一些,原地不动的概率肯定会低一些,这样实际上就形成了一个策略。另外一方面就是从A到S,就是我们上面这张画面当中的State Translation,其实刚才我们也说到了,就是一个状态的转换,也是要基于前面的这些历史,估计下一刻是什么样子的,比方说还是像FlappyBird一样,如果我们走得比较好,就是小鸟顺利地通过了水管之间的空隙,那么游戏继续水管就会向后挪一步,新的水管就会出现,如果小鸟不幸撞到了水管,那么就Gameover了,我们就应该给出一个Gameover的一个状态,实际上这部分的转换应该是由Environment或者这个游戏本身去控制的,Agent本身应该是没办法控制到的。
可以说刚才我们说的思路基本上是没有问题的,实际当中的建模也是这个样子,但是我们是遇到了一个问题,那就是前面我们这个建模方法,实际上计算量是非常大的。大家去看一下这两个公式,第一个公式,比方说当我们用Policy去决定第N时刻的行动的时候,我们需要考虑前面所有的这些状态和行动。State Translation也是这样的,要考虑的东西非常非常多,然而这样的东西一旦我们考虑得非常多,就会导致我们计算量非常大,整个模型也会非常大,这样实际上是不太利于把这个东西真正地实现的。这样我们就得需要找一个解决的办法,那是什么办法呢?
我们就可以用到马尔可夫的这个性质,马尔可夫的性质基本上就是说下一时刻的状态转变只和上一个时刻的状态有关系,而跟上一个时刻之前的一些状态就没有关系了。基于这样的思考我们就可以发现,对于这两个公式,比方说前面的Policy在当前时刻的行动就只和当前时刻的状态有关系,和前面没关系。比方说Flappy Bird,现在这个状态下,小鸟在某个状态,我们采取的行动和前面没有关系,不管你前面曾经是什么东西都可以,不管你前面是什么样的状态,比如说你前面从上面飞到下面,从下面飞到上面都和我现在的决策是没有关系的。基于这样的思路,我们就可以把刚才条件概率当中given条件的那部分做一个大的削减,这样条件部分就只剩下当前的状态了。同理对于State Translation来说,我们的条件只有上一个状态和上一个状态产生的一个行动,只有这两个东西和我们下一个状态是有紧密关系的,而再往前的东西我们就不再产生依赖了,这样整个的模型它的长度和大小呢都得到了控制,同时也就使它变得更加的容易进行建模和求解了。
我们搞清楚了前面的那个SA的序列,下面我们就要回到增强学习的目标问题上了。增强学习的目标是希望让我们的收益最大化,而且是让长期的收益最大化,什么是长期的收益?我们可以回到刚才前面的画面当中,每一轮当的Agent完成一个行动之后,Environment会返回一个新的状态,同时会返回一个Reward就是类似于一个回报的东西。我们每进行一次都会有这么一个东西,那么我们的目标是说在和Environment的长期的一个交互当中,我们希望把所有的回报加起来能够满足最大化,这就是我们的目标。
我们其实相当于从两个方面,一个是从交互的方面我们提出来的一些东西,我们又从目标方面提出来了一个目标,那么综合起来我们就可以看到刚才发的这张图片上,基本上我们把增强学习这个问题进行了一个完整的定义,它分为两部分,一部分是一个已知,假如说我们已知第一个是P(s_(t 1) |s_t,a_t),也就是说我们已知State Translation这个环境是怎么变化的,同时我们知道Reward对于某个状态来说,它大概是要返回什么样的回报,我们到什么状态能得到什么样的回报,这个我们也是已知的,同时我们知道一个起始的状态,我们就可以进行求解了。那么我们求解的是什么呢?我们求解的就是这个P(a_t |s_t)这个东西就是我们刚才看到的那个Policy,就是换句话说就是我们该怎么操作这个Agent,那么我们求这个东西目标就是要使得我们的长期收益最大化,也就是说让我们得到的Reward收益是最大的。然后对比前面的两个问题,就可以说对于AlphaGo我们怎么样找到一个策略,就是对于什么样的棋局,我们下什么棋,使得我们的收益最大化,也就是最终是能赢棋。对于FlappyBird的那个小鸟游戏就是我们该如何的设定一个操作的方案,什么状态该往上跳什么状态不动,使得我们穿过的水管数最多得到的分最多,这就是我们的目标。
然后我们为了让我们的学习得到巩固,我们再回来看看FlappyBird的问题就是我们看一下已知和求解和使得这些东西是怎么对应的,我们再过一遍。那么我们已知的P(s_(t 1) |s_t,a_t),其实就是状态的转移,那就是说这个游戏随着我们操作完一步之后,那么游戏下一步画面是什么样的,然后Reward就是用来计算就是如果我们当前穿过了一个水管,那么就加一分,没穿过就不加分。S_0就是我们的一个起始画面,这个需要他给出的,然后求解就是给求解一个策略,就是我们该怎么操作这个小鸟,然后使得我们的长期的收益最大化,就是说使得我们整体的最终得分能够最大。
那我们前面已经把这个问题定义清楚了,下面我们就要开始去想办法去求解了,怎么去求解这个长期收益最大化,那么我们就要回到这个目标函数,因为我们一般来说对于学习我们肯定是要从这个建立模型,然后搞定目标函数,那么我们就回来去看一下这个价值函数,这个价值函数的形式来说就是我们要最大化这个长期收益,这个长期收益是我们每一轮整个里边Environment环境返回给我们的收益,所以他是这样的一个加合的形式,而且这个时间有可能对于某些任务这个时间是无限长的,所以这个计算量也可能是巨大的。我们从下面这张图片就可以看到这个公式,把这个回报做一个加合,使它最大化的这个公式可以把它拆解开,怎么拆解开呢?就是我们按时间把它拆成一个序列,也就是这个R_1 、R_2 、R_3 、R_4这样的一个序列,然后他们每一个的回报这个Reward的话,它实际上是和当前的这个状态有关系的,你处于什么样的状态,他会给你什么样的分数,就比方说这个小鸟这个游戏,那么在实际的计算当中,其实我们刚才也看到,就是由于这个时间是非常的不固定的,我们不知道到目前为止的某一步来说,我们接下来可能会操作多少步,对于像围棋来说,因为围棋的落子的数量基本是有限的,所以下到一定程度它会结束。对于Flappy Bird的话,理论上我们应该是可以无限地玩下去的,只要我们存在一个可行的一个能通过水管的方案,那么我们站在当前的某一步的角度、某一步的情况下、某一个状态的情况下,我们要做出决策,我们应该怎么操作才能使得我们的最大化,这个时候我们就要估计从这一步开始到未来,我们尽可能地多收益,所以这是一个比较复杂的问题。(不好意思啊,刚才我好像是把那个手机的那个麦克风给堵了一下。)
可以把这再总结一下,就是说因为我们刚才看到我们要把长期的收益最大化,而这个长期收益跨度时间是非常长的,我们不可能说站在当前的时刻,我们想要做出一个行为,使得未来很长一段时间内最大化,这个听上去总感觉是不太可能的,那么我们该如何把这个事情做得更好,那么就引出了下面的一些东西,我们需要去找到一种方法去直接把这个事情衡量出来。比方说我们构建一个函数,那么它直接可以算出来。比方说在当前状态下我们产生一个行动,那么未来能预期获得多大的收益,但是大家也可能想想都觉得这个事情不是很容易,因为我当前产生一个什么样的行动,就能计算出来我未来多长时间之后能够获得多大的一个预期收益,这个似乎是不太容易的,那么我们怎么做呢?我们就需要从增强学习,就是我们刚才说到的这个序列的过程入手,我们把这个过程做进一步的剖解,我们看看能不能通过这个过程当中的一些特性帮助我们去找到这个问题求解的办法。