也就是说现在ML工程师自己也要被ML淘汰了?
一、背景:卷积神经网络的发展
1998年Yann LeCun提出的LeNet-5[1]首次实现了可以有效地进行图像分类的卷积神经网络(CNN)算法,2012年Alex Krizhevsky等人提出的AlexNet[2]首次在ImageNet Large Scale Visual Recognition Challenge上击败了所有其他方法,在这之后的ILSVRC的成绩榜基本被基于CNN的算法占据。在2014年,Karen Simonyan和 Andrew Zisserman提出的VGGNet[3]使用更多3*3的卷积替代大尺寸卷积,2015年Kaiming He等人发表的ResNet[4]提出的残差(Residual)结构极大地缓解了深层网络的梯度问题,使得网络层数从十几层发展到了152层,2016年发表的ResNext[5]是其进一步改进版本,2017年Jie Hu、Li Shen、Samuel Albanie等人发表的SENet[6]是ResNext的进一步改进,取得了最后一届ILSVRC的冠军,也代表着人工设计的CNN结构的最佳性能。Google在2014年-2016年间发表了一系列CNN结构(Inception v1-v4)[7][8][9][10],使用分组卷积也实现了较好的效果。
人工设计的CNN结构的改进通常来人类的经验、对细节的观察和反复实验,这通常是有效的,但有时人类的错误认知也会带来负面影响。
Lenet-5的结构
AlexNet的结构,受限于当时的硬件(Nvidia Geforce GTX580 3GB),网络存在两个分支
大量使用大尺寸、大步长的卷积似乎来自于传统的图像处理的经验,但是后来被证明并不是合理的选择
VGGNet-16的结构,作者通过对比实验尝试了多种不同的结构
ResNet-34的结构以及和VGG/去掉残差连接的结构的对比,常见的ResNet-50/101/152每个block和ResNet-34有些不同
ResNet的设计中除了残差连接之外,整体的结构上也和之前有很大差别,大部分通过最大采样被换成了步长为2的卷积,多个全连接层的结构也被抛弃
其中很多变动来自作者训练、调参的经验
ResNext-50和ResNet-50的对比,对每个block中3x3的卷积进行了分组
SE-ResNet的block结构,SENet可以看作在网络基本的block上加上一个Squeeze-and-Excitation模块,其获得ILSVRC冠军的结构基于ResNext
而Inception v1-v4的结构变化过程也基本由经验积累进行推进:用两个3*3卷积替代7*7卷积、将n*n的卷积拆解为1*n+n*1的卷积、引入batch normalization、调整整体的结构以及引入在ResNet中十分有效的残差连接
二、AutoML的发展
2016年Google发表了被称为网络架构搜索(Neural Architecture Search)[11]的方法,通过强化学习自动搜索最高性能的网络,最终在2017年得到了一个超过所有人类设计方法的网络结构NASNet[12]。NASNet通过一个RNN控制器,在指定的搜索空间内搜索性能最高的网络单元结构;由于在ImageNet训练比较费时,NASNet采用了先在较小的CIFAR-10上训练,之后通过迁移学习扩展到较大型的数据集ImageNet上。
NASNet的结构,由多个cell(block)堆叠,这部分来自人类设计网络的经验,其中CIFAR10和ImageNet的堆叠方式不同
NASNet的搜索空间
最终得到的最优结果(NASNet-A)
NASNet-A和当时性能最优的网络性能对比,在计算量和参数数量相同的情况下性能由于所有人工设计的网络,精度也超过了人类设计的最好结果,但是其需要大量计算资源,文献中Google使用了500块NVIDIA Tesla P100 GPU。
NAS确度了AutoML的一种思路:设计控制器和搜索空间,控制器在搜索空间内通过计算量较小的代理任务寻找到最佳结果,最终通过迁移学习进行拓展,后续Google又提出了一种优化搜索空间的方法PNASNet[13]。
简单的直接搜索本身依然是较低效的方法,在2018年Google又提出了使用进化算法优化的NAS方法[14],最终得到的网络结构被称为AmoebaNet。
基于进化的NAS搜索效率和强化学习(RL)、随机搜索(RS)对比
除了对搜索过程的优化尝试外,AutoML的应用范围也得到了拓展,2018年Google发表了NAS在用于移动设备的轻量级CNN结构上是成果MNASNet[15]。MNASNet基于之前用于移动设备的CNN网络MobileNet v1/v2[16][17]的经验,搜索方法和NASNet比较接近;但受制于移动设备的性能其搜索空间仅包含深度分离卷积,并且在搜索策略上加入了对实际运行速度(工作在Google Pixel 1上)的控制策略。
MNASNet-A1在不同通道数量/输入尺寸下的性能和人工设计的MobileNet v2的对比
基于类似MNASNet的结构,Google在2019发表了一种可以灵活扩展的网络结构EfficientNet[18],通过对搜索到的高效的基础网络EfficientNet-B0,使用多维度(宽度、深度、分辨率)扩展得到一系列可灵活调整的高效网络。
EfficientNet 和其他网络结构的对比,相比最初的NASNet效率有了明显的提高
2019年Google还将AutoML应用到了Object Detection上,通过搜索最有效的FPN结构,改进RetinaNet[19],得到了当前最高效的Object Detection网络NAS-FPN[20]
NAS-FPN的效率比于人工设计的检测网络高很多
三、替代更多人类的工作?
AutoML目前已经取得了令人瞩目的成果,在一定程度上替代了人类设计CNN网络结构的工作。那么在其他领域,是否可能存在类似的方式实现自动的设计方法呢?至少比较缺乏创造性的领域存在这种可能性。模仿目前AutoML的模式,首选需要确定控制策略、搜索空间,并且制定计算自动搜索得到的结果和目标结果的差别的方法(损失函数),目前来看,较简单的编程(偏向业务逻辑处理的代码、网页/App前端)、PCB设计等领域都值得探索。
例如可以通过人类的经验,确定Android App每个常见UI组件的代码搜索空间,使用高效的搜索算法进行控制,通过量化最终的UI效果和设计的差异计算损失,实现自动的UI设计;这种模式下完全不需要App前端工程师,只需要设计师提供设计图,就能得到可用的代码。
在用人成本不断高涨的今天,这些尝试会有相当高的经济价值,摆脱对大量劳动力的依赖也有利于提高资源调度的效率。
参考文献
[1]XXXXXXXXXXXXXXXXXXXXX/exdb/publis/pdf/lecun-01a.pdf
[2]XXXXXXXXXXXXXXXXXXXXXX/paper/4824-imagenet-classification-with-deep-convolutional-neural-networks.pdf
[3]XXXXXXXXXXXXXXXXX/pdf/1409.1556.pdf
[4]XXXXXXXXXXXXXXXXX/pdf/1512.03385.pdf
[5]XXXXXXXXXXXXXXXXX/pdf/1611.05431.pdf
[6]XXXXXXXXXXXXXXXXX/pdf/1611.05431.pdf
[7]XXXXXXXXXXXXXXXXX/pdf/1409.4842.pdf
[8]XXXXXXXXXXXXXXXXX/pdf/1502.03167.pdf
[9]XXXXXXXXXXXXXXXXX/pdf/1512.00567.pdf
[10]XXXXXXXXXXXXXXXXX/pdf/1602.07261.pdf
[11]XXXXXXXXXXXXXXXXX/pdf/1611.01578.pdf
[12]XXXXXXXXXXXXXXXXX/pdf/1707.07012.pdf
[13]XXXXXXXXXXXXXXXXX/pdf/1712.00559.pdf
[14]XXXXXXXXXXXXXXXXX/pdf/1802.01548.pdf
[15]XXXXXXXXXXXXXXXXX/pdf/1807.11626.pdf
[16]XXXXXXXXXXXXXXXXX/pdf/1704.04861.pdf
[17]XXXXXXXXXXXXXXXXX/pdf/1801.04381.pdf
[18]XXXXXXXXXXXXXXXXX/pdf/1905.11946.pdf
[19]XXXXXXXXXXXXXXXXX/pdf/1708.02002.pdf
[20]XXXXXXXXXXXXXXXXX/pdf/1904.07392.pdf
200字以内,仅用于支线交流,主线讨论请采用回复功能。