0
近年来,神经网络已经成为了计算机视觉中主要的机器学习解决方案。然而神经网络结构的设计仍然需要极强的专业知识,在一定程度上妨碍了神经网络的普及。
近日,在雷锋网 AI 研习社公开课上,约翰霍普金斯大学在读博士刘晨曦就分享了在神经网络结构搜索的最新研究,并讲解了如何通过由简至繁的渐进式搜索得到在 ImageNet 图像分类上最高的识别精度。公开课回放视频网址:http://www.mooc.ai/open/course/550?=aitechtalkliuchenxi
刘晨曦:约翰霍普金斯大学在读博士,导师是 Alan Yuille 教授,主要研究方向为计算机视觉,自然语言处理等。曾就读于加州大学洛杉矶分校及清华大学。其研究工作曾在 CVPR,ICCV,ECCV 等发表。
分享主题:渐进式神经网络结构搜索
分享大纲:
AutoML 和神经网络结构搜索的背景介绍
网络结构搜索空间
渐进式神经网络结构搜索算法
图像分类的实验结果
雷锋网 AI 研习社将其分享内容整理如下:
今天我要跟大家分享是渐进式神经网络结构搜索(Progressive Neural Architecture Search)。这项工作是我在 Google(美国)实习的时候做的项目,并在不久前的 ECCV 2018 上做口头报告。
首先介绍一下 AutoML 和神经网络结构搜索的背景。
这篇文章主要涉及的领域是 AutoML,这是一个新兴领域,也是 Google 非常重视的一个具体方向。它的目标很简单但也很重要,就是能够在 Machine Learning solution 的整个设计过程中,减少人的参与。当 AutoML 的实现程度够高,能实现的具体场合是:人只需在早上起来的时候按一个回车键,整个设计过程就能实现高度的自动模式,晚上回来的时候就能够完成。
当然理想很丰满,现实实现难度却比较大,为什么?
现在的 Machine Learning solution 既有参数也有超参数,而现在最受欢迎的机器学习框架是神经网络,这里主要讨论它的优化是否自动化了。目前,参数的调整已经非常自动化了,可以直接用 Backpropagation 函数实现最优的参数调整,而难以实现较大程度自动化的,是超参数的调整。
那超参数都在哪里?
一提到超参数,我们会更多地想到 learning rate 相关的数字,比如说整个 training 有多长时间,绝对数值应该选多少等。但是对于神经网络来说,很多超参数都在它的结构里面。下图就是一个网络结构:
很多神经网络结构需要很多的 expert experience 和 knowledge,但这样得出的结果并不是最优的,这也是我们尝试渐进式神经网络结构搜索最主要的 motivation。
近几年来,大家逐渐开始关注一个问题:能不能不要过于依赖于 expert experience 和 knowledge,而通过自动的方式来得到一个非常好的神经网络结构?
神经网络领域发展得很快,但是现在神经网络结构搜索相关的文章中主要使用的方法是:进化的算法(EA)和强化学习的算法(RL)。
【关于这两种算法的讲解,请回看视频 00:07:00 处,http://http://www.mooc.ai/open/course/550?=aitechtalkliuchenxi】
在我们之前,神经网络结构搜索的相关工作已经做得比较好了,但在我们研究这一领域的时候,发现的问题是,之前的工作都非常依赖计算资源。比如在 Google Brain 2017 年的一篇文章里,为了做神经网络结构搜索用了 800 块 K40 的 GPU,然后训练了 28 天。在今年的一篇文章里,虽然有了很大提升,但还是用了 500 块 P100,并训练了 5 天。
所以我们这项工作的主要目标是尝试把神经网络结构搜索的速度和效率提高,具体的做法是:提出一个创新的算法。在我们描述这个算法前,我们需要了解网络结构搜索空间(Architecture Search Space)。
网络结构搜索空间大概的结构是:定义整个 Network 由一些 Cell 组成,一个 Cell 进一步由一些 Block 组成。
从 Cell 到 Network 的过程,如右图所示,就是有了一个 Cell structure 后,组建整个 Network,整个过程借鉴了 ResNet 的设计。
【关于从 Cell 到 Network 的过程更具体的讲解,请回看视频 00:12:40 处,http://www.mooc.ai/open/course/550?=aitechtalkliuchenxi】
从 Block 到 Cell 的过程,是指一个 Cell 由 5 个 Block 组成,整个 Cell 的 output 是 5 个 Block 的 output 的 concatenation(连接)。如右图,H 代表 Cell 的 output,H1 到 H5 代表了五个 Block 的 output。
而一个 Block 大概是下图右边的这样一个结构,这是整个网络最小的形成段,Input1 通过 Operator1 transform 一下,Input2 通过 Operator2 transform 一下,二者通过一定方法 Combine 形成一个 Block。
【更多关于 Block 的形成过程的讲解,请回看视频 00:14:34 处,http://www.mooc.ai/open/course/550?=aitechtalkliuchenxi】
总的来说,网络结构搜索空间中一个 Cell 结构如右图所示,每个「+」的位置都代表 Block 结束的地方,每个 Block 结束都有一个 element-wise addition 的操作,H(c-1)是前一个 Cell 的 output,H(c-2)是前两个 Cell 的 output。
左边是我进行的对应的计算,这样的结构就已经有 10 的 14 次方的 combinations,而神经网络结构搜索的目标就是从这 10 的 14 次方个结果中选出最佳的那个,这显然是一个非常具有挑战性的 Task,这就需要一个好的算法来进行。
我们主要的 Idea 其实很简单:从简单到复杂的 Curriculum Learning。我们注意到之前的方法都直接在 10 的 14 次方大小的搜索空间进行取样或者训练,这样的搜索空间非常大,很难进行有效的信息积累。
而我们的 Idea 是,不直接在 10 的 14 次方大小的搜索空间中工作,而是从简到繁慢慢进入最大的搜索空间:
首先,训练所有的 1-block cells,当然,我们的目标是搜索 5-block cells,但我们一开始先假装不知道我们的目标。这个网络结构的一个好处是它的结构比较简单,另一个好处是它的绝对数量只有 256 个不同的可能。
然后,去测它的算法的话,它们的分值会比较低,这是因为它们有更少的 Block。但是,对于它们之间相对的性能,已经有信号暗示哪些 Cell 是 promising 的,哪些不 promising。
最后,我们直接从 256 个可能里面挑选 K 个 promising 最高的 Cell,让它变成 2-block cells,再变到 3-block cells,依次这样发展。
【关于这种 Idea 更详细的讲解,请回看视频 00:19:50 处,http://www.mooc.ai/open/course/550?=aitechtalkliuchenxi】
然而这种 Idea 是难以预测的。基于此,我们的解决方案是引入了一个「cheap」surrogate model,它读入一个结构,比如下图中的 (0, 2, 0, 6),将其直接放入到 predictor 中去预测 final performance,这样的一个 predictor 是很轻便的,我们的想法就是用这个 surrogate model 完全代替整个训练过程。
【关于 surrogate model 更详细的讲解,请回看视频 00:22:28 处,http://www.mooc.ai/open/course/550?=aitechtalkliuchenxi】
最终,我们既尝试了 MLP-ensemble 也尝试了 RNN-ensemble 的 predictor。RNN-ensemble 的方法比较直观,每次当遇到结构的大小不一样长的时候,只要将 RNN unroll 不同的步数就可以了。MLP-ensemble 则通过 mean pooling 的方式来处理可变大小。
接下来我们用一个具体例子来看这种渐进式神经网络结构搜索方法。
【关于渐进式神经网络结构搜索方法的案例讲解,请回看视频 00:26:39 处,http://www.mooc.ai/open/course/550?=aitechtalkliuchenxi】
最后介绍一下我们的实验结果。
在搜索过程中,我们做了这样一个实验,在 CIFAR-10 架构上进行了渐进式神经网络结构搜索,K 取值 256,而每个模型的 N 和 F 分别取值 2、24,相对较小,并对模型进行了 20 次迭代训练,以更快、更准确地判断 Network 的好坏。这个过程中的一个很重要的问题是,我们的搜索是不是更加有效率——这也是我们整篇论文最主要的目标。
答案肯定是,是的。在下图中,我把我们的渐进式神经网络结构搜索跟 Random Rearch 和 NAS 进行了比较:
【关于对三种搜索方法的比较的具体讲解,请回看视频 00:31:45 处,http://www.mooc.ai/open/course/550?=aitechtalkliuchenxi】
我们搜索的结构有 PNASNet-1、 2、3、4、5,它们的具体的样子如下图:
其中 PNASNet-5 是我们最终搜索出来的结果。而我们找到这样一个结构之后,仅仅确保它在过程中的表现好还不够,我们还要在搜索完成后,将 N 和 F 增大,在 CIFAR-10 和 ImageNet 上进行训练和测试。这里的问题是,我们找到的网络结构在最好的 benchmark datasets 上的表现是怎么样的。
在 CIFAR-10 上实验的结果如下图:
在 ImageNet (Mobile、Large)上实验的结果如下图:
【关于在 CIFAR-10 和 ImageNet 上的实验结果的具体讲解,请回看视频 00:35:30 处,http://www.mooc.ai/open/course/550?=aitechtalkliuchenxi】
对我们的工作做一下总结:
第一,我们提出了一种神经网络结构搜索方法,具体采用的是从简单到复杂的方法,同时,为了让这个算法变得更具可预测性,我们学习了一个 surrogate function 来指导搜索。
第二,我们将最后搜索出来的结果叫做 PNASNet-5 ,它在 CIFAR-10 和 ImageNet 上达到了非常高的准确率,且在搜索过程中比当下最好的增强学习和进化算法的方法都更快。
我们在 ImageNet 上训练好的 PNASNet-5 模型已经 release 了,包括刚刚提到在 ImageNet 上的 Mobile、 Large 模型,Both TensorFlow 、PyTorch 模型,以及(据我所知)在 ImageNet 所有对外开放的模型中准确度和效率最高的 SOTA 模型,大家如果有需要可以到相应网址找到。
我们的 Paper 自在 ECCV 上发表后,有了很多新的变化和 Extensions。我们的算法被用到类似的 Task 中,比如 PPP-Net 和 DPP-Net 的 Pareto-optimal architectures 或者 Meta-learning 中,都取得了不错的效果。
而在我们的论文中没有解决的问题是,我们对每个单独 sample 出来的模型进行单独训练,彼此间没有很好的 Sharing。最近有一篇论文将我们的方法与其他方法进行结合,使神经网络结构搜索的速度变得更快、更有效率。
以上就是本期嘉宾的全部分享内容。更多公开课视频请到雷锋网 AI 研习社社区(https://club.leiphone.com/)观看。关注微信公众号:AI 研习社(okweiwu),可获取最新公开课直播时间预告。
雷峰网原创文章,未经授权禁止转载。详情见转载须知。