以下是在大规模分布式训练领域,商汤科技发表的一篇重磅大会口头报告(Oral)论文,提出基于分布式训练的深度增强学习BlockQNN算法,自动设计神经网络结构。本文由商汤科技实习研究员钟钊在商汤科技研究院副院长闫俊杰和研究经理武伟指导下完成。
神经网络结构设计一直是深度学习里的核心问题。在基于深度学习的分类、检测、分割、跟踪等任务中,基础神经网络的结构对整体算法的性能优劣有着决定性的影响。传统的神经网络结构设计需要大量专家的知识和试错成本,甚至还需要一些灵感和“神来之笔”,每年仅有几个有较大影响的新网络结构被设计出来,因此,人工设计网络结构是一件极其困难的事情。网络结构的自动设计/搜索的方法最近受到了广泛的重视,其试图朝着自动化深度学习这个目标,把人从复杂繁琐的网络设计调参中解放出来(如图一所示)。
图一:(由左至右)
从人工设计的网络结构到
算法自动设计的网络结构
近期的网络结构自动设计/搜索算法通常需要耗费巨大的计算资源(例如,Google的NAS算法需要使用数百块GPU以及近一个月的训练时间),而且生成的模型可迁移性不强,难以做到真正的实用化。本文提出的BlockQNN算法能够解决现有网络结构自动设计/搜索方法效率和泛化性的问题。
基于“Block”的网络结构表示
目前主流的深度神经网络结构极其复杂,其深度往往达到数百层,直接搜索整个网络结构的搜索空间非常庞大,这也是之前自动网络结构设计/搜索算法比较低效的原因之一。同时,直接设计整个网络的策略会导致网络结构不具备泛化性。例如,基于CIFAR数据集搜索出来的网络结构,因为其数据输入的大小限制,只适合处理输入为32x32分辨率的数据,从而使得搜索出的网络结构泛化性能较弱。
针对这些问题,本文借鉴了现代主流深度神经网络的设计思想,比如ResNet、Inception等网络。这些网络是由同样结构的子网络重复组合在一起形成,本文把这种能重复组合的子结构称为block。通过设计block结构,可以让网络结构的搜索空间大大减小,并且block结构本身具有强大的泛化性,针对不同的数据集或者任务,只需要叠加不同个数的block即可完成(如图二所示)。
图二:
基于Block设计的网络整体框架
左边为针对CIFAR的框架,右边针对ImageNet
表一:
网络结构编码表
为了表示网络block结构,本文设计了一套网络结构编码,把神经网络看做一个有向无环图,每个节点表示网络中的每一层,而边就表示数据流动的方向。整个编码包括神经网络的层数序号,类型,核的大小,以及两个前序节点的序号。使用这种编码方式就可以表示任意的神经网络结构,例如ResNet和Inception的block结构就能使用图三中的编码进行表示。
图三:
Inception和Resnet中block结构编码表示
基于强化学习的网络结构自动设计
接下来的核心问题即是如何获得最优的网络结构。尽管网络结构的搜索空间已经通过设计block大大减小,但是直接暴力搜索所有可能结构,依然十分耗费计算资源。本文因此提出一种基于强化学习的网络设计方法,自动学习得到网络结构。
在网络设计强化学习中,本文把当前神经网络层定义为增强学习中的目前状态(current state),而下一层结构的决策定义为增强学习中的动作(action)。这里使用之前定义的神经网络结构编码来表示每一层网络。这样,通过一系列的动作决策,就能获得一条表示block结构的编码(如图四所示),而提出的强化学习算法通过优化寻获最优的动作决策序列。本文使用Q-learning算法来进行学习,具体的公式不再展开。
图四:
基于强化学习的网络结构自动设计流程
值得注意的一点是,与一般的强化学习问题不同,该任务只在结束整个序列的决策后(即生成完整网络结构后)才会得到一个reward,而之前的每个决策是对应reward。由于获得最终reward的成本非常高(需要在数据上重新训练新获得的网络结构),为了加快它的收敛,作者使用了reward shaping的技巧(如图五所示),因而训练初始阶段终止层的Q值不会过高,让算法不会在训练初始阶段倾向于生成层数过浅的网络结构。
图五:
Reward shaping对收敛效率的影响
提前停止策略
虽然能够使用多种技巧来使自动化网络结构设计变的更加高效。但是自动网络设计中耗费时间的关键还是在于每次获得reward的时间成本非常高,需要将生成的网络结构在对应的数据集上训练至收敛,然后获得相应的准确度来表示结构的好坏并且用作reward。本文作者发现,通过调整学习率,只需要正常训练30分之一的过程(例如,CIFAR-100数据集上训练12个epoch),就可以得到网络的大致最终精度,这样可以大大降低时间成本。但是,这样的网络结构精度及其关联的reward会有误差,导致无法精细区分网络结构的优劣,本文提出一个凭经验的解决公式:
即真实的reward和提前停止的准确度成正比,但是和网络结构的计算复杂度和结构连接复杂度(block中边数除以点数)成反比。通过这样的公式矫正,得到的reward对网络结构的好坏更加具备可鉴别性(如图六所示)。
图六:
提前停止的准确度与网络真实准确度、
计算复杂度、连接复杂度的关系
实验结果
本文使用了32个GPU,经过3天的搜索,可以在CIFAR数据集上找到性能达到目前先进水平的网络结构(如图七所示)。
图七:
搜索过程以及学习得到的最优网络结构
相比之前的自动网络搜索方法(如Google NAS算法的数百块GPU以及一个月时间),BlockQNN算法可谓十分高效(如表二、表三所示)。
表二:
不同自动网络结构设计算法的
计算资源对比
表三:
在CIFAR数据集上不同网络结构的错误率
另一方面,学习获得的网络结构也可以更容易的迁移到ImageNet任务上,取得了不错的精度(如表四所示)。
表四:
在Imagenet数据集上不同网络结构的错误率
为了验证BlockQNN算法是否真的学习到了设计网络的方式,在同一搜索空间下和暴力搜索进行对比,可以发现本文提出的BlockQNN算法能获得比暴力搜索更好的模型(如图八所示)。
图八:
强化学习与暴力搜索获得网络结构
在CIFAR数据集的准确率
对整个搜索过程和结果网络结构进行分析(如图九所示),本文作者发现学习得到的优异结构拥有一些共性。比如multi-branch结构、short-cut连接方式等这些现在常用的设计思想。同时,作者也发现了一些不太常见的结构共性,比如卷积层之间的addition操作出现的十分频繁,这些学习得到的网络结构还有待进一步的分析和研究。
图九:
BlockQNN算法设计的网络结构示例
结论
本文提出了一种高效的基于强化学习的网路结构自动设计算法——BlockQNN,其通过“Block”的设计思想,让网络结构搜索空间大大降低,并且使得学习得到的网络具备非常强的可迁移性。同时,本文使用“提前停止”和分布式架构来加速整个学习过程,达到了百倍于之前Google NAS算法的速度(仅需要32块GPU以及3天的训练)。实验表明,其学习得到的网路结构在CIFAR数据集上达到人类设计网络结构的精度,并且其结构可以迁移到大规模的ImageNet数据集上,也能取得不错的性能。作者希望朝着自动化深度学习这个目标继续发展算法,最终把人从复杂繁琐的网络设计和调参中解放出来,实现深度学习更进一步的“智能化”。
全部0条评论
快来发表一下你的评论吧 !