我们在机器翻译、语音识别、语音合成、语音转换等任务中,常常需要对序列数据进行处理,传统的方法不但繁琐且效果有限,目前常见的端到端seq2seq方法很值得学习。

1. 序列到序列

序列到序列最早应用于机器翻译领域,后面推广到语音合成等领域。该模型是针对输入和输出序列长度不相同的情况下,即建模两种不同域的映射关系。

  • 序列到序列包含编码器(encoder)和解码器(decoder)两个部分。编码器和解码器常用LSTM等网络构成,将一个域的序列转换到另一个域的序列。
  • 编码器网络负责接收源句子的embedding并提取特征;解码器网络负责将编码文本解码输出成翻译的语言。这两个过程分别称为编码和解码的过程。
  • 编码器输出编码文本(encoder_out),为decode开始标志位( frame)。在编码器中,所有的字符将embedding成为一个词向量再进行编码。由于解码器(decoder)是一个自回归的过程,对于第一个decoder单元,则使用一个初始化的全零向量()作为解码过程的起始状态。

  • 但是LSTM网络在长序列下,序列尾难以关注到序列头部的信息,这无疑局限了机器翻译的性能。为了在翻译过程中,将注意力面向全局,有了注意力机制与序列到序列的结合

2. 注意力机制Attention

(1)why attention?

在Attention诞生之前,已经有CNN和RNN及其变体模型了,那为什么还要引入attention机制?主要有两个方面的原因,如下:

  • 计算能力的限制:当要记住很多“信息“,模型就要变得更复杂,然而目前计算能力依然是限制神经网络发展的瓶颈。
  • 优化算法的限制:虽然局部连接、权重共享以及pooling等优化操作可以让神经网络变得简单一些,有效缓解模型复杂度和表达能力之间的矛盾;但是,如循环神经网络中的长距离依赖问题,且信息“记忆”能力并不高。

(2)什么是注意力机制?

当我们读一句话时,大脑会首先记住重要的词汇,这样就可以把注意力机制应用到自然语言处理任务中,于是人们就通过借助人脑处理信息过载的方式,提出了Attention机制。

从本质上理解,Attention就是从大量信息中有筛选出少量重要信息,并聚焦到这些重要信息上,忽略大多不重要的信息。权重越大越聚焦于其对应的Value值上,即权重代表了信息的重要性,而Value是其对应的信息。

(3)典型的—自注意力机制self-attention

自注意力机制是注意力机制的变体,其减少了对外部信息的依赖,更擅长捕捉数据或特征的内部相关性。
为什么自注意力模型(self-Attention model)在长距离序列中如此强大?卷积或循环神经网络难道不能处理长距离序列吗?
答:当使用神经网络来处理一个变长的向量序列时,我们通常可以使用卷积网络CNN或循环网络RNN进行编码来得到一个相同长度的输出向量序列,无论CNN还是RNN其实都是对变长序列的一种“局部编码”:CNN显然是基于N-gram的局部编码;而对于RNN,由于梯度消失等问题也只能建立短距离依赖。要解决这种短距离依赖的“局部编码”问题,建立输入序列之间的长距离依赖关系,可以使用以下两种方法:一 种方法是增加网络的层数,通过一个深层网络来获取远距离的信息交互,另一种方法是使用全连接网络。全连接网络虽然是一种非常直接的建模远距离依赖的模型, 但是无法处理变长的输入序列。不同的输入长度,其连接权重的大小也是不同的。
这时用注意力机制来“动态”地生成不同连接的权重,这就是自注意力模型(self-attention model)。由于自注意力模型的权重是动态生成的,因此可以处理变长的信息序列。

下面看一个例子:
下列句子是我们想要翻译的输入句子:

The animal didn’t cross the street because it was too tired

这个“it”在这个句子是指什么呢?它指的是street还是这个animal呢?

对于我们来说能很简单的判断出来,但是对于机器来说,是很难判断的,self-attention就能够让机器把it和animal联系起来。当模型处理这个单词“it”的时候,自注意力机制会允许“it”与animal,street建立联系。以编码过程为例,随着模型处理输入序列的每个单词,自注意力会关注整个输入序列的所有单词(计算注意力得分),帮助模型对本单词更好地进行编码。

第一步就是从每个单词的词向量中生成三个向量。也就是说对于每个单词,通过网络预处理,生成词嵌入embedding,再分别与三个权重矩阵相乘,生成三个向量:一个查询向量(Query)、一个键向量(Key)和一个值(Value)向量。

一个简单比喻就是在档案柜中找文件。查询向量q就像一张便利贴,上面写着你正在研究的课题。键向量k像是档案柜中文件夹上贴的标签。当你找到和便利贴上所写相匹配的文件夹时,拿出它,文件夹里的东西便是值向量v。

将单词的查询向量分别乘以每个文件夹的键向量,得到各个文件夹对应的注意力得分(这里的乘指的是向量点乘,乘积会通过 softmax 函数处理)。
乘积的方式常见的有两种,如下所示:

注意力得分为A‘:(当然,也可以不用softmax,用relu等)

最后,将每个文件夹的值向量乘以其对应的注意力得分,然后求和,得到最终自注意力层的输出。

总结起来就是如下公式:

例如:

在当前词的Query向量与同序列其他单词的Key向量和Value向量相乘的过程中,其他词的含义会融入到注意力算出来的Z向量中。其中,Z向量可称之为注意力上下文(attention_context)。每个序列将产生等于序列字符个数的Z向量,而每个Z向量都隐含了整个序列的上下文信息。所谓的注意力机制,正是在当前词向量的生成过程中,渗透进句子的上下文信息。基于不同方式的注意力机制,计算方式不同,渗透进句子信息的侧重点也有所不同。tacotron2中使用的是位置敏感注意力机制,凸显出位置二字。

引入注意力机制的机器翻译流程图:

3. tacotron2

Tacotron2是由Google Brain 2017年提出来的一个语音合成框架。是一个完整神经网络语音合成方法。模型主要由三部分组成:

  • 声谱预测网络:一个引入注意力机制(attention)的基于循环的Seq2seq的特征预测网络,用于从输入的字符序列预测梅尔频谱的帧序列。
  • 声码器(vocoder):一个WaveNet的修订版,用预测的梅尔频谱帧序列来生成时域波形样本。
  • 中间连接层:使用低层次的声学表征-梅尔频率声谱图来衔接系统的两个部分。

    声谱预测网络主要包含一个编码器和一个包含注意力机制的解码器。编码器把字符序列转换成一个隐层表征,解码器接受这个隐层表征用以预测声谱图。

编码器Encoder:

编码器模块包含一个字符嵌入层(Character Embedding),一个3层卷积,一个双向BiLSTM层。

  • 输入字符被编码成512维的字符向量;
  • 然后穿过一个三层卷积,每层卷积包含512个5x1的卷积核,即每个卷积核横跨5个字符,卷积层会对输入的字符序列进行大跨度上下文建模(类似于N-grams),这里使用卷积层获取上下文主要是由于实践中RNN很难捕获长时依赖;卷积层后接批归一化(batch normalization),使用ReLu进行激活;
  • 最后一个卷积层的输出被传送到一个双向的LSTM层用以生成编码特征,这个LSTM包含512个单元(每个方向256个单元)。

解码器Decoder:

括号内为测试时观测到的特征维度。由于使用的声码器为LPCnet,BFCC维度为36维。以上的Q、K、V向量仅方便理解的粗略划分,请勿较真。可以将tacotron2的注意力机制类比到自注意力机制的计算方式,需要生成三个向量,用于注意力的计算。在训练过程中,Q向量包含了音频与文本的混合信息,K向量包含了累加注意力权重与当前注意力权重之和(位置敏感注意力的精髓所在),累加注意力权重过程中体现了位置信息,有助于防止语音合成过程的错漏字情况,V向量则为encoder输入的编码文本,将在decoder过程中逐步输入。

tacotron2 注意力机制 self-attention学习相关推荐

  1. 注意力机制(attention)学习记录(二)

    前面曾经记录过注意力机制的学习过程,今天则是在学习的过程中对其有了其他的理解,便将其记录下来. Attention Model 概述 深度学习里的Attention model其实模拟的是人脑的注意力 ...

  2. 关于《注意力模型--Attention注意力机制》的学习

    关于<注意力模型--Attention注意力机制>的学习 此文大部分参考深度学习中的注意力机制(2017版) 张俊林的博客,不过添加了一些个人的思考与理解过程.在github上找到一份基于 ...

  3. 深入理解深度学习——注意力机制(Attention Mechanism):带掩码的多头注意力(Masked Multi-head Attention)

    分类目录:<深入理解深度学习>总目录 相关文章: ·注意力机制(AttentionMechanism):基础知识 ·注意力机制(AttentionMechanism):注意力汇聚与Nada ...

  4. 深入理解深度学习——注意力机制(Attention Mechanism):注意力评分函数(Attention Scoring Function)

    分类目录:<深入理解深度学习>总目录 相关文章: ·注意力机制(AttentionMechanism):基础知识 ·注意力机制(AttentionMechanism):注意力汇聚与Nada ...

  5. 深入理解注意力机制(Attention Mechanism)和Seq2Seq

    学习本部分默认大家对RNN神经网络已经深入理解了,这是基础,同时理解什么是时间序列,尤其RNN的常用展开形式进行画图,这个必须理解了. 这篇文章整理有关注意力机制(Attention Mechanis ...

  6. 注意力机制(Attention Mechanism)-ECANet

    引言 神经网络中的注意力机制(Attention Mechanism)是在计算能力有限的情况下,将计算资源分配给更重要的任务,同时解决信息超载问题的一种资源分配方案.在神经网络学习中,一般而言模型的参 ...

  7. 【文献阅读笔记】之基于注意力机制的深度学习路面裂缝检测

    中文,计算机辅助设计与图形学学报,第 32 卷 第 8 期,2020 年 8 月. DOI: 10.3724/SP.J.1089.2020.18059 摘要: 为实现自动准确地检测路面裂缝, 提升路面 ...

  8. 注意力机制(Attention Mechanism)-SENet

    引言 神经网络中的注意力机制(Attention Mechanism)是在计算能力有限的情况下,将计算资源分配给更重要的任务,同时解决信息超载问题的一种资源分配方案.在神经网络学习中,一般而言模型的参 ...

  9. IJCAI 2019 | 为推荐系统生成高质量的文本解释:基于互注意力机制的多任务学习模型...

    编者按:在个性化推荐系统中,如果能在提高推荐准确性的同时生成高质量的文本解释,将更容易获得用户的"芳心".然而,现有方法通常将两者分开优化,或只优化其中一个目标.为了同时兼顾二者, ...

最新文章

  1. Dubbo架构的特点
  2. Python实战2 - 200行Python代码实现2048(控制台)
  3. BZOJ 3218 UOJ #77 A+B Problem (主席树、最小割)
  4. Boost智能指针——weak_ptr
  5. linux透明防火墙--br_netfilter
  6. Data Lake Analytics: 基于OSS文件自动推断建表
  7. java父类与子类的构造方法,java父类子类构造方法及方法的调用
  8. MNIST数据集下载
  9. 改变linux环境背景色,改变Linux 字体和背景颜色
  10. 【jzoj5289】【NOIP2017提高组A组模拟8.17】【偷笑】【数据结构】
  11. java中explain什么意思_Java架构-面试前必须知道的MySQL命令【explain】
  12. WinForm 窗体的边框
  13. 会计专业与计算机专业结合复合型,我国会计电算化的现状、问题及对策
  14. 发送给客户的文件,怕泄漏怎么办?
  15. Material Design学习之 Camera
  16. 科技不总是冷冰冰,智能便携打印机让文字更有温度!——硬件方案篇
  17. 用手机GPRS使电脑上网
  18. 知乎热议:为什么华为天才计划博士刚毕业200年薪远超科研大牛?
  19. SAPUI5是什么?Fiori告诉我们将来UI开发用哪种技术?
  20. php5.6 dbase,dBase数据库

热门文章

  1. C++ 类的设计与实现规范
  2. C++ struct 与 union
  3. canvas转盘转动?
  4. 20180209-sys模块
  5. Python序列之字符串
  6. Codevs 1506 传话
  7. (转)iOS 常用宏定义
  8. Git log diff config高级进阶
  9. 工厂模式和策略模式区别
  10. HDU1878欧拉回路