编者按:如果你是刚入门机器学习的AI探索者,你知道什么是胶囊网络吗?AutoML和元学习又是什么?为了帮大家节省查阅晦涩难懂的论文的时间,我们邀请微软亚洲研究院机器学习组实习生吴郦军、罗人千帮大家用最通俗的语言解释了这三个机器学习领域的热门词汇,赶紧收藏吧!
胶囊网络Capsule Networks
胶囊网络(Capsule Networks)是深度学习三巨头之一的Geoffrey Hinton提出的一种全新的神经网络。最初发表在2017年的NIPS会议上:Dynamic Routing Between Capsules。胶囊网络基于一种新的结构——胶囊(Capsule),通过与现有的卷积神经网络(CNN)相结合,从而在一些图像分类的数据上取得了非常优越的性能。
何谓胶囊?简单来说,胶囊就是将原有大家熟知的神经网络中的个体神经元替换成了一组神经元组成的向量,这些神经元被包裹在一起,组成了一个胶囊。因此,胶囊网络中的每层神经网络都包含了多个胶囊基本单元,这些胶囊与上层网络中的胶囊进行交互传递。
胶囊网络的主要特点是什么呢?与传统CNN相比优势是什么呢?下图简单比较了胶囊和传统的神经网络中神经元的不同。
两者最大的不同在于,胶囊网络中的神经元是一个整体,包含了特征状态的各类重要信息,比如长度、角度、方向等,而传统的CNN里每个神经元都是独立的个体,无法刻画位置、角度等信息。这也就是为什么CNN通过数据增广的形式(对于同一个物体,加入不同角度、不同位置的图片进行训练),能够大大提高模型最后的结果。
胶囊网络能够保证图像中不同的对象(比如人脸中的鼻子、眼睛、嘴巴)之间的相对关系不受角度改变的影响,这一特性来自于图形图像学的启发。对于3D图像,人类的大脑能够在不同的位置对于这个图像都做出准确的判别。当我们以向量的形式将特性状态封装在胶囊中时,胶囊拥有状态特性的长度(以概率形式加权编码)以及状态的方向(特征向量的方向)。因此对于胶囊来说,长度相同的特征,其方向也存在着变化,而这样的变化对于模型训练就正如不同角度的增广图像。
胶囊的工作原理是基于“囊间动态路由”的算法,这是一种迭代算法。简单地说,两层之间的胶囊信息传递,会通过计算两者之间的一种相关信息来决定下层的胶囊如何将自己的特征传递给上层的胶囊。也就是说,下层胶囊将其输出发送给对此表示“同意”的上层胶囊,利用输入与输出之间的点积相似性,来更新路由间的系数。
跟传统的CNN相比,当前的胶囊网络在实验效果上取得了更好的结果,但是训练过程却慢了很多,因此胶囊网络依然很有很大的发展空间。
自动机器学习AutoML
在实际的AI应用中,如果想让机器学习获得比较好的学习结果,除了对数据进行初步分析、处理,可能还需要依赖领域知识对数据进行进一步的特征提取和特征选择,然后根据不同的任务及数据特征选择合适的机器学习模型,在训练模型时还要调大量的超参数,尝试各种tricks。整个过程中需要花费大量的人工和时间。因此,机器学习从业者都戏称自己是“调参工程师”,称自己的工作是“有多少人工就有多少智能”。对于初入门的小白及大量普通开发者来说,机器学习工具比较难以掌握。
为了减少这些需要人工干预的繁杂工作,自动机器学习(Automatic Machine Learning,简称AutoML)应运而生。它能自动选择合适的算法模型以及调整超参数,并最终取得不错的学习效果。简单来说,自动机器学习过程就是用户提供数据集,确定任务目标,之后的工作就交给AutoML来处理,用户将会得到一个训练好的模型。这大大降低了使用机器学习工具的门槛,让机器学习工具的使用过程变得简单、轻松。
我们以AutoML里的一个子领域NAS(Neural Architecture Search,神经网络结构搜索)为例。顾名思义,NAS是自动搜索神经网络的结构。传统神经网络都是由人工设计的,经过长时间的演化迭代,从AlexNet到DenseNet,性能不断上升,效果也不断提升。但正如前文所说,神经网络结构的演化过程耗费了大量的人工。不同的基础网络结构,如AlexNet、VGG、ResNet、DenseNet等需要深度学习的专业研究人员进行研究改进,而它们在具体任务上的应用又需要进一步调整相应的参数和结构。
NAS旨在针对给定的数据集和学习任务,自动搜索出适用于该任务的好的网络结构。决定一个神经网络“区别于其它网络”的关键因素包括网络结构里每层的运算操作(如不同种类、大小的卷积和池化操作)、每层的大小、层与层之间的连接方式、采用的激活函数等。这些关键因素在传统的人工设计的神经网络里都是固定的,但在自动搜索网络结构里可能都是未知的。算法需要通过自动搜索进而最终决定一个神经网络的结构。
2016年Barret Zoph等人发表了Neural architecture search with reinforcement learning一文,文中提出了控制器-子网络的框架,其中子网络即我们要应用在目标任务上的网络,控制器则负责生成子网络的结构。对于图像类任务,子网络采用CNN,搜索其每层的运算操作和连接方式;对于文本类任务,子网络采用RNN时,搜索其每层的激活函数和连接方式。控制器搜索出的子网络结构在目标任务的数据验证集上的性能则作为reward反馈给控制器,通过强化学习进行训练,使得控制器经过不断的学习迭代生成更好的子网络结构。但是这一工作使用了大量GPU资源,耗费了一个月时间才得到了最后的结果。
随后,有一系列的工作对NAS做出了改进:改进搜索空间(搜索单一block里的结构,之后堆叠多个block作为最终网络)、改进搜索算法(使用演化算法、梯度优化等)、提升搜索效率(通过参数共享等)等。这些工作提升了NAS本身的搜索效率和性能,同时搜索出的CNN网络也在主要的数据集(CIFAR10、CIFAR100、IMAGENET)上取得了SOTA,超过了人工设计的网络的性能。微软亚洲研究院机器学习组发表在NIPS 2018上的工作Neural Architecture Optimization [1],利用网络结构在验证集上的性能对网络的梯度信息来优化网络结构。首先将离散的网络结构用编码器转换成连续空间里的向量,然后训练了一个预测器来预测该向量(网络结构)在验证集上的性能,从而可以直接基于预测结果对该向量的梯度进行优化,生成更好的向量(网络结构),最后再通过解码器解码将生成的向量解码成离散的网络结构。我们的算法搜索出的CNN和RNN结构在相应任务(CIFAR10、CIFAR100、PTB、Wikitext-2)上皆取得了超过其它NAS工作的最好性能。
元学习Meta Learning
我们期待的通用人工智能的目标是让人工智能像人一样学会推理、思考,能快速学习。对于现实世界的很多问题,人类之所以能够快速学习是因为人类具有强大的思考推理能力以及学习能力。人类能够利用以往学习到的知识经验来指导新知识的学习,做到“触类旁通”、“举一反三”,这让人类的学习行为变得十分高效。
元学习(Meta Learning)的目的就是研究如何让机器学习系统拥有学习的能力,能够更好、更高效地学习,从而取得更好的学习效果。比如对于数据集,采取什么方式、什么顺序、什么策略进行学习,对于学习效果如何进行评测,这些都会影响到模型学习的效果。
微软亚洲研究院机器学习组今年发表在NIPS 2018上的工作Learning to Teach with Dynamic Loss Functions [2]使用一个teacher model来指导student model(学习具体任务的模型)学习,让student model在学习过程中动态利用学习到的不同的损失函数(loss function)来处理不同数据的学习,学习到的模型在相应任务上取到了很好的结果。
参考文献
[1] Renqian Luo, Fei Tian, Tao Qin, Tie-Yan Liu, Neural Architecture Optimization, NIPS 2018
[2] Lijun Wu, Fei Tian, Yingce Xia, Tao Qin, Tie-Yan Liu, Learning to Teach with Dynamic Loss Functions, NIPS 2018