wikiAudio02|Tacotron:文本到声学特征的端到端建模02|注意力对齐与多帧自回归解码
11 分钟
0 次观看

02|注意力对齐与多帧自回归解码

返回 Tacotron 总览 · 前一篇:声学表示与 CBHG · 下一篇:联合训练与波形重建

编码器输出一排文本记忆。注意力解码器每一步提出一个查询,按相关程度读取整排记忆,再决定接下来一小段声音的特征。本篇把“对齐”落实为权重、向量和明确的帧索引。

1. 加性注意力的计算路径

查询文本记忆得到分数,归一化为0.1、0.2、0.7并得到上下文2.2、1.1

图 1|一次软读取:分数、权重与上下文

原版使用基于内容的 tanh 注意力。下面是这一类加性注意力的通用写法;它给每个文本位置一个分数,经 softmax 后得到加权上下文。

es,i=v⊤tanh⁡(Wqqs+Whhi+b),αs,i=exp⁡(es,i)∑j=1Nexp⁡(es,j),cs=∑i=1Nαs,ihi.\begin{aligned} e_{s,i}&=v^\top\tanh(W_q q_s+W_h h_i+b),\\[4pt] \alpha_{s,i}&=\frac{\exp(e_{s,i})}{\sum_{j=1}^{N}\exp(e_{s,j})},\\[4pt] c_s&=\sum_{i=1}^{N}\alpha_{s,i}h_i. \end{aligned}
注意力:全部符号与形状
符号含义、形状与约定
ss声学解码步索引;每一步可输出多帧。
ii当前文本位置,从 1 到 NN。
jjsoftmax 分母遍历全部有效文本位置时使用的求和索引。
NN当前句子的有效文本长度。
hih_i第 ii 个文本记忆,形状 [Dh][D_h];原版编码器输出维度 Dh=256D_h=256。
qsq_sattention RNN 当前查询,形状 [Dq][D_q];原版为 256 维。
DhD_h文本记忆维数。
DqD_q查询维数。
DaD_a注意力内部投影维数;是实现超参数。
WqW_q查询投影矩阵,形状 [Da,Dq][D_a,D_q]。
WhW_h文本记忆投影矩阵,形状 [Da,Dh][D_a,D_h]。
bb广播到每个位置的偏置,形状 [Da][D_a]。
tanh⁡\tanh逐元素双曲正切非线性。
vv将匹配特征转为标量的可学习向量,形状 [Da][D_a]。
⊤\top转置,使 vopv^ op 与特征向量做内积。
es,ie_{s,i}未归一化的标量分数,没有物理单位。
exp⁡\exp指数函数,将有限分数变为正数。
αs,i\alpha_{s,i}当前步对位置 ii 的权重,非负,沿有效文本位置之和为 1。
∑\sum按下标范围求和;归一化与聚合都沿文本轴进行。
csc_s上下文向量,形状 [Dh][D_h],是本步读取到的文本信息。

这三个阶段的职责不同:打分函数比较查询和记忆;softmax 约束相对权重;加权和把可变长度的文本压成固定维度的当前上下文。softmax 不是在 mel 频率通道上计算。

2. 数值例与 padding 掩码

为突出归一化,假设打分层已经输出 [log⁡1,log⁡2,log⁡7][\log1,\log2,\log7],三个记忆分别为 [1,0][1,0]、[0,2][0,2]、[3,1][3,1]。这组分数是便于手算的教学输入,不是训练得到的参数。

位置分数取指数权重加权后的记忆
111/(1+2+7)=0.11/(1+2+7)=0.10.1[1,0]=[0.1,0]0.1[1,0]=[0.1,0]
222/10=0.22/10=0.20.2[0,2]=[0,0.4]0.2[0,2]=[0,0.4]
377/10=0.77/10=0.70.7[3,1]=[2.1,0.7]0.7[3,1]=[2.1,0.7]
求和101cs=[2.2,1.1]c_s=[2.2,1.1]

上下文是连续的加权混合,网络不需要先做不可微的“选中第几个字”。

如果批内句子长度不同,补齐位置不是有效字符。将这些位置的分数置为负无穷后再 softmax,权重变成 0。仅把补齐向量设为零不够:它的分数仍可能占走概率质量。至少保留一个有效位置,否则全是负无穷会使归一化无效。

# energy: [B,N]; valid: [B,N] bool; memory: [B,N,Dh]
energy = energy.masked_fill(~valid, -float('inf'))
weights = energy.softmax(dim=-1)
context = torch.bmm(weights[:, None, :], memory).squeeze(1)

bmm 的两项分别是 [B,1,N][B,1,N] 和 [B,N,Dh][B,N,D_h],结果为 [B,1,Dh][B,1,D_h];移除中间的长度 1 轴,得到每条句子的上下文。完整代码中的掩码测试固定有效记忆,只大幅改动补齐位置,检查输出不变。

3. 注意力 RNN 与声学解码器

不能把注意力理解为一次静态文本池化:查询随解码状态变化。上一帧进入 decoder pre-net,再更新 attention RNN;上下文与 attention RNN 输出拼接,交给声学 decoder RNN,最后线性投影成一组 mel 帧。原论文 §3.3

模块本步读取本步产物跨步状态
Decoder pre-net上一步最后一帧或 GO低维非线性特征无递归状态
Attention RNNpre-net 特征、上一查询状态当前查询attention GRU 隐状态
Attention查询、整句文本记忆权重与 context原版内容注意力没有显式时长表
Decoder RNN查询与 context 拼接声学隐藏表示两层 GRU 隐状态
输出投影声学隐藏表示rr 个不同 mel 帧无递归状态

减少解码步数不等于减少频谱帧数,也不等于把同一帧复制 r 次。

原论文配置每步投影到 2×80=1602\times80=160 个值,再重排为两个 80 维帧。两个帧有独立输出坐标,但共享当前解码步的注意力上下文。这样可以让对齐更早向前推进;代价是步内没有再次计算注意力,过大的分组会降低对齐更新的细粒度。

4. Reduction factor 与反馈索引

r等于2时训练反馈真实第1第3帧、推理反馈每组最后一帧;每步输出两个帧

图 2|相同权重下,训练与推理的历史来源不同

本节用从 0 开始的帧索引与解码步索引。设真实序列包含 6 帧,每帧 80 个通道,r=2r=2:

解码步 ss训练输入推理输入当前预测与目标帧
0全零 GO 帧全零 GO 帧0、1
1真实帧 1预测帧 12、3
2真实帧 3预测帧 34、5

一般关系如下:

S=⌈T/r⌉,Y^s∈Rr×M,us={0,s=0,ysr−1,s>0 (训练),y^sr−1,s>0 (推理).\begin{gathered} S=\lceil T/r\rceil,\qquad\widehat{Y}_s\in\mathbb{R}^{r\times M},\\[4pt] u_s=\begin{cases}\mathbf{0},&s=0,\\y_{sr-1},&s>0\ \text{(训练)},\\\widehat y_{sr-1},&s>0\ \text{(推理)}.\end{cases} \end{gathered}
多帧输出:长度与反馈约定
符号含义、形状与约定
TT目标声学帧数,例 6;不等于波形采样点数。
rr每步输出帧数,例 2。
SS解码步数,例 3;训练需将最后不足一组的目标补齐。
⌈⋅⌉\lceil\cdot\rceil向上取整,例如 5 帧、每组 2 帧需要 3 步。
ss从 0 开始的解码步,范围 0,…,S−10,\ldots,S-1。
MM每帧 mel 通道数,原版 80;教学程序缩为 8。
Y^s\widehat{Y}_s本步预测块,形状 [r,M][r,M];覆盖帧 srsr 到 sr+r−1sr+r-1。
R\mathbb{R}实数集合,表示连续输出而非离散字符类别。
usu_s本步送入 pre-net 的一帧,形状 [M][M]。
0\mathbf{0}全零 GO 向量,提供第一步的起始输入。
yny_n真实第 nn 帧,形状 [M][M];这里 n=sr−1n=sr-1 是上一组最后一帧。
y^n\widehat y_n预测第 nn 帧;帽子表示模型预测。

例:T=5,r=2T=5,r=2,先将目标补为 6 帧;第三步仍读取真实帧 3,输出第 4 帧和一个补齐帧。究竟让补齐帧参与多少损失属于训练设计,不能在不同实现中默认相同。

Teacher forcing 提供真实历史,但 RNN 仍有跨步递归依赖;它不自动让所有解码步并行。

训练时历史干净,推理时历史含自身误差,这种输入分布差异会积累。原版用 pre-net 的 dropout 等设计改善泛化,并未采用 scheduled sampling;将“随机喂预测帧”写成原版默认训练法是不准确的。

5. 对齐矩阵的可视化判读

人为构造的连续推进、停滞、跨越三种注意力热力图

图 3|对齐诊断示意,非训练测量

横轴是解码步,纵轴是文本位置,颜色越深表示权重越高。不要把本文坐标方向与其他论文图默认视作一致;有的实现会把两个轴转置。

模式可能听到的问题下一项核查
连续向前、局部有宽度通常符合逐段朗读仍需检查发音和停顿,斜线不是音质保证
长时间停在同一位置重复音或拖长反馈索引、推理历史偏移、长句训练覆盖
大范围突然跨越漏字、跳词文本清洗、注意力稳定性、分组过大
大面积分散发音模糊、对齐未形成padding、长度、学习率与配对数据

原版内容注意力没有严格单调约束,所以正确的软对齐需要从数据中学得;后续专门的对齐与时长建模正是在解决这一脆弱环节。

正在连接 GitHub 评论…