2017年1月12日,今日头条实验室邀请加利福尼亚大学伯克利分校PhD Student吴翼,即NIPS2016 Best Paper Award获得者,进行一场关于该获奖论文《Value Iteration Networks》的专题分享。

大家好,我叫吴翼,现在是头条实验室的实习生,目前在 UC Berkeley(加利福尼亚大学伯克利分校) 读人工智能方向的博士,现在是博士第三年,做一些关于AI的工作。现在我在头条做一些关于文本生成的工作。今天展示的工作是我和 Sergey LevinePieter Abbeel博士后和博士合作的《Value Iteration Networks》 。这项工作比较有幸在今年(2016年)机器学习顶级会议NIPS获得了最佳论文奖,应实验室的邀请分享一下。

首先这项工作总的出发点当然也就是我们Berkeley AI lab 使命——希望有一天我们可以设计出真正的智能机器人,比如有一天你早晨起来之后可以对你的智能机器人说:“机器人能不能帮我从冰箱里拿一罐牛奶?”机器人就走到你的冰箱前打开你的冰箱,看到这么一个场景,然后他需要扒开前面的蔬菜苹果翻到后面的牛奶,那这项任务其实是很困难的,它的困难地方在于我们每天都会从冰箱里拿东西出来,拿东西进去,机器人每一天看到冰箱里的东西都是不一样的,你训练这个机器人之后,冰箱里的很多场景和物品在机器人训练的时候是完全没有见过的,机器人依然在听到了这个指令之后需要去完成这样的工作,这也就是说,要这个机器人在训练之后在新的环境和问题上有一定的泛化能力。当然,这个任务对于人来说是非常简单的,比如说不管你的冰箱塞成什么样,我要去找牛奶,冰箱里有什么障碍我都可以通过翻来翻去找到后面的牛奶,但是这个任务对机器人来说还是很难很难的,当然我们也相信有一天我们可以达成这样的目标,所以我们也希望 Berkeley AI lab 和很多很多的研究者一起朝着终极的目标在努力,当然也相信要向终极目标努力有一个必经之路就是强化学习,我们也希望通过强化学习能使机器人解决非常一般的问题。另一个工作出发点是说强化学习尤其是深度强化学习在近些年带来了非常多的技术突破,比如说2015年的时候Deep Mind 提出了deep Q-learning 这个网络结构,deep Q-learning在大部分Atari games游戏上做到超过人的表现,比如在2016年的时候,他们来自Berkeley的Sergey Levine和Chelsea Finn做的工作是在一个真的机器人,有非常多的活动关节,让其只通过看视频,在没有标注的训练数据的环境下,机器人的信号输入就是机器人摄像机看到的内容,即和人是一样的情况下,通过直接让机器人看视觉信号,可以让机器人通过强化学习来学会如何摆积木。其实摆积木是很难的,大家可以发现积木有各种各样的图形,里面有正方形三角形的凹槽,它要把三角形正方形的小积木块插进去,这是非常非常难的一个科目。他们还做的实验是培养一个机器人叠毛巾,挂衣架,这些都是很难的工作,这是第一个让机器人在实际生活中用深度强化学习完成的工作,当然这两年还有很多关于深化学习的进展。

在这些所有工作中间都有一个从某种程度上说让人惊讶的事实,虽然这些工作用的是强化学习的框架,但是这个强化学习用的神经网络结构和我们传统意义上做图片分类的网络结构非常相似,比如拿机器人控制和deep Q-learning来说,每一个任务用的网络结构都是通过视频图片的输入加上两个卷积层,提一些特征,然后通过特征做一些全连接层,然后做一个输出action,但是这个action 可以是离散的也可以是连续的,比如说在机器人上是一个连续的动作,而在Atari game中就是一个离散的动作,但是从网络结构上看和图片分类是一样的。大家都知道图片分类可以用CNN,CNN就是这么一个结构。我们对CNN是有一些理解的,CNN大家都研究了很多年,知道CNN的卷积层对图片提出局部特征,提出特征之后,最后做一个全连接层,把这些特征映射到最后的决策或者输出,我们把这种类型的网络成为反应式网络。反应式网络计算都是基于当前图片的特征,所有的信息都是在当前图片上的,他只是计算出当前图片的特征,然后通过当前图片的特征直接算出最后的决策是什么,我们叫它反应式网络,它是一个这么十分直接的设计,当然大部分的深度学习的网络结构都是这样的。我们知道了这个网络结构非常简单,一些简单的卷积神经网络,或者说是反应式网络,但是这些简单的结构已经可以完成很多复杂的工作比如之前提到的Atari game或者机器人操控,这确实很让人吃惊。非常简单的网络设计就能完成非常复杂的任务。

 

但是这里有一个问题,虽然从表相上看这些网络,已经有非常强大的能力解决非常复杂的问题,但是这些网络是否真正理解让它干什么,是否真正理解这个任务。它是抽象理解这个任务要干什么,还是说记住在某种特定的场景下,它应该做怎样的决策。所以说它是记住了呢,还是真的理解了。我们知道人是理解的,比如我让你去开冰箱,我告诉你开冰箱是去干什么,当你看到一个没见过冰箱你也知道我应该拉开门,把东西放进去或者拿出来,人是理解的,但是机器是否也理解呢?我们不知道。如何定义理解呢?这是个很难的问题,我们决定用一个简单的实验,来试一下这些网络是否真的理解,有一些简单的任务,这个实验任务的名字叫 Grid-world。这个游戏非常简单,需要我们给它一个N*N的迷宫,白色格子可以移动,黑色格子表示障碍物,有一个AI从红色起点移动到周围8个格子,目标是最后能够不撞墙移动到绿点也就是目标位置。这个任务显然非常简单,它比Atari game简单多了,所以我们知道深度学习网络一定是可以解决这个问题,并且可以解决的很好,因为Atari game用强化学习可以解决,这么简单的问题也就可以解决。图片1

我们受到 DQN Network的启发,搞了一个类似的反应式网络,也就是给一个图片,标注了起点终点,并告诉它机器人AI的位置,把图片信息输进去,做几个卷积层,和deep Q-learning一样的几个全连接层,最后输出8个方向选哪一个,这完全和deep Q-learning的网络结构是一样的。然后我们就训练,我们在训练集中要涉及到非常多不同的迷宫,在不同的迷宫上要告诉它起点和终点都是随机生成的,由于我们人知道迷宫起点和终点后该走什么路,我们就算出最短的路,在训练集中生成的很多迷宫,生成这样很多很多的起点终点对,也生成它们之间最短的路。然后就训练一个网络,希望它能在一个迷宫下,给点起点终点以及AI位置,能够判断往哪里走。我们会在测试集中生成一些新的迷宫环境,这些迷宫环境在训练集中没有出现过,然后我们也生成新的起点终点对的位置。对于人来说这个任务实在是太简单了,告诉你要在迷宫里走,给你看了迷宫之后,你很容易学会该怎么走。如果这个网络真的理解这个任务,也能像人一样理解让它干什么的话,将这个人工智能神经网络放到一个新的环境、新的迷宫里面,它也应该能够自己找出从起点到终点的路径,因为这对于人来说是非常简单的任务。但是我们发现有趣的是如果我们做出这样的测试的话,这个神经网络它在没有见过的环境里面并不能很好的完成这个任务,所以从某种意义上来说这种深度学习网络其实并不能很好的泛化,从某种角度上说它是记住了很多训练集中的场景,训练集中做怎样的决策,但是到了新的环境里面,它遇到没有看见过的环境,它很难做出很好的决策。那我们就分析下为什么这个反应式网络不能很好的泛化。我们知道强化学习是在一个连续决策环境里面,有一个任务一个环境,你这个AI需要不停的做出决策,然后决策得到环境的反馈,最后你就得到一个反馈,也就是reward。那么所有强化学习的任务都要做一个长期的规划,你一个决策可能会对之后的决策产生影响。强化学习的算法有很多种,每种算法都是在学习一个从输入信息到长期规划的一个对应,比如说某种方法做的就是希望选出一个从输入值到一个受到好的回馈的工作序列的一个对应,比如说对于deep Q-learning,它希望神经网络近似出一个Q-value,Q-value对应每一个状态每一个动作,Q -value对应一个状态一个任务等等。在这个状态做出这个任务后,经过最优的决策,它的长期规划会怎样,它希望神经网络近似Q -value,这是Q -value的意义。那还有一些算法叫imitation learning,即模仿学习。它所做的就是让人给机器展示最优决策。假设人在来做最优决策和长远规划,机器来模仿人做事情,它模仿的是通过当前状态,到一个最佳策略的对应、这最佳策略是人给它的,不管用什么算法,其实强化学习都在学习从当前状体到长远规划的一个映射。我们知道这个映射是通过训练得出来的一个映射关系,所以所有的规划项的值都是通过在训练集基础上训练出来的,从某种意义上说,机器人的人工智能神经网络它其实是记住了它在训练集中的某一特定场景以及在某一特定场景下所对应的长期规划应该是怎么样。这样从某种意义上说它是记住了,所以反应式网络就是提取当前环境特征,通过当前环境来最后计算出长期规划值。但是如果把反应式网络扔到一个全新的环境中,新的环境中很容易出现训练集中没有出现的场景,你通过训练集来学习函数的话,一旦训练集中出现没有出现过的场景,这个对应往往会失效,这也就是为什么到了新的环境,反应式网络往往很难泛化。

怎么解决这样的问题呢?中国有句俗话叫做,授人以鱼不如授人以渔。我希望这个神经网络记住所有的情况,但是这是不可能的,在日常生活中不可能让一个神经网络看到所有可能出现的场景,我们不如教这个神经网络去如何通过环境特征来计算长远规划的值,我们不是让它记住,而是让它学会计算。如果这个神经网络能学会计算,而不是记住的话,到了一个新的环境,即使这个新的环境在训练集中没有出现,这个神经网络因为学会了如何利用当前环境的信息进行计算。即使是没有出现的情况,如果计算方法是对的,它也能计算出长远规划值。所以这些工作让我们想到我们能不能通过某一种特定的网络设计或者网络结构,让这个神经网络有学会如何计算的能力,而不是简单的记住。当然我们也希望有着掌握如何学习的神经网络,它能正确利用做长远规划的能力,在新的任务和新的环境里做的更好。我们最后希望神经网络有上面这两个特质。

我们来看模型是怎样的,首先我们的出发点还是反应式神经网络,比如deep Q-learning,输入一个环境状态,得出一个决策。我们的想法是基于这个反应式神经网络上,我们再提供一个额外的模块。这个模块用于长远规划,我们希望这个模块能够学习,学会如何利用当前状态来进行正确长远规划,然后通过这个模块来提供额外的长远信息,以此来帮助反应式网络做出更好的选择,也就是说这个反应式网络特征基于当前环境。这个规划模块能利用当前环境对未来的情况进行一些超前的计算或者规划,得出一些长期的信息,作为额外的特征并输入给反应式网络,这个反应式网络具有当前网络的特征,以及规划模块提供的额外长远信息,最后希望网络用这两块信息做出更好的决策。

那好,有了这样大致的想法后就会有一些问题。第一个问题是,我们希望有一个模块来做长远规划,那么它应该用什么信息来进行长远规划,这么模块的输入是什么。第二个问题是这么模块怎么算,我有了当前状态的信息,怎么利用这些当前的信息做正确的反应,做长期的规划的一种计算。第三个问题是假设我们做出了比较正确的长期规划,能不能利用这些长期的规划的值作为额外的反馈,来帮助我们的神经网络,也就是怎么利用这些信息。最后也是最重要的问题是假设这些都有了,怎么训练这么网络。这些都是很自然的问题。那么后面我们来一一介绍如何解决这四个问题。

首先必须提及的是在传统的planning规划理论里面,有一个经典的算法叫value iteration algorithm 。这里的值函数可以定义成从一个点到目标点的距离,一个点到叫值迭代算法,类似于图论里的最短路,这个算法具体来说是对于每一个状态计算一个价值,一个状态的价值对应从这个状态出发,假设采用最佳策略所能得到长期的期望收益,比如在迷宫的环境里面,一个可行目标越近它的值越大,一个点到目标越远它的收益就越低。比如可以把到目标的距离取个负,这是一个合法的定义,这个值迭代算法有个特点一旦我们算出每一个value方程,也就是这个价值,我们就可以做最佳决策,因为假设我们知道了所有你可以到达的value值,选择一个有价值函数最高的状态去走,就可以了,根据它的定义我们先算出所有的值,做决策的时候选value值最大的方向去走。这就是value iteration算法,它是一个传统经典的算法,做出的选择是最优的。我们就想,这既然是存在的非常非常多年而且非常非常经典的算法,我们可不可以用这个算法作为我们神经网络的一部分来做出长远规划,事实上发现是可以嵌入神经网络中间的,我们具体来看这是怎么算的,比如说这个值迭代算法,每一步利用等式叫value iteration,如果大家知道图论里的Bellman-Ford的算法是一样的。具体来看,把迷宫环境中取一个特定的小块,这一块拎出来,在迷宫环境里中每个状态就是一个格子,在某一步迭代的时候看这格子的值是怎么算的。首先它枚举所有的action,对于一个格子来说他的action有8个,可以走8个不同的方向,假设我们枚举这个action比如到这个格子,之后我们要算它的期望,当它做出这个决策的收益,加上到下一个状态的长期收益,做出这个决策的reward加上下一个状态的value方式。对于这个决策来说,它需要加上reward以及这个格子对应的value值。如果把value值定义为具体的话,就是1加上这个值到终点的距离,最后呢它会取一个max  ,我们要枚举所有不同的方向,每个方向按照这个等式进行计算,每一个方向下一步到终点的距离加上1,最后我们取一个MAX,这里可以发现每一个方向都在迷宫里面,每一个决策也就是每一个方向对应的其实是这个点周围8个格子的概率分布。比如说我们选择朝这个格子方向移动,就可以认为到达这个格子的概率为1,其他格子概率为0,这个方向移动的话就是说在这个决策下到这个点的概率为1,其他都是0。因为只能到周围的8个点,所以每一个action可以看成到周围8个点的概率分布,所以你的每次计算只会依赖于周围的8个点的值,我们把这个图画出来之后,大家可以发现这个图其实跟传统的卷积神经网络CNN非常像,因为这个卷积神经网络CNN每次计算,一个卷积对应每个格子,算一个3×3 的package做一个 filter  的计算,从形式上发现有点像,再具体来看,其实和卷积神经网络非常像,每一次迭代的时候输入当前的状态的value 形成了N x N的矩阵,每一个移动每一个格子对应一个reward,又形成了N x N的矩阵,那么一个action对应了一个filter ,每一个移动都只能达到周围的一个点,它是一个3X3的package,  每一个点的某一次计算都是类似于卷积神经网络的一个卷积线性操作,每一个action对应了卷积神经网络的一个channel。比如说你有4种action,就有4个channel,最后这个式子里有一个maximize OVER所有的action,这可以对应卷积神经网络的MaxPooling。 在卷积神经网络的MaxPooling做2D空间区域里面取一个最大值(spatial pooling),但是value iteration里的取max操作做的是channel的pooling(channelwise pooling),是在对所有的action做取MAX,每一个action都是一个channel,对其做一个maxpooling。这样就发现其实从形式上看value iteration的一次迭代操作可以表示成神经网络的一次卷积层操作。value iteration是一个迭代算法,需要迭代非常非常多次,那么一次迭代写成一次卷积层操作,那么要做多次迭代呢?也非常容易,只要把一次迭代后的结果,再输回这个网络,再做一次再做一次,如果要做K次迭代,把这个卷积结构每一层对K次,从形式上看做了K次value iteration的迭代操作。所以到这里我们发现value iteration算法非常有趣的表示成卷积神经网络里的卷积层,在形式上是一一对应的,到这里我们可以发现用卷积层来表示value iteration算法的话,只要把卷积神经网络结构嵌入到整体的决策网络当中,这样就可以在决策网络中间用显示的方式进行value iteration。value iteration就是一个规划算法,卷积神经网络从某种程度上可以进行长期规划的计算。到这里发现这个对应关系之后,我们再回头看提到的四个问题,首先用的什么信息进行规划,我们知道value iteration算法需要知道状态,状态我们知道在迷宫环境就是格子,那除了状态之后它需要知道reward,还有知道transition,那比如说每一个格子上面周围能不能走一样的。比如有墙就不能走,这个action就不行,只有空白的格子才能走,所以选择性也是不一样的,reward也是不一样的,这个起点终点位置不一样。所以我们需要用一些神经网络,通过当前接触的信息,把reward和transition都算出来,然后作为输入,输入到 value iteration 模块里面。那如何进行规划?我们已经发现value iteration算法被表示成卷积神经网络的形式,所以我们只要把这个模块写成卷积神经网络的形式就可以进行长期规划的计算。第三个问题,如何利用value iteration算法的输出。我们知道对于每一步决策,都要知道每一个状态的长远信息是怎样的,你只要把对应长远信息的值函数作为额外的feature,输入到最后的网络结构中作为一个额外的特征就可以了。这里有一个问题就是说value iteration算法对地图上每一个点都算出了value值,但你在用的时候并不用看到所有的点的value值,但你在用的时候只要知道你附近的点的value值怎么样,离你特别远的点就不用管它的value值,所以我们这里可以用Attention机制,因为这样的话我们就能只看到对我们有帮助的点的value值,最后把模块作为额外的feature输入到神经网络里面。不管是Attention和额外的feature都是神经网络里面标准的操作,所以非常容易完成。最后一个问题是如何训练,我们知道不管算reward还是算transition还是做value iteration还是选出对我们有帮助的长期信息,所有的这些部分可以表示成标准的神经网络里面的形式,比如说这每一个箭头都是一个简单神经网络,由于它都是一个简单的神经网络,所以最后我们只要知道神经网络怎么训练我们就该怎么训练,做端对端的Back Propagation,最后训练就可以了,从训练角度上和普通神经网络没有差别。有了这个模型之后,我们就来看它能否真的达到我们预期。

图片2

这里有一些我们实验的结果。我们实验里面主要考虑两个问题,第一个,虽然卷积神经网络形式上和value iteration是一样的,但它能不能真的在实际环境里面学出一些有意义规划的计算,也就是说它是不是真的能学会;第二个是它学会了之后,长期规划的模块,所提供的额外特征是不是真的对它有帮助。我们希望这个实验结果能帮助我们回答这2个问题。首先看第一个结果,第一个也是我提到的迷宫实验,我们先生成5000个不同的迷宫,每个迷宫生成了7个起点终点对,由于哦们知道迷宫最短路是怎么样的,对每一个迷宫的起点终点对计算出最短路,生成很多训练数据。然后我们就训练,因为我们知道最短路径是怎样的,用监督学习,去训练这个网络,我们把value iteration network规划模块网络和其他网络进行对比,和deep Q-learning也就是之前玩的Atari game的网络进行对比,还有FCNN的网络做对比,这些网络都是反应式的,由于我们做的都是监督学习,所以我们可以知道训练和预测的loss。可以发现发现prediction loss上,大家都差不多,没有什么差别,但事实上是不是这样的呢?

图片3

在迷宫问题里面,所关心的并不是每一个位置下一步走哪,我们关心的是能否做出长期连续的决策,关心从起点做出的一系列决策走到终点,作出一系列决策中间哪怕走错一步,前后都答对了,也还是不能完成任务的,即使走的不是最短的路,绕远路也能绕到终点,我们也是可以接受的。我们还衡量了测试成功几率,深蓝色的是value iteration network,非常稳定,但是CNN和FCNN在环境越来越大的时候稳定度就明显往下降,这个可以理解,我们只生成了5000个迷宫。当迷宫越来越大的时候,迷宫产生一些你训练集中没有出现的环节,利用前面的分析环节,用CNN和FCNN,反应式网络某种程度上是记住了特定环境下是往左还是往右,只是简单的记住了,到了新的环境里面它看到没有看见过的场景环境,它就不知道该怎么走,一旦走错一步整个任务就失败。但是value iteration network有一些利用长期规划的信息,在新的环境也能做出稳定的长期规划的决策,那为什么prediction loss这么低呢?看一个例子,这是一个测试集的环境,在训练集中是没有出现的,蓝色路线是最短路,通过最短路算法算出来的,红色是value iteration network预测的路线,这一段和最短路不一样,最后走到了目的地,很多prediction loss比较低是有时候没有一定走最短路,绕了一些远路但还是能绕弯路走到终点,看起来它确实有长期规划的能力。当然这个问题比较简单,做了很多其他的测试。

图片4

因为value iteration network规划模块只是一个神经网络而已,轻松的和现有的神经网络进行组合,所以我们做了一些其他的任务。比如说迷宫环境比较小,简单,我们就在一个非常高的分辨率下做了实验。这是NASA发表的火星地表数据集,这个数据集用卫星拍的火星地表,有一个机器人,从地表一个地方走到另一个地方,火星机器人是一个非常小的东西,火星上有一些山坡和沟壑,碰到山坡爬不上去,碰到沟壑会陷到里面,任务就是我们希望让火星机器人通过一个图片信息能够找出一个安全的道路,避开所有的沟壑和山坡。由于非常大,我们通过卷积神经网络,把图片通过卷积神经网络来维度做成比较小的,缩成20×20的小图片。依然用value iteration进行规划,最后通过规划结果作为额外的信息,输入到神经网络里去。我们可以发现即使在火星的环境里面,不告诉神经网络,哪里是高山,哪里是沟壑,它依然可以选出比较安全的走道,比如说蓝色是NASA给的最佳路线,机器人走对的路线,紫色使我们判断出的路线,可以发现我们的神经网络还是很聪明的,虽然没有走最短路,但还是绕开了高山和沟壑,学出来一些东西。

图片5

在之前不管迷宫还是火星机器人,都是一个离散值问题,因为走法都有大致的方向,所以我们也希望value iteration神经网络利用在控制领域的一些问题上。用一个例子来说,这个球体是一个障碍物,红色的是一个小球,有一定的体积和质量,绿色表示目的地。我需要判断出给这个小球一个怎样大的力,把这个小球推动。小球有一定质量有惯性,需要不停地给小球施加力,让小球成功的到达终点,有一些要求,不能太花时间,因为你可以慢慢地挪动这个小球让它到种地,我们不允许这样,我们希望它尽快到终点。那我们怎么用value iteration network来解决这个问题,也非常容易。我们依然输入这个图像信息,用卷积神经网络做成一个低分辨率图片,输入到planning model里面,长期规划。因为是低分辨率了,是一个离散化的iteration来做规划,规划的值作为额外的feature输入到神经网络里,输出一个result,用什么样的力来加到这个小球上。训练的话用于控制领域,人也很难定什么样的控制是最好的,用强化学习的方法,路径优化的方法,直接通过强化学习来训练这些网络,当然把network和传统的deep Q-learning变种反应式网络进行对比。这是我们的结果,蓝色的是value iteration的结果,红色的是CNN的结果,X轴表示通过移动一定时间后小球距离绿色终点的距离,靠左就是好了,最靠左就是0,可以发现在测试集上value iteration network的输出,基本上都可以把小球成功控制到终点的,当然不是说它都成功了,也有失败的例子,但大部分的例子都是成功了,相比CNN的大部分没有成功。这里有动画,红色的是小球,可以发现虽然它不是所有都失败,也不是所有都成功,但大部分小球移动展示出一种合理的策略,大方向是对的,具体的控制上也比较准确,所以确实通过实验我们发现network学出了一些比较合理的决策方案。

除了寻路的游戏环境,我们也用value iteration network到其他任务上。这是一个关于自然语言任务,任务是说给你一句话,一个从维基百科页面上摘出来的, 比如:这个城市有1000万人口,可能是北京页面上摘出来的一段话。人来玩游戏的时候我给他展示这段话,你看到的是“北京市有1000万人口”,把你随机到连到一个维基百科的页面,或者贝克汉姆的主页,你看到这句话,通过点击这句话,一步步到你这句话的页面:你在贝克汉姆的页面,先点伦敦,点到英国,再点到欧洲,再点到亚洲,再到中国,然后点到了北京,这是一个点法。由于维基百科页面很大,不可能记住所有的页面和超级链接的方式,对一个人来说,只能看到当前页面的信息,以及可以点一步可以到达的页面信息,给你这句话希望你能够点一步就能到的包含这句话信息的页面上。我们发现人是怎么做这个游戏的呢,人是有些概念的,比如说这个贝克汉姆,你不知道贝克汉姆,你扫一眼发现是一个英国人,说不定看到这句话“这个城市有1000万人口”,很可能是一个城市的介绍,我想怎么通过一个人点到一个城市,我就想是不是通过点这个人的国家找到另一个大城市点到这句话,人是有这样的思考程序的,人的有些规划在脑子里走过,你不是瞎点的。我们想能不能模型里反映这些事情。我们找来另一个比较小的数据集,叫wiki for high school,是 一个公益的网站页面,包含3000个简化了的维基百科页面,这个公益网页是为了非洲儿童,他们没有学上,我们就希望这3000个页面包含高中生所能知道的知识,假设一个人能知道高中学过的知识,value iteration在3000个网页上进行规划,希望在比较小的图上的规划信息能够帮助我们更好的完成这个游戏。实际上结果是通过规划,在一个更小的图上规划可以提供额外的有帮助的信息来帮助我们更好地完成游戏。另一个是说叠加,我们知道这个规划模块可以解决非常非常复杂的规划问题,你想能不能用value iteration来帮助另一个value iteration,可能这个value iteration是20×20,能不能用一个更小的比如5X5的value iteration model来帮助中等规模的value iteration,确实以堆叠value iteration模块帮助这个网络收敛的更好。这主要展示了value iteration模块的一个灵活性。

我们总结下工作,工作最重要的信息就是我们希望这个网络通过学习,可以掌握如何进行规划的能力,掌握了如何进行规划的能力之后,就能更好地泛化能力了,我们提出value iteration network 方向是利用传统的计算方法,value iteration ,然后和传统的神经网络做了对比,他的模块可以很轻松的和已经有的模块进行堆加组合,来更好地解决已有问题。

最后我们和其他一些算法进行比较,传统强化学习分两块,model free reinforcement learning对环境不做任何的假设,就像人去瞎走,走了以后自己学,比如在房间里你走错了就要撞墙。还有一种model base reinforcement learning,我们先让神经网络来学习环境是什么样子的,先学出这个环境,如什么地方该走,什么地方不该走,我们先学好,然后在学出的环境上做规划。当然它有一些问题了,比如说model free reinforcement learning虽然非常好用,什么地方都能用,但收敛的非常慢,由于你撞多了,你记住了这里不能撞墙,在新的环境里泛化能力就非常差,又得撞上。这种对环境的假设非常强,要学出这个环境,对环境有非常强的假设,对环境的定义是学出来,你基于这个学出来的环境进行规划,错误会有累积效应,由于你学出的环境不准确,做出的最佳策略也会不准确,导致你策略学出来非常差。Value iteration network其实在中间比起model free reinforcement learning加另一个规划模块,它又没有对环境做出非常强的假设,value iteration这个规划模块能从形式上面用神经网络,中间的参数都是学的,可能规划模块上的近似图近似非常不准确,不过没有关系,我们只是把它作为一个额外的特征输回原来的网络,所以不会比model free reinforcement learning 做得差,它只是计算了一个额外的特征。当然不是所有的情况下都用value iteration network就好,因为多少还是有点假设,比如说你用这value iteration network算法起码是离散状态,这个算法要求离散状态,而如果说你是连续状态,不能离散化的话,用了就没有帮助,所以它是非常灵活的,但是它也有一些限制,不是说这个方法可以解决所有的问题。但这个想法 leaning to plan 是有广泛意义的,还有些feature work 比如能不能用别的规划算法,在控制领域的算法,用连续空间的规划的算法来做,我们确实有些工作用LQR做planning algorithm来控制机器人,我们也想把value iteration network 用到更广泛的问题上去。好的,谢谢大家。

 

问答环节

问:kernel size是怎么一回事?

答:你可以自己设,就是你可以想一想,有8个方向,每个方向一个kernel都是1个1其他是0,这玩意儿很难学的,但是你kernel多了就没问题,8个方向起码8个channel,我给你20个channel,重复了也没关系,一个1周围都是0要学是一个非常难的事情,你也可以大一点,比如3×3 ,5×5也行但是比较难学, 这都是可以变的,因为你其实做的planning是一个近似的,不一定要做到精密的对应,发现其实都是学的,因为5X5你要学出来也可以但是很难学。 一般3×3就够了,因为你放在空间大的有可能学出来表示性更强的话肯定会表示出简单的东西,但是一定会更加难学。

提问:3X3的物理意义是什么?

答:因为你只能到周围的8个格子,只要3X3就可以了,更远的算不到。但是你也可以fully connected,但就很难学了。但是channel的数量和action的数量严格一样,你可以8个channel,channel是学出来的,8个channel就很难学,因为是随机数据化非常难学,所以我们现实上做的时候会稍微多一点,10个或者12个channel,稍微多一点就有更大概率解出来。

提问:小球运动做离散化,离散化后你会把action换个8个方向吗?

答:对,iteration是说这个planning model告诉你该走什么路,这个地方做一个control,意思是说你从北京到上海不认识路,但是你可以看到周围的地理环境,你可以打开百度地图,搜索怎么走,就是一个planning model,告诉你往哪里走,但是具体这里有红绿灯这里有行人你要自己看着办,对的这个iteration就是这样的。

问:那个机器人的话,颜色形状发生改变那个network还能不能work。

回:我没试过改颜色,但是他们稍微把那个位置挪一挪是可以学出来的,所有的深度学习都有这样的问题,那些做给图片起标签的应用,可以学出来一个穿红色裙子的人,训练集中从没出现过蓝色裙子,给它一张穿蓝色裙子的人它就学不出来了,就是这样。深度学习的泛化能力总体还是有限的。

问:这个实验是否证明它的泛化能力不行?

回:问题也是有假设的,我们这里的规划算法是value iteration,他是一个图上的迭代算法。也就是说你首先得把问题转换成一个图,你才能用,机器人黄一个方块大小形状你很难把它表示成一个图的背景,所以其实挺难的。我也不知道他们有没有做出一些新的东西,你想一个机器人能插方块,是很小的一个东西已经很难了,他们现在能够做到动一下也能做到,已经比较难了,我现在还没看到我突然画一个形状你给我塞进去或者换一个颜色,暂时还没看到,我不确定他们的能够做到。

问:他们在机器人上训练要多久?

回:其实能训练的时间不多,其实机器人靠的机器手臂要动,很多人要用后面在排队的,一个人排上去要一两个小时,你想,动一下一分钟没有多少,他们也就去了几天,其实是实际问题和模拟问题的差别,模拟问题可以无穷的模拟,机器手臂不行,但你可以像谷歌一样,他们一个实验室配了16个机器人,他们16个机器人一起动,效率x16,实验室里没有这样的环境。

问:现在几百几千次重复动作就可以了?

回:对就可以学出来了,其实算法还是挺难的。机器人你想他蹦就是这么慢,耐心再多一天也就这么多,还要有一个博士盯着呢,他们做出来还是挺轰动的,他们有很多算法上的改进,第一个把它做成的。

问:我能否理解成你这个事情相当于对reward的计算,然后神经网络参数化?

回:它是一个部分吧,你要规划你得学出一个reward。

问:你这个问题有没有可能在其他的领域用,除了control之外。

回:什么时候可以用这些东西,因为我们的算法一定是value iteration,一定需要使得这个问题转成一个适用于value iteration的形式。value iteration是在图上做一个迭代,你somehow要从形式上面能够转成图,所以我们没有说他都能做。机器臂那个东西控制机器人怎么转成图呢?做不到。我呢边必须要换一个算法。因为我们要先转成图,对寻路类的问题很容易对应上图的,但是如果你做其他类应用就要考虑能不能用别的算法,但想法是类似的。但比如说deep mind的一些工作,他很多时候也不管你形式了,对应一个神经网络预测下一帧长什么样,有一些工作,它做这样一件事情,它先训练一个预测网络,预测我机器人动的时候会看到什么东西,假设你能把这个东西做好,它能帮助你来规划。

问:是类似teacher network和student network吗?

回:不一样,你想我们人是怎么样的,比如说人我要过马路了,你怎么做,你想我如果现在往前走,车要撞我,我是做了这么一件事,我脑子里面过了一下,所以我发现不能走,我停着,机器能不能做呢?机器也可以,先搞一个模块可以预测下一个帧长什么样,如果我能做这样的事情,机器相当于在脑子里想下一帧长什么样,这个不太好我不做,我选一个好的,其实是这样,他们那种的话出发点一样,有这样的工作也很有意思。

问:每一步就有一个reward吗?

回:reinforcement定义每一步就有一个reward,没有就是0。

问:8个方向走一步就一个reward?

回:你可以定义一个reward,如果走一步就是-1的reward,不同定义的reward产生不同的value方式,有一种合理的方式,每走一步给一个-1,然后到了终点就是1或者正无限,如果在这定义方式下,就代表最短路,你可以做一些别的定义,走一步是0撞墙是-1,到终点是1也可以,不管怎么定义,计算都是这样,每一步迭代都是说下一个点到终点的距离加上一个reward。

问:但这样看不到全部的信息,只有一部分的信息。

回:所以要迭代很多次,这个公式是说value iteration迭代无穷多次就看到全局了,我迭代一步就能看到周围两格,两格可以看到3格,无穷多次就可以看到全局了,

问:有可能算不出?

回:最短路要走30多步,网络可能只算了20几步,确实是有这样的问题,我们也有试过把网络特别设置一下,比如说我要走30步的,我试过只迭代20次,确实它算不出来,它会到不了,所以我们改进的方法就是用叠加的方法,比如说我的网络要走30步的,那我20步不是算不出来吗,我在上面叠一个把它搞成5×5的小方格,用5×5的规划信息做为额外的信息来帮助这个需要迭代20步的网络进行迭代,采样20×20要40步才能走到终点,迭代20步不够,再把20X20采样成5X5的,在这上面做10次,这是更低分辨率上做规划,规划后再把信息传回20×20网络,知道了一些额外的信息,再把它传给100X100的网络,可以迭。你可能迭代次数不够,你就再迭一个,这是一个解决方案,但是现实的话就设一个差不多的层数,因为你层数越多越难学。你要让网络够深,假设8步才能看到结果,我可能要迭代8步,value iteration就是这样的。你可以叠加,你在8×8的网络里要走8步,搞成4X4的网络里面只要走4步,我把它的结果作为反馈输入到8×8的网络里面,它迭代少量的次数就能收敛到正确的值。因为这个方法是在一个小的问题上面做规划来帮助一个比较大的问题做规划,也可以在一个小的问题上面迭一个更小的问题,来帮助它。怎么选层数也是一个问题,确实要调一调,最简单的就是我知道图的直径是多少,比如比较大,不太喜欢,你可以找一些别的方法。比如在我们训练的wiki的上面,它的直径是4,所以我们就迭代3次或4次,肯定没有问题,一定可以的,这也要看具体情况。