VITS

采用variational inference augmented with normalizing flows and an adversarial training process 提高了生成模型的表现力
拆解一下,使用的是变分推理,增强方法为:normalizing flowsadversarial training process

提出了一个随机持续时间预测器(stochastic duration predictor),可以从输入文本合成具有不同韵律的语音

Introduction

现阶段的TTS都由两部分组成,
一是由text到中间语音表示,比如梅尔谱图或者linguistic features
二是从中间特征生成原始波形
两个阶段的模型是独立开发的

Autoregression is a time series model that uses observations from previous time steps as input to a regression equation to predict the value at the next time step

基于神经网络的自回归(autoregression)TTS系统,由于线性生成过程,难以利用现在的多线程处理器

Method

这里点题,Variational Inference with adversarial learning for end-to-end Text-to-Speech

Variational Inference

损失包括VAE的重建损失和KL散度

重建损失用梅尔谱图计算,使用decoder上采样z,得到波形 $\hat y$ ,然后转换成梅尔 $\hat{x}_{mel}$
在实际训练中,不会对整个z上采样,而是使用部分序列,提高训练效率

KL散度是文本条件生成的z和频谱生成的z两个分布之间计算的,在论文里分别是

第一项是Posterior Encoder生成的分布,第二项是Text部分生成的分布
注意,KL散度的文本部分是在乘注意力矩阵A之后计算的

作者发现提高左边这个分布的表达能力对生成真实样本很重要,于是采用一个正则化flow模型(一个分布映射思想的生成模型)通过可逆变换,将一个简单分布映射到复杂分布
上图左边是由原数据得到的后验分布,右边是由对应文本得到的先验分布
flow是将后验分布变换到先验分布(分布映射

Alignment Estimation

Monotonic alignment search
这东西的优化目标是flow输出的最大似然

这可以简化为寻找最大化潜在变量z的对数似然的对齐

Duration prediction from text
计算每个词的帧长可以通过对矩阵A的每列求和得到,但是无法表达一个人每次发出一个词的不同语速
所以引入了随机时常预测器,这是一个基于flow模型的生成网络,用极大似然估计训练。
但是由于每个音素的输入都是一个离散的整数,而且是标量,需要被解量化
引入变分解量化和变分数据增强,做法如下
定义两个随机变量 $u,v$ ,他们和时间序列 $d$ 有相同的时间分辨率和维度,分别用于变分解量化和变分数据增强
限制 $u$ 的范围为 $u\in [0,1)$ ,故序列 $d-u$ 就是正实数
将 $v,d$ 在通道层连接得到一个高维的隐变量
这两个变量是从一个近似后验分布 $q_\phi (u,v|d,c_{text})$ 中采样的(这是什么东西
从公式可以判断,这两个变量不是完全随机,是和 $d,c_{text}$ 有关系的

Adversarial Training

应用了两种在语音合成中成功应用的损失:对抗训练的最小二乘损失,训练生成器的额外的特征匹配损失

对抗训练的判别器为$D$,生成器为$G$,音频原波形 $y$
$T$ 表示判别器总的层数,$D^l$ 输出判别器 $l-th$ 层的特征图
这个第三个feature matching loss可以被视作在隐含层的重建损失