机器之心原创,做者:邱陆陆。算法
今年 1 月,谷歌人工智能负责人 Jeff Dean(当时仍是谷歌大脑负责人)与 2017 年图灵奖得主、体系结构巨擘 David Patterson(当时获奖结果还没有公布)联合发表了题为《计算机体系结构黄金时代:赋能机器学习革命》的文章。文章指出,机器学习算法正在革命性地着手解决人类社会最为巨大的一些挑战,所以,不难想象,在不远的未来,不管是数据中心仍是终端设备,都将会出现专用于机器学习计算的硬件。这样的硬件会具备什么特性?在文章中,做者列出了一系列硬件设计者须要考虑到的关键问题,这些问题对深度学习研究者也十分具备启发性。网络
另外一方面,在摩尔定律逐渐失效和深度学习的算力需求如无底洞般膨胀的今天,深度学习研究者们也在思考:可否改进算法以使其更适应计算硬件?可否帮助优化系统配置?在近日举行的首届「清华-谷歌 AI 学术研讨会」上,Jeff Dean 谈了谈「接下来咱们但愿设计什么样的模型」,来自谷歌大脑的研究员 Azalia Mirhoseini 则给出了主题演讲「如何用强化学习方法进行系统优化」。数据结构
若是将这几份工做联系起来,咱们彷佛就能看出,在深度学习这个 Arxiv 论文增速超越摩尔定律的领域里,谷歌大脑的研究者们如何同时思考软硬件问题以实现系统最佳性能与最佳效率。架构
在《黄金时代》论文里,Jeff 和 David 以谷歌开发的两代机器学习 ASIC(用于加速推理的 TPUv1 和用于加速训练的 TPUv2)为例,介绍了不少设计专用硬件的思路。进行硬件设计要着眼于至少 5 年后的模型:如今开始一款 ASIC 的设计,它大约能够在 2 年后投入使用,而一款专用硬件至少须要可以保持 3 年的竞争力才有价值。那么在这样的前提下,设计深度学习专用硬件要考虑哪些问题?在文章中,做者列出了六个这样的关键点,按照从「纯架构相关」到「纯机器学习算法相关」的顺序,分别是:训练、批规模、稀疏性与嵌入、参数量化与提炼、带有软记忆机制的神经网络以及元学习。机器学习
训练函数
谷歌从 2013 年开始设计的第一代 TPU 是针对推理而非训练工做设计的,必定程度上是为训练设计硬件架构要更加困难:性能
可是,为训练设计 ASIC 是有价值的,由于研究者的时间是宝贵的而耐心是有限的,若是一次实验须要跑 30 天甚至更长,大概大多数人会选择放弃探索这个方向。学习
第二代 TPU 就面向训练开发。Jeff 在屡次演讲中提到了一些 TPU v2 的成功应用案例,包括用四分之一个 pod 把谷歌的搜索排序模型的训练提速到 14.2 倍,把处理图片的模型训练提速到 9.8 倍等。优化
并且,TPUv2 具备几乎是线性的扩展性,64 块 TPU 能够组成一个 TPU pod,提供最高 11.5 PFLOPS 的算力。用一块 TPUv2 把 ResNet-50 训练到 76% 准确度须要 1402 分钟,用二分之一个 pod(32 块 TPUv2)只须要 45 分钟(31.2 倍速)。人工智能
虽然 TPU 云价格不菲,但时间就是生命,生命就是金钱。另外,若是你是一位有志于机器学习研究并致力于开源本身的工做,谷歌正以 TensorFlow 研究云的形式向研究者免费提供一千块 TPU。
批规模(batch size)
批量是越大越好仍是越小越好?这是一个在研究上仍然有争议的问题。
直觉上,理想选择是带有动量的批规模为 1 的随机梯度降低(SGD with momentum at a minibatch size of 1),这时单位计算量带来的准确率提高最大。另外选择一个大于 1 的批规模至关于把输入维度直接提高了一维(Jeff 原话:一想到这儿我就头痛。)然而在当前用于训练的硬件中,以 GPU 为例,它执行程序时的基本单元,即每一个 warp 包含 32 个线程(threads),所以若是你的批规模不是 32 的整数倍,将会致使效率下降,因此现行的模型一般都采用 32 或者 64 做为批规模。
可是,从 2017 年开始,有一些看起来前景明朗的研究显示,咱们能够用 8192 甚至 32768 做为批规模来高效训练用于图像的卷积神经网络。
source:Accurate, Large Minibatch SGD: Training ImageNet in 1 Hour (1706.02677)
值得一提的是,Yann LeCun 对于增长批量持有强烈反对态度,他曾经在今年 4 月份转发一篇支持小批量的论文称,「用巨型批量作训练有害健康……选择 32 而不是 1 作批量只能说明咱们的硬件不好劲。」
哦,8192 那篇论文是 Facebook 的工做,做者列表里包括 Ross Girshick,贾扬清,还有何恺明……
稀疏性与嵌入(Sparsity and Embeddings)
「咱们想要更大的模型,但但愿每个样本只激活它的一小部分。」又是一个 Jeff 反复提到的趋势。
大模型是好的,由于巨大的参数量意味着咱们能够记住数据集方方面面的特性。可是若是咱们在处理每个数据的时候都须要激活整个模型,这意味着巨大的计算成本。所以,最理想的状态是拥有一个能够分割成众多独立的小部分的庞大模型,每一部分都承担不一样分工,当数据进入模型时,模型按任务需求激活少数几个部,让大部分保持闲置状态。这样的特性又能够称做「粗粒度稀疏性」。
谷歌在 ICLR2017 的一篇论文上就提出了一个叫作混合专家层(MoE)的概念。每个「专家」至关于神经网络中的一小撮参数,只不过比普通神经网络里的参数更容易训练,而一层由超过 2000 个专家组成。
训练过程当中,除了学习模型参数,还要学习如何作路由选择(routing),即如何根据一个样本选择激活的「专家」。在语言任务里,模型学会了如何根据语境选择「专家」:专家 381 擅长谈论科学研究,专家 752 擅长「领导力」,若是涉及速度,那就交给专家 2004 吧。
在英-法翻译任务里,相比于以前的 STOA 模型 GNMT,模型的规模上升了 35 倍,却能够用更少的 GPU 在六分之一的训练时间内完成。
相比于 MoE,应用更为普遍的动态路由的案例是嵌入机制。不管是将单词从数万维的独热向量映射到几百维的词嵌入,仍是给每个 YouTube 视频赋予一个数千维的、可以捕捉它与其余视频间关系的表征,都是一个须要为了一个样本,从庞大的数据结构(可能高达数百 G)中随机地读取很是少的数据(数十或数百字节,不到 1KB)。
现有硬件结构里还鲜有专门处理动态路由选择的高效读取的解决方案。
参数量化与提炼(Quantization and Distillation)
稀疏性和嵌入的共同点是保留「大模型」,而关注如何能精肯定位到其中的「小部分」。参数量化与提炼则直接追求「小模型」。
参数量化的是低精度运算的另外一种说法。
如今常见的作法是,在训练阶段采用浮点数,而在推理中采用定点数。例如在 TPU 的例子中,全部的推理只采用 8 比特定点数表达。其实现原理是在完成训练后,根据各层的参数和激活部分的最大值和最小值,找到表达其整数部分所需的最小比特数,用此表示,而后用 8 比特中剩下的部分表示其小数点后部分。实证研究显示,将精度从 32 比特下降到 8 比特,只会少许影响 GoogLeNet 和 VGG-16 的表现,可是若是继续降低到 6 比特,模型效果就会受到显著影响。
文中提到,只有不多的研究关注了如何在训练阶段采用低精度运算,大多数结果都仍然集中在 MNIST,CIFAR-10 等小数据集上。不太低精度训练也在逐渐得到更多关注,ICLR2018 上,百度和英伟达提出了「混合精度训练法」,在前向、后向计算中使用 FP16 运算,在权重更新时使用 FP32 计算,在 ImageNet 上的分类任务、Pascal VOC 2007 上的检测任务、WMT15 上的翻译任务等多个大型数据集的任务中,达到了使用 FP32 所得到的准确率,同时节省了算力需求和近半的存储需求。现在,英伟达已经给出了用混合精度进行训练的 SDK 范例。
提炼方法是 Hinton 在 NIPS2014 上提出的,试图以先让复杂模型进行学习分类问题,而后将最后一层 softmax 学到的软分类视为知识,训练简单模型以预测软分类。这样的方法获得的简单模型(层数更少、每层神经元更少)也能达到复杂模型一样的准确度。提炼方法让人们思考,是否可以直接训练小模型。小模型和大模型须要的专用硬件特性会大相径庭,所以模型的发展方向也是硬件发展方向的重要影像因素。
带有软记忆机制的神经网络(Networks with Soft Memory)
这一部分强调的是一些对存储和存储访问有特殊需求的深度学习技巧,例如注意力机制。传统的记忆机制每次只要访问存储数据的表中的一个值,可是以注意力机制为表明的软记忆机制则须要对表内的全部值进行加权平均。
相比于特定运算的加速,当前问世的或已经进入开发周期后段的深度学习 ASIC 更强调数据流与存储的优化。原 Movidius CEO Remi El-Ouazzane 在谈论其视觉处理单元 VPU 的设计理念时提到,VPU 中的几乎全部架构设计都是为了同一个目标:优化数据流。在当前的终端深度学习计算中,用于数据传输的能量消耗是用于计算的 10 倍乃至更多,所以要使性能最大化并将功耗降至最低,惟一的方法就是增长数据的本地性,减小外部内存访问次数。致力于加速训练的 Intel Nervana NNP 的逻辑也是这样。
FPGA 的逻辑也是如此。大量的引脚和能够根据算法定制数据通路(datapath)的逻辑单元,让它不须要像 GPU 同样须要反复调取片外存储中的数据,理想状态时,只要数据一次性流进去再流出来,算法就完成了。
元学习(Learning to Learn, L2L)
深度学习相比于机器学习的「进步」,就是将人工选择的固定特征提取过程变成了机器选择的可训练特征提取过程。研究者只须要选择一系列基本模型结构和超参数,就能够由机器接手,进行特征提取和分布拟合。
在上述的五个部分里,不管模型采用什么结构、技巧,做出这些决策都仍然是人类的工做。而在元学习的设想里,人类的决策工做进一步被大量的计算和机器自动完成的实验所替代。
在自动机器学习技术的种种方法中,谷歌选择了强化学习的方法。模型的准确度被视为「奖励信号」。在得到了 ICLR2017 最佳论文的《用强化学习进行神经网络结构搜索》中,谷歌的研究员分别为 CIFAR-10 和 PTB 数据集搜索到了最佳的 CNN 和 LSTM RNN 结构。
而事实上不仅是模型结构,「用强化学习进行元学习」的思路适用于深度学习的方方面面:选择输入数据预处理路径,选择激活函数、选择优化与更新策略,以及,选择硬件配置。
本次谷歌大脑研究员 Azalia 的演讲就是以优化硬件配置为主题。传统的硬件配置多数以贪婪启发式方法为基础,须要工程师对硬件的方方面面,从算力到带宽,都有深入的理解。而即使如此,随着模型愈来愈大,使用的设备愈来愈多,获得的配置方案也愈来愈难具备可泛化性。
所以,将一种特定配置的收敛时间的指望做为奖励信号来将各运算分配到不一样设备上,就变成了一个有吸引力的解决方案。算法学到了并不符合人类直觉的配置,但比专家设计出来的方案快 27.8%,节约近 65 个小时。
元学习指向的道路是让咱们更高效地利用大规模的计算资源,同时「节省」机器学习专家的劳动力。除此以外,在这个深度学习算法和计算设备都在快速更新迭代的时期,元学习也奠基了快速进行软硬件结合的系统设计的基础。
将全部这些愿景综合起来,深度学习下一个阶段会以何种形式出现?
Jeff 在演讲中归纳为:
你的研究思路是否有助于其中一个目标的实现?又是否将从这样的模型中获益?
不管答案是什么,肯定的一件事情是:研究者、工程师、体系结构设计者,在当下,想要朝通用人工智能进攻的道路上前行,这些身份,一个都不能少。