什么是所谓的「ImageNet 时刻」(ImageNet moment),以及它为什么重要?
为什么语音领域还未实现「ImageNet 时刻」,学界和业界应为此负哪些责任?
用于解决 95% 标准「有用」任务的架构和所需模型构建块是广泛可用的,并可作为标准、经过测试的开源框架模块;
大多数用大型数据集预训练的流行模型都是可用的,只需要相对少量的数据就可以微调并应用到下游任务中;
在标准任务的预训练模型基础上进行微调,能够得到解决不同日常任务的模型(且效果较好);
对于日常任务,对比之前论文中所需要的计算资源,例如 STT(Speech-To-Text,语音到文本)模型的训练需要 100-1000 GPU 天,此时训练模型所需的计算资源很小(STT 模型的训练只需要 1-10 GPU 天);
预训练大型模型的计算量对于小规模的独立公司和研究团队而言是可承受的。
英伟达在数十年间研发和优化了消费级 GPU。众所周知,我们现在仅需要将 4-8 块顶级 GPU 组合起来,就相当于造出了一台「超级计算机」;
据说在 2000 年代末,英伟达就设想 GPU 的性能能够满足机器学习的需要,并开始投入 CUDA 的开发(CUDA 于 2007 年首次发布)。CUDA 是一种低级矩阵乘法框架,是大多数 GPU 加速机器学习应用的基础;
2009 年,由李飞飞教授带领的团队发布了 ImageNet 数据集,并在 2011 年举办了首届「ImageNet 大规模视觉识别挑战赛」(ILSVRC)。2012 年,Alex Krizhevsky 等人使用英伟达 GPU 和 CUDA 训练出 AlexNet 神经网络,性能远超之前;
之后人们更多地投入深度学习框架的开发,并在 2017-2018 年发展到了成熟期。截至本文发表,PyTorch 和 TensorFlow 已成为首选框架,它们都提供了针对多项任务(包括图像分类)的大量预训练模型;
同期在 ImageNet 上实现 SOTA 性能的模型架构经过了不断的精炼,同时训练和评估这些模型的代码也在这些常用的框架中和预训练权重一起发布了。
这个现象在 CV 社区已经变得越来越普遍,即不把在 ImageNet 上训练图像识别当作任务的结束,而是当作训练深度卷积神经网络以学习有用和通用特征的预任务。这种首先在 ImageNet 上训练 CNN 来执行图像分类(即预训练),然后在新的目标任务上调整这些特征(即微调)的做法,已经成为解决大量 CV 问题的事实标准。通过利用 ImageNet 预训练 CNN 的特征,我们在一系列图像分类数据集上实现了惊人的结果,此外还包括目标检测、动作识别、人类姿态估计、图像分割、光流估计、图像捕捉等任务。
在私有数据上实现解决方案,并且没有进行如实表述;
框架和工具包过于复杂;
解决现实中不存在的问题;
研究结果不可复现。
代码需要优化,以进行大规模计算;
这样的方法(展示如何使用这些框架的端到端示例)仅适用于小规模的学术数据集,如果没有大量计算便无法扩展到大规模数据;
这样的方法是非常样本低效的(我们最喜欢的案例是,在包含数百兆字节文本的数据集上训练 10GB 的语言模型);
即使你在 LibriSpeech 上预训练了一个模型,该模型也很可能无法迁移到现实任务中;
如果你想构建自有的 STT 解决方案,并且内化它、适当地理解它以及进行优化,那么你可能需要一个大型团队,或耗费大量的时间,来内化工具包;
这样的工具包要么是公开的自有解决方案,要么是作为公关手段首次出现,或者作为生态系统构建工具。这意味着该工具包将作为合适的基线,但如果没有投入大量资源,此类 pipeline 很难得到优化(如果你拥有一家公司,很有可能你会写自己的工具包)。
从个人角度来说,我们多次尝试内化 FairSeq 和 EspNet 的 pipeline,但我们并不能在合理的时间和精力下完成这件事。也许是我们的机器学习工程技能欠佳,但我们还从其他拥有更好工程技能的同行(即全职 C++机器学习程序员)那里听说了同样的困境。
如果有大量研究人员集中精力追求某个度量指标下的顶尖结果,则这些指标失去了意义(参见古德哈特法则:一项社会指标或经济指标,一旦成为一个用以指引宏观政策制定的既定目标,那么该指标就会丧失其原本具有的信息价值)。如果不能足够快地更新,学术数据集实际上就变成了「排行榜」,变成了企业或机构炫耀实力的工具。为了获得 SOTA 结果,在大型计算机上使用大规模和样本低效的网络成为了他们的默认选择,尽管这对于普通玩家而言遥不可及;
理想情况下,论文应该有足够的细节,从而使独立研究者也能实现论文至少 95% 的结果;
实际上,从研究者的真实目的和现实应用的角度来看,论文的内容和结构都是有问题的。他们以或被接收或被拒绝的心态发表论文,使用复杂的数学作为解释新概念的手段,尽管其工作可能与所述数学无关,只是将数学作为现成的工具。
论文在讨论方法的泛化性(即域外测试)时显得很模糊。阅读论文时你可能觉得神经网络似乎在自动语音识别任务(ASR)上击败了人类,但这不过是「排行榜」问题的另一种症状,神经网络并没有真正击败人类;
论文通常没有说明使用的计算量;
论文很少报告收敛曲线,即要用多少时间和计算量来实现相对于 SOTA 的次优结果。通常在机器学习领域,95% 甚至 99% 的结果都可以仅用全部计算量的一小部分来实现。
即使是最好的 SOTA 模型对于眼前的任务也仅具备非常有限的理解(毕竟机器学习就是模式匹配);
最近的 SOTA 结果已经变得越来越难以比较,因为它们使用的计算资源的差别可能有几个数量级;
这些结果很难得到复现,从而限制了现实应用;
数据越多,计算资源越多,越能得到 SOTA,这已经成为常态;
排行榜指标的意义被高估。
大多数此类数据集是英文的;
此类数据集有助于研究新的可能性,但与 CV 不同,我们很难将它们整合到实际 pipeline 中;
虽然人们对构建 SQUAD 这样的数据集投入了大量精力和关注,但我们并不能真的在生产级模型中使用它们;
稳定的生产级自然语言处理模型通常建立在大几个数量级的数据之上,或者任务较为简单。例如,我们可以安全地假设神经网络能可靠地执行 NER,但对于问答或对话任务而言,还处于科幻小说阶段。我喜欢这个贴切的比喻:用 Transformer 构建通用人工智能,就像通过造塔来登月。
每三个月我会将 warp-ctc(移植到 PyTorch)和 PyTorch 中的本地 CTC 损失做比较,后者无法恰当处理现实数据;
和标准的损失相比,CTC 损失非常「激进」;
通常需要某些形式的裁剪或 warm-up,CTC 损失很容易「爆炸」;
在网络训练的第一个 epoch,你需要非常谨慎地选择训练数据。
使用的工具包、实现和思想;
做出的主要改变;
运行的实现,以及得出的结论。
根据这里的图调整得来(https://paperswithcode.com/sota/speech-recognition-on-librispeech-test-other),人类结果来自 Deep Speech 2 论文。
较近期的论文很少用较小的模型做控制变量测试;
声称得到 SOTA 性能的 ASR 论文很少报告收敛曲线;
这些论文很少提及用于超参搜索和模型收敛的计算量;
在我们读过的论文中,只有 Deep Speech 2 关注了从较小数据集迁移到现实数据的性能问题(即域外验证);
没有针对样本效率和向真实数据集的扩展进行优化。2019 年的几篇论文做了类似的优化(参见论文《Sequence-to-Sequence Speech Recognition with Time-Depth Separable Convolutions》和《QuartzNet: Deep Automatic Speech Recognition with 1D Time-Channel Separable Convolutions》),但它们只关注减小模型尺寸,而没有关注训练时间。
如果你阅读了 deepspeech.pytorch 的版本注释,看到「不要期待这些模型在你自己的数据上能表现的多好!」这句话,你可能会被惊呆。这些预训练模型已经在 1000 小时的语音上训练过,并拥有非常低的 CER 和 WER。然而在实践中,将系统拟合到某些理想的约 10000 小时的数据集上时,仍得到 25-30% 的 WER(而不是宣传中所说的,在清晰语音上得到 5% 的 WER,在有噪声语音上得到 10% 的 WER);
和 CV 研究不同,CV 中确实可以将模型在 ImageNet 上的优秀性能迁移到只有较少数据的现实任务中。但在语音领域,模型在 LibriSpeech 的优秀性能并不能迁移到现实数据。你并不能像在 CV 领域中用 1000 张图像训练网络那样,用 1000 小时语音来快速调整网络;
以上这些意味着,学界和业界已经开发了越来越复杂且对 LibriSpeech 过拟合的方法。
大多数在 LibriSpeech 上训练的模型都是以循环方式进行的,即用整个数据集训练 N 次。这种做法是非常成本低效的。因此,我们采用课程学习(curriculum learning)方法;
QuartzNet:这篇论文非常注重效率,但似乎用于训练的计算量与其他论文相当;
TDS:虽然他们没有明确报告训练网络所需的时间(我们试图复现其网络,但失败了),但他们有一大堆不错的想法——使用字节对编码(BPE),使用超过 2 或 3 的步长,使用可分离卷积;
JasperNet:该研究称,对网络进行了 50 个 epoch 或 500 个 epoch 的训练,但没有明确提到训练时间和使用的硬件数量;
Wav2Letter:令人惊讶的是,Wav2Letter 论文实际上没有报告这些指标中的任何一个。我们使用类似 Wav2Letter 的网络,它们有大约 2000 万到 3000 万个参数,但是不能转录俄语;
Deep Speech 2:很难将最初的 Deep Speech 论文包括在这个列表中,主要是因为他们尝试、推广和开创了许多不同的事物。我们只是把他们最常引用的在 LibriSpeech 上使用循环模型的实验包括在内。
几乎所有研究都使用大规模计算,并且没有清晰可见的硬件需求趋势(甚至在声称减轻计算负担的论文中也是如此);
网络从小型到大型不等,但总体而言可以肯定的是,无论使用多少计算量,大多数网络都对 LibriSpeech 过拟合;
如果你跳到「总体进展」部分,查看我们的收敛曲线和以下收敛曲线,你会发现,我们最佳网络的收敛 90% 发生在最初的 2-3 天,这与行业一致(但我们总体上使用的计算量要少得多)。
通常,论文对方法的泛化性能(即域外测试)表述含糊;
很少关注超参数的稳定性;
全新的半监督和无监督学习方法(wav2vec、循环 STT-TTS 训练)不执行任何关于样本效率、稳健性或泛化性的健全性检查,主要关注创新性因素;
端到端怪象:学术论文通常在一个小的理想数据集(LibriSpeech)上过拟合 LM 并进行后处理,声称实现顶尖端到端结果的方法其实是非常不理想的,因为在实践中文本域可用的数据量至少要高 999 倍(例如,将维基百科与 LibriSpeech 中的所有文本的大小进行比较);
过度依赖梅尔频率倒谱系数:我们尚未看到对短时傅立叶变换、梅尔频率倒谱系数、梅尔滤波器组、小波等的恰当对比。我们在较小数据集上进行了实验,最终发现使用什么不会造成区别,但是在真实的有噪声的数据上短时傅立叶变换是最好的。此外,我们未能对较新的网络滤波器(如 SincNet)进行任何有意义的实验。
我们使用私有数据来训练模型,尽管私有数据集的大小比整个数据集小几个数量级,即「高质量基准」大约包含 500 小时(其中 100 小时是手动标注的),而公共数据集有 20000 小时;
此外,本文中报告的主要结果仅通过少量的手动标注获得(即我们仅手动标注了验证集)。我们使用少量私有数据的主要原因是,我们需要在主要语言领域中得到结果;
与数据集不同,我们没有共享训练 pipeline、特定超参数和模型设置以及预训练模型,因为本研究 be 研究都是为自业商业项目进行的。我们本可以选择在非商业许可下共享,但普遍的共识是知识产权法在俄罗斯不起作用,除非你是国家支持的垄断者。我们正在寻找融资方案,以便开源一切资源,包括未来在其它语言方面的工作。
关系型数据库是一个新的基础支持层,它改变了计算的功能。在 20 世纪 70 年代末关系型数据库出现之前,如果你想让数据库向你展示「所有购买该产品并居住在该城市的顾客」,通常需要一个定制的工程项目。数据库不是用结构来构建的,否则任何任意的交叉引用查询都是一件容易的、常规的事情。而当时如果你想问一个问题,就必须有人来构建它。数据库只是记录保存系统,关系型数据库则把它们变成了商业智能系统。
这改变了数据库在重要方面的用途,并创造了新的用例和新的十亿美元公司。关系型数据库带来了 Oracle、SAP,SAP 和它的同行带来了全球即时供应链——他们给了我们苹果和星巴克。截至 20 世纪 90 年代,几乎所有的企业软件都是关系型数据库,PeopleSoft、 CRM 和 SuccessFactors 等都运行在关系型数据库上。关注 SuccessFactors 或 Salesforce 的人中,没有人会说「这永远不会起作用,因为 Oracle 拥有所有的数据库」。相反,这项技术成为了一个使能层,是一切的组成部分
所以,这是一个思考目前机器学习的很好方式。这是我们可以用计算机做的重大改变,这将是许多不同公司的不同产品的一部分。最终,几乎所有东西都会在某个地方用到机器学习。这里一个重要的相似之处是,尽管关系型数据库有规模经济效应,但也有有限网络或「赢家通吃」效应。如果公司 B 和 A 从同一个供应商处购买相同的数据库软件,那么公司 A 使用的数据库不会变得更好。实际上,机器学习也是如此:机器学习完全是关于数据的,但是数据对于应用来说是高度特定的。更多手写数据会使手写识别工具性能更好,更多的燃气轮机数据会使预测燃气轮机故障的系统性能更好,但它们彼此之间不会互惠互利。数据是不可替代的。