1 基于 Attention 的模型
Attention机制最先应用于机器翻译中,并在机器翻译中取得了最好的效果。其主要思想就是通过编码器(Encoder)将原序列转换成一个固定长度的隐层表示,然后解码器(Decoder)再根据这个隐层表示生成解码序列,生成解码序列过程中考虑当前解码输出与隐层表示中哪一部分最相关,这部分就是注意力机制。
在这个模型结构中,每一个条件概率输出定义为:
其中表示第i时刻解码输出标记,X表示Encoder输入,表示上一时刻解码输出,表示i时刻的隐层状态,表示上下文向量。其中计算公式为
上下文向量 是Encoder输出隐变量 的加权和。
其中即注意力权重。其计算过程如下:
其中
上式中的表示注意力机制的打分结果,实际上相当于一个相关性计算,具体的分数计算有多种方式,其反映了上一时刻隐层状态与向量表示之间的相关性。基本的Attention结构就是这样,接下来分析最近几年在这个结构基础上面的发展。
2 不同的 Attention 机制
Encoder-Decoder结构能够获得飞速发展的一个重要原因就是采用了Attention机制。探索不同的attention机制也是一个重要的研究方向。
2.1 不同的打分机制
Attention的核心思想就是计算当前要解码序列需要的输入信息与上下文信息之间的相关性。相关性的计算就是:
其计算方式有多种:
(1)计算余弦距离
LAS模型就是采用了这种方式,由于隐层状态 和上下文向量并不在同一个特种空间中,要计算余弦距离,首先应该将他们转换到同一个空间中,因此文章中首先将他们各自输入到一个前馈网络中,计算网络输出的余弦距离,即实现了相关性计算。不同于其他模型,LAS中使用的是状态。
其中(·)即表示特征变换网络,其实就是前馈网络结构。
(2)直接进行计算
这种方式没有考虑两个向量位于不同的特征空间,直接计算打分结果。常见的有以下几种方式:
(3)打分过程中考虑上一时刻注意力权重
那么打分过程变成具体计算公式如下:
其中表示卷积操作。都是被学习的参数矩阵。
2.2 Hard-Attention
Hard-Attention是在Image Caption Generation任务中提出的。常见的注意力机制是经过softmax层输出之后有不同的权重。α是一个向量,里面元素都是范围在[0,1]之间的小数,和为1。而采用Hard-Attention之后,注意力向量α中的元素只有一个是1,其余的都是0,也就是在每一个时间步,模型只关注一个位置。向量α是One-hot形式。
其中表示在第时刻的attention是否关注位置。
2.3 Soft-Attention
常见的注意力机制都是Soft-Attention。即注意力向量α中的不同位置的权重值不同,这样的soft attention是光滑的且是可微的。"Show, Attend and Tell: Neural Image CaptionGeneration with
Visual Attention" 中还对注意力机制进行了微调。
其中,用来调节上下文向量在LSTM中的比重。
在上面所讲的注意力权重α u,t 都是标量权重,这意味着向量h u 中的每个元素都给了相同的权重。"Advancing Connectionist TemporalClassification With Attention Modeling"中考虑为了使得hu 中的元素更加具有区分性,可以考虑把权重换成矢量。
那么:
2.4 Global-Attention
global attention就是在Decoder计算注意力权重的每一时刻都考虑全部的上下文信息,赋予不同位置的上下文信息不同的权重,并加权求和。其计算方式就是与通常的计算方式一致。
2.5 Local-Attention
Global方式关注全局上下文信息,一方面这样有很大的计算量,另一方面在像语音识别这样的任务中,由于两种序列时序一致,注意力主要集中的位置是在时序对应的位置,其他位置的不需要特别关注。并且采用local-attention有助于推进Sequence-to-Sequence这里的上下文向量的计算每次都只focus窗口内的个source hidden states。是经验选择的,文章中使用的是10。
这个方法像hard-attention,但是local-attention是可微的,因此更加容易训练。有人提出了local-m(local monotonic alignment)和local-p(local predictive alignment)两种local attention计算方式。 是source position index,可以理解为attention关注的焦点.在local-m中
在local-p中,
其中 和 都是模型的参数,是source sentence的长度,那么。则权重计算如下:
我们很容易看出,距离中心越远,其位置上的source hidden state对应的权重则被压缩的越厉害。
2.6 Multi-Head Attention
Multi-Head Attention(MHA)最初出现在Google的工作中。MHA在传统注意力机制的基础上扩展了多个head,每个head能够生成不同的注意力分布。这个允许每个head在focus编码器输出的时候,可以扮演不同的角色。这种方式能够帮助解码器更容易的从编码输出中检索出所需要的信息。传统的single-head attention更加依赖于编码器提供清晰的隐层表示以使得Decoder能够挑选出重要的信息。文章观察到MHA趋向于分配一个head去关注语句的开头,语句的开头往往包含大部分的背景噪声。因此可以猜测,在编码器输出不理想的情况下,MHA结构能够从噪声中区分语音信息。为了确保MHA在训练过程中确定能够关注到不同的位置,有文章研究在损失函数中增加正则项,以确保多个MHA之间存在差异。
3. CTC 与 Attention 混合结构
纯Attention方法虽然取得了不错的效果,但是在训练过程中存在着明显的收敛速度慢,震荡幅度大等问题。这很大程度上在于一开始Attention注意范围太广,难以收敛。因此有文章提出使用CTC辅助attention模型的训练,实验表明这种方法能够极大的提高模型的收敛速度。模型结构如图所示。模型成功的关键在于在损失函数中引入CTC Loss。
也可以理解为CTC帮助模型的Encoder获得了更加清晰的隐层表示。实验表明没有CTC辅助训练的结构在迭代9个epoch后仍然没有收敛,但是在CTC辅助训练的情况下,模型在5个epoch的时候已经收敛了。
Attention结构在采用大的建模单元时候往往能够获得很好的性能,但是建模单元越大,OOV问题也就越严峻,可以采用CTC与Attention共同解码来实现。模型中CTC部分使用Charcter-Level的建模单元,Attention部分使用Word-Level的建模单元。两种模型结构公用一个Encoder部分。模型结构如图所示。
其实现的关键在于采用了混合Loss:
在解码阶段,如果对应于Attention的Decoder中非OOV的词汇,则使用对应的输出。如果最大概率的输出是OOV标记,则使用CTC中的结果进行代替。为了实现混合解码,CTC部分除了增加blank,还应该增加一个词边界标记wb。解码过程如图所示。
4. Transformer(Self-Attention)
5. Attention 模型的训练技巧
目前至少证明有以下几个技巧对于训练基于Attention的模型有帮助。
(1)采用大的建模单元,sub-word,word等,这样的建模单元更加稳定并且有助于语言建模。
(2)引入Scheduled Sampling,解决Attention模型中训练和推理过程的不匹配问题。
(3)Multi-Head Attention,MHA方法能够生成不同的注意力分布,在Decoder解码过程中,关注上下文向量的不同方面。
(4)采用Label smoothing方法来避免模型对于自己的预测结果过于自信。
结果:
(5)整合额外的语言模型(在更大的文本语料上训练的),因为Attention模型的受限于语料规模,没有语言模型的结构还是不能与常见的模型相匹敌。
(6)使用最小化词错误率的方式进行区分性训练。
(7)模型除了训练和推理过程中的不匹配问题,还存在损失函数之间的不匹配。
训练时通常使用CER,而在评价阶段使用WER等,中引入强化学习中的Policy Gradient方法,直接优化WER,来进行端到端的训练。