元强化学习研究笔记

元强化学习定义

什么是元强化学习?这得从深度学习开始说起。

Deep Learning研究一个从x到y的映射mapping,只是这个映射函数f是用一个端到端的深度神经网络来表示。如果是计算机视觉中的图像识别,那么x就是图片,y就是标签;如果是自然语言处理中的文本翻译,那么x就是比如中文,y就是英文;如果是深度增强学习中的玩Atari游戏,那么x就是屏幕画面,y就是输出的动作。深度学习研究的就是通过深度神经网络来学习一个针对某一特定任务task的模型。通过大量的样本进行训练,训练完,这个模型就可以用在特定任务上。

Meta Learning研究Task!Meta Learning的目的是希望学习很多很多的task,然后有了这些学习经验之后,在面对新的task的时候可以游刃有余,学的快又学的好!那为什么叫Meta呢?Deep Learning是在Task里面研究,现在Meta Learning是在Task外面,更高层级来研究。也就是在Meta Learning的问题上,Task是作为样本来输入的。

Meta RL(Meta Reinforcement Learning)是Meta Learning应用到Reinforcement Learning的一个研究方向,核心的想法就是希望AI在学习大量的RL任务中获取足够的先验知识Prior Knowledge然后在面对新的RL任务时能够 学的更快,学的更好,能够自适应新环境!

元强化学习意义

元强化学习试图解决深度强化学习存在的如下问题:

  • 它的样本利用率非常低。换言之为了让模型的表现达到一定高度需要极为大量的训练样本。
  • 最终表现很多时候不够好。在很多任务上用非强化学习甚至非学习的其它方法,如基于模型的控制(model based control),线性二次型调节器(Linear Quadratic Regulator)等等可以获得好得多的表现。最气人的是这些模型很多时候样本利用率还高。当然这些模型有的时候会有一些假设比如有训练好的模型可以模仿,比如可以进行蒙特卡洛树搜索等等。
  • DRL成功的关键离不开一个好的奖励函数(reward function),然而这种奖励函数往往很难设计。在Deep Reinforcement Learning That Matters作者提到有时候把奖励乘以一个常数模型表现就会有天和地的区别。但奖励函数的坑爹之处还不止如此。奖励函数的设计需要保证:
    • 加入了合适的先验,良好的定义了问题和在一切可能状态下的对应动作。坑爹的是模型很多时候会找到作弊的手段。Alex举的一个例子是有一个任务需要把红色的乐高积木放到蓝色的乐高积木上面,奖励函数的值基于红色乐高积木底部的高度而定。结果一个模型直接把红色乐高积木翻了一个底朝天。仔啊,你咋学坏了,阿爸对你很失望啊。
    • 奖励函数的值太过稀疏。换言之大部分情况下奖励函数在一个状态返回的值都是0。这就和我们人学习也需要鼓励,学太久都没什么回报就容易气馁。都说21世纪是生物的世纪,怎么我还没感觉到呢?21世纪才刚开始呢。我等不到了啊啊啊啊啊。
    • 有的时候在奖励函数上下太多功夫会引入新的偏见(bias)。
    • 要找到一个大家都使用而又具有好的性质的奖励函数。这里Alex没很深入地讨论,但链接了一篇陶神(Terence Tao)的博客,大家有兴趣可以去看下。
  • 局部最优/探索和剥削(exploration vs. exploitation)的不当应用。Alex举的一个例子是有一个连续控制的环境里,一个类似马的四足机器人在跑步,结果模型不小心多看到了马四脚朝天一顿乱踹后结果较好的情况,于是你只能看到四脚朝天的马了。
  • 对环境的过拟合。DRL少有在多个环境上玩得转的。你训练好的DQN在一个Atari game上work了,换一个可能就完全不work。即便你想要做迁移学习,也没有任何保障你能成功。
  • 不稳定性
    • 读DRL论文的时候会发现有时候作者们会给出一个模型表现随着尝试random seed数量下降的图,几乎所有图里模型表现最终都会降到0。相比之下在监督学习里不同的超参数或多或少都会表现出训练带来的变化,而DRL里运气不好可能很长时间你模型表现的曲线都没有任何变化,因为完全不work。
    • 即便知道了超参数和随机种子,你的实现只要稍有差别,模型的表现就可以千差万别。这可能就是Deep Reinforcement Learning That Matters一文里John Schulman两篇不同文章里同一个算法在同一个任务上表现截然不同的原因。
    • 即便一切都很顺利,从我个人的经验和之前同某DRL研究人员的交流来看只要时间一长你的模型表现就可能突然从很好变成完全不work。原因我不是完全确定,可能和过拟合和variance过大有关。

元强化学习方法

Meta RL(Meta Reinforcement Learning)是Meta Learning应用到Reinforcement Learning的一个研究方向。因此元强化学习的研究借鉴了元学习的思想和方法。

元学习方法

HyperNetwork 生成参数

HyperNetwork是一个蛮有名的网络,简单说就是用一个网络来生成另外一个网络的参数。那么我们这里非常直接,我们的设想就是希望用一个hypernetwork输入训练集数据,然后给我输出我的对应模型也就是上图f的参数,我们希望输出的这个参数能够使得在测试图片上取得好的识别效果。那么,有了这样设计,这个hypernetwork其实就是一个meta network。大家可以看到,本来基本的做法是用训练集直接训练这个模型f,但是现在我们用这个hypernetwork不训练了,直接给你输出参数,这等价于hypernetwork学会了如何学习图像识别,这也是为什么meta learning也同时叫做learning to learn的原因。我们通过hypernetwork学会学习。训练好了这个模型,连反向传播梯度下降都不要了,直接给你参数,是不是很酷?

Conditional Neural Network 条件神经网络

直接把D_train当做条件输入到f中,那么这个f本身就变成一个meta network了。也就是条件神经网络实际上能够得到和上面的hypernetwork一样的意义。因为我们可以想,只要条件D_train变了,那么y_test肯定也就变了。所以这里就非常非常直接了。把数据全部输入进去,让神经网络自己学就行了,不外乎就是去设计一个合适的网络结构而已。那么,这里最最简单粗暴的网络结构就是SNAIL算法使用temporal convolutional network,也就是wavenet的架构:

MAML 基于梯度的做法

MAML的核心步骤就是

  • 采集Task,得到D_train和D_test

  • 使用D_train对神经网络f训练少数几步,得到新的参数

  • 利用新的参数训练D_test,然后使得梯度下降更新一开始的参数。

三种解决办法的优缺点

先说HyperNetwork生成参数的做法。这种做法最大的问题就在于参数空间是很大的,所以要生成合适的参数特别是巨量的参数其实是比较困难的,所以目前绝大多数生成参数的做法都是只生成少量参数,比如一层的MLP,或者对于参数的空间进行一定的限制,比如就在[-1,1]之间,否则空间太多,有无数种选择输出一样的结果,就很难训了。但是采样HyperNetwork又有其灵活性,意味着我们可以只更新少部分参数,而不用全部。

接下来就是条件神经网络了。这又有什么问题呢?我觉得在性能上绝对会是最好的,很直接,但是不好看,一直要拖着一个条件,网络很大。不管是生成参数还是MAML,他们的模型网络就是独立的,之后只要输入x就行了,而条件神经网络每次都要输入条件,很烦啊。

那么MAML呢?可能最烦人的就是二次梯度了,这意味着MAML的训练会很慢,那么就很难hold住大网络了。实际上MAML目前对于大的网络结构比如Resnet效果并不好。然后MAML是使用D_train的Loss来更新整个网络,对比HyperNetwork缺少灵活性。这个Loss就是最好的吗?不见得。如果D_train是无监督数据,那怎么办?所以MAML是有局限性的。

目前各种各样的Meta Learning研究,在方法论上都逃不出这三种方法。要么改改网络结构,要么结合一下上面的方法,比如先MAML再生成参数,或者hypernetwork和conditional neural network混着用等等。那么什么才是终极必杀呢?可能还是要具体问题具体看吧,对于不同的问题采用不同办法效果会不一样。这些都值得我们去探索。

元强化学习方法

参考链接

  1. Meta Learning单排小教学,by Flood Sung.
  2. 最前沿: Meta RL论文解读,by Flood Sung.
  3. 这里有一篇深度强化学习劝退文,by Frankenstein.
  4. 周志华:满足这三大条件,可以考虑不用深度神经网络,by 周志华教授.