首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

什么是超网络(上)

编者按:机器学习开发者hardmaru撰写博客,介绍了他在2016-2017年度Google Brain Residency期间和同事合作发表的论文HyperNetworks(超网络)。

介绍

用于手写生成的超网络,LSTM的权重矩阵随时间而改变

大部分现代的神经网络架构或者是一个深度卷积网络,或者是一个长长的循环神经网络,再不然就是两者的组合。这两个架构看起来是光谱的两端。循环网络可以看成是一个非常深的前馈网络,网络每层使用同一套权重(这叫做权重系(weight-tying))。而深度卷积网络允许每层的权重不同。但是也许某种程度上这两者是相关联的。每年,ImageNet优胜模型变得越来越深。想想我们时常听到的那些110层的深度网络,甚至1001层的循环网络。这110层都需要各不相同吗?甚至,大多数层有用吗?

上:前馈网络,不共享权重;下:循环网络,共享权重

人们已经考虑过迫使深度卷积网络更像循环神经网络的方案,也就是每层使用同一套权重。然而,如果我们强迫一个深度残差网络使用同一套权重,表现会令人尴尬。在我们的论文中,我们使用超网络探索中道——强制宽松版本的权重系。超网络仅仅是一个小型网络,该网络为一个大得多的网络生成权重,比如为一个深度残差网络生成权重,高效地设定残差网络每层的权重。我们可以使用超网络来探索模型的表达力和捆绑深度卷积网络权重的程度之间的权衡。这有些像压缩图像时可以调整压缩率,超网络不过是把图像换成深度卷积网络的权重。

尽管神经网络压缩是一个很不错的主题,如果你读过我以前的文章的话,你可能知道,我更想背道而驰。已经有很多算法接受一个完全训练好的网络,接着应用压缩方法到预训练网络的权重,以减少网络的体积。虽然这些方法很有用,我觉得从数目较少的参数开始,学习创建一个更大、更复杂的表示,会更有意思。在自然界中,一套简单的规则可以生成许多美丽复杂的模式。数字艺术家已经基于这个概念设计了美丽的生成式作品。我的机器学习研究打算探索这种复杂度抽象的概念。在我看来,神经网络解压缩是一个比压缩更有趣的问题。特别地,我也想探索解压缩一个已经压缩过的神经网络,例如,循环网络的权重。

更激动人心的部分是我们的论文的第二部分,我们将超网络应用到循环网络。循环网络的权重在每一时步是捆绑的,限制了它的表达力。如果我们找到一种允许循环神经网络的权重因每一时步和每个输入序列而不同的方法,那会怎么样?

静态超网络为前馈网络生成权重

动态超网络为循环网络生成权重

这篇论文的主要成果是挑战循环网络的权重共享范式。我们在一个大型LSTM网络中嵌入了一个小型的超网络,因此,主LSTM网络可以根据超网络修改自己的权重。在这一例子中,超网络也是一个LSTM,只不过比主网络小,并且具有在每一时步和每一个输入序列修改主网络权重的能力。最终模型在Penn Treebank和维基百科数据库的字符层次语言建模任务中达到了当前最先进水平。更重要的,我们探索了用我们的模型生成生成式模型。

最终得到的HyperLSTM(超LSTM)模型感觉和一个普通的通用TensorFlow循环神经网络细胞差不多。就像我们中的某些人具有超能力一样,在HyperLSTM模型中,如果主LSTM网络是人脑的话,那么HyperLSTM是某种在人脑内进行操控的奇异智能生物。

我本人很欢迎我们的新Arquillian统治者

背景

使用神经网络生成大得多的神经网络的权重的概念源于神经演化。尽管演化算法使用起来很方便、很有趣,但通过演化算法直接寻找一个巨大的模型参数集合却很困难。Ken Stanley想出了一个天才的方法来解决这个问题——HyperNEAT(超NEAT)。他在尝试使用NEAT算法创建美丽的神经网络生成艺术时想出了这个方法。NEAT是一个演化神经网络,接受每个像素的位置作为输入,然后输出每个像素的颜色,因而,它可用于生成艺术作品。如果我们使用NEAT来绘制权重矩阵的权重,那会怎么样?HyperNEAT试图做这个。它使用一个小型NEAT网络生成大型神经网络的所有权重参数。小型NEAT网络通常包括不到几千个参数,给定一个包含每个权重连接的虚拟坐标的集合,它的架构逐渐演化以产生大型网络的权重。

尽管通过数量较少的参数设定大型权重集合的概念在神经演化中非常有用,另一些研究者认为HyperNEAT多少有点“杀鸡焉用牛刀”的感觉。编写和调试NEAT需要耗费很多精力,而在研究中,选择性懒惰很有市场。Schmidhuber团队决定尝试另一种方法,直接使用离散余弦变换压缩大型权重矩阵,通过一个较小的系数集合来逼近原本的权重矩阵(JPEG压缩正是这么做的)。接着他们使用遗传算法来解决寻找最优参数集合的问题,从而使循环网络的权重好到可以在TORCS模拟中驾驶一辆虚拟汽车沿着轨道前进。基本上,他们是把JPEG压缩技术应用到了自动驾驶的权重矩阵上。

包括我在Deepmind的同事在内的一些人,也尝试使用HyperNEAT来演化一个小型的权重生成网络,但使用反向传播代替了遗传算法来求解小型网络的权重。他们关于DPPN的论文总结了一些很酷的成果。

我个人对神经网络权重生成的另一方面更感兴趣。我喜欢把神经网络看成一种强大的计算设备,神经网络的权重某种程度上像是计算机的机器指令。神经元的数目越多,神经网络的表达力变得越强。但和普通计算机的机器指令不同,神经网络的权重是强韧的,所以如果我们给网络的一些部分加上一些噪声,某种程度上它仍然能工作。基于这一原因,我发现使用少量参数表达一大组权重的概念很吸引人。这种形式的权重抽象有点像美丽的高级抽象语言(LISP或Python)编译为原始的机器代码(神经网络权重)。或者,从生物学的视角而言,它像是在基因层面表达大型的复杂生物学结构。

静态超网络

在这篇论文中,我使用了一个与HyperNEAT、DPPN略微不同的方法。如前所述,这些方法接受一组虚拟坐标作为小型网络的输入,然后生成大型网络的输出。我就这一概念做了大量试验(见论文附件A),但在深度卷积网络和LSTM这样的现代架构上,它没有效果。尽管HyperNEAT和DCT可以生成看起来不错的权重矩阵(由于正弦之类的平滑函数强制应用的先验),在很多实际应用中,这样的人造平滑性也是局限。看起来不错的权重矩阵如果不工作,那也是毫无帮助。下面的图像展示了一个典型的深度残差网络的矩阵:

在CIFAR-10上训练的典型的残差网络的16x16x3x3和32x32x3x3的权重核

尽管我不会把这样的残差网络权重图片挂在自己的起居室里,它们的效果真不错,我想通过更少的参数生成这些权重的图像。我采用了一个更简单的方法,一个更类似VAE或者GAN的方法。像GAN和VAE这样更现代的生成式模型接受一个短小的嵌入向量Z,比如说,包含64个数字的向量,然后基于这64个值,尝试生成逼真的猫咪图像或其它有趣的图像。为何不尝试生成残差网络的权重矩阵呢?所以我们使用的方法是训练一个简单的双层网络,以通过由64个数字组成的嵌入向量生成16x16x3x3权重核。更大的权重核将通过堆叠较小的版本创建(也就是说,右面的那个需要256个数字来生成)。我们将使用同样的双层网络来生成深度残差网络的每个核。当我们训练残差网络进行图像分类的时候,我们并没有直接训练残差网络的权重,而将训练Z的集合与双层网络的参数。

在同样任务上训练的残差网络,16x16x3x3和32x32x3x3的权重核由超网络生成

我们尝试了一个现成的典型残差网络(这一使用“WRN-40-2”配置的出色的残差网络变体叫做广残差网络),其中36个网络层为这类权重核。写作本文时,CIFAR-10上最好的测试分类精确度大约为96%(使用了几千万参数)。而上面的广残差网络仅仅使用大约二百二十万参数就能在CIFAR-10上达到大约94%的精确度,我认为这相当不错了。我们的基于超网络生成权重的残差网络版本仅使用大约15万参数,达到了同级别的精确度(93%)。

广残差网络结构。我们的参数为N=6、k=2

这些结果让我怀疑,那些在ImageNet测试上表现非常好的超级深的1001层残差网络,大部分的权重也许不是那么有用,许多权重可能只是某种占位符,让大量的神经元参与运算,那才是为什么它们表现如此好的原因。

如果你想看下实现,请参考这个IPython Notebook,它展示了论文中的MNIST试验中概述的权重生成概念。它可以扩展,并与Tensor框架中的残差网络模型相结合。

未完待续

正如“介绍”一节提到的,我们也尝试了将超网络应用到循环网络上,这是这项研究的主要贡献。我们将在下篇介绍这一动态超网络架构。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180221G0S5GK00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券