关于机器学习的前尘往事
作者:秘塔科技CEO 闵可锐
多年以后,面对深度学习,小明同学回想起父亲带他第一次见识感知机(Perceptron)的那个遥远的下午.凸函数曲线饱满丰盈,线性分类器的切分平面洁白光滑,正负样例一字排开.世界新生伊始,许多算法还没有名字,提到的时候尚需用手指指点点.-《秘塔往事》
机器学习领域的老年人应该还记得, 2002年Michael Collins凭借Discriminative Training Methods for Hidden Markov Models: Theory and Experiments with Perceptron Algorithms获得了该届EMNLP会议的最佳论文.这篇论文里Collins对可谓"史上最简单"的机器学习算法感知机进行了扩展.感知机算法在1957年被发明,几乎是与"人工智能"这个词语的提出同岁,源远流长.Collins将其适用范围从原来简单的二分类,扩展到了结构化预测领域,后人称该算法为Structured Perceptron.这个算法可以用两行概括,简洁优美:对于训练样本$(x, y)$,$F(x, y)\in \mathbb R^n$为其对应生成的特征函数
$$\begin{aligned}z = \arg \max_{z\in y (x)} F(x, z) \cdot w, \\w = w + F(x, y) - F(x, z).\end{aligned}$$
即,通过比较当前参数$w$与理想情况下解码的特征函数差异,对参数行迭代修正.
上述问题的和像上面这样通过人工构建特征函数$F(\cdot)$的方法,几乎贯穿了之后10年的机器学习研究.大家致力于寻找更好的特征构造,基于最大化Margin的权重求解(Structured SVM)等方法来推进各类预测任务的准确率.算法可以共享,而人工特征,则是各家公司的不宣之秘.像2010年Yahoo举办的Learning to Rank比赛就是一例,排序学习算法欢迎大家讨论与发表,但所公布数据具体涉及的特征则是不能说的秘密.
Feature engineering is a critical component of any learning to rank system. For this reason, search engine companies rarely disclose the features they use. Releasing the queries and urls would lead to a risk of reverse engineering of our features.- Yahoo! Learning to Rank Challenge Overview
这样的人工特征方法有几个特点:
- $w\in \mathbb R^n$一般维度很高,因为需要构造足够复杂的特征使得问题线性可分;
- 特征$F(x, y)$往往非常稀疏,即对于一个特定的样例$(x, y)$,只有少量的特征非零;
- 虽然理论上$F(x,y)$可以定义任意复杂的特征,但由于我们希望能够高效求解$\arg \max_z F(\cdot)$,往往对所构造的特征提出更多的独立性假设(如Markov假设).
从2011年深度学习陆续在语音识别、图像识别领域取得显著提升以来,深度学习在自然语言领域的突破就被寄予厚望,希望尽可能降低甚至规避掉对手工构造特征的使用,其中的代表作如Collobert等人的Natural Language Processing (Almost) from Scratch. 通过这个阶段的研究,大家的确发现,通过Embedding加上端到端训练的方式,能够在很多问题上减少手工特征的构造,达到与传统方法接近或相当的准确率.另一方面,传统诸如POS Tagging、NER、文本分类等任务上,这样的模型并未如大家期待的一般,在准确率上产生突破性进展,反而有如下的一些弊端:
- 速度:传统Structured Perceptron类型的方法,其解码(推理)的计算消耗往往在$10^5$级别,而采用DNN的模型解码计算消耗在$10^8$级别,即便考虑到DNN的基础矩阵乘法等运算可以采用成熟数值计算库来减少常数,实际解码的速度往往也会慢上几十倍.
- 特征构造:自然语言处理中的不少问题,比起计算视觉的问题,其手动构造特征的方法更有迹可寻,譬如对词语进行词干提取(Stemming)大概率在分类任务上适用,有其内在逻辑:单词的精细时态往往不改变其分类,而进行词干提取后可以有效缓解特征的稀疏性,从而提升泛化能力.对于深度学习,恰恰由于我们过于依赖其自身进行特征发现,一些传统上方便构造的特征反而不容易添加进网络.在不深入分析任务的情况下,我们其实是将原本的手工构造特征的构造变成了调整网络结构上的试错,很难说后者变得更高明.
- 确定性偏好:对于传统基于线性规划、凸优化为基础的模型,底层数学工具给了我们很多诸如收敛性、唯一性等良好确定性的结论.而当我们选择DNN的模型后,这些良好的数学特性被放弃掉,传统的VC维等对问题的复杂性刻画也退化成trivial的形式.随之而来的初始化敏感等问题,造成不少DNN模型很难被其他研究者复现.Google也调不出来参数怎么办?出一大笔钱把会调参数的团队买下来.
- 真的很深吗:和图像上动辄7层到上百层的深度不同的是,大家普遍发现在自然语言的很多问题中,2层或3层的网络往往已经能得到不错的效果,继续增加层数反而对效果有所损害.譬如Mikolov经典的Embedding计算论文Efficient Estimation of Word Representations in Vector Space就仅包含了1层隐藏层.类似的,文本分类上,在由Yoon Kim在论文 Convolutional Neural Networks for Sentence Classification 中提出较经典的结构,也仅仅包含一个卷积和池化层.
虽然道路比较曲折,在广大研究人员的努力之下,我们看到,一些较有突破性进展的成果也逐步浮出水面:
- 神经翻译模型:从2014年C位出道以来,由于整个框架的简洁性,很多研究者在此基础上进行快速迭代改进,让翻译的准确率取得了实质性的突破.2018年微软团队发表的Achieving Human Parity on Automatic Chinese to English News Translation,基于此类框架,通过良好的工程和算法技巧,证明了神经翻译模型在特定领域可以达到与人类相当的翻译水平.虽然该文章发表后激起了很多翻译界人士的争议和吐槽,但不可否认,机器翻译正在逐步渗透进传统人工翻译领域,自底向上,未来已来.
- 情感分析:传统情感分析方法往往采用构造手工特征,从最简单的BOW到复杂的句法特征,其中MSRA的研究A Statistical Parsing Framework for Sentiment Classification就是一篇比较深入利用句法帮助情感分析的研究.而2017年OpenAI的Learning to Generate Reviews and Discovering Sentiment 一改以往进行愈发复杂的特征构造的方法,采用在大规模评论数据中进行字符级语言模型训练,发现语言模型状态中的某维度与所要生成的句子的情感高度相关,研究将之称为Sentiment Neuron,是用来判定文章情感的非常可靠的特征.通过这样的方法,在语言模型的状态上进行线性分类器拟合,只需要很少量的标注数据,就可超过之前在更大标注数据上的最好结果.
- WaveNet语音合成:比起信息检索、图像识别等领域,TTS语音合成领域的发展相对比较缓慢,譬如相关的采用拼接方法进行语音合成的技术已经提出了20多年时间,基本框架仍未改变.长久以来,大家对语音合成的预期也主要停留在能够听得清,而传统拼接方法对于音质的进一步提升所需要的指数级数据库的增加也让大家觉得性价比并不太高.
深度学习良好的"曲线拟合"能力给大家留下了深刻的印象,而语音合成问题,恰恰可以建模为基于自回归的曲线拟合.但一个音质基本达标的音频数据每秒的采样率至少是16k(16000个样本点),很有挑战: - 计算量:和一般如NER等问题整个句子总共进行几十次的预测不同的是,如果对每个采样点建模预测,意味着每秒钟需要进行一万甚至几万次的预测,计算量巨大.
- 长距建模能力:采用标准的如LSTM等序列建模预测模型,一般研究者们验证其对长距的建模能力大约为200到2000个时间单位,所以如果按每秒16000采样点来算,模型连0.2秒的记忆都不足,比顺行性遗忘症患者还可怕.
虽然采样点级的建模对计算资源消耗巨大,但胆大包天的DeepMind的研究员们还真把这个事情给干成了,当然也要得益于其富二代身份,否则估计连电费都交不起.研究发表于2016年的 WaveNet: A Generative Model for Raw Audio,我们曾经尝试过简单实现这个版本的模型,由于自回归模型并不适合并行,即便是在Titan GPU上,合成5秒的语音大约也需要花费半小时的时间!切莫嫌久,正好可以泡一杯花茶,安安静静坐下来读一读木心的《从前慢》.
Google与DeepMind在随后两年同时在模型端与硬件端进行改进,目前已经能让该算法在TPU的加持下达到20倍实时率,顺利在生产环境如Google Home产品进行大规模部署使用.
- 生成式摘要:传统上,摘要模型为了保证所生成的文章具有流畅的可读性,往往要么采用抽取式--将原文中的部分句子选出拼接成一篇更短的文章,或者是模板式--将原文中的一些关键信息(如数字、比分等)抽取出来,填入一个预设好的模板上.虽然保证了(至少句子级)可读性,但所产生的文章实在是了无新意.
而Seq2seq模型在神经机器翻译上的重大成功,让大家考虑尝试将摘要模型也建模为一个类似的序列到序列预测,最初见诸Abstractive Text Summarization using Sequence-to-sequence RNNs and Beyond. 去年我们与台湾清华大学孙民教授组合作的A Unified Model for Extractive and Abstractive Summarization using Inconsistency Loss)将抽取式与生成式的摘要方法进行了结合,取得了很好的效果,被收录于今年的ACL会议.
“What I cannot create, I do not understand.”- Richard Feynman
总结来看,在经过了最初了一些迂回尝试之后,研究者们逐步发现,生成式模型、无监督学习、迁移学习相互结合的技术逐步成为在很多问题上取得突破的关键.
观察与预测
- 硬件红利仍将持续,五年千倍
这个观察主要基于三点: - 投入:业内多家技术公司的AI芯片的浪潮正在如火如荼的进行投入,也吸引了大量吃瓜群众的眼球和资本的真金白银._后__摩尔定律_时代,通过扩展多核与专用集成电路的方式让硬件算力仍在进行指数提升.
- 需求:从深度学习开始发力以来,我们对于算力的需求也是指数级增长,从AlexNet到AlphaGo Zero,短短5年时间,算力的使用增长了30万倍!包括前文提到的WaveNet模型所需要的计算资源,在以前几乎是不可想象的.
在至少在未来的五年里,我们认为芯片在算力上还能有千倍的增长.同时,我们似乎也总有方法将其用到极限,如Neural Architecture Search这类方法,对算力的需求诚如韩信点兵,多多益善. - 正反馈系统:我们看到,业内的部分巨头一方面有很强的算法设计与工程落地能力,一方面也在紧锣密鼓的招募硬件团队打造下一代芯片.他们既懂需求,又能够烧足够的钱去落地硬件,而硬件的落地带来的比较性优势能够被转化为产品上的优化体验,而产品的优化体验带来了更高的用户价值和收入,从而这样的收入可以支撑他们进行更好的人才招募与进一步的研发投入.
如Google著名的Tensor Processing Unit (TPU),从2016年首次亮相以来,短短的2年时间,已经迭代到第三版.据传说一个机柜(TPU Pod)能够提供的算力已达到100P的级别.如果属实,其理论算力几乎和造价18亿人民币的中国超算榜第一的神威·太湖之光相当!
TPU
Pod
- *理论有待进一步的突破*
百度的研究人员在2017年的Deep Learning Scaling is Predictable, Empirically 研究中,通过对一系列的模型实验(包括翻译,语言模型,语音识别和图像识别),发现随着训练数据量的变化,其错误率下降符合以下经验公式:
$$E(m) \sim \alpha m^{\beta}.$$
换句话说,在Log-log域的图上看,随着训练数据的增加,错误率的下降近似为一条直线.
乐观来看,该研究发现:不断增加数据可以持续性给模型带来提升,并且提升幅度具有较高的预测性;但是,研究者同时发现,前人处心积虑设计的不同模型(如基于Deep Speech 2与基于Attention的语音识别),虽然看上去模型结构迥异,但最终表现出来的直线斜率是几乎一致的,即收敛速度几乎相同,变化的只是直线的截距(intercept).这似乎意味着:
- 猜想A:不同的模型的表达能力与数据拟合能力等价,差别只在于某些结构更容易优化(采用SGD等梯度方法)找到较优解.
- 猜想B:不同的模型结构和参数初始化方法潜在引入了某些先验信息,而这些先验信息"恰好"能过拟合某些数据集.但这些先验并不足以影响模型收敛的速度.
不论上述哪个猜想成立,都意味着我们之前在模型上做的很多探索还并没有触及到问题的本质,主要是在缓解(alleviate)问题而非解决(solve)问题.我们目前在很多网络结构的努力,可以类比在矩阵乘法运算中,拼命通过循环顺序和换层等机制来降低$O(n^3)$算法的常数,而不是通过群论等数学工具推导出$O(n^{2.376})$的算法.譬如,对于计算视觉中处理的大量图片都是3维世界的2维投影,除了采用卷积暴力堆叠处理2维图片,是不是能够利用Lie代数等结构极大减小参数空间?
过去10年机器学习领域的发展很精彩,一些相对成熟的技术也正加速在各个行业落地开花.学术方面呢,亲爱的年轻人,很多修修补补的研究工作都被你们的前辈做的差不多咯,毕竟他们也有发论文毕业迎娶白富美的压力.不要怪自己生不逢时,留给你们的,将是可以让你们名垂青史的硬骨头.
诸君,要努力啊!