用于实时神经文本转语音的系统和方法与流程

文档序号:15391443发布日期:2018-09-08 01:12阅读:564来源:国知局
本申请根据35usc§119(e)要求于2017年2月24日提交的、题为“systemsandmethodsforreal-timeneuraltext-to-speech(用于实时神经文本转语音的系统和方法)”的第62/463,482号(案卷号:28888-2105p)的美国临时专利申请的优先权权益,其将mohammadshoeybi、mikechrzanowski、johnmiller、jonathanraiman、andrewgibiansky、shubharhratasengupta、gregorydiamos、sercanarik和adamcoates列为发明人。上述专利文献通过引用以其整体并入本文。本公开总体涉及用于计算机学习的系统和方法,该系统和方法可提供改进的计算机性能、特征和使用。更具体地,本公开涉及用于使用深度神经网络将文本转换为语音的系统和方法。
背景技术
:从文本合成人工的人类语音(通常被称为文本转语音(tts))是许多应用中的重要组成部分,例如支持语音的设备、导航系统以及对于视觉障碍的可访问性。从根本上说,它在不需要可视化界面的情况下允许技术交互。现代tts系统基于复杂的、多级的工艺管线,每一个都可依赖于手工设计的特征和启发式方法。由于这种复杂性,开发新的tts系统可能非常耗费人力和困难。此外,这些系统通常离线工作,并且不能实时地执行从文本到语音的转换,这进一步限制了它们的使用。因此,需要用于文本转语音服务的、具有改善的质量、操作时间和效率的系统和方法。技术实现要素:在本公开的一方面,用于训练文本转语音(tts)系统以由文本合成人类语音的计算机实现的方法,包括:训练字素转音素模型,以将书面文本转换为与所述书面文本相对应的音素;使用所训练的字素转音素模型将书面文本转换为与所述书面文本和训练音频相对应的音素,其中,所述书面文本是与所述训练音频相对应的转录;使用所述训练音频和所对应的音素训练分段模型,以通过将所述训练音频与所对应的音素对齐来识别所述训练音频中的音素边界,从而输出音素持续时间;给定包括groundtruth书面文本的groundtruth数据集,使用所训练的字素转音素模型以产生音素,其中,所述groundtruth书面文本代表groundtruth训练音频的转录;给定所述groundtruth训练音频和所对应的音素,使用所训练的分段模型以产生音素持续时间;以及使用所述groundtruth训练音频、所述音素、所述音素持续时间和所述groundtruth训练音频的基本频率来训练音频合成模型,所述音频合成模型输出表示所述groundtruth书面文本的合成的人类语音的信号。在本公开的另一方面,用于使用文本转语音(tts)系统以由文本合成人类语音的计算机实现的方法,包括:使用训练的字素转音素模型将书面文本转换为与所述书面文本相对应的音素;将所述音素输入到训练的音素持续时间和基本频率模型中,所述音素持续时间和基本频率模型为每个音素输出:音素持续时间;所述音素发声的概率;以及基本频率轮廓;以及使用训练的音频合成模型生成表示所述书面文本的合成的人类语音的信号,其中,所述训练的音频合成模型接收所述音素、所述音素持续时间、所述音素的基本频率轮廓以及对于每个音素所述音素是否发声的概率作为输入。在本公开的再一方面,非暂时性计算机可读介质或媒介,包括一个或多个指令序列,当所述一个或多个指令序列由至少一个处理器执行时,导致从文本合成人类语音的步骤,所述步骤包括:使用训练的字素转音素模型将书面文本转换为与所述书面文本相对应的音素集;使用训练的音素持续时间和基本频率模型,以便为所述音素集的每个音素获取:音素持续时间;所述音素发声的概率;以及基本频率轮廓;以及使用训练的音频合成模型生成表示所述书面文本的合成的人类语音的信号,其中,所述训练的音频合成模型接收所述音素集,所述音素持续时间,所述基本频率轮廓以及所述音素是否发声的概率。附图说明将参考本发明的实施方式,它们的示例可示于附图中。这些附图旨在是说明性的而非限制性的。虽然本发明大体上在这些实施方式的上下文中描述,但应理解,本发明的范围并不旨在限于这些特定实施方式。附图中的项目未按比例绘制。图1示出描绘根据本文件的实施方式的训练系统和训练程序的图。图2示出描绘根据本文件的实施方式的推理系统和程序的图。图3描绘根据本文件的实施方式的用于生成训练数据集的方法,该训练数据集将用于训练文本转语音系统。图4描绘根据本文件的实施方式的用于训练音素持续时间和一个或多个基本频率模型的方法。图5描绘根据本文件的实施方式的用于训练文本转语音系统的音频合成模型的方法。图6描绘根据本文件的实施方式的用于使用配置的文本转语音系统生成信号的方法,其中,该信号表示给出输入文本的合成的人类语音。图7描绘根据本文件的实施方式的一个或多个计算效率,该一个或多个计算效率可用于配置的文本转语音系统,以辅助它实时或快于实时地生成表示给出输入文本的合成的人类语音的信号。图8描绘根据本文件的实施方式的并行的两组线程。图9描绘根据本文件的实施方式的修改的wavenet架构。图10描绘根据本文件的实施方式的计算设备/信息处理系统的简化框图。具体实施方式在以下描述中,出于解释目的,阐明具体细节以便提供对本发明的理解。然而,将对本领域的技术人员显而易见的是,可在没有这些细节的情况下实践本发明。此外,本领域的技术人员将认识到,下文描述的本发明的实施方式可以以各种方式(例如过程、装置、系统、设备或方法)在有形的计算机可读介质上实施。附图中示出的组件或是模块是本发明实施方式的示例性说明,并且意图避免使本发明不清楚。还应理解,在本论述的全文中,组件可描述为单独的功能单元(可包括子单元),但是本领域的技术人员将认识到,各种组件或其部分可划分成单独组件,或者可整合在一起(包括整合在单个的系统或组件内)。应注意,本文论述的功能或操作可实施为组件。组件可以以软件、硬件、或它们的组合实施。此外,附图内的组件或系统之间的连接并不旨在限于直接连接。相反,在这些组件之间的数据可由中间组件修改、重格式化、或以其它方式改变。另外,可以使用另外或更少的连接。还应注意,术语“联接”、“连接”、或“通信地联接”应理解为包括直接连接、通过一个或多个中间设备来进行的间接连接、和无线连接。在本说明书中对“一个实施方式”、“优选实施方式”、“实施方式”、“多个实施方式”和“在实施方式中”的提及表示结合实施方式所描述的具体特征、结构、特性或功能包括在本发明的至少一个实施方式中,以及可包括在多于一个的实施方式中。另外,在本说明书的各个地方出现以上所提到的短语并不一定全都是指相同的实施方式或多个相同实施方式。在本说明书的各个地方使用某些术语目的在于说明,并且不应被理解为限制。服务、功能或资源并不限于单个服务、单个功能或单个资源;这些术语的使用可指代相关服务、功能或资源的可分布或聚合的分组。术语“包括”、“包括有”、“包含”和“包含有”应理解为开放性的术语,并且其后任何列出内容都是实例,而不旨在限于所列项目。本文所使用的任何标题仅是为了组织目的,并且不应被用于限制说明书或权利要求的范围。本专利文献中提到的每个参考文献以其全文通过引用并入本文。此外,本领域的技术人员应认识到:(1)某些步骤可以可选地执行;(2)步骤可不限于本文中所阐述的特定次序;(3)某些步骤可以以不同次序执行;以及(4)某些步骤可同时地进行。a.介绍本文中公开的实施方式(通常可被称为“深度语音(deepvoice)”)受传统的文本转语音(tts)管线的启示并采用类似的结构,同时使用神经网络替换所有的部件并使用更简单的特征:首先,实施方式将文本转换为音素,以及然后,使用音频合成模型将语言特征转换为语音。不同于先前的方法(使用手工设计的特征,诸如声谱包络、声谱参数、非周期参数等),本文中的实施方式所使用的特征是具有重音标注、音素持续时间和基本频率(f0)的音素。这种特征的选择使系统实施方式更容易适用于新的数据集、声音和域,而无需任何人工数据标注或辅助特征设计。这些好处通过以下方式来演示:在对包含单独的音频和未对齐的文本转录的全新数据集没有任何超参数(hyperparameter)改变的情况下,再训练实施方式的整个管线并生成相对高质量的语音。在常规的tts系统中,这种改编需要几天到几个星期的调音。实时推理是产品质量tts系统的要求;如果没有它,系统对于tts的大多数应用是无法使用的。现有工作已证明小波网络(wavenet)t(vanderoord,aaron,dieleman,sander;zen,heiga;simonyan,karen;vinyals,oriol;graves,alex;kalchbrenner,nal;senior,andrew;kavukcuoglu,koray“wavenet:agenerativemodelforrawaudio(小波网络:用于原始音频的生成模型)”,arxiv:1609.03499,2016,上述内容可在arxiv.org/pdf/1609.03499.pdf(2016)上获得并通过引用以其整体并入本文中)可生成接近人类水平的语音。然而,由于该模型的高频率、自回归性质,wavenet推理提出了令人生畏的计算问题,并且迄今为止还不知道这种模型是否可用于生产系统。如本文中所示,这个问题得到了肯定的回答;并且演示了有效率且比实时更快的wavenet推理内核,该wavenet推理内核产生高质量的16khz音频并实现比先前的wavenet推理实施例400x的加速。b.相关工作一些先前的方法已使用神经网络代替若干tts系统组件,包括字素-音素转换模型、音素持续时间预测模型、基本频率预测模型和音频合成模型。然而,不同于deepvoice的实施方式,这些系统都不能解决tts的整体问题,并且它们中很多都使用专门为其领域开发的专门的手工设计的特征。最近,在参数化音频合成方面有大量的工作,特别是wavenet、samplernn和char2wav。wavenet可用于有条件的和无条件的音频生成两者,而samplernn仅用于无条件的音频生成。char2wav将samplernn扩展为具有基于注意力的音素持续时间模型并f0预测模型的等价物,有效地向基于samplernn的声码器提供定位条件信息。在参数化语音合成方面有大量的近期工作,特别是wavenet、samplernn和char2wav(vandenoord等(2016),mehri等(2016),sotelo等(2017))。wavenet可用于有条件的和无条件的音频生成两者,而samplernn仅用于无条件的音频生成。char2wav将samplernn扩展为基于注意力的音素持续时间模型且等同于f0预测模型,有效地向基于samplernn的声码器提供定位条件信息。deepvoice实施方式在几个关键方面不同于这些系统,这些方面显著地增大了问题的范围。首先,deepvoice实施方式是完全独立的;训练新的deepvoice系统不需要预先存在的tts系统,并且可以从头开始使用短音频剪辑和相应的文本转录的数据集来实现。相反,再现上述系统中的任何一种都需要访问和理解预先存在的tts系统,因为它们在训练或推理时使用了来自另一tts系统的特征。其次,deepvoice实施方式将手工设计特征的使用最小化;实施方式将独热编码的字符用于字素-音素转换、独热编码的音素和重音、以毫秒为单位的音素持续时间以及归一化的对数基本频率,其中,归一化的对数基本频率可使用任何f0估算算法由波形计算出。所有这些都可以以最小的努力或以自动化的方法容易地从音频和转录中获得。相反,现有工作使用复杂得多的特征表示,这实际上使得在没有预先存在的tts系统的情况下不可能再生产该系统。wavenet使用来自tts系统的若干特征,包括诸如单词中音节的数量的值,短语中音节的位置,音素中当前帧的位置以及语音声谱的动态特征,如声谱和扰动参数以及它们的时间导数。char2wav依赖来自worldtts系统的声码器特征来预训练它们的对准模块,声码器特征包括f0、声谱包络和非周期参数。最后,deepvoice实施方式是专注于创建生产环境系统的结果,这要求模型实施方式实时运行用于推理。deepvoice可在几分之一秒内合成音频,并在合成速度与音频质量之间提供可调节的平衡。相反,wavenet先前的结果需要几分钟的运行时间来合成一秒的音频。发明人不知道用于samplernn的类似基准,但是如在本公开中最初描述的3层架构在推理期间需要与本文中的最大的wavenet模型实施方式同样多的、大约4-5x的计算,因此实时运行模型可具有挑战性。c.tts系统部件的实施方式图1和图2示出描绘根据本专利文件实施方式的训练系统和程序(图1)以及推理系统和程序(图2)的图,其中,训练系统和程序以及推理系统和程序在左边进行输入并在右边进行输出。在实施方式中,持续时间预测模型130/230和f0预测模型135/235可由用联合损耗训练的单个神经网络执行。在实施方式中,将字素转音素模型115/215用作为音素词典120/220(诸如,cmudict)中不存在的词的备用。在实施方式中,音素词典120/220和基本频率提取单元140是非学习部件。如图1所示,tts系统的实施方式至少在训练期间包括五个主要部件。应注意的是,为推理配置的训练系统包括如图2中所示的一些对应部件。(1)字素转音素模型115/215将写入的文本(例如,英语字符)转换为音素(例如,使用诸如arpabet的音素字母编码)。(2)分段模型125定位声音数据集中的音素边界。给出音频的音频文件105和音素接音素的转录150,分段模型125识别音频中每个音素开始和结束的位置。(3)音素持续时间模型130/230预测音素序列(例如,话语)中每一音素的时距。(4)基本频率模型135/235预测音素是否发声。如果发声,该模型预测整个音素的持续时间内的基本频率(f0)。(5)音频合成模型145/245组合字素转音素、音素持续时间和基本频率预测模型的输出,并且在高的采样率下合成与期望的文本相对应的音频。在推理期间(例如,图2),文本210通过字素转音素模型215进给以生成音素250。接下来,音素250作为输入提供给音素持续时间模型230和f0预测模型,以为每个音素分配持续时间和生成f0形状或轮廓260。最后,将音素、音素持续时间和f0用作向音频合成模型245的定位条件输入特征,音频合成模型245生成最终话语265。在实施方式中,与其它模型不同,分段模型125在推理期间不使用。相反,它可用来为训练语音数据注解音素边界。在实施方式中,音素边界暗示持续时间,音素边界可用来训练音素持续时间模型。在实施方式中,将注解有音素和音素持续时间以及基本频率的音频用来训练音频合成模型。在以下小节中详细描述所有的部件。1.字素转音素模型的实施方式字素转音素模型的实施方式可以是基于由kaishengyao和geoffreyzweig开发的编码器-解码器,其中,kaishengyao和geoffreyzweig开发的编码器-解码器在yao&zweig,“sequence-to-sequenceneuralnetmodelsforgrapheme-to-phonemeconversion(用于字素向音素转换的序列对序列神经网络模型)”arxivpreprintarxiv:1506.00196,2015中有所讨论,上述内容可从arxiv.org/pdf/1506.00196.pdf(2015)处获得并通过引用以其整体并入本文中。然而,本文中的实施方式使用具有门控的周期性单元(gru)非线性的多层双向编码器以及等深单向gru解码器。在实施方式中,每个解码器层的初始状态都初始化为对应编码器前层的最终隐藏状态。在实施方式中,该架构是通过teacherforcing训练的,并且使用定向搜索执行解码。实施方式在编码器中使用每个具有1024单元的3个双向层,和在解码器中使用相同大小的3个单向层,以及使用具有5个候选项宽度的定向搜索。在训练期间,实施方式可在每个递归层之后使用概率为0.95的放空(dropout)。在实施方式中,为了训练,使用具有64的批量大小,10-3的学习速率,每1000迭代次数0.85的退火速率的adam优化算法,其中,β1=0.9,β2=0.999,ε=10-8。2.分段模型的实施方式训练分段模型的实施方式,以输出给定的话语和目标音素序列之间的对齐。该任务类似于语音识别中将语音与书面输出对齐的问题。在那个领域中,已经示出联接时间分类(connectionisttemporalclassification,ctc)损耗函数专注于字符对齐,以学习声音与文本之间的映射。在实施方式中,来自最新语音识别系统(如2016年11月21日提交的题为“end-to-endspeechrecognition(端对端语音识别)”的第15/358,102号(案卷号:28888-1990)美国专利申请和2016年11月21日提交的题为“deployedend-to-endspeechrecognition(部署的端对端语音识别)”的第15/358,083号(案件号28888-2078)美国专利申请所公开的,上述内容中的每个通过引用以其整体并入本文中)的卷积递归神经网络架构可适用于音素边界检测。这种架构的示例包括多个卷积层,该多个卷积层跟随有多个递归层。使用ctc训练以生成音素序列的网络将为每个输出音素产生短峰。虽然这足以粗略地将音素与音频对齐,但它可能不足以检测到精确的音素边界。为了克服这个,训练实施方式以预测音素对的序列而不是单个音素的序列。然后,该网络的实施方式将倾向于在接近成一对的两个音素之间的边界的时间步处输出音素对。为了对实施方式中使用的标签编码的实施方式进行说明,考虑字符串“hello!”。为了将其转换为音素对标签的序列,使用诸如cmudict的发音词典或字素转音素模型(例如,模型115/215)将话语转换为音素,并在音素序列的端部上填补上静默音素以得到“silhhehlowsil”。最后,构成连续音素对并得到“(sil,hh),(hh,eh),(eh,l),(l,ow),(ow,sil)”。在实施方式中,通过以10毫秒的步幅计算20个尔倒频谱系数(mfcc)将输入音频特征化(featurized)。在实施方式中,在输入层之上,存在两个卷积层(时间和频率上的二维卷积),三个双向递归gru层以及最后的softmax输出层。在实施方式中,卷积层使用具有单元步幅、高度9(频率区中)和宽度5(时间上)的内核,以及递归层使用512gru单元(每个方向上)。可在最后的卷积层和递归层之后应用概率为0.95的dropout。为了计算音素对的误差率(pper),可使用定向搜索进行解码。为了解码音素边界,实施方式以相邻的音素对被至少一个音素重叠的约束执行宽度为50的定向搜索并追踪每个音素对的话语的位置。为了训练,可使用具有128的批量大小,10-4的学习速率,每500迭代次数0.95的退火速率的adam优化算法,其中,β1=0.9,β2=0.999,ε=10-8。3.音素持续时间和基本频率模型的实施方式在实施方式中,使用单个架构联合预测音素持续时间和依赖时间的基本频率。在实施方式中,该模型的实施方式的输入是具有重音的音素序列,每个音素和重音都被编码成独热(one-hot)矢量。该架构的实施方式包括两个完全连接的层,每个层具有256个单元,跟随有两个单向的递归层,每个递归层具有128个gru单元,最后是完全连接的输出层。在实施方式中,在初始完全连接的层和最后的递归层之后应用概率为0.8的dropout。在实施方式中,最后的层对每个输入音素产生三种估算:音素持续时间,音素发声的概率(即,具有基本频率)以及20个依赖时间的f0值,这些值是在预测的持续时间内均匀采样的。通过使联合损耗最小化,可以优化模型的实施方式以采用平滑,联合损耗使音素持续时间误差、基本频率错误、音素发声的概率的负对数的可能性以及与f0相对于时间的绝对变化成比例的惩罚项相组合。在附录b中描述了损耗函数的具体函数形式的实施方式。为了训练,可使用具有128的批量大小,3×10-4的学习速率,每400迭代次数0.9886的退火速率的adam优化算法,其中,β1=0.9,β2=0.999,ε=10-8。4.音频合成模型的实施方式音频合成模型的实施方式是wavenet的变型。wavenet由调节网络和自回归网络组成,其中,调节网络将语言特征上采样(upsample)为期望的频率,自回归网络生成离散的音频样本y∈{0,1,…,255}的概率分布在实施方式中,层数为l,剩余通道的数量为r(每个层的隐藏状态的维数),以及跳道的数量为s(在输出层之前,该层输出投影的维度)。wavenet由上采样和调节网络组成,接着是l个2×1卷积层,其中,卷积层具有r个剩余输出通道和门控的双曲正切非线性。在实施方式中,卷积被分解为两个矩阵相乘,每一时间步具有wprev和wcur。这些层可与剩余连接相连。每个层的隐藏状态可串联至lr矢量并以wskip投影到s个跳道,接着是具有relu非线性的1×1卷积的两个层(具有权重wrelu和wout)。wavenet用转置的卷积进行上采样和调节。据发现,如果实施方式首先用一堆双向准rnn(qrnn)层来代替编码输入,然后通过重复上采样到期望的频率,则模型的实施方式执行得更好,训练得更快,并且需要更少的参数。使用的最高质量的最终模型之一,l=40层,r=64剩余通道,以及s=256跳道。为了训练,可使用具有8的批量大小,10-3的学习速率,每1000迭代次数0.9886的退火速率的adam优化算法,其中,β1=0.9,β2=0.999,ε=10-8。附录a包括实施方式使用的修改的wavenet架构和qrnn层的细节。5.训练和推理方法的实施方式图3描绘根据本文件的实施方式的用于生成训练数据集的方法,该训练数据集将用于训练文本转语音系统。在实施方式中,训练(305)字素转音素模型(诸如图1中的模型115),以接收书面文本并输出书面文本的音素表示。在实施方式中,词典诸如(作为示例而非限制)为卡耐基梅隆大学的cmudict。这类词典包含书面文本中的词以及如在合适的地方具有重音指示的音素中所表示的对应发音,以及可用来训练字素转音素模型,因为它包括groundtruth(基础真实)文本和对应的groundtruth音素。在实施方式中,字素转音素可将词典(可扩充到包括由一个或多个人人工标记的音素)用作为词典中存在的词的查找工具,并且可对词典未找到的其它词使用模型神经网络。给定训练的字素转音素模型,可使用该模型将书面文本转换为音素(310),书面文本是与训练音频相对应的转录。因此,音素与书面文本和训练音频相对应。训练音频和对应的音素可用来训练(315)分段模型(例如,图1中的分段模型125),以通过将训练音频与对应音素对齐来识别训练音频中的音素边界,从而输出音素持续时间。如以上所讨论的,可训练分段模型以预测成对的音素的序列,以及使用ctc损耗函数识别配对的两个音素之间的边界。最后,如图3中描绘的,在实施方式中,训练的分段模型可用来产生音素持续时间(320),给定groundtruth训练音频和对应的音素。在实施方式中,groundtruth音频、音素、音素持续时间可用来训练文本转语音系统的实施方式中使用的附加模型。图4描绘根据本文件的实施方式的用于训练音素持续时间和一个或多个基本频率模型的方法。在实施方式中,作为前处理阶段(例如,图1中的f0提取140),提取用于groundtruth训练音频的基本频率(405)。然后,可使用基本频率、音素和音素持续时间训练音素持续时间模型和基本频率模型(例如,图1中的模型130和模型135)(410),以为每个音素输出:音素持续时间;音素发声的概率;以及基本频率轮廓。应注意的是,音素持续时间模型和基本频率模型可以是相同的模型或可以是独立的模型。图5描绘根据本文件的实施方式的用于训练正文语音转换系统的音频合成模型的方法。在实施方式中,使用groundtruth训练音频、音素、音素持续时间和基本频率,音频合成模型(例如,图1中的音频合成模型145)可训练(505)成接收那些输入和输出表示groundtruth书面文本的、合成的人类语音的信号。已训练各种模型,训练的模型可形成文本转语音系统。如先前注意的和图2中描述的实施方式中所示出的,配置的文本转语音系统不利用分段模型。相反,文本转语音系统的实施方式包括训练的字素转音素模型215(该模型还可包括音素词典220的使用)、训练的音素持续时间230和一个或多个基本频率模型235以及训练的音频合成模型245。如参照图6更详细说明的,这样的系统200接收输入文本210并输出表示输入文本的合成的人类语音的信号。在实施方式中,该信号可以是音频信号。图6描绘根据本文件的实施方式的用于使用配置的文本转语音系统生成信号的方法,其中,该信号表示给出输入文本的合成的人类语音。在实施方式中,字素转音素模型用于将输入的书面文本转换(605)为音素。然后,这些音素可输入(610)到音素持续时间和一个或多个的基本频率模型中,这些模型为每个音素输出:音素持续时间;音素发声的概率;以及基本频率轮廓。最后,音频合成模型将音素、音素持续时间、用于音素的基本频率轮廓以及音素是否发声的概率作为输入接收,以合成表示书面文本的、合成的人类语音的信号(615)。如所注意的,在本文中讨论的、由深度神经网络构建的文本转语音系统的实施方式的有益效果当中,可使用一个或多个实施效率来帮助加速推理。图7描绘根据本文件的实施方式的一个或多个计算效率,该一个或多个计算效率可用于配置的文本转语音系统,以辅助它实时或快于实时地生成表示给出输入文本的、合成的人类语音的信号。如本文中所讨论的,实施方式可以利用(705)一个或多个实施效率来帮助实现推理或比实时更快的推理。实施效率的示例包括但不限于:避免任何再计算;进行缓存友好存储器访问;经由多线程进行高效同步的并行化工作;使非线性flop最小化;通过线程固定来避免缓存抖动和线程争用;以及使用硬件优化的例程来进行矩阵乘法和卷积运算。d.结果应注意的是,这些实验和结果以说明的方式提供,并且使用一个或多个的具体实施方式在具体条件下执行;因此,这些实验或其结果不应当用于限制本专利文件的公开的范围。在内部英语语音数据库上训练这些模型的实施方式,该英语语音数据库包含大约20小时的语音数据,语音数据被分段为13,079个话语。另外,为在暴雪(blizzard)2013年数据的子集上训练的模型的实施方式提供了音频合成的结果。这两个数据集都是由一位职业女性发言人所讲。模型的实施方式是使用tensorflow框架实现的。1.分段结果在实施方式中,通过以10毫秒的步幅计算20个尔倒频谱系数(mfcc)将输入音频特征化。模型实施方式可具有两个卷积层,该两个卷积层具有单元步幅、高度9(频率区中)和宽度5(时间上),跟着是具有512个gru单元(每个方向上)的三个双向递归gru层。在最后的卷积层和递归层上应用概率为0.95的dropout。使用8个titanxmaxwellgpu执行训练,每个批次在gpu当中平均分配,并且使用ringallreduce以对在不同gpu上计算的梯度进行平均,每一次迭代需要大约1300毫秒。在大约14,000次迭代之后,模型收敛到7%的音素对误差率(pper)。据发现,音素边界并不一定要精确,并且将音素边界随机地移动10-30毫秒对音频质量没有影响,因此怀疑音频质量对超过某一点的音素对误差率不敏感。2.字素转音素结果在从cmudict处获得的数据上训练字素转音素模型实施方式。在实施方式中,删除了所有不以字母开头的词(包含数字或具有多个发音的词),从初始的133,854个字素-音素序列对中留下了124,978个。使用单个titanxmaxwellgpu执行训练,每次迭代需要大约150毫秒。在大约20,000次迭代之后,模型收敛到5.8%的音素误差率和28.7%的错字率。与之前的工作不同,在解码期间实施方式中没有使用语言模型,并且具有多个发音的词未包括在数据集中。3.音素持续时间和基本频率结果使用单个titanxmaxwellgpu执行训练,每次迭代需要大约120毫秒。在大约20,000次迭代之后,模型收敛到38毫秒(对于音素持续时间)和29.4hz(对于基本频率)的平均绝对误差。4.音频合成结果在实施方式中,将音频数据集的话语分成1秒的语块,每个语块具有四分之一秒的内容,在开始的时候使用四分之一秒的静默来填充每个话语。删除了主要保持静默的语块,共留下74,348语块。模型的实施方式进行了不同深度的训练,包括剩余层堆中的10层、20层、30层和40层。据发现,低于20层的模型产生劣质的音频。20层、30层和40层模型都产生高质量的可识别的语音,但是40层模型比20层模型具有更少的噪音,这可以用高质量的耳罩式耳机来检测。先前的方法强调了在确定模型质量时接受域尺寸的重要性。实际上,20层模型具有40层模型一半的接受域。然而,当在48khz下运行时,40层模型仅具有83毫秒的接受域,但是仍然生成高质量音频。这表明20层模型的接受域是足够的,以及音频质量的差异可能是由于除接受域尺寸之外一些其它音素引起的。除了不同的模型深度之外,实施方式中剩余通道的数量和跳道的数量也不相同。据发现,这两个参数对高质量合成都很重要,以及将它们降低到某一点下时会产生嘈杂的音频和错误发音的音素。使用8个titanxmaxwellgpu执行训练,每个gpu具有一个语块,使用ringallreduce以对在不同的gpu上计算的梯度进行平均。每次迭代需要大致450毫秒。模型大约在300,000次迭代之后收敛。据发现,单个1.25秒的语块足以使gpu上的计算饱和,而批处理并不能增大训练效率。如高维度生产模型所常见的,模型损耗与个体样本的感知质量多少不相关。虽然具有非常高损耗的模型听起来确实很嘈杂,但是优化到低于某一阈值的模型并没有表示出它们的质量损耗。另外,模型架构方面的变化(诸如,深度和输出频率)可对模型损耗具有重大的影响,而对音频质量具有很小的影响。为了估算tts管线的实施方式的个别阶段的感知质量,使用crowdmos工具箱和方法从mechanicalturk完成平均意见得分(mos)评级(1到5之间的等级,值越高越好)。为了区分音频预处理的效果、wavenet模型质量、音素持续时间和基本频率模型质量,呈现了对于各种话语类型的mos得分,包括合成结果,该合成结果中wavenet输入(持续时间和f0)是从groundtruth音频提取的而不是由其它模型合成的。结果呈现在表1中。我们有目的地在每个批次的样本中包括groundtruth样本,这些样本由评价者评估以突出来自人类语音中的增量(delta),并允许评价者辨别模型之间的更细粒度的差别;这种方法的不利方面是产生的mos得分将显著地低于如果评价者仅呈现合成的音频样本时的分数。表1.话语的平均意见得分(mos)和95%的置信区间(ci)类型模型大小mos±cigroundtruth(48khz)无4.75±0.12groundtruth无4.45±0.16groundtruth(压缩的和扩展的)无4.34±0.18合成的l=40,r=64,s=2563.94±0.26合成的(48khz)l=40,r=64,s=2563.84±0.24合成的(合成的f0)l=40,r=64,s=2562.76±0.31合成的(合成的持续时间和f0)l=40,r=64,s=2562.00±0.23合成的(2x实时推理)l=20,r=32,s=1282.74±0.32合成的(1x实时推理)l=20,r=64,s=1283.35±0.31这个mos分数是通过对所有的模型类型向评价者示出相同的话语而获得的相对的mos分数(鼓励比较性等级并且允许评价者辨别更细粒度的差异)。每批次样本还包括groundtruth48khz录音,这使得我们所有的等级都与自然的人类声音相比较。为每个样本收集了474个等级。除非另作说明,否则模型使用从groundtruth中提取的(而不是通过持续时间预测模型和频率预测模型合成的)音素持续时间和f0,以及使用16384hz的音频采样率。首先,当对音频流进行从48khz到16khz的降采样时,特别是结合μ-law压缩和量化时,发现mos显著的下降,这可能是因为将48khz的样本作为5分的基线呈现给评价者,以及低质量嘈杂的合成结果呈现为1。当与groundtruth持续时间和f0一起使用时,模型的实施方式的得分很高,我们模型的95%的置信区间与groundtruth样本的95%置信区间相交。然而,使用合成的频率减少了mos,以及进一步包括合成的持续时间也显著的减小了mos。可得出结论,朝向自然tts发展的主要障碍在于持续时间和基本频率预测。最后,模型的最佳实施方式中的一些比实时运行得稍微慢一些(见表2),因此可以证明通过获得以比实时快1x和2x运行的模型的分数,从而调整模型大小,则合成质量可以换取推理速度。还测试了wavenet模型,wavenet模型是在来自初始的wavenet出版物的全套特征上进行训练的,但是这些模型与在我们减少的特征集上训练的模型之间没有发现感知差异。5.暴雪(blizzard)结果为了证明本系统的实施方式的灵活性,所有的实验模型都用blizzard2013数据集上的相同的超参数进行再训练。对于这些实验,使用了20.5个小时子集的数据集,该数据集被分段成了9741个话语。使用d.4节中的描述的程序评估模型,这鼓励了评价者将合成的音频直接与groundtruth进行比较。在测试的集上,16khz压缩和扩展的音频得到了4.65±0.13的mos分数,而我们合成的音频得到了2.67±0.37的mos分数。e.优化推理的实施方式尽管wavenet在生成高质量的合成语音方面已经表现出了潜力,但是最初的实验对简短的话语报告了数分钟或数小时的生成时间。由于模型的高频率、自回归性质,wavenet推理提出了难以置信的具有挑战性的计算问题。当生成音频时,必须在大约60μs(对于16khz音频)或20μs(对于48khz音频)内生成单个样本。对于40层模型实施方式,这意味着单个层(包括若干矩阵相乘和非线性)必须在大约1.5μs内完成。作为比较,访问驻留在cpu上的主存储器中的值可能需要0.1μs。为了实时执行推理,应注意不要重新计算任何结果,将整个模型存储在处理器缓存中(与主存储器相反),并且最佳地利用可用的计算单元。使用我们的40层wavenet模型实施方式合成1秒的音频需要大约55×109的浮点运算(flop)。任何给定层中的激活都依赖于前一层和前一时间步中的激活,因此必须每次一个时间步和一个层来完成推理。单个层仅要求42×103的flop,这使得实现有意义的并行操作很困难。除了计算要求之外,模型具有大约1.6×106个参数,如果以单精度表示,这相当于约6.4mb。(对于完整的性能模型,参见附录e)在cpu上,单个haswell或broadwell核每秒具有大约77×109的浮点运算(flop)的峰值单精度吞吐量,以及大约140gb/s的l2至l1的缓存带宽(假设每一周期两个8个宽的avxfma指令,以及每一周期64字节的l2至l1的带宽)。模型每一时间步从缓存加载一次,这需要100gb/s的带宽。即使该模型将适用于l2缓存,实施例将需要利用70%的最大带宽和70%的峰值flop,以便在单个核上进行实时推理。将计算分散到多个核上降低了问题的难度,但尽管如此,计算仍然具有挑战性,因为推理必须在最大存储器带宽和峰值flop的重要部分处进行操作,且同时保持线程的同步。gpu与cpu相比较具有较高的存储带宽和峰值flop,但是提供更专业化的并因此受限制的计算模型。对每个层或时间步启动单个内核的简单实现是不可行的,但是基于永久性rnn技术的实现也许能利用由gpu提供的吞吐量,其中,永久性rnn技术如于2016年4月5日提交的、题为“systemsandmethodsforamulti-coreoptimizedrecurrentneuralnetwork(用于多核优化的递归神经网络的系统和方法)”的并将diamos等列为发明人的第15/091,413号美国专利申请(其通过引用以其整体并入本文中)中所描述的。对cpu和gpu两者实现了高速优化的推理内核,并证明了在比实时更快的速度下,wavenet实施方式推理是可以实现的。表2列出了对于不同模型的cpu和gpu推理速度。在这两种情况下,基准仅包括自回归、高频率的音频生成,并且不包括语言调节特征的生成(对于整个话语,这可以并行完成)。cpu内核实施方式对模型的子集进行实时运行或比实时更快地运行,而gpu模型还未匹配这个性能。表2.用于float32和int16不同模型的cpu和gpu推理内核基准。至少一个主线程和至少一个辅助线程用于所有的cpu内核。这些内核作用于没有批处理的单个话语。cpu结果来自于在2.6ghz计时的intelxeone5-2660v3haswell处理器,以及gpu结果来自geforcegtxtitanxmaxwellgpu。模型平台数据类型线程数速度×实时l=20,r=32,s=128cpufloat3262.7l=20,r=32,s=128cpufloat3222.05l=20,r=64,s=128cpuint1621.2l=20,r=64,s=128cpufloat3261.11l=20,r=64,s=128cpufloat3220.79l=40,r=64,s=256cpuint1620.67l=40,r=64,s=256cpufloat3260.61l=40,r=64,s=256cpufloat3220.35l=20,r=32,s=128gpufloat32n/a0.39l=20,r=64,s=128gpufloat32n/a0.29l=40,r=32,s=128gpufloat32n/a0.23l=40,r=64,s=128gpufloat32n/a0.171.cpu实现的实施方式实施方式通过以下方式实现实时cpu推理:避免任何再计算、进行缓存友好存储器访问、经由多线程进行高效同步的并行化工作、使非线性flop最小化、通过线程固定来避免缓存抖动和线程争用、以及使用定制硬件优化的例程来进行矩阵乘法和卷积运算。在实施方式中,对于cpu实现,计算可分成以下步骤:1.样本嵌入:通过进行两个样本嵌入来计算wavenet输入因果卷积,一个用于当前的时间步,以及一个用于前一时间步,并将它们与偏差相加。即:x(0)=wemb,prev·yi-1+wemb,cur·yi+bembed(1)2.层推理:对于具有扩张宽度d的从j=1到l的每个层j:(a)经由矩阵向量的乘法运算,计算两个宽度扩张的卷积的左半部分宽度:(b)计算扩张卷积的右边:(c)计算给出调节矢量的隐藏状态h(j):其中,v0:r表示矢量v的第一r元素,以及vr:2r表示下一r元素。然后,经由矩阵向量乘法运算计算下一层的输入:(d)从这层开始,计算对跳道矩阵乘法的贡献,在所有的层上累加q(0)=bskip:3.输出:计算两个输出的1×1卷积:zs=relu(q(l))(8)za=relu(wrelu·zs+brelu)(9)p=softmax(wout·za+bout)(10)最后,从分布p中随机取样yi+1。这些并行穿过如图8中描述的两组线程。在实施方式中,wskip的计算卸载到辅助线程,而主线程前进通过wavenet层的堆栈。当主线程在计算输出层时,辅助线程对即将到来的时间步制定wavenet层卷积的wprev左半程。箭头指示一个线程组在等待来自另一线程组的结果的位置,并且可能被实现为自旋锁。在实施方式中,一组主线程计算x(0),h(j),x(j),za,和p。一组辅助线程计算q(j)和zs,其中,是为下一即将到来的时间步计算的,而主线程计算za和p。在实施方式中,这些组中的每一个均可包括单个线程或多个线程;如果有多个线程,则每个线程计算每个矩阵向量相乘、二进制运算或一元运算的一个块,并根据需要插入线程屏障。将模型分散到多个线程中,既分散计算,也可以用于确保模型的权重适合于处理器的l2缓存。在实施方式中,将线程固定到物理核(或禁用超线程)能够对于避免线程争用和缓存抖动非常重要,并且提高大约30%的性能。根据模型的大小,非线性(双曲正切tanh、反曲sigmoid和柔性最大值传输函数softmax)还可能需要一大部分的推理时间,因此,在实施方式中,所有的非线性都可以用高精度的近似值代替,这在附录c中有详细说明。从这些近似值中产生的最大绝对误差是:tanh为1.5×10–3,sigmoid为2.5×10–3,以及ex为2.4×10–3。使用近似而不是精确的非线性,性能提高了大致30%。当使用量化时,实施方式还使用量化为int16的权重矩阵实现推理,并在感知质量上没有发现变化。对于较大的模型,当使用较少的线程时,量化提供显著的加速,但是线程同步的开销可能会阻止它对更大量线程的使用。在实施方式中,为了提高计算吞吐量,可以使用例如专用于实施方式的矩阵大小的peachpy来编写用于矩阵向量乘法的定制avx组件内核。当使用float32时,使用定制组件内核的推理快于intelmkl达到1.5x,并快于openblas达到3.5x。两个库都不提供等效的int16运算。2.cpu实现的实施方式由于他们的计算强度,许多神经模型最终配置在gpu上,gpu可具有比cpu高得多的计算吞吐量。由于模型的实施方式可以是存储器带宽和flop绑定,所以在gpu上运行推理似乎是自然选择,但事实证明这是不同类的挑战。通常,在内核调用序列中,代码在gpu上运行,每个矩阵相乘或向量运算都是它自己的内核。然而,cuda内核启动的延迟(可能高达50μs),加上从gpu存储器加载整个模型所需的时间,对于这样的方法来说是过于大的。这种风格的推理内核最终会比实时速度慢大约1000×。在实施方式中,为了在gpu上接近实时,使用永久性rnn的技术(如上所述)构建内核,该技术在单个内核启动时生成输出音频中的所有样本。在实施方式中,模型的权重被加载到寄存器一次,然后进行使用,在整个推理过程中不卸载它们。由于cuda程序设计模型与这种永久性内核之间的不匹配,因此产生的内核可专用于特定的模型大小且编写是非常耗力的。尽管我们的gpu推理速度不是很实时(表2),但是使用这些技术和更仔细的实现,可在gpu以及cpu上实现实时的wavenet推理。可在附录d中获得永久性gpu内核实施方式的实现细节。f.一些结论本文中证实,通过构建完全神经系统的实施方式,当前的深度学习方法对于高质量的文本转语音引擎的所有部件是可行的。在实施方式中,将推理改进到比实时更快的速度,这表明这些技术可被应用于以串流方式实时生成音频。可以用最少的或很少的人工干预来训练实施方式,这极大地简化了创建tts系统的过程。推理性能可通过仔细的优化、gpu上的模型量化和cpu上的int8量化以及与其它架构(诸如,xeonphi)的实验而得到进一步改进。另一自然方向是去除阶段之间的间隔以及将分段、持续时间预测和基本频率预测模型直接合并为音频合成模型,从而将问题转化为完全的序列对序列模型,创建单个端对端可训练的tts系统,以及允许整个系统的训练而没有中间监督。代替融合模型,经由更大的训练数据集或生成模型技术(诸如,对抗训练)来改善持续时间和频率模型,可能会对声音的自然性具有影响。以下附录描述了某些实施方式,并以说明而非限制的方式提供了实施例。可使用其它的实施方式和实施例。a.附录a–wavenet架构实施方式和细节wavenet包括调节网络c=c(v)和自回归p(yi|c,yi-1,...,yi-r),其中,调节网络c=c(v)将低频语言特征转换为本地的音频频率,以及自回归p(yi|c,yi-1,...,yi-r)在给出当前时间步c的调节下预测下一音频样本以及r音频样本的上下文。r是接受域尺寸,并且是由网络的结构确定的性质。图9中示出了wavenet架构的草图。图9描述根据本文件的实施方式的修改的wavenet架构。在图9中,按功能部件如下:输入是902和920;卷积和qrnn是904、906、910、912、922、932、948、950、964和970;一元运算是924、942、946、962和968;softmax是972;二进制运算是938、940、944、952和960;以及再成形、转置和切割是908、914、916和918;以及分流通道是934和936。在以下的小节中描述网络细节。应注意,示例值(例如,256hertz、16hertz等以说明而非限制的方式提供;本领域技术人员将认识到这些特定值并不重要)。1.自回归wavenet在实施方式中,自回归网络的结构通过层的数量l、跳道的数量s以及剩余通道的数量r参数化。在实施方式中,如wavenet的2.2节中所描述的,使用μ-law压缩将音频量化为a=256个值。独热编码的值经历初始的2x1卷积,为剩余堆中的第一层生成输入x(0)=wembed*y+bembed(11)其中,*是一维卷积算子。由于输入音频是独热矢量,所以这个卷积可经由嵌入而不是矩阵乘法来完成。在实施方式中,每个后续层计算隐藏的状态矢量h(i),以及然后(由于层之间的剩余连接)增加至它的输入x(i-1)以生成它的输出x(i):其中,l(i)是调节网络那层的输出。由于每个层均将其输出添加到它的输入,所以层的维数必须仍然固定为剩余通道的数量r。尽管这里写得是两个卷积,一个为wh以及一个为wg,但是实际上,使用具有r输入和2r输出通道的单个卷积能更有效地实现它。在实施方式中,在推理期间,将这个卷积替换为矩阵wprev(卷积的左半边)wcur和(右半边)的两个矩阵向量相乘。因此,可如下再制定h(i)对于特定时间步t的计算:其中,l(i)是和的串接,以及b(i)是和的串接。从层1到层l中的每一个的隐藏状态h(i)被串接并投影,学习的wskip降至跳道的数量s:其中,relu(x)=max(0,x)。然后,zs通过两个完全连接的relu层进给以输出分布p=softmax(wout·za+bout)(19)2.调节网络当在没有调节信息的情况下训练时,wavenet模型产生类似于人类的“咿呀声音”,因为它们缺乏足够的远程信息来再生产词。在实施方式中,为了生成可识别的语音,每个时间步由相关的语言特征集调节。这可能是通过将每一层偏置每一时间步的调节矢量而得到的,其中,调节矢量由较低频率的输入信号生成,该输入信号包含音素,重音和基本频率特征。音频的频率明显高于语言调节信息的频率,因此对每个wavenet层使用上采样程序以将较低频率的语言特征转换为较高频率的调节矢量。初始的wavenet通过重复或通过转置的卷积进行上采样。相反,我们首先通过两个双向的准rnn层来传递我们的输入特征,该准rnn层具有fo-池化(fo-pooling)(即,forgetgate(忘记门)和outputgate(输出门)的池化)和2×1卷积。具有fo-pooling的单向qrnn层由以下方程式限定:o=σ(wo*x+bo)(21)f=σ(wf*x+bf)(22)zt=ot·ht(24)在实施方式中,通过运行两个单向qrnn来计算双向qrnn层,一个在输入序列上以及一个在输入序列的反拷贝上,以及然后将它们的输出通道堆叠。在两个qrnn层之后,通道是交错的,因此wavenet中的tanh和sigmoid都可以得到由前qrnn和后qrnn生成的通道。在双向qrnn层之后,对本地的音频频率重复执行上采样。(在实施过程中,采用双线性插值的上采样通过增加噪音或导致错误发音而减慢了收敛并降低了生成质量,而双立方上采样则导致了低沉的声音。通过计算输出频率与输入频率的比值以及将输入信号中的每个元素重复合适的次数,完成重复上采样。)据发现,该模型的实施方式可能对上采样程序很敏感:尽管调节网络的许多变化收敛,但它们可以产生一些音素的错误发音。3.输入特征化使用8位μ律压缩音频训练当前专利文献的、测试的wavenet实施方式,该音频在48000hz下从16位双通道脉冲编码调制(pcm)音频降采样到16384hz。其在256hz的音素信号上进行调节。在描述的实施方式中,调节特征向量具有227个维度。这些当中,两个是用于基本频率。这些当中的一个指示当前音素是否发声(以及因此具有f0)以及另一个是归一化的对数频率,该归一化的对数频率是通过将f0的对数归一化为最小的、观测到的大约在-1和1之间的f0而得到的。其余的特征描述当前的音素,前两个音素以及接下来的两个音素,每个音素经由对于音素身份的40维独热矢量(具有用于arpabet音素39个音素和用于静默的1个音素)和对于音素重音的5维独热矢量(没有重音、主重音、第二重音、第三重音和第四重音)编码。不是所有的数据集都具有第三或第四重音,并且这些特征对于没有这些重音水平的数据集总是为零。在实验中,我们发现,包括音素上下文(前两个音素和接下来的两个音素)经由转置卷积对上采样是有益的,并且对于我们基于qrnn的上采样实施方式不那么关键但仍然很重要。虽然没有音素上下文的声音质量仍然高,但是话语子集的错误发音可能成为问题。还发现,包括额外的韵律特征,诸如词和音节的打断、停顿、音素和音节计数、相对音素的帧位置等,不会起到帮助作用,并没有导致更高质量的合成样品。为了将标注有持续时间的音素转换为固定频率的音素信号,定期对音素进行采样,每一个音素(具有上下文和f0)有效地重复与它的持续时间成比例的次数。因此,音素持续时间有效地量化为1/256s≈4ms。以批处理模式使用praat计算合适频率下的f0,f0最小值为75以及f0最大值为500,其中,praat是由阿姆斯特丹大学的语音科学学院的paulboersma和davidweenink设计和开发的用于语言中的语音的科学分析的免费计算机软件包。4.从输出分布采样在实施方式中,在每个时间步处,合成模型根据先前的样品和语言特征产生样品的分布p(s)。为了产生样本,有多种方法可以选择来使用这个分布:·直接采样:从p(y)随机采样。·温度采样:从由温度t调节的分布随机采样其中,z是归一化常量。·平均值:获得分布ep[y]的平均值。·模式:获得最可能的样本,argmaxp(y)。·顶部k:从调整的分布采样,该调整的分布仅允许顶部k个样本其中,z是归一化常量。据发现,在这些不同的采样方法当中,直接采样产生高质量的输出。温度采样产生可接受的质量的结果,并且在训练早期它确实优于直接抽样,但对于收敛模型则明显较差。这一观察结果表明,生成音频模型准确地学习了条件样本分布,以及通过上述启发式方法修改该分布比仅使用已学习的分布更差。5.训练在训练期间观察到模型的几种倾向。正如所料,随机初始化的模型产生白噪音。在整个训练当中,模型逐渐地增大信噪比,以及白噪音的音量渐渐下降而语音信号的音量增大。在语音信号比白噪音占优势之前的成千上万次的迭代中,语音信号可能是听不见的。另外,因为模型是自回归的,罕见的错误可产生非常明显的干扰。例如,常见的故障模式将在采样期间产生少量不正确的样本,然后这会由于混合误差而导致大量不正确的样本。在模型稳定之前,这个听起来是短期的大的噪音。这个发生的可能性在训练的早期较高,而在收敛模型中不会发生。b.附录b–音素模型损耗在实施方式中,nth音素的损耗是其中,λi是平衡常数,和tn是nth音素的预估的持续时间以及groundtruth持续时间,和pn是nth音素发声的预估的概率以及groundtruth概率,ce是交叉熵函数,和f0n,t是nth音素在时间t时的基本频率的预估值和groundtruth值。在实施方式中,t时间样本沿着音素持续时间是等间隔的。c.附录c–非线性近似细节在推理期间,在实施方式中,神经网络非线性的精确实现用高精度的有理近似代替。在这个附录中,详细描述了这些近似的推导。1.双曲正切(tanh)和反曲(sigmoid)近似将表示为近似于e|x|,使用以下对于tanh和σ的近似:选择四阶多项式来表示以下拟合为tanh(x)和σ(x)产生准确的值:就其本身而言,对于e|x|不是很好的近似函数,但是当它用于近似如方程28和方程29中描述的tanh和σ时,它产生良好的近似。2.ex近似在实施方式中,不是直接近似ex,而是近似2x并使用恒等式ex=2x/ln2。让为的下限。然后,其中,因为如果使用32位的浮点数表示2x,则和可由2x的指数和分数位表示。因此,如果将2x的字节模式解释为32位整数(由表示),则它产生:重新整理方程31并使用得出:i2x=(x+126+{2z-z})·223(32)如果在z∈[0,1)上g(z)=2z-z能够得到准确的近似,则反过来将方程32中i2x的字节表示解释为32位的浮点数,2x可得到准确地近似。有理近似可用作为:对于x∈(-∞,0],这个给出最大误差2.4×10-5。d.附录d-永久性gpu内核nvidiagpu具有多个流处理器(sm),每个流处理器具有寄存器文件和l1缓存。还有一致性l2缓存,该l2缓存由所有sm共享。推理过程需要每61μs生成一个样本。由于cuda内核启动的高延迟以及从gpu存储器读取小矩阵的高延迟,因此整个音频生成过程必须由单个内核(权重加载到所有的sm的寄存器文件中)来完成。这就提出了两个挑战—如何将模型拆分到不同的寄存器中以使sm之间的通信最小化,以及如何在由cuda程序设计模型所施加的限制条件下实现sm之间的通信。在实施方式中,模型可拆分到titanxgpu的24个sm的寄存器文件中,编号为sm1-sm24。在实施方式中,未使用sm24。在实施方式中,sm1至sm20存储剩余堆栈的两个相邻层。这意味着sm1存储层1和层2,sm2存储层3和层4,如此等等。每个层具有用于扩张卷积和w、br的三个矩阵和三个偏置矢量—wprev,bprev,wcur,bcur。因此,smi生成两个隐藏状态h(2i)和h(2i+1)以及输出x(2i)。每个sm还存储与生成的隐藏状态矢量相互作用的wskip矩阵的行。因此,将wskip划分到20个sm上。在实施方式中,仅sm20需要存储bskip。sm21存储wrelu和brelu。最后,因为寄存器文件的限制以及sm23存储bout,将wout拆分到两个sm上—sm22和sm23。下一挑战是协调sm之间的数据传输,因为cuda程序设计模型在所有sm中并行执行一个内核。然而,由于一次生成一个音频样本,因此希望以sm1至sm23并且再返回从sm1开始的循环的方式依序执行。我们使用23个线程块启动我们的cuda内核,并通过在锁上旋转来模拟这种顺序执行,每个线程块用于每个sm,线程块存储在全局存储器中并在l2中缓存。首先,sm1执行双层的wavenet模型以生成h(1)、h(2)和x(2)。然后,它解锁sm2正在旋转的锁并设置它自己的锁。它通过绕过l1缓存以写入全局存储器来完成这个,使得所有的sm具有锁的一致性视图。然后,sm2对sm3执行相同的操作,并且对于每个sm,这个顺序的锁定和解锁链将继续执行。最后,sm23生成用于时间步t的输出分布p并解锁sm1,使得整个过程可重复以生成用于时间步t+1的p。就像锁一样,通过绕过l1缓存读取和写入全局存储器,数据在sm之间传递。由于nvidiagpu具有一致性l2缓存,绕过l1写入的全局存储器,接着是存储器栏,导致sm上的存储器的一致性图。然而,这个划分方案是非常不灵活的,并且仅适用于表2中所示的l、r和s的特定值。这是因为每个sm具有固定大小的寄存器文件,并且与sm之间相对缺乏灵活性和昂贵的通信机构相结合,这意味着拆分sm之间的权重矩阵是具有挑战性的。这些参数中的任何变化意味着必须编写新的内核,这是非常耗时的过程。为什么gpu内核比cpu内核慢,具有两个主要原因。第一,gpu中的sm之间的同步很昂贵,因为它是通过在l2缓存中锁上的忙等待来完成的。第二,即使模型以适合每个sm的寄存器文件的方式进行划分,cuda编译器仍然会溢出到l1缓存。通过手制的汇编码,cpu内核的性能应该能够得到匹配。然而,wavenet推理中缺乏并行性,这使得难以隐藏从gpu存储器读取和编写小的矩阵时的固有延迟,其中,当gpu中缺少丰富的缓存层级时,这些小的矩阵会暴露。e.附录e--性能模型本文提出了附录a.1节中描述的自动回归wavenet架构的性能模型的实施方式。在模型的实施方式中,两个r维的矢量之间的点积需要2r个flop—r个乘法运算和r个加法运算。这意味着w、r×r矩阵和x、r×1矢量之间的矩阵矢量相乘需要2r×r=2r2个flop。因此,使用以下flop计算h′(i):cost(h′(i))=(2r·2r)+(2r·2r)+2r+2r+2rflops(34)让除法和取幂分别需要个fd和fe个flop。这意味着tanh和σ需要(fd+2fe+1)个flop。因此,计算h(i)需要2r·(fd+2fe+1)+r个flop。最后,为每层计算x(i)需要r+(2r·r)+r个flop。这使得用于计算一个层的总flop为:cost(layer)=10r2+11r+2r(fd+fe)flop(35)根据相同的模型,计算zs需要(l·2r)·s+s+s个flop,其中,假定relu需要1个flop。类似地,计算za需要2s·a+a+a个flop以及wout·za+bout需要2a·a+a个flop。计算数字稳定的softmax需要一个最大,一个相减,一个取幂,一个求和以及一个矢量的每一元素的相除。因此,计算p需要3a+a(fd+fe)个flop。将其全部加起来,生成每个音频样本的最终性能模型实施方式的实施方式如下:cost(sample)=l(10r2+11r+2r(fd+fe))+s(2r·l+2)+a(2s+2a+3)+a(3+fd+fe)flop(36)让l=40,r=64,以及s=a=256,以及假定fd=10和fe=10,采样频率为16384hz,对于每秒的合成,出现大约55×109个flop。f.系统实施方式在实施方式中,本专利文献的方面可涉及、可包括一个或多个信息处理系统/计算系统或者可在一个或多个信息处理系统/计算系统上实施。计算系统可以包括出于商业、科学、控制或其他目的可操作来计算、运算、确定、分类、处理、传输、接收、检索、发起、路由、交换、存储、显示、通信、显现、检测、记录、再现、处理或利用任何形式信息、智能或数据的任何手段或手段的组合。例如,计算系统可为个人计算机(例如,膝上型计算机)、平板电脑、平板手机、个人数字助理(pda)、智能手机、智能手表、智能包装、服务器(例如,刀片式服务器或机架式服务器)、网络存储设备或任何其他合适设备,并且可在大小、形状、性能、功能和价格方面改变。计算系统可以包括随机存取存储器(ram)、一个或多个处理资源(例如中央处理单元(cpu)或硬件或软件控制逻辑)、rom和/或其他类型的存储器。计算系统的另外组件可以包括一个或多个盘驱动器、用于与外部设备通信的一个或多个网络端口、以及各种输入和输出(i/o)设备(例如键盘、鼠标、触摸屏和/或视频显示器)。计算系统还可包括可操作为在各种硬件组件之间传输通信的一个或多个总线。图10描绘根据本公开的实施方式的计算设备/信息处理系统(或是计算系统)的简化框图。应理解,计算系统可不同地配置并且包括不同组件,包括具有少于或多于图10中描述的部件,但应理解,针对系统1000所示出的功能可操作为支持计算系统的各种实施方式。如图10所示,计算系统1000包括一个或多个中央处理单元(cpu)1001,cpu1001提供计算资源并控制计算机。cpu1001可实施有微处理器等,并且还可包括一个或多个图形处理单元(gpu)1017和/或用于数学计算的浮点协处理器。系统1000还可包括系统存储器1002,系统存储器1002可呈随机存取存储器(ram)、只读存储器(rom)、或两者的形式。如图10所示,还可提供多个控制器和外围设备。输入控制器1003表示至各种输入设备1004的接口,例如键盘、鼠标、触摸屏和/或触笔。还可存在扫描仪控制器1005,该扫描仪控制器1005与扫描仪1006通信。系统1000还可包括存储控制器1007,该存储控制器1007用于与一个或多个存储设备1008对接,存储设备中的每个包括存储介质(诸如磁带或盘)或光学介质(其可用于记录用于操作系统、实用工具和应用程序的指令的程序,它们可包括实施本发明的各方面的程序的实施方式)。存储设备1008还可用于存储经处理的数据或是将要根据本发明处理的数据。系统1000还可包括显示控制器809,该显示控制器1009用于为显示设备1011提供接口,显示设备1011可为阴极射线管(crt)、薄膜晶体管(tft)显示器、有机发光二极管、电致发光面板、等离子面板或其他类型的显示器。计算系统1000还可包括用于一个或多个外围设备1006的一个或多个外围控制器或接口1005。外围设备的示例可包括一个或多个打印机、扫描仪、输入设备、输出设备、传感器等。通信控制器1014可与一个或多个通信设备1015对接,这使系统1000能够通过各种网络(包括互联网、云资源(例如以太云、经以太网的光纤通道(fcoe)/数据中心桥接(dcb)云等)、局域网(lan)、广域网(wan)、存储区域网络(san))中的任一网络,或通过任何合适电磁载波信号(包括红外信号)来连接至远程设备。在示出的系统中,所有主要系统组件可连接至总线1016,总线1016可以表示多于一个的物理总线。然而,各种系统组件可在物理上彼此接近或可不在物理上彼此接近。例如,输入数据和/或输出数据可远程地从一个物理位置传输到另一物理位置。另外,实现本实施方式的各方面的程序可经由网络从远程位置(例如,服务器)访问。此类数据和/或程序可通过各种机器可读介质中的任一机器可读介质来传送,机器可读介质包括但不限于:诸如硬盘、软盘和磁带的磁性介质;诸如cd-rom和全息设备的光学介质;磁光介质;以及硬件设备,该硬件设备专门被配置成存储或存储并执行程序代码,该硬件设备例如专用集成电路(asic)、可编程逻辑器件(pld)、闪存设备、以及rom和ram设备。本发明的实施方式可以利用用于一个或多个处理器或处理单元以使步骤执行的指令在一个或多个非暂态计算机可读介质上编码。应注意,一个或多个非暂态计算机可读介质应当包括易失性存储器和非易失性存储器。应注意,替代实现方式是可能的,其包括硬件实现方式或软件/硬件实现方式。硬件实施的功能可使用asic、可编程的阵列、数字信号处理电路等来实现。因此,任何权利要求中的术语“手段”旨在涵盖软件实现方式和硬件实现方式两者。类似地,如本文使用的术语“计算机可读媒介或介质”包括具有实施在其上的指令程序的软件和/或硬件或它们的组合。利用所构想的这些替代实现方式,应当理解,附图以及随附描述提供本领域的技术人员编写程序代码(即,软件)和/或制造电路(即,硬件)以执行所需处理所要求的功能信息。应当注意,本发明的实施方式还可涉及具有其上具有用于执行各种计算机实施的操作的计算机代码的非暂态有形计算机可读介质的计算机产品。介质和计算机代码可为出于本发明的目的而专门设计和构造的介质和计算机代码,或者它们可为相关领域中的技术人员已知或可用的。有形计算机可读介质的示例包括但不限于:诸如硬盘、软盘和磁带的磁性介质;诸如cd-rom和全息设备的光学介质;磁光介质;以及专门配置成存储或存储并执行程序代码的硬件设备,例如,专用集成电路(asic)、可编程逻辑器件(pld)、闪存设备、以及rom和ram设备。计算机代码的示例包括机器代码(例如,编译器产生的代码)以及包含可由计算机使用解释器来执行的更高级代码的文件。本发明的实施方式可整体地或部分地实施为可在由处理设备执行的程序模块中的机器可执行指令。程序模块的示例包括库、程序、例程、对象、组件和数据结构。在分布的计算环境中,程序模块可物理上定位在本地、远程或两者的设定中。本领域的技术人员将认识到,计算系统或编程语言对本发明的实践来说均不重要。本领域的技术人员将还将认识到,多个上述元件可物理地和/或在功能上划分成子模块或组合在一起。本领域技术人员将理解,前文的示例和实施方式是示例性的,并且不限制本公开的范围。旨在说明的是,在本领域的技术人员阅读本说明书并研究附图后将对本领域的技术人员显而易见的本发明的所有、置换、增强、等同、组合或改进包括在本公开的真实精神和范围内。还应注意,权利要求书的元素可不同地布置,包括具有多个从属、配置和组合。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1