新智元编译1
来源:Re-work、Baidu、MIT
译者:王婉婷 张巨岩
开源运动从发起至今,已有 40 多年,从麻省理工学院开始,逐渐成了互联网巨头技术共享,建立生态的重要举措。而在人工智能领域,2015 年Google 开源了第二代深度学习系统,Facebook 选择了硬件开源,还有很多公司和项目都在开源道路走的越来越远。
除了Google 和Facebook 之外,百度也在人工智能领域投资甚巨。今天,百度硅谷人工智能实验室(SVAIL)公布了Warp-CTC,它是让 AI 软件运行得更高效的重要代码。
百度的这块代码最近用于搭建了一个让人印象深刻的语音识别系统,深度语音2(Deep Speech 2)。
新智元 12 月 10 日对此进行了报道:【吴恩达】百度第二代深度语音系统发布,未来有望超越人类。点击阅读原文浏览全文。
简要地说,这个系统在识别语音方面比大部分人类做得都更好。这个技术对于百度来说尤其有用,因为它为百度的无数用户提供了一种更好的接入服务的方式,特别是在移动端。在智能手机上输入中文字非常复杂麻烦,在中国,已经有许多人更偏爱用语音来发送短讯或是在网上搜索信息。
深度学习让计算机能达到出色的表现,比如几乎毫无差错地将语音转录成文字或是识别图片中的物品。将输入,比如某个词的语音或是显示某个物体的图像交给大型模拟神经网络,过一段时间,这个网络就能“学会”识别出绝大多数新样例。
这块被称作Warp-CTC的代码,本质上是对于一种在几年前开发的深度学习算法的改进实现。这种深度学习算法被设计成能在当时最新型的计算机芯片上运行的非常快速。
Nervana 是一家为不愿意或是不能够开发自用的深度学习框架的公司提供深度学习框架的初创企业,已经将Warp-CTC融入了它的技术中。
百度和其他的科技公司正在向公众免费提供它们用来做深度学习的代码,因为他们都想要从大众的研究(public research)中获益。他们也想要鼓励那些可能最终会被收购的研究人员和初创企业,开发与这些巨头公司自己的技术相兼容的机器学习系统。
使用这些软件来创造强大的AI应用时,最关键的是数据,而数据是由Facebook、Google和百度这样的大公司把持的。不过,一些数据可能会开始被渐渐地公开发布,Yahoo这几天已经发布了一些数据。
百度的人工智能系统开源举措,获得了来自中国和硅谷的关注。Re-work为此专门采访了百度硅谷AI实验室的主管Adam Coates。
Adam Coates是MIT科技评论提名的“2015年低于35岁的35位创新人士”之一,之前是斯坦福的博士后研究人员,在过去的六年里,他是深度学习的提倡者和领军研究人员,也是早期支持使用HPC技术的人员之一。Re-work对他进行了访谈,首先就谈到了今天发布的Warp-CTC。
Re-work:今天百度硅谷AI实验室公布了Warp-CTC,你的第一个贡献给社区的开源工具,请告诉我们更多关于它的信息。
Adam Coates:我们在构建深度语音端对端系统的过程中发明了Warp-CTC方法,进而使用CTC提高模型的可伸缩性。由于没有相似的工具,我们决定将其分享给人们。它是一款很实用的工具,可以用到现有的AI框架中。现在有很多深度学习的开源软件,但是之前用于训练序列数据的端对端网络一直很慢。我们在Warp-CTC上的投入是对“我们坚信深度学习与高性能计算技术(HPC)的结合会有巨大潜力”的一种证明。
Re-work:你在百度、你的实验室以及深度语音近期发展中所起的作用?
Adam Coates:我是百度硅谷AI实验室的主管,我们的任务是开发对千百万人有重大影响的AI技术。我们的深度学习系统有很大的潜力。我们在2014年后期开始研究深度语音系统,在2015年12月的NIPS论坛上,我们宣布,深度语音2代可以用一个算法精确地识别英语和普通话语音。普通话版本的系统在很多场景中都很精确,并且已经可大规模用于实际世界的应用中,如在移动端的网页搜索。
硅谷AI实验室,我们称为“S-VAIL”,包括了多个紧密合作的研究团队。除了致力于深度语音研究的伟大的深度学习团队以外,我们还有一支非常棒的高性能计算团队,他们已经创造出支持我们训练所有网络的系统。还有一支产品队伍在探索这些技术应用的新方式。这个“端对端”模型研究很令人兴奋,并且帮助我们克服了很多我们曾遇到的障碍。
Re-work:在深度语音的发展历程中,你遇到了什么挑战,以及怎样克服它们?
Adam Coates:刚开始的时候,百度外部有一些质疑,例如深度语音能否超过现有的语音系统。这些顾虑包括了如我们得不到足够的数据,模型太大以至于无法部署,我们用于识别英语的系统无法推广到普通话上进而为百度的用户服务。这些顾虑中每一个都是真实的挑战——我们在扩展数据集和计算能力上花了很多工夫。我们不得不发掘最好类别的模型,并找到如何来权衡部署需求和高精确率需求。但是深度语音进展很快,团队现在已经将最初的顾虑抛之脑后了。
Re-work:你能告诉我们更多关于部署DNN的批处理调度(BatchDispatch)过程的信息吗?
Adam Coates:部署神经网络时最有挑战性的一个部分是计算成本——大型神经网络最好在GPU上运行,你可以很快并高效地完成很多计算。然而,挑战在于GPU最擅长的是并行计算很多数据碎片而不是完成单一的请求。简而言之,GPU适用于吞吐量而非延迟——但是延迟对用户来说是很重要的。为了解决这个问题,我们的团队开发了一种将许多用户的请求置入到批处理过程的方法,进而让GPU可以同时为他们服务,并且不会带来很多延迟。
Re-work:深度语音与其他语音系统有哪些不同?
Adam Coates:大部分现存的语言系统有一个固定的工程策略:将问题分解为几部分,很好地解决每部分,接着将这些部分拼在一起并在每部分上迭代来做改进。然而,对于从音频信号中转译文字这样的复杂系统来说(特别是在拥挤的房间中或者某人有很重的口音时),让所有部分拼在一起并起到“理想效果”是很难的,因此开发或改善一个现有的先进语音系统需要很多经验和专业技巧。深度语音采取了不同的方式:它用一个大型的神经网络替代了所有这些部分,并让这一个神经网络自动从海量数据中学习来达到理想效果。这让它变得更简单和灵活,而且我们用更多的数据来训练它时,它也会变得更好。
Re-work:你认为深度语音对哪些产业有最重大影响?
Adam Coates:简单地说,移动设备急需更好的语音系统。这种情况尤其符合发展中经济体系,在这样的体系中,很多用户第一次用移动设备接入互联网,或者说更喜欢用手机连接互联网而非笔记本。这些用户对手机的要求比我多,我认为深度语音系统可以在这儿有最重大的影响。长期来看,语音交互界面会非常流行。随着我们会在越来越多的复杂场景中需要技术的帮助,AI将会让技术变得更容易理解和有用。语音是其中很重要的一部分。
Re-work:在接下来的五年里,我们有可能看到深度学习怎样的发展?
Adam Coates:在仅仅几年时间,我们已经目睹了深度学习在图片识别领域中,从“有潜力”变成“主导”,所以5年在这一领域中是很长的时间。我认为深度语音在语音识别中也遵从相似的改变。在不久的未来,深度学习将在自然语言理解中有重大影响。我对此特别兴奋,因为它是让技术变得易于交互的重要部分。
Re-work:有任何让你兴奋的,在日常生活中正在成为常态的技术吗?你认为它们何时会出现?
Adam Coates:我们已经随身携带硬件了:麦克风、照相机和强大的处理器。我们整天都会带着移动设备,但我不认为我们完全激发出手机的潜力。用机器已有的视觉和听觉能力转变我们使用移动设备的方式还需要更好的AI系统——这也是SVAIL的努力方向。SVAIL团队旨在让电脑变得易于互动,因为它最终要与人类交谈。
Warp-CTC可以被用来解决监督式学习问题,将输入的序列与输出的序列相联系,例如在语音识别中。
Q&A
Q. Warp-CTC是什么?
A. Warp-CTC是一款在CPU和Nvidia GPU上CTC算法的开源实现。
Q. CTC是什么?
A. CTC是一种在不知道输入和输出的对应关系的情况下,为序列预测进行监督式学习时使用的对象函数。CTC算法由IDSIA的AlexGraves、SantiagoFernandez、FaustinoGomez、和JürgenSchmidhuber发明。
Q. 为什么SVAIL开发了Warp-CTC?
A. 在搭建我们的“深度语音(DeepSpeech)”端到端语音识别系统时,SVAIL的工程师们为了提高用CTC训练的模型的可扩缩性而开发了Warp-CTC。我们发现比起我们的Warp-CTC,现有的其他CTC实现普遍需要大得多的存储容量和/或速度慢上十倍到数百倍。
Q. 为什么SVAIL将Warp-CTC开源?
A. 我们希望让端到端的深度学习变得更容易也更快速,这样的话研究者们就能取得更快速的进展。已经有许多深度学习开源软件存在了,但是现有的为序列预测训练端到端网络(比如我们的深度语音引擎)的代码运行速度都太慢。我们希望,通过分享我们创造出的一块重要的代码,为机器学习社区做出贡献。
Q. Warp-CTC支持那些机器学习框架?
A. 我们将Warp-CTC作为C语言库发布,也整合了对Torch(一种科学计算框架)的支持。另外,Nervana系统正将Warp-CTC整合进他们的机器学习框架Neon。
Q. 研究者们要怎样使用Warp-CTC?
A. Warp-CTC可以被用来解决监督式学习问题,将输入的序列与输出的序列相联系——例如在语音识别中。
Q. 机器学习社区能对Warp-CTC做改进吗?
A.我们编写了Warp-CTC,让它能够被简单地整合到许多不同的项目中。我们鼓励有兴趣将Warp-CTC整合进机器学习框架中的开发者们与我们联系。我们乐意接受pullrequest。
Q. 你们预期会发布附加的开源AI工具吗?
A. 当然!
简介
链结式时间分类算法(CTC,Connectionist Temporal Classification)是一个损失函数,主要在序列数据上进行监督式学习,且不需要调整输入数据和标签。例如,CTC可以用于训练端对端的语音识别系统,这是在百度硅谷AI实验室在使用的方法。
上述图中展示了CTC计算输出“THECAT”序列概率的过程,是对所有可以映射成“THECAT”的输入序列的和。这其中也考虑到了标签被复制的可能性,因为它们有可能在几个输入数据的时间步(timesteps)中被拉伸(见上图底部的色谱图)。直接计算所有这类可能情况的概率有可能昂贵得难以接受,由于涉及到了组合学,但是CTC用了动态编程技巧来大幅减少计算复杂度。因为CTC是一个可微函数,它可以在标准深度学习SGD训练中被使用。
在我们实验室中,我们着重扩展递归神经网络(RNN),而且CTC损失函数是一个重要的组件。为了让我们的系统变得高效,我们在文章中并行处理CTC算法。这个项目包含了我们开发的高性能CPU和CUDA版本的CTC算法,可用于Torch平台。该代码库提供了简单的C接口,以使其很容易被整合进入深度学习框架中。
这种实现方式提高了训练的可伸缩性,相应的表现超过了并行CTC实现方法的表现。对于GPU为核心的训练流水线来说,能将所有数据放在本地端的这种记忆能力让我们将互联带宽更多地用于越来越多的数据并行处理中。
表现
我们的CTC实现方法相比其他公开的实现方法,是高效的。所有计算是在log层面的数值稳定性上进行的,我们在深度语音系统训练过程中发现了需要这种能力的例子。我们比较了我们的算法、Eesen和在Theano上的一种CTC实现方法。我们在32位浮点数上对Theano实现方法进行了基准测试,并在log层面上做了计算,为了匹配我们用于比较的其他实现方法。
我们分别展示了和英文和普通话端对端模型有关的两个问题规模(problemsizes),其中T表示输入到CTC中时间步总数,L表示每个例子中标签的长度,A代表字母大小(alphabetsize)。
在GPU中,我们算法对64个例子的迷你批处理(minibatch)大概比Eesen快7到155倍,比Theano实现方法快46到68倍。
GPU表现
在单核NVIDIATitan X GPU上的基准测试结果如下
CPU表现
在一台有两个IntelE5-2660 v3处理器的双卡插槽机器(dual-socketmachine)上进行的基准测试——warp-ctc用了40个线程来尽可能利用CPU的资源。Eesen没有提供CPU实现方法。我们注意到Theano实现方法不能在多线程上进行并行计算。
接口
接口在include/ctc.h中。它支持CPU或GPU上执行,如果在CPU上运行,你可以具体制定OpenMP并行计算;如果在GPU上的话,用CUDAStream。我们进行了相应调整来保证代码库不会执行内部存储分配,以避免有存储分配带来的同步和间接成本(overheads)。
Deep Speech 2: End-to-End Speech Recognition in English and Mandarin
请回复20160115下载论文。