Google前段时间发布了名为Cloud AutoML的人工智能(Artificial Intelligence / AI)云服务,在业内引起了轰动。网上出现了各种各样的说法,比如“AI可以自我创造了”,“不懂机器学习也能开发AI”,“不用写代码也能训练AI”,“AI工程师要失业了”等等,所以小明决定写一篇文章来介绍一下AutoML是什么。
由于还在Alpha测试版的阶段,目前Cloud AutoML服务仅支持计算机视觉模型,让我们先通过Cloud AutoML Vision的介绍视频来了解一下这项服务的基本功能和使用方法,总结起来就3步,(1)上传标记数据;(2)点击“训练”,并查看评估结果;(3)通过API来对新样本进行预测。
Cloud AutoML: https://cloud.google.com/automl/
Cloud AutoML服务背后的技术是自动机器学习(AutoML),其核心思想是通过Learning to Learn的方式进行神经架构搜索,并利用迁移学习(Transfer Learning)将得到的神经网络迁移到其它类似任务上去。
source: https://www.sott.net/article/352279-Googles-AutoML-AI-wont-destroy-the-World-yet
从一开始提出AutoML技术到最后发布Cloud AutoML服务,Google一直不断地在对AutoML的算法原理和工程实现进行迭代更新。后面的章节,首先会介绍AutoML的基本工作机制和工程优化方法;紧接着以循环神经网络(Recurrent Neural Networks / RNN)和卷积神经网络(Convolutional Neural Networks / CNN)为例,对AutoML的一些设计细节、演化过程和其中的迁移学习进行进一步介绍;最后会对AutoML的实验结果进行简单分析。
01
—
AutoML的基本工作机制
为了实现AutoML,Google Brain团队提出了神经架构搜索(Neural Architecture Search / NAS)技术。简单来说,就是用一个循环神经网络作为控制器(Controller),在预先限定好的搜索范围内采样输出多个子网络(Child Network)的结构和超参(Hyperparameter),子网络将被用来完成最终任务(计算机视觉,自然语言理解等),系统会对这些子网络进行训练,并得到它们在验证集上的准确度,最后系统会利用子网络的准确度作为奖励(Reward),并通过强化学习(Reinforcement Learning)的方法来更新控制器的参数。
注:论文中的神经架构搜索(Neural Architecture Search / NAS)流程图
神经网络的架构通常可以用可变长的字符串来表述,而循环神经网络则非常适合用来生成这样的字符串,这也是为什么选择循环神经网络作为控制器的原因。为了尽可能地生成较优的神经架构,控制器需要最大化预期奖励,但因为奖励信号是不可微分的,所以需要通过Policy Gradient的方法来对控制器的参数进行迭代更新,比如REINFORCE rule和Proximal Policy Optimization(PPO)都可以用来对控制器进行训练。
训练一个子网络通常需要花费数小时的时间,为了提高效率,Google Brain团队先后提出了两种工程优化设计来进行分布式训练。一种是参数服务器(Parameter Server)模式,系统创建S个参数服务器来存储控制器参数,并创建K个控制器副本,这些副本共享同一套参数,每个控制器副本会并行采样m个子网络并进行训练,当训练轮数超过某个预设值时训练停止,子网络准确度会被发送给控制器,控制器获得这一批子网络的准确度后会利用REINFORCE rule对参数更新;另外一种是工作队列(Workqueue)模式,系统创建一个全局的工作队列,控制器采样子网络并将其加入工作队列,机器池中闲置的机器会从工作队列中获取任务,并对相应的子网络进行训练直至收敛,然后将子网络准确度发送给控制器,控制器收到足够量的准确度后会利用PPO对参数进行更新,这个过程会持续进行直至训练的子网络数达到某个预设值。
注:论文中的参数服务器(Parameter Server)模式分布式训练示意图
02
—
用AutoML来设计RNN
AutoML通过一个控制器来生成子网络,其关键点在于设计一个合理的架构搜索空间,然后让控制器在执行每一步时,采样输出不同类型的结构和超参,并循环进行直至达到结束条件。通过设计不同的搜索空间,AutoML可以生成不同类型的神经网络(包括循环神经网络和卷积神经网络)。
让我们先看看如何用AutoML来设计循环神经网络,一个循环神经网络通常由循环元(Recurrent Cell)组成,所以循环神经网络的设计问题其实可以转化为循环元的设计问题。一个标准循环神经网络的循环元,在t时刻,接收和作为输入,通过变换得到;而一个长短期记忆元(Long Short-Term Memory Cell / LSTM Cell)则额外处理元状态(Cell State),在t时刻,接收,和作为输入, 并经过变换输出和。
设计一个循环元,其实就是要找到从输入,和到输出和的变换函数。变换函数可以表示成变换树的形式,树中的每个节点会被加上索引标识,每个叶子节点接收和作为输入,经过合并变换得到输出,每个中间节点接收两个下层节点的输出作为输入,同样经过合并变换得到输出,最顶层节点的输出被作为。变换树根据叶子节点数量n的不同,被称为“n基变换树”。合并变换由组合变换(例如,加法,元素乘法等)和激活变换(例如,Tanh, Sigmoid等)组成。为了处理元状态,树中的某个节点会被选中,其原始输出和经过合并变换得到该节点的最终输出,为了生成元状态输出,树中的某个节点会被选中,其组合变换后,激活变换前的输出被作为。
注:左图是“2基变换树”的树结构和节点索引;中图是控制器采样输出神经网络的样例;右图是中图样例对应的计算图
以一个“2基变换树”为例,变换树包含两个叶子节点和一个中间节点,叶子节点的索引标识分别记为0和1, 中间节点的索引标识记为2。控制器的执行步骤可以被划分成5组,分别对应节点0、节点1、节点2的合并变换,元状态插入操作的合并变换和元状态的操作节点索引。前面4组,每组包含两个步骤,分别对应组合变换和激活变换;最后1组中的两个步骤,分别对应元状态的输出节点索引和元状态插入操作的组合节点索引。
对于节点0,控制器采样得到加法变换 (Add)和Tanh变换,节点输出为;
对于节点1,控制器采样得到元素乘法变换( ElemMult)和ReLU变换,节点输出为;
对于元状态输入,控制器采样得到节点0作为组合节点,对于元状态的插入操作,控制器采样得到加法变换和ReLU变换,变换过程中不引入可学习参数,最终输出为;
对于节点2,控制器采样得到元素乘法变换和Sigmoid变换,节点的输出为,因为该节点是最顶层节点,节点输出被作为;
对于元状态输出,控制器采样得到节点1作为输出节点,节点1元素乘法变换之后,ReLU变换前的结果被作为
注:论文中AutoML设计的最优循环元架构样例
Google Brain团队首先在Penn Treebank语言模型数据集上进行循环元架构搜索,然后将得到的最优循环元应用到Penn Treebank字符级语言模型任务上,紧接着将最优循环元和GNMT框架结合来完成WMT14 English-German翻译任务。最优循环元在这3个任务都取得了很好的效果,这说明了最优循环元具有很好的可迁移性,后面的章节会通过实验结果分析来进一步说明循环元的可迁移性。
03
—
用AutoML来设计CNN
接着我们再看看如何用AutoML来生成卷积神经网络,一开始Google Brain团队尝试了一种非常大胆的方法,目标是直接通过控制器生成完整的卷积神经网络,这和循环神经网络生成中,先设计循环元再搭建循环神经网络的方式很不一样。这种卷积神经网络生成方法非常简单,控制器在执行每一步时,通过一个Softmax分类器采样输出当前层某一类型超参,该层所有超参生成完毕之后继续进行下一层的超参生成,这个过程会不停重复直到层数达到某个预设值。最基本的超参类型有,过滤器(Filter)的高度和宽度,高度和宽度方向上的步长(Stride)和过滤器的数量,如果想入加入池化(Pooling),正态化(Normalization)相关的超参以及学习率(Learning Rate)等优化相关的超参也很方便。
注:论文中基本的卷积神经网络生成控制器
为了支持短路连接(Skip-connect),Google Brain团队在上述方法的基础上加入了基于注意力(Attention)机制的锚点(AnchorPoint)模块,用来对短路连接进行预测。基本思路是,第N层的锚点模块会计算当前层锚点隐藏态(Hidden State)与之前N-1层锚点隐藏态之间连接概率,,其中是第i层的锚点隐藏态,,是第j层的锚点隐藏态,,,和都是可学习参数。如果某一层有多于一个可连接层,则将这些可连接层的输出在深度方向做拼接,然后作为该层的输入;如果某一层没有可连接层,则将输入图像作为该层的输入;最后一层的输出会和所有未被连接的输出进行拼接,然后作为分类器的输入;如果需要被拼接的输出大小不同,则先对其进行填充再进行拼接。
注:论文中支持短路连接的卷积神经网络生成控制器
一切都看似很美好,除了一个问题。那就是控制器的整个训练过程需要消耗大量的计算资源,如果想让实际应用变为可能,就需要在一个规模较小的任务上进行搜索,再尝试着将得到的神经网络迁移到其它任务上去。但上面介绍的方法所生成的卷积神经网络有个特点,层与层之间的结构和超参可能很不一样,很难找到像循环神经网络生成中的循环元这样的最小可重复单元,这使得在小规模任务上得到的循环神经网络很难迁移到其它任务上去。为了解决这个问题,Google Brain团队做了进一步尝试,为卷积神经网络设计了类似于循环元这样的最小可重复单元,这大大提高了卷积神经网络的可迁移性。
在新的卷积神经网络生成方法中,卷积神经网络的主体结构是预先设定的,由重复的卷积元(Convolutional Cell)按一定的规律组成,这些卷积元有着一样的架构,但参数权重是独立的。方法中有两种不同类型的卷积元,一种叫Normal Cell,用来保证输入/输出大小一致;另外一种叫Reduction Cell,用来将输出高度宽度缩小为输入的1/2,将这两种卷积元配合着使用,可以让卷积神经网络很方便地适配不同大小的图像输入,大大提高卷积神经网络的可扩展性。
注:左图是在CIFAR10任务中用到卷积神经网络主体结构;右图是在ImageNet任务中用到的卷积神经网络主体结构
卷积元的设计跟循环神经元的设计非常相似,卷积元接收前两层卷积元的输出和作为输入,经过变换得到当前层的输出,而控制器的目标是找到从输入和到输出的变换函数。控制器会分别对Normal Cell和Reduction Cell的架构进行采样输出,执行步骤以5步为一组,重复B轮,每个步骤对应一个分类器,用来采样输出相应的操作,
第1步,从,或者之前轮次的输出中选取一个隐藏态A;
第2步,从,或者之前轮次的输出中选取一个隐藏态B;
第3步,从运算操作集中选取一个操作,并根据该操作对隐藏态A进行处理;
第4步,从运算操作集中选取一个操作,并根据该操作对隐藏态B进行处理;
第5步,从合并操作集中选取一个操作,并根据该操作对第3,4步的输出进行处理;
注:左图是控制器执行一组采样的示意图;右图是根据一组采样结果构成的计算图样例
第3,4步中的运算操作集包含如下操作,
第5步中的合并操作集包含两种操作,一种是元素加法(Element Addition),另外一种是深度拼接。每一轮的最终输出都有可能被选为之后轮次的输入,最后会讲所有未被选作输入的隐藏态进行深度拼接,然后作为卷积元的最终输出。
注:论文中AutoML设计的最优循环元架构样例(NASNet-A)
Google Brain团队首先在CIFAR-10图像分类数据集上进行卷积元架构搜索,然后再将找到的最优卷积元架构直接应用到ImageNet任务上,紧接着再将在ImageNet任务上得到的图像特征和Faster-RCNN框架结合来完成COCO物体识别任务。最优卷积元在这3个任务上都取得了很好的效果,这说明了最优卷积元具有很好的可迁移性,后面的章节会通过实验结果分析来进一步说明卷积元的可迁移性。
04
—
AutoML设计的神经网络效果如何
AutoML在Penn Treebank语言模型任务上搜索得到最优循环元,用该循环元搭建的循环神经网络取得了比之前最好模型更优的结果,而且运算速度更快。
注:在Penn Treebank语言模型任务上的单模型Perplexity
尽管最优循环元是在词级语言模型任务上搜索得到的,将其应用到Penn Treebank字符级语言模型任务上,同样取得了比之前最好模型更优的结果。
注:在Penn Treebank字符级语言模型任务上的Perplexity
AutoML在CIFAR-10图像分类任务上搜索得到最优卷积元(NASNet),用该卷积元搭建的卷积神经网络在CIFAR-10图像分类任务上取得了比之前最好模型更优的结果。
注:在CIFAR-10图像分类任务上的错误率及对应的参数数量;7@2304表示在主体结构中卷积元重复次数N=7,卷积神经网倒数第二层的过滤器数量为2304
将NASNet架构直接应用到ImageNet图像分类任务上,同样得到了非常好的结果。
注:在ImageNet图像分类任务上的Top1,Top5准确度以对应的参数数量,乘法累加操作数
通过配合使用Normal Cell和Reduction Cell,可以很容易地搭建计算成本不同的卷积神经网络。在计算资源受限的情况下,用NASNet搭建的卷积神经网络能够取得比人工设计网络更优的结果。
注:计算资源受限的情况下,在ImageNet图像分类任务上的Top1,Top5准确度以对应的参数数量,乘法累加操作数
注:不同模型在ImageNet图像分类任务上的表现,红色代表NASNet,黑色代表人工设计网络;左图是的乘法累加操作数-准确度曲线;右图是参数数量-准确度曲线
对于COCO物体识别任务,将在ImageNet任务上得到的图像特征和Faster-RCNN框架结合,取得了比之前人工设计网络更优的结果。
注:在COCO物体识别任务上的mAP指标
AutoML之所以能“打败AI工程师”,主要应该归功于其搜索空间的设计,循环元和卷积元的提出,使得神经网络架构的搜索更可行,同时搜索得到的架构也更加具有可迁移性。如果说深度学习(Deep Learning)让AI工程师从特征设计(FeatureDesign)转向架构设计(Architecture Design),那么随着AutoML技术的不断发展,AI工程师很可能需要从架构设计向搜索空间设计(Search Space Design)再次转型。小明相信未来AI技术的趋势一定会朝着普及化、民主化的方向发展,大家能很方便地应用AI技术,但与此同时AI研发的门槛会越来越高,需要对AI技术原理有更深的理解才能更好地进行AI技术科研创新。至于“AI工程师会不会被AI淘汰”这个问题,大家可以通过留言或者投票的方式表达自己的观点。但无论如何,AI工程师如果想不被AI淘汰,唯有不断地自我进化才是正道。当然也可以考虑者去搞AI+区块链,比如用AI去炒比特币。
Reference
Zoph, Barret and Le, Quoc V. Neural architecture searchwith reinforcement learning. In ICLR, 2017
Zoph, Barret, Vasudevan, Vijay, Shlens, Jonathon, and Le,Quoc V. Learning transferable architectures for scalableimage recognition. In CVPR, 2017.
Using Machine Learning to Explore Neural Network Architecture(https://research.googleblog.com/2017/05/using-machine-learning-to-explore.html)
AutoML for large scale image classification and object detection(https://research.googleblog.com/2017/11/automl-for-large-scale-image.html)
Cloud AutoML: Making AI accessible to every business(https://www.blog.google/topics/google-cloud/cloud-automl-making-ai-accessible-every-business/)
领取专属 10元无门槛券
私享最新 技术干货