助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?

Posted AI大事件

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?相关的知识,希望对你有一定的参考价值。

编辑|陈思

审校|Tina Natalie

微软公司将语音识别技术的错误率进一步降至 5.1%,几乎达到了人类专业速记员的水平,CNTK 在研究过程中表现突出。今天的内容,我们不仅带来了 CNTK 的全面解析,更有 CNTK 与 TensorFlow 的性能测试对比,看看两款深度学习工具究竟谁能更胜一筹。
语音识别错误率降至5.1%,CNTK表现突出

8 月 20 日,微软语音和对话研究团队负责人黄学东宣布微软语音识别系统继微软对话语音识别技术达至人类专业水平,开启人工智能新征程之后再次取得重大突破,错误率由 2016 年 10 月的 5.9% 进一步降低到 5.1%,可与专业速记员比肩。

此次突破大幅刷新原先记录,并在语音识别行业树立新的里程碑。

在微软转录系统达到 5.9%的错误率之后,其他研究人员在此基础上分别进行研究,采用了更多参与的多转录程序,成功在语音识别准确性道路上更进一步。

研究人员通过改进微软语音识别系统中基于神经网络的听觉和语言模型,在去年基础上降低了大约 12% 的出错率,同时引入了 CNN-BLSTM(convolutional neural network combined with bidirectional long-short-term memory,带有双向 LSTM 的卷积神经网络)模型,用于提升语音建模的效果。并且,系统中以前就在使用的从多个语音模型进行综合预测的方法,如今在帧 / 句音级别和单词级别下都可以发挥效果。

除此以外,研究人员还对整个对话过程进行历史记录分析,预测接下来可能会发生的事情,进一步加强识别器的语言模型,使其能够有效适应对话话题和语境的快速转变。

微软认知工具包 Microsoft Cognitive Toolkit 2.1(CNTK)在研究过程中表现突出,研究人员充分利用 CNTK 探索模型架构和优化模型的超参数。此外,微软对云计算基础设施(特别是 Azure GPU)的投资,也帮助提升了训练模型、测试新想法的效果和速度。

助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?

Presentation Translator:利用语音识别实现多语言观众实时翻译演示文稿

在实验环境下,语音识别的准确率已经达到了如此水准,我们更加期待这样的技术在实际生活和工作环境下的应用,在更加复杂的环境下,语音识别的技术还能否继续保持自己的高水准,我们好奇并期待着。

微软认知工具包 Microsoft Cognitive Toolkit

1 月 25 日,微软在 GitHub 上发布自家的深度学习工具包——Computational Network Toolkit(简称 CNTK)。

CNTK 是一个统一的深度学习工具包,它通过一个有向图将神经网络描述为一系列计算步骤。在有向图中,叶节点表示输入值或网络参数,边表示输入之上的矩阵运算。CNTK 使得实现和组合前馈型神经网络 DNN、卷积神经网络(CNN)和循环神经网络 (RNNs/LSTMs) 变得非常容易。实现了支持跨多个 GPU 和服务器自动分化和并行化的随机梯度下降(SGD)学习。

在上一节的文字中读者已经看到,CNTK 在语音识别领域表现不俗。在它诞生之初,微软首席语音科学家黄学东就提到过:已经证明 CNTK 比开发者在创建语音和图像识别的深度学习模型时常用的其他四个工具包性能要好,具体如下图所示。

助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?

在快速变化的深度学习领域,这种性能优势非常重要,因为很多复杂的深度学习任务往往要花掉数周时间。

CNTK 的优势是,不管是一台计算机,还是大规模 GPU 集群,都能使用。在内部,微软是在使用了 GPU 的一组强大的计算机上使用 CNTK。

在 2017 年 6 月 2 日,微软在 GitHub 正式开源了 CNTK 的 2.0 版本。 2.0 完整版用于生产级和企业级的深度学习工作负载,包括了测试版发布以来累积的几百项新功能,简化了深度学习过程,能够与更广泛的 AI 生态系统实现无缝整合。

新版本还增加了对 Keras 的支持,为 Keras 编写的代码现在可以直接利用认知工具包所提供的性能和速度,而无需对代码本身进行任何更改。同时,支持 NVIDIA 最新版本的深度学习 SDK 以及高级图形处理单元(GPU)架构(例如 NVIDIA Volta),可以加速训练进程。

除了以上的支持之外,一同发布的新功能还包括用于模型评估的 Java 语言绑定,以及对已受训模型进行压缩的新工具——经过压缩的模型即便在智能手机等资源受限设备上的图像识别等应用中也可实时运行。

2.0版本在使用Python或BrainScript训练模型之后,可以提供更多方法来评估Python、BrainScript或C#中的模型。现在使用GA版本,用户可以使用新的Java API来评估Cognitive工具包模型。这使得它非常适合希望将深入学习模型集成到其基于Java的应用程序中的用户,或者在像Spark这样的平台上进行评估。

Hacker News 上曾有人评论说:

先是 TensorFlow,然后是百度的 Warp-CTC,现在有了微软的 CNTK,对于开源机器学习而言,真是一个激动人心的时代。”

TensorFlow vs CNTK

没错,对于开源机器学习而言,这是一个激动人心的时代。那么接下来的内容,将会更加激动人心,一直以来都有话题在讨论 TensorFlow 与 CNTK 谁更强,微软公司员工曾在采访当中解释称,只需要将 Keras 的后端由 TensorFlow 切换为 CNTK,即可轻松实现性能提升。

于是一位名叫 Max Woolf (twitter:@minimaxir) 的大神来做了这么一个测试:既然两款工具都支持 Keras,那么就用 Keras 来进行测试,看看两个框架在深度学习方面的性能表现如何吧。

云环境下的深度学习

在云环境下为深度学习负载创建 GPU 实例的作法虽然极具适用性,但却令人意外地受到严重低估。大多数咨询意见仅建议使用 Amazon 的预制镜像以及其中所包含的全部必要 GPU 驱动程序。实际上,Amazon EC2 所提供的英伟达 Tesla K80 GPU 实例收费标准仅为每小时 0.90 美元(不可进一步分摊),而 Google Compute Engine 中的同 GPU 实例则仅开价每小时 0.75 美元(按分钟分摊计费)。这些方案皆能够为长时间深度学习模型训练带来理想的成本效益。

在 Google Compute Engine 当中,用户必须立足空白 Linux 实例逐步设置深度学习驱动程序及相关框架。作者利用 Keras 进行了第一次探索,必须承认整个过程并没有什么乐趣可言。不过最近的一篇博文,其中提到利用更为现代化的方法管理 Docker 容器的依赖关系,并能够为 Keras 提供必要的深度学习驱动程序 / 框架安装脚本及容器环境。只需要运行一条 Docker 命令,即可在容器内轻松运行深度学习脚本。脚本完成后,该容器即被自动清除。通过这种方法,能够确保执行操作的独立性,同时获得完美的基准测试结果 / 重现性。

在这里,作者对容器进行了调整——具体包括安装 CNTK、一套 Keras 框架的 CNTK 兼容版本并将 CNTK 作为 Keras 的默认后端。


助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?



基准测试方法

Keras 提供的示例非常强大且足以解决现实世界当中的各类深度学习难题:这意味着其非常适合模拟真实场景下的性能表现。作者选择了多种 Keras 示例,用以强调不同的神经网络架构,同时亦添加了一套定制化日志记录器以输出包含有模型性能以及训练进展时间消耗的 CSV 文件。

正如前文所提到,对后端进行切换所需要的惟一操作就是设置一个标记。尽管在容器中已经将 CNTK 设置为 Keras 的默认后端,仍然可以在 Docker 命令中直接添加一条 -e KERAS_BACKEND='tensorflow'参数以将其切换为 TensorFlow。


助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?

作者编写了一套 Python 基准脚本

https://github.com/minimaxir/keras-cntk-benchmark/blob/master/keras_cntk_benchmark.py

以立足对应 Docker 容器配合 CNTK 与 TensorFlow 管理并运行各示例,同时收集并生成日志记录。

以下为基准测试的实际结果。

IMDB 评论数据

IMDb 评论数据集是一套非常知名的自然语言处理(简称 NLP)基准测试数据集,主要用于实现情感分析。该数据集中的 2 万 5 千条评论内容被标记为正面或负面两大类。在深度学习成为主流之前,出色的机器学习模型已经能够在该测试数据集之上获得约 88% 的分类准确率。

第一套模型方案使用双向 LSTM——其负责将由前至后与由后至前两种单词序列方式对模型判断结果进行加权。

首先,让我们看看不同时间点上所训练模型在处理测试数据集时得出的分类结论准确度:

助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?

CNTK 与 TensorFlow 在利用双向 LSTM 方法处理 IMDb 数据周期测试时的性能表现(越高越好)

一般来讲,随着训练的持续推进,准确度也会相应提高 ; 双向 LSTM 需要很长时间的训练才能获得效果提升,但两套框架皆需要面对同样的情况,因此结论仍然公平有效。

为了计算算法速度,可以计算一个训练周期(即每套模型分析整体训练集的周期)的平均时长。各个周期的时长大多保持一致,但也可能存在一些变动 ; 每项时长测量皆由非参数化自举获得,且配合 95% 的平均值置信区间。在双向 LSTM 场景下:

助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?

CNTK 与 TensorFlow 配合 Keras 后端对 IMDb 数据进行双向 LSTM 分析时的平均周期运行时长(单位为秒)

哇哦,CNTK 的速度明显更快!除了高达 5 到 10 倍的 LSTM 基准测试性能提升之外,CNTK 更加惊人的能力在于只需对后端进行简单切换,即可轻松享受这一性能收益。

接下来,作者将利用同一组数据集执行现代 fasttext 分析方案。Fasttext 是一种新型算法,其能够计算出词汇矢量 Embeddings 的平均值(无论具体顺序),从而在使用 CPU 资源时同时带来令人难以置信的速度以及相当精确的结果——Facebook 的 fasttext 官方示例已经充分证明了这一点。(在此项基准测试中,作者选择包括双字母组。)

助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?

CNTK 与 TensorFlow 在利用 fasttext 方法处理 IMDb 数据周期测试时的性能表现(越高越好)

助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?

CNTK 与 TensorFlow 在利用 fasttext 方法配合 Keras 后端处理 IMDb 数据时的平均周期运行时长(单位为秒)

由于模型本身较为简单,因此两套框架拥有基本相当的准确度 ; 但在这种情况下,TensorFlow 在处理 Embeddings 时速度更快(至少 fasttext 的速度表现明显优于双向 LSTM 方法)。另外,fasttext 将基准测试结果提升了 88%,这一点亦值得其它机器学习项目认真考量。

MNIST 数据集

MNIST 数据集为另一套知名的手写数字数据集,非常适合用于测试计算机视觉(其中包含 6 万张训练图像与 1 万张测试图像)。一般来讲,出色的模型应该能够在测试集上获得 9% 的识别准确度。

多层感知(简称 MLP)方法采用一套大型完全连接网络并由 Deep Learning Magic ™负责处理实际识别任务。有时候这种处理方式已经足以提供良好的结果。

助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?

CNTK 与 TensorFlow 利用 MLP 方法时在 MNIST 数据周期准确度测试中性能表现(越高越好)

助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?

CNTK 与 TensorFlow 利用 MLP 方法时在 MNIST 数据 Keras 后端平均周期运行时长(单位为秒)中的速度表现

两套框架皆能够在数秒时间内完成每个训练周期,这意味着模型训练速度令人相当满意 ; 而在准确度方面,二者皆可谓不分上下(但皆未能突破 99%)。但总体来讲,CNTK 的速度更胜一筹。

接下来作者将使用另一种方法,即卷积神经网络(简称 CNN)——这套更具逻辑性的结构利用相邻像素间的固有关系实现对图像数据的识别。

助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?

CNTK 与 TensorFlow 利用 CNN 方法在 MNIST 数据周期准确度测试中的性能表现(越高越好)

助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?

CNTK 与 TensorFlow 利用 CNN 方法在 MNIST 数据 Keras 后端平均周期运行时长(单位为秒)中的速度表现

在本轮测试当中,TensorFlow 的表现更为出色,其在准确度与速度方面皆力压 CNTK(且准确度突破了 99%)。

CIFAR-10

为了更多引入现实世界当中的高复杂度模型,作者接下来采用对 10 种不同图像对象进行分类的 CIFAR-10 数据集。虽然本次基准测试脚本所使用的架构为与著名的 VGG-16 模型类似的深度 CNN+MLP 多层式组合,但考虑到大多数朋友并不具备训练高复杂度模型所必需的超级计算机集群,因此这里对其结构进行了简化。

助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?

CNTK 与 TensorFlow 利用 CNN 方法在 CIFAR-10 数据周期准确度测试中的性能表现(越高越好)

助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?

CNTK 与 TensorFlow 利用 CNN 方法在 CIFAR-10 数据 Keras 后端平均周期运行时长(单位为秒)中的速度表现

在这种情况下,两套后端在准确度与运行速度方面的表现基本持平。也许这是因为 CNTK 的 MLP 专长与 TensorFlow 的 CNN 专长被相互抵消掉了。

尼采文本生成

基于 char-rnn 的文本生成训练机制同样颇受欢迎。具体来讲,其利用 LSTM 以“学习”文本内容并对新文本进行抽样。在利用尼采的随笔文本作为源数据集的本 Keras 示例当中,模型会尝试根据此前的 40 个字符预测接下来的文本内容,同时通过训练将偏差逐渐缩小。在理想情况下,当然希望将念头值控制在 1.00 以下,且要求所生成的文本具备语法一致性。

助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?

CNTK 与 TensorFlow 在 LSTM 周期偏差测试中表现出的文本生成效果(越低越好)

助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?

CNTK 与 TensorFlow 在 LSTM Keras 后端平均周期运行时长(单位为秒)测试中的文本生成速度表现

两套框架在时间推移当中的偏差值变化基本相似(遗憾的是,高达 1.40 的偏差值导致所生成的文本仍然存在乱码)。不过由于采用 LSTM 架构,CNTK 的性能表现再次领先于 TensorFlow。

对于下一项基准测试,作者不再使用官方提供的 Keras 示例脚本,而是采用自己编写的文本生成器架构(曾经在此前的 Keras 博文中提到过,感兴趣的朋友可以点击此处查看)。

助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?

CNTK 与 TensorFlow 在 LSTM 周期偏差测试中表现出的文本生成效果(越低越好)

助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?

CNTK 与 TensorFlow 在 LSTM Keras 后端平均周期运行时长(单位为秒)测试中的文本生成速度表现

作者的这套网络会尽可能避免早期收敛状况,因此只对 TensorFlow 测试的训练速度造成了小幅影响 ; 而遗憾的是,CNTK 的速度相较于简单模型发生了巨大下滑,但仍然比 TensorFlow 更快。

以下为这套经过 TensorFlow 训练的模型所生成的文本输出结果:

助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?

以下则为 CNTK 训练后模型所生成的输出结果:

等等……这是什么情况?很明显,作者的模型架构导致 CNTK 在进行预测时触发了 bug,而其在处理简单的 LSTM 架构时则并未出现此类错误。在随后的排查当中,作者发现问题的根源来自批量标准化机制,并已经向微软方面提交了相关报告。

总结

总而言之,实际测试证明 CNTK 对于 Keras 框架的提速效果并不像微软公司宣传的那么显著。两套框架在准确度层面的表现倒是大致相同。

具体来讲,CNTK 在 LSTM/MLP 领域速度更快,而 TensorFlow 在 CNN/Embeddings 中则速度占优。然而如果实际网络同时涉及二者,则速度比较结果将难以预料。另外,由于 CNTK 可能还没有针对 Keras 运行场景进行全面优化,因此仍可能产生随机错误(实际上,1bit-SGD 功能仍未能正常起效)。

尽管如此,通过设置标记轻松实现后端切换的能力依旧令人印象深刻,而且大家也绝对有理由在 Keras 之上对 CNTK 与 TensorFlow 进行实际测试,借以了解谁更适合实际生产部署。

感兴趣的朋友可以访问 

GitHub repo(https://github.com/minimaxir/keras-cntk-benchmark)

以获取本文中提到的全部基准测试运行脚本。

您亦可查看用于处理日志记录以及创建交互式可视化图表的 R/ggplot2 代码。(http://minimaxir.com/notebooks/keras-cntk/)

参考文章

https://www.microsoft.com/en-us/research/blog/microsoft-researchers-achieve-new-conversational-speech-recognition-milestone/

http://www.infoq.com/cn/news/2016/01/microsoft-release-cntk

https://www.microsoft.com/en-us/cognitive-toolkit/blog/2017/06/microsofts-high-performance-open-source-deep-learning-toolkit-now-generally-available/

http://minimaxir.com/2017/06/keras-cntk/


AI 前线微信社群
入群方法


以上是关于助力微软语音识别错误率再降至5.1%,秘密武器CNTK与TensorFlow性能孰强?的主要内容,如果未能解决你的问题,请参考以下文章

高效管理项目的秘密武器:累积流图

微软自定义语音识别定价方案

利用微软认知服务实现语音识别功能

微软语音识别速度

VC++基于微软语音引擎开发语音识别总结

树莓派怎么调用科大讯飞的语音库实现语音识别