1、前言
呃。。。好多天没更新了,最近 黑神话悟空 相当火啊,看上瘾了。本篇内容,我们来讲一下VITS。
视频:语言合成 & 变声器 ——VITS原理解析①_哔哩哔哩_bilibili
2、VITS
训练图
预测图:
2.1、条件VAE的优化目标
对于VITS,其实可以看做是一个条件VAE,所以我们直接开始求极大似然(x是音频,c是对应条件,如文本等等)
log
P
(
x
∣
c
)
=
log
P
(
x
,
z
∣
c
)
P
(
z
∣
x
,
c
)
\begin{aligned}\log P(x|c)&=\log \frac{P(x,z|c)}{P(z|x,c)}\end{aligned}
logP(x∣c)=logP(z∣x,c)P(x,z∣c)
等式左右都对
q
(
z
∣
x
)
q(z|x)
q(z∣x)积分
左边:
∫
z
q
(
z
∣
x
)
log
P
(
x
∣
c
)
d
z
=
log
P
(
x
∣
c
)
∫
z
q
(
z
∣
x
)
d
z
=
log
P
(
x
∣
c
)
右边:
∫
z
q
(
z
∣
x
)
log
P
(
x
,
z
∣
c
)
P
(
z
∣
x
,
c
)
d
z
\begin{aligned}左边:&\int_z q(z|x)\log P(x|c)dz =\log P(x|c)\int_z q(z|x)dz =\log P(x|c)\\右边:&\int_z q(z|x)\log \frac{P(x,z|c)}{P(z|x,c)}dz\end{aligned}
左边:右边:∫zq(z∣x)logP(x∣c)dz=logP(x∣c)∫zq(z∣x)dz=logP(x∣c)∫zq(z∣x)logP(z∣x,c)P(x,z∣c)dz
等式左右仍然相等
log
P
(
x
∣
c
)
=
∫
z
q
(
z
∣
x
)
log
P
(
x
,
z
∣
c
)
P
(
z
∣
x
,
c
)
d
z
=
∫
z
q
(
z
∣
x
)
log
P
(
x
,
z
∣
c
)
/
q
(
z
∣
x
)
P
(
z
∣
x
,
c
)
/
q
(
z
∣
x
)
d
z
=
∫
z
q
(
z
∣
x
)
(
log
P
(
x
,
z
∣
c
)
q
(
z
∣
x
)
−
log
P
(
z
∣
x
,
c
)
q
(
z
∣
x
)
)
d
z
=
∫
z
q
(
z
∣
x
)
log
P
(
x
,
z
∣
c
)
q
(
z
∣
x
)
d
z
−
∫
z
q
(
z
∣
x
)
log
P
(
z
∣
x
,
c
)
q
(
z
∣
x
)
d
z
=
∫
z
q
(
z
∣
x
)
log
P
(
x
,
z
∣
c
)
q
(
z
∣
x
)
d
z
+
K
L
(
q
(
z
∣
x
)
∥
P
(
z
∣
x
,
c
)
)
\begin{aligned}\log P(x|c) = &\int_z q(z|x)\log \frac{P(x,z|c)}{P(z|x,c)}dz\\=&\int_z q(z|x)\log \frac{P(x,z|c)/q(z|x)}{P(z|x,c)/q(z|x)}dz\\=&\int_z q(z|x) \left(\log \frac{P(x,z|c)}{q(z|x)}-\log \frac{P(z|x,c)}{q(z|x)}\right)dz\\=&\int_z q(z|x)\log \frac{P(x,z|c)}{q(z|x)}dz-\int_z q(z|x) \log\frac{P(z|x,c)}{q(z|x)}dz\\=&\int_z q(z|x)\log \frac{P(x,z|c)}{q(z|x)}dz+KL(q(z|x)\Vert P(z|x,c))\end{aligned}
logP(x∣c)=====∫zq(z∣x)logP(z∣x,c)P(x,z∣c)dz∫zq(z∣x)logP(z∣x,c)/q(z∣x)P(x,z∣c)/q(z∣x)dz∫zq(z∣x)(logq(z∣x)P(x,z∣c)−logq(z∣x)P(z∣x,c))dz∫zq(z∣x)logq(z∣x)P(x,z∣c)dz−∫zq(z∣x)logq(z∣x)P(z∣x,c)dz∫zq(z∣x)logq(z∣x)P(x,z∣c)dz+KL(q(z∣x)∥P(z∣x,c))
注意到第二项的P(z|x,c)无法求解,故而关于参数
ϕ
\phi
ϕ最小化第二项(让q(z|x)逼近
P
(
z
∣
x
,
c
)
P(z|x,c)
P(z∣x,c))。由于给定x,c,和参数
θ
\theta
θ的情况下,
log
P
(
x
∣
c
)
\log P(x|c)
logP(x∣c)是确定的。所以最小化第二项就相当于最大化第一项,不懂请看VAE变分自编码器原理解析
所以,我们有
log
P
(
x
∣
c
)
≥
∫
z
q
(
z
∣
x
)
log
P
(
x
,
z
∣
c
)
q
(
z
∣
x
)
d
z
=
∫
z
q
(
z
∣
x
)
log
P
(
x
∣
z
,
c
)
P
(
z
∣
c
)
q
(
z
∣
x
)
d
z
=
∫
z
q
(
z
∣
x
)
(
log
P
(
x
∣
z
,
c
)
+
log
P
(
z
∣
c
)
q
(
z
∣
x
)
)
d
z
=
∫
z
q
(
z
∣
x
)
log
P
(
x
∣
z
,
c
)
d
z
+
∫
z
q
(
z
∣
x
)
log
P
(
z
∣
c
)
q
(
z
∣
x
)
d
z
=
E
z
∼
q
(
z
∣
x
)
[
log
P
(
x
∣
z
,
c
)
]
−
K
L
(
q
(
z
∣
x
)
∥
P
(
z
∣
c
)
)
\begin{aligned}\log P(x|c) \ge& \int_z q(z|x)\log \frac{P(x,z|c)}{q(z|x)}dz\\=&\int_z q(z|x)\log\frac{P(x|z,c)P(z|c)}{q(z|x)}dz\\=&\int_z q(z|x)\left(\log P(x|z,c)+\log \frac{P(z|c)}{q(z|x)}\right)dz\\=&\int_z q(z|x)\log P(x|z,c)dz+\int_zq(z|x)\log \frac{P(z|c)}{q(z|x)}dz\\=&\mathbb{E}_{z\sim q(z|x)}\left[\log P(x|z,c)\right]-KL(q(z|x)\Vert P(z|c))\end{aligned}
logP(x∣c)≥====∫zq(z∣x)logq(z∣x)P(x,z∣c)dz∫zq(z∣x)logq(z∣x)P(x∣z,c)P(z∣c)dz∫zq(z∣x)(logP(x∣z,c)+logq(z∣x)P(z∣c))dz∫zq(z∣x)logP(x∣z,c)dz+∫zq(z∣x)logq(z∣x)P(z∣c)dzEz∼q(z∣x)[logP(x∣z,c)]−KL(q(z∣x)∥P(z∣c))
假设在给定z的情况下,c与x相互独立,则,我们有
max
(
log
P
(
x
∣
c
)
)
≥
max
(
E
z
∼
q
(
z
∣
x
)
[
log
P
(
x
∣
z
)
]
⏟
①
−
K
L
(
q
(
z
∣
x
)
∥
P
(
z
∣
c
)
)
⏟
②
)
\max\left(\log P(x|c)\right)\ge\max\left(\underbrace{\mathbb{E}_{z\sim q(z|x)}\left[\log P(x|z)\right]}_{①}-\underbrace{KL(q(z|x)\Vert P(z|c))}_{②}\right)
max(logP(x∣c))≥max(①
Ez∼q(z∣x)[logP(x∣z)]−②
KL(q(z∣x)∥P(z∣c)))
2.2、优化目标①
对于第一项,很显然就是重构项,所以,有
L
r
e
c
o
n
=
∥
x
m
e
l
−
x
^
m
e
l
∥
1
(1)
L_{recon}=\Vert x_{mel}-\hat x_{mel}\Vert_1\tag{1}
Lrecon=∥xmel−x^mel∥1(1)
其中,
x
m
e
l
x_{mel}
xmel表示的是原始波形的梅尔谱。
为什么是L1损失呢?其实作者是假设 P ( x ∣ z ) P(x|z) P(x∣z)是拉普拉斯分布,我们来详细推导一下
拉普拉斯分布的概率密度函数为
f
(
x
)
=
1
2
λ
exp
{
−
∣
x
−
μ
∣
λ
}
f(x)=\frac{1}{2\lambda}\exp\{-\frac{|x-\mu|}{\lambda}\}
f(x)=2λ1exp{−λ∣x−μ∣}
其中参数为
μ
、
λ
\mu、\lambda
μ、λ。为了简单起见,我们只学习它的
μ
\mu
μ(它是分布的中心位置),而将
λ
\lambda
λ视为常数。
接下来,利用蒙特卡洛近似,去近似重构项
E
z
∼
q
(
z
∣
x
)
[
log
P
(
x
∣
z
)
]
≈
1
N
∑
i
=
1
N
log
P
(
x
∣
z
i
)
\mathbb{E}_{z\sim q(z|x)}\left[\log P(x|z)\right]\approx\frac{1}{N}\sum\limits_{i=1}^N\log P(x|z^{i})
Ez∼q(z∣x)[logP(x∣z)]≈N1i=1∑NlogP(x∣zi)
其中,
z
i
z^{i}
zi采样自
q
(
z
∣
x
)
q(z|x)
q(z∣x),
q
(
z
∣
x
)
q(z|x)
q(z∣x)被假设为高斯分布,它的期望和方差使用神经网络去逼近。我们假设
P
(
x
∣
z
)
P(x|z)
P(x∣z)服从拉普拉斯分布,参数为
μ
θ
(
z
)
,
λ
\mu_{\theta}(z),\lambda
μθ(z),λ
log
P
(
x
∣
z
i
)
=
log
{
1
2
λ
exp
{
−
∣
x
−
μ
θ
(
z
)
∣
λ
}
}
=
log
1
2
λ
−
∣
x
−
μ
θ
(
z
)
∣
λ
∝
−
∣
x
−
μ
θ
(
z
)
∣
\begin{aligned}\log P(x|z^i)=&\log\left\{\frac{1}{2\lambda}\exp\{-\frac{|x-\mu_{\theta}(z)|}{\lambda}\}\right\}\\=&\log \frac{1}{2\lambda}-\frac{|x-\mu_{\theta}(z)|}{\lambda}\\\propto&-|x-\mu_{\theta}(z)|\end{aligned}
logP(x∣zi)==∝log{2λ1exp{−λ∣x−μθ(z)∣}}log2λ1−λ∣x−μθ(z)∣−∣x−μθ(z)∣
其中,
μ
θ
\mu_{\theta}
μθ就是神经网络的输出,可看作是Eq.(1)的
x
^
\hat x
x^
由于我们是最大化第一项,把前面的负号去掉,就变成了最小化,故而得到Eq.(1)那个重构损失
Ps:重构的时候只随机选择其中一部分去重构,并且重构是建立在梅尔谱的基础上的
2.3、优化目标②
第二项是KL散度,即
max
−
K
L
(
q
(
z
∣
x
)
∣
∣
P
(
z
∣
c
)
)
=
min
K
L
(
q
(
z
∣
x
)
∣
∣
P
(
z
∣
c
)
)
\max -KL(q(z|x)||P(z|c))=\min KL(q(z|x)||P(z|c))
max−KL(q(z∣x)∣∣P(z∣c))=minKL(q(z∣x)∣∣P(z∣c))
把KL散度拆开来看一下
K
L
(
q
(
z
∣
x
)
∣
∣
P
(
z
∣
c
)
)
=
∫
z
q
(
z
∣
x
)
log
q
(
z
∣
x
)
P
(
z
∣
c
)
d
z
=
∫
z
q
(
z
∣
x
)
(
log
q
(
z
∣
x
)
−
log
P
(
z
∣
c
)
)
d
z
=
∫
z
q
(
z
∣
x
)
log
q
(
z
∣
x
)
d
z
−
∫
z
q
(
z
∣
x
)
log
P
(
z
∣
c
)
d
z
=
E
z
∼
q
(
z
∣
x
)
[
log
q
(
z
∣
x
)
]
⏟
①
−
E
z
∼
q
(
z
∣
x
)
[
log
P
(
z
∣
c
)
]
⏟
②
\begin{aligned}KL(q(z|x)||P(z|c))=&\int_zq(z|x)\log\frac{q(z|x)}{P(z|c)}dz\\=&\int_z q(z|x)\left(\log q(z|x)-\log P(z|c)\right)dz\\=&\int_z q(z|x)\log q(z|x)dz-\int_zq(z|x)\log P(z|c)dz\\=&\underbrace{\mathbb{E}_{z\sim q(z|x)}[\log q(z|x)]}_{① }-\underbrace{\mathbb{E}_{z\sim q(z|x)}[\log P(z|c)]}_{②}\end{aligned}
KL(q(z∣x)∣∣P(z∣c))====∫zq(z∣x)logP(z∣c)q(z∣x)dz∫zq(z∣x)(logq(z∣x)−logP(z∣c))dz∫zq(z∣x)logq(z∣x)dz−∫zq(z∣x)logP(z∣c)dz①
Ez∼q(z∣x)[logq(z∣x)]−②
Ez∼q(z∣x)[logP(z∣c)]
对于第①项,已知
q
(
z
∣
x
)
q(z|x)
q(z∣x)是高斯分布,假设各个维度相互独立,单个维度的期望和方差分别是
μ
ϕ
(
x
)
、
σ
ϕ
2
(
x
)
\mu_{\phi}(x)、\sigma^2_{\phi}(x)
μϕ(x)、σϕ2(x),使用神经网络去逼近,神经网络的输入是x。
E
z
∼
q
(
z
∣
x
)
[
log
q
(
z
∣
x
)
]
=
∫
z
q
(
z
∣
x
)
log
q
(
z
∣
x
)
d
z
=
∫
z
q
(
z
∣
x
)
log
1
2
π
σ
ϕ
2
(
x
)
exp
{
−
(
z
−
μ
ϕ
(
x
)
)
2
2
σ
2
(
x
)
ϕ
}
d
z
=
∫
z
q
(
z
∣
x
)
(
log
1
2
π
σ
ϕ
2
(
x
)
−
(
z
−
μ
ϕ
(
x
)
)
2
2
σ
ϕ
2
(
x
)
)
d
z
=
∫
z
q
(
z
∣
x
)
log
1
2
π
σ
ϕ
2
(
x
)
d
z
−
∫
z
q
(
z
∣
x
)
(
z
−
μ
ϕ
(
x
)
)
2
2
σ
ϕ
2
(
x
)
d
z
=
log
1
2
π
σ
ϕ
2
(
x
)
∫
z
q
(
z
∣
x
)
d
z
−
1
2
σ
ϕ
2
(
x
)
∫
z
q
(
z
∣
x
)
(
z
−
μ
ϕ
(
x
)
)
2
d
z
=
log
1
2
π
σ
ϕ
2
(
x
)
−
1
2
σ
ϕ
2
(
x
)
E
[
(
z
−
μ
ϕ
(
x
)
)
2
]
=
log
1
2
π
σ
ϕ
2
(
x
)
−
1
2
σ
ϕ
2
(
x
)
σ
ϕ
2
(
x
)
=
log
1
2
π
σ
ϕ
2
(
x
)
−
1
2
=
−
log
2
π
σ
ϕ
2
(
x
)
−
1
2
=
−
log
2
π
−
log
σ
ϕ
(
x
)
−
1
2
\begin{aligned}\mathbb{E}_{z\sim q(z|x)}[\log q(z|x)]=&\int_z q(z|x)\log q(z|x)dz\\=&\int_zq(z|x)\log\frac{1}{\sqrt{2\pi\sigma^2_{\phi}(x)}}\exp\{-\frac{(z-\mu_{\phi}(x))^2}{2\sigma^2(x)_{\phi}}\}dz\\=&\int_z q(z|x)\left(\log\frac{1}{\sqrt{2\pi\sigma^2_{\phi}(x)}}-\frac{(z-\mu_{\phi}(x))^2}{2\sigma^2_{\phi}(x)}\right)dz\\=&\int_zq(z|x)\log \frac{1}{\sqrt{2\pi\sigma^2_{\phi}(x)}}dz-\int_zq(z|x)\frac{(z-\mu_{\phi}(x))^2}{2\sigma^2_{\phi}(x)}dz\\=&\log \frac{1}{\sqrt{2\pi\sigma^2_{\phi}(x)}}\int_z q(z|x)dz-\frac{1}{2\sigma^2_{\phi}(x)}\int_zq(z|x)(z-\mu_{\phi}(x))^2dz\\=&\log\frac{1}{\sqrt{2\pi\sigma^2_{\phi}(x)}}-\frac{1}{2\sigma^2_{\phi}(x)}\mathbb{E}[(z-\mu_{\phi}(x))^2]\\=&\log\frac{1}{\sqrt{2\pi\sigma^2_{\phi}(x)}}-\frac{1}{2\sigma^2_{\phi}(x)}\sigma^2_{\phi}(x)\\=&\log\frac{1}{\sqrt{2\pi\sigma^2_{\phi}(x)}}-\frac{1}{2}\\=&-\log\sqrt{2\pi\sigma^2_{\phi}(x)}-\frac{1}{2}\\=&-\log\sqrt{2\pi}-\log\sigma_{\phi}(x)-\frac{1}{2}\end{aligned}
Ez∼q(z∣x)[logq(z∣x)]==========∫zq(z∣x)logq(z∣x)dz∫zq(z∣x)log2πσϕ2(x)1exp{−2σ2(x)ϕ(z−μϕ(x))2}dz∫zq(z∣x)
log2πσϕ2(x)1−2σϕ2(x)(z−μϕ(x))2
dz∫zq(z∣x)log2πσϕ2(x)1dz−∫zq(z∣x)2σϕ2(x)(z−μϕ(x))2dzlog2πσϕ2(x)1∫zq(z∣x)dz−2σϕ2(x)1∫zq(z∣x)(z−μϕ(x))2dzlog2πσϕ2(x)1−2σϕ2(x)1E[(z−μϕ(x))2]log2πσϕ2(x)1−2σϕ2(x)1σϕ2(x)log2πσϕ2(x)1−21−log2πσϕ2(x)−21−log2π−logσϕ(x)−21
对于第②项,
P
(
z
∣
c
)
P(z|c)
P(z∣c)我们不知道是什么分布(在以前的VAE中,我们曾假设为标准高斯分布,然而高斯分布太过简单,也许很难表达出编码后的特征。作者发现提高先验,也就是
P
(
z
∣
c
)
P(z|c)
P(z∣c)的复杂度,有助于提高样本生成的质量,因此,在此处,我们不把它假设成标准高斯分布了)
所以,此处,我们既要给 P ( z ∣ c ) P(z|c) P(z∣c)选择一个复杂的分布,又要让他是可计算的。那该怎么办呢?我们可以使用归一化流去计算
具体来说,我们可以这样,对于②,我们使用蒙特卡洛去近似它
E
z
∼
q
(
z
∣
x
)
[
log
P
(
z
∣
c
)
]
≈
1
N
∑
i
=
1
N
log
P
(
z
i
∣
c
)
\mathbb{E}_{z\sim q(z|x)}[\log P(z|c)]\approx \frac{1}{N}\sum\limits_{i=1}^N\log P(z^i|c)
Ez∼q(z∣x)[logP(z∣c)]≈N1i=1∑NlogP(zi∣c)
其中,
z
i
z^i
zi采样自
q
(
z
∣
x
)
q(z|x)
q(z∣x)
对于
P
(
z
i
∣
c
)
P(z^i|c)
P(zi∣c)的概率分布,我们暂时不知道,所以,我们可以构造一个流模型
f
θ
f_{\theta}
fθ,将它转化为一个比较简单的概率分布
P
(
z
∣
c
)
=
π
(
f
θ
(
z
)
∣
c
)
∣
det
∂
f
θ
(
z
)
∂
z
∣
P(z|c)=\pi(f_{\theta}(z)|c)\vert\det\frac{\partial f_{\theta}(z)}{\partial z}\vert
P(z∣c)=π(fθ(z)∣c)∣det∂z∂fθ(z)∣
我们假设
π
(
f
θ
(
z
)
∣
c
)
\pi(f_{\theta}(z)|c)
π(fθ(z)∣c)是一个比较简单的高斯分布,比如假设它是高斯分布(各个维度相互独立),所以
P
(
z
∣
c
)
=
N
(
f
θ
(
z
)
∣
μ
θ
(
c
)
,
σ
θ
(
c
)
)
∣
det
∂
f
θ
(
z
)
∂
z
∣
P(z|c)=N(f_{\theta}(z)|\mu_{\theta}(c),\sigma_{\theta}(c))|\det\frac{\partial f_{\theta}(z)}{\partial z}|
P(z∣c)=N(fθ(z)∣μθ(c),σθ(c))∣det∂z∂fθ(z)∣
也就是说,我们现在把
P
(
z
∣
c
)
P(z|c)
P(z∣c)通过变量替换定理,将
P
(
z
∣
c
)
P(z|c)
P(z∣c)变成了一个比较简单的概率分布乘以对应的雅克比行列式的绝对值。
那么,
log
P
(
z
∣
c
)
\log P(z|c)
logP(z∣c)就变成了(看作是各个维度相互独立,单个维度的期望和方差分别是
μ
θ
,
σ
θ
2
\mu_{\theta},\sigma^2_{\theta}
μθ,σθ2,与上面的表达有些冲突,主要是符号不够用了)
log
P
(
z
∣
c
)
=
log
N
(
f
θ
(
z
)
∣
μ
θ
(
c
)
,
σ
θ
(
c
)
)
∣
det
∂
f
θ
(
z
)
∂
z
∣
=
log
1
2
π
σ
θ
2
(
c
)
exp
{
−
(
f
θ
(
z
)
−
μ
θ
(
c
)
)
2
2
σ
θ
2
(
c
)
}
∣
det
∂
f
θ
(
z
)
∂
z
∣
=
log
1
2
π
σ
θ
2
(
c
)
−
(
f
θ
(
z
)
−
μ
θ
(
c
)
)
2
2
σ
θ
2
(
c
)
+
log
∣
det
∂
f
θ
(
z
)
∂
z
∣
=
−
log
σ
θ
(
c
)
−
log
2
π
−
(
f
θ
(
z
)
−
μ
θ
(
c
)
)
2
2
σ
θ
2
(
c
)
+
log
∣
det
∂
f
θ
(
z
)
∂
z
∣
\begin{aligned}\log P(z|c)=&\log N(f_{\theta}(z)|\mu_{\theta}(c),\sigma_{\theta}(c))|\det\frac{\partial f_{\theta}(z)}{\partial z}|\\=&\log\frac{1}{\sqrt{2\pi\sigma_{\theta}^2(c)}}\exp\{-\frac{(f_\theta(z)-\mu_{\theta}(c))^2}{2\sigma_{\theta}^2(c)}\}|\det\frac{\partial f_{\theta}(z)}{\partial z}|\\=&\log\frac{1}{\sqrt{2\pi\sigma_{\theta}^2(c)}}-\frac{(f_\theta(z)-\mu_{\theta}(c))^2}{2\sigma_{\theta}^2(c)}+\log |\det\frac{\partial f_{\theta}(z)}{\partial z}|\\=&-\log\sigma_{\theta}(c)-\log\sqrt{2\pi}-\frac{(f_\theta(z)-\mu_{\theta}(c))^2}{2\sigma_{\theta}^2(c)}+\log |\det\frac{\partial f_{\theta}(z)}{\partial z}|\end{aligned}
logP(z∣c)====logN(fθ(z)∣μθ(c),σθ(c))∣det∂z∂fθ(z)∣log2πσθ2(c)1exp{−2σθ2(c)(fθ(z)−μθ(c))2}∣det∂z∂fθ(z)∣log2πσθ2(c)1−2σθ2(c)(fθ(z)−μθ(c))2+log∣det∂z∂fθ(z)∣−logσθ(c)−log2π−2σθ2(c)(fθ(z)−μθ(c))2+log∣det∂z∂fθ(z)∣
那么,这个归一化流
f
θ
f_{\theta}
fθ是什么呢?作者其实给了两种,一种是加性耦合层,另一种,是乘加耦合层。我们讲过了加性耦合层,它的雅克比行列式等于1,
log
1
=
0
\log 1 =0
log1=0;而对于乘加耦合层,其实就是在加性耦合的基础上,再做了一个乘法,最终得到的雅克比行列式不等于1。很容易的一个东西,感兴趣的请看Neural Importance Sampling (arxiv.org)。从代码上看,作者虽然两种都提到了,但是损失函数计算的时候,却只写了加性耦合层的。所以,我们就默认使用加性耦合层了,因此我们有
log
∣
det
∂
f
θ
(
z
)
∂
z
∣
=
log
1
=
0
\log |\det\frac{\partial f_{\theta}(z)}{\partial z}|=\log 1 =0
log∣det∂z∂fθ(z)∣=log1=0
所以
log
P
(
z
∣
c
)
=
−
log
σ
θ
(
c
)
−
log
2
π
−
(
f
θ
(
z
)
−
μ
θ
(
c
)
)
2
2
σ
θ
2
(
c
)
\log P(z|c)=-\log\sigma_{\theta}(c)-\log\sqrt{2\pi}-\frac{(f_\theta(z)-\mu_{\theta}(c))^2}{2\sigma_{\theta}^2(c)}
logP(z∣c)=−logσθ(c)−log2π−2σθ2(c)(fθ(z)−μθ(c))2
回忆一下我们的目标(假设蒙特卡洛近似N=1)
K
L
(
q
(
z
∣
x
)
∣
∣
P
(
z
∣
c
)
)
=
E
z
∼
q
(
z
∣
x
)
[
log
q
(
z
∣
x
)
]
⏟
①
−
E
z
∼
q
(
z
∣
x
)
[
log
P
(
z
∣
c
)
]
⏟
②
=
−
log
2
π
−
log
σ
ϕ
(
x
)
−
1
2
−
1
N
∑
i
=
1
N
log
P
(
z
i
∣
c
)
=
−
log
2
π
−
log
σ
ϕ
(
x
)
−
1
2
−
(
−
log
σ
θ
(
c
)
−
log
2
π
−
(
f
θ
(
z
)
−
μ
θ
(
c
)
)
2
2
σ
θ
2
(
c
)
)
=
log
σ
θ
(
c
)
−
log
σ
ϕ
(
x
)
−
1
2
+
(
f
θ
(
z
)
−
μ
θ
(
c
)
)
2
2
σ
θ
2
(
c
)
\begin{aligned}KL(q(z|x)||P(z|c))=&\underbrace{\mathbb{E}_{z\sim q(z|x)}[\log q(z|x)]}_{① }-\underbrace{\mathbb{E}_{z\sim q(z|x)}[\log P(z|c)]}_{②}\\=&-\log\sqrt{2\pi}-\log\sigma_{\phi}(x)-\frac{1}{2}-\frac{1}{N}\sum\limits_{i=1}^N\log P(z^i|c)\\=&-\log\sqrt{2\pi}-\log\sigma_{\phi}(x)-\frac{1}{2}-\left(-\log\sigma_{\theta}(c)-\log\sqrt{2\pi}-\frac{(f_\theta(z)-\mu_{\theta}(c))^2}{2\sigma_{\theta}^2(c)}\right)\\=&\log\sigma_{\theta}(c)-\log\sigma_{\phi}(x)-\frac{1}{2}+\frac{(f_\theta(z)-\mu_{\theta}(c))^2}{2\sigma_{\theta}^2(c)}\end{aligned}
KL(q(z∣x)∣∣P(z∣c))====①
Ez∼q(z∣x)[logq(z∣x)]−②
Ez∼q(z∣x)[logP(z∣c)]−log2π−logσϕ(x)−21−N1i=1∑NlogP(zi∣c)−log2π−logσϕ(x)−21−(−logσθ(c)−log2π−2σθ2(c)(fθ(z)−μθ(c))2)logσθ(c)−logσϕ(x)−21+2σθ2(c)(fθ(z)−μθ(c))2
至此,我们终于得到了KL散度的优化目标,也就是
L
k
l
=
log
σ
θ
(
c
)
−
log
σ
ϕ
(
x
)
−
1
2
+
(
f
θ
(
z
)
−
μ
θ
(
c
)
)
2
2
σ
θ
2
(
c
)
(2)
L_{kl}=\log\sigma_{\theta}(c)-\log\sigma_{\phi}(x)-\frac{1}{2}+\frac{(f_\theta(z)-\mu_{\theta}(c))^2}{2\sigma_{\theta}^2(c)}\tag{2}
Lkl=logσθ(c)−logσϕ(x)−21+2σθ2(c)(fθ(z)−μθ(c))2(2)
可惜的是,里面有一个东西,我们还不知道是什么,也就是
μ
θ
(
c
)
、
σ
θ
(
c
)
\mu_{\theta}(c)、\sigma_{\theta}(c)
μθ(c)、σθ(c),接下来,我们来看一下,他们究竟是什么
2.4、条件输入
在进行归一化流转化之后,我们当时得到
P
(
z
∣
c
)
=
N
(
f
θ
(
z
)
∣
μ
θ
(
c
)
,
σ
θ
(
c
)
)
∣
det
∂
f
θ
(
z
)
∂
z
∣
(3)
P(z|c)=N(f_{\theta}(z)|\mu_{\theta}(c),\sigma_{\theta}(c))|\det\frac{\partial f_{\theta}(z)}{\partial z}|\tag{3}
P(z∣c)=N(fθ(z)∣μθ(c),σθ(c))∣det∂z∂fθ(z)∣(3)
显然,这里的
μ
θ
(
c
)
、
σ
θ
(
c
)
\mu_{\theta}(c)、\sigma_{\theta}(c)
μθ(c)、σθ(c)是由神经网络输出的,神经网络的输入是条件c。
那么,这里的条件c,是什么呢? 我们先假设它是语音所对应的文本 。于是,很显然的,我们只需要把文本送给神经网络,然后神经网络输出与 σ ϕ \sigma_{\phi} σϕ维度相同的 μ θ ( c ) 、 σ θ ( c ) \mu_{\theta}(c)、\sigma_{\theta}(c) μθ(c)、σθ(c)。
**可以吗?当然不行!**在训练的时候,你知道 σ ϕ \sigma_\phi σϕ的维度(指时间帧那一维,以下同理)。但是预测的时候,你可没有,这样的话,你就不知道 μ θ ( c ) \mu_{\theta}(c) μθ(c)应该是什么维度。所以,论文并没有这样去做
f θ ( z ) ∈ [ b a t c h _ s i z e , t a u d i o , d i m ] f_{\theta}(z)\in [batch\_size,t_{audio},dim] fθ(z)∈[batch_size,taudio,dim], μ θ ( c ) ∈ [ b a t c h _ s i z e , t t e x t , d i m ] \mu_{\theta}(c)\in [batch\_size,t_{text},dim] μθ(c)∈[batch_size,ttext,dim]
论文Glow-TTS: A Generative Flow for Text-to-Speech via Monotonic Alignment Search (arxiv.org)提到,人类的阅读文本的时候,是不会跳过任何一个单词的。作者希望,能够找到一个文本与语音之间的对齐关系(文本与语音的长度往往不一样,一个单词就对应了一大段的语音)。
也就是说, f θ ( z ) f_{\theta}(z) fθ(z)相当于是语音编码后的结果。而 μ θ ( c ) 、 σ θ ( c ) \mu_{\theta}(c)、\sigma_{\theta}(c) μθ(c)、σθ(c)则是文本编码后的结果。我们曾假设过,他们的各个维度都相互独立,那么,我们希望可以得出,文本和语音编码后的维度的对齐关系(比如语音编码后的第一个维度,对应文本编码后的第一个维度的均值跟方差)
问题是,我们该如何找出这种对应关系呢?所用到的,其实就是单调对齐搜索(MAS),我们需要找到一个对齐矩阵A,以表示他们的对应关系
到了这里,我事先声明一下,条件c其实不再是文本,而是文本+对齐矩阵A,也就是 c = [ c t e x t , A ] c = [c_{text},A ] c=[ctext,A]
这样一来
log
N
(
f
θ
(
z
)
∣
μ
θ
(
c
)
,
σ
θ
(
c
)
)
=
log
N
(
f
θ
(
z
)
∣
μ
θ
(
c
t
e
x
t
,
A
)
,
σ
θ
(
c
t
e
x
t
,
A
)
)
\log N(f_{\theta}(z)|\mu_{\theta}(c),\sigma_{\theta}(c))=\log N(f_{\theta}(z)|\mu_{\theta}(c_{text},A),\sigma_{\theta}(c_{text},A))
logN(fθ(z)∣μθ(c),σθ(c))=logN(fθ(z)∣μθ(ctext,A),σθ(ctext,A))
当燃了,此处的对齐矩阵A,并不是需要我们送进神经网络的,我们需要重新定义一下 μ θ 、 σ θ \mu_\theta、\sigma_\theta μθ、σθ的由来
首先,我们把文本 c t e x t c_{text} ctext送给神经网络,神经玩过输出 μ θ ( c t e x t ) 、 σ θ ( c t e x t ) \mu_\theta(c_{text})、\sigma_\theta(c_{text}) μθ(ctext)、σθ(ctext),然后,把神经网络的输出值,通过一个单调对齐矩阵A找到对应关系,对 μ θ ( c t e x t ) 、 σ θ ( c t e x t ) \mu_\theta(c_{text})、\sigma_\theta(c_{text}) μθ(ctext)、σθ(ctext)进行复制,就得到了 μ θ ( c t e x t , A ) 、 σ θ ( c t e x t , A ) \mu_\theta(c_{text},A)、\sigma_\theta(c_{text},A) μθ(ctext,A)、σθ(ctext,A)
2.5、单调对齐搜索
具体的,该如何构建单调对齐矩阵A呢?我们从之前的目标函数出发
min
K
L
(
q
(
z
∣
x
)
∣
∣
P
(
z
∣
c
)
)
=
min
(
E
z
∼
q
(
z
∣
x
)
[
log
q
(
z
∣
x
)
]
⏟
①
−
E
z
∼
q
(
z
∣
x
)
[
log
P
(
z
∣
c
)
]
⏟
②
)
\min KL(q(z|x)||P(z|c))=\min\left(\underbrace{\mathbb{E}_{z\sim q(z|x)}[\log q(z|x)]}_{① }-\underbrace{\mathbb{E}_{z\sim q(z|x)}[\log P(z|c)]}_{②}\right)
minKL(q(z∣x)∣∣P(z∣c))=min(①
Ez∼q(z∣x)[logq(z∣x)]−②
Ez∼q(z∣x)[logP(z∣c)])
只有第②项跟条件c有关,我们先单单看第②项
min
−
E
z
∼
q
(
z
∣
x
)
[
log
P
(
z
∣
c
)
]
=
max
E
z
∼
q
(
z
∣
x
)
[
log
P
(
z
∣
c
)
]
=
max
E
z
∼
q
(
z
∣
x
)
[
log
P
(
z
∣
A
,
c
t
e
x
t
)
]
\min -\mathbb{E}_{z\sim q(z|x)}[\log P(z|c)]=\max\mathbb{E}_{z\sim q(z|x)}[\log P(z|c)]=\max\mathbb{E}_{z\sim q(z|x)}[\log P(z|A,c_{text})]
min−Ez∼q(z∣x)[logP(z∣c)]=maxEz∼q(z∣x)[logP(z∣c)]=maxEz∼q(z∣x)[logP(z∣A,ctext)]
为了让
log
P
(
z
∣
A
,
c
t
e
x
t
)
\log P(z|A,c_{text})
logP(z∣A,ctext)最大,我们需要关于
θ
\theta
θ让它最大【这里的
θ
\theta
θ参数,可以看成是
μ
θ
(
c
t
e
x
t
,
A
)
、
σ
θ
(
c
t
e
x
t
,
A
)
\mu_\theta(c_{text},A)、\sigma_\theta(c_{text},A)
μθ(ctext,A)、σθ(ctext,A)】。又因为这里的期望跟方差的方法,依赖于神经网络输出的
μ
θ
(
c
t
e
x
t
)
、
σ
θ
(
c
t
e
x
t
)
\mu_\theta(c_{text})、\sigma_\theta(c_{text})
μθ(ctext)、σθ(ctext)和对齐矩阵A。所以,此时的参数应该是
θ
=
[
w
,
A
]
\theta=[w,A]
θ=[w,A](其中w表示神经网络的参数),也就是说,参数被转嫁到了神经网络和对齐矩阵A了。
所以
max
θ
E
z
∼
q
(
z
∣
x
)
[
log
P
(
z
∣
A
,
c
t
e
x
t
)
]
=
max
w
,
A
E
z
∼
q
(
z
∣
x
)
[
log
P
(
z
∣
A
,
c
t
e
x
t
)
]
\max_{\theta}\mathbb{E}_{z\sim q(z|x)}[\log P(z|A,c_{text})]=\max_{w,A}\mathbb{E}_{z\sim q(z|x)}[\log P(z|A,c_{text})]
θmaxEz∼q(z∣x)[logP(z∣A,ctext)]=w,AmaxEz∼q(z∣x)[logP(z∣A,ctext)]
我们把它拆成两部分,单独看单调对齐矩阵A的:
max
A
E
z
∼
q
(
z
∣
x
)
[
log
P
(
z
∣
A
,
c
t
e
x
t
)
]
\max_{A}\mathbb{E}_{z\sim q(z|x)}[\log P(z|A,c_{text})]
AmaxEz∼q(z∣x)[logP(z∣A,ctext)]
由Eq.(3)有
max
A
E
z
∼
q
(
z
∣
x
)
[
log
P
(
z
∣
A
,
c
t
e
x
t
)
]
=
max
A
log
N
(
f
θ
(
z
)
∣
μ
θ
(
c
t
e
x
t
,
A
)
,
σ
θ
(
c
t
e
x
t
,
A
)
)
∣
det
∂
f
θ
(
z
)
∂
z
∣
=
max
A
log
N
(
f
θ
(
z
)
∣
μ
θ
(
c
t
e
x
t
,
A
)
,
σ
θ
(
c
t
e
x
t
,
A
)
)
+
log
∣
det
∂
f
θ
(
z
)
∂
z
∣
\begin{aligned}\max_{A}\mathbb{E}_{z\sim q(z|x)}[\log P(z|A,c_{text})]=&\max_A \log N(f_{\theta}(z)|\mu_{\theta}(c_{text},A),\sigma_{\theta}(c_{text},A))|\det\frac{\partial f_{\theta}(z)}{\partial z}|\\=&\max_A \log N(f_{\theta}(z)|\mu_{\theta}(c_{text},A),\sigma_{\theta}(c_{text},A))+\log |\det\frac{\partial f_{\theta}(z)}{\partial z}|\end{aligned}
AmaxEz∼q(z∣x)[logP(z∣A,ctext)]==AmaxlogN(fθ(z)∣μθ(ctext,A),σθ(ctext,A))∣det∂z∂fθ(z)∣AmaxlogN(fθ(z)∣μθ(ctext,A),σθ(ctext,A))+log∣det∂z∂fθ(z)∣
又因为
log
∣
det
∂
f
θ
(
z
)
∂
z
∣
=
log
1
=
0
\log |\det\frac{\partial f_{\theta}(z)}{\partial z}| = \log 1=0
log∣det∂z∂fθ(z)∣=log1=0,所以
max
A
E
z
∼
q
(
z
∣
x
)
[
log
P
(
z
∣
A
,
c
t
e
x
t
)
]
=
max
A
log
N
(
f
θ
(
z
)
∣
μ
θ
(
c
t
e
x
t
,
A
)
,
σ
θ
(
c
t
e
x
t
,
A
)
)
\max_{A}\mathbb{E}_{z\sim q(z|x)}[\log P(z|A,c_{text})]=\max_A \log N(f_{\theta}(z)|\mu_{\theta}(c_{text},A),\sigma_{\theta}(c_{text},A))
AmaxEz∼q(z∣x)[logP(z∣A,ctext)]=AmaxlogN(fθ(z)∣μθ(ctext,A),σθ(ctext,A))
也就是,我们要找到一个单调对齐矩阵A,使得上式最大
由于这个高斯分布的各个维度相互独立,我们假设存在p维度,则
max
A
log
N
(
f
θ
(
z
)
∣
μ
θ
(
c
t
e
x
t
,
A
)
,
σ
θ
(
c
t
e
x
t
,
A
)
)
=
log
π
(
f
θ
(
z
)
∣
c
t
e
x
t
,
A
)
=
log
π
(
f
θ
1
(
z
)
,
f
θ
2
(
z
)
,
⋯
,
f
θ
p
(
z
)
∣
c
t
e
x
t
,
A
)
=
log
∏
i
=
1
p
π
(
f
θ
i
(
z
)
∣
c
t
e
x
t
,
A
)
=
∑
i
=
1
p
log
π
(
f
θ
i
(
z
)
∣
c
t
e
x
t
,
A
)
\begin{aligned}\max_A\log N(f_{\theta}(z)|\mu_\theta(c_{text},A),\sigma_\theta(c_{text},A))=&\log \pi(f_{\theta}(z)|c_{text},A)\\=&\log\pi(f_\theta^1(z),f_\theta^2(z),\cdots,f_\theta^p(z)|c_{text},A)\\=&\log\prod\limits_{i=1}^p\pi(f_\theta^i(z)|c_{text},A)\\=&\sum\limits_{i=1}^p\log\pi(f_\theta^i(z)|c_{text},A)\end{aligned}
AmaxlogN(fθ(z)∣μθ(ctext,A),σθ(ctext,A))====logπ(fθ(z)∣ctext,A)logπ(fθ1(z),fθ2(z),⋯,fθp(z)∣ctext,A)logi=1∏pπ(fθi(z)∣ctext,A)i=1∑plogπ(fθi(z)∣ctext,A)
这样的话,实际上我们只需要为每一个维度,最大化它的似然即可。可惜的是,正如我们前面说过的,对齐关系是单调的,我们并不能肆无忌惮的乱对应。因此,我们需要找出一个单调对齐矩阵。
Q
i
,
j
=
max
(
Q
i
−
1
,
j
−
1
,
Q
i
,
j
−
1
)
+
log
N
(
f
θ
j
(
z
)
∣
μ
i
,
σ
i
)
Q_{i,j}=\max(Q_{i-1,j-1},Q_{i,j-1})+\log N(f_{\theta}^j(z)|\mu_i,\sigma_i)
Qi,j=max(Qi−1,j−1,Qi,j−1)+logN(fθj(z)∣μi,σi)
该矩阵作者不使用神经网络去逼近,而是使用动态规划的方法,通过单调对齐搜索(MAS)去寻找。我们来看一下代码实现
从代码上看,我们不难看出,我们首先构造了一个Q矩阵。然后,矩阵第一列等于对应的对数似然。接着开始计算第二列…,可视化(图b)。最后使用回溯(图c):选择最后一个点,往回推,就可以得到最终的路径
2.6、随机时长预测
完成了单调对齐搜索了之后,我们便得到了一个路径矩阵path,该矩阵由0,1构成,1表示该位置被选中,0则表示不被选中。我们可以简单的通过求取path矩阵的每一行的所有列的求和。所得到的结果记为d,就可以看作是每一个字所持续的时长。
然而,如果采用这种方式,那就意味着一个人每一次生成的说话语速是一样的。我们希望每一次生成的语音语速都有所不同。因此,论文作者设计了一个随机时长预测器
给定一个文本,我们该如何去做一个随机预测呢?什么东西具有随机性?当燃是概率分布了!
我们从最大似然的角度去看问题
max
log
P
(
d
∣
c
t
e
x
t
)
(4)
\max \log P(d|c_{text})\tag{4}
maxlogP(d∣ctext)(4)
然而,直接计算d是困难的:①每个单词的时长d,它是一个离散的整数,然而在进行数值计算的时候(论文中使用归一化流),我们一般都是建立在连续的基础上。②:时长d是一个标量,归一化流必须保持维度一致,我们也无法对一个标量进行高维变换。但是一维的表达能力显然是有限的,可能无法满足我们的需求。
故而,作者采用了两种方法——变分去量化——Flow++:使用变分反量化和架构设计改进基于 Flow 的生成模型 (arxiv.org)、变分数据增强
具体来说,论文引入两个随机变量u和ν,它们与持续时间序列d具有相同的时间分辨率和维度,分别用于变分去量化和变分数据增强。
首先,我们将u的值限制为[0,1),使差值d - u成为一个正实数序列,并将ν和d-u通道级联起来,以做出更高维度的潜在表征。论文通过近似后验分布对这两个变量进行采样 q φ ( u , ν ∣ d , c t e x t ) q_φ(u,ν|d,c_{text}) qφ(u,ν∣d,ctext)
我们来通过Eq.(4)解释这一过程
定义(P是离散的数据分布,p是连续的数据分布):
P
(
d
∣
c
t
e
x
t
)
:
=
∫
[
0
,
1
)
D
p
(
d
−
u
∣
c
t
e
x
t
)
d
u
P(d|c_{text}):=\int_{[0,1)^D} p(d-u|c_{text})du
P(d∣ctext):=∫[0,1)Dp(d−u∣ctext)du
该定义的直观理解,左侧是某一个d的离散概率,而右侧是d减去0到1的连续概率求和,也就是说,单个离散概率会被拆分成右侧每一个无限小区间的求和。这可以解决数据分布本身是连续,可是采样数据却是离散的问题
实际上,在变分去量化(d - u)之后,在去量化的数据上求对数似然,就等于在原始数据d上最大化离散模型的对数似然下界,此处不做证明,参考Flow++: Improving Flow-Based Generative Models with Variational Dequantization and Architecture Design (arxiv.org)
言归正传,对数似然为:
log
P
(
d
∣
c
t
e
x
t
)
=
log
∫
[
0
,
1
)
D
p
(
d
−
u
∣
c
t
e
x
t
)
d
u
=
log
∫
[
0
,
1
)
D
∫
v
p
(
d
−
u
,
v
∣
c
t
e
x
t
)
d
v
d
u
=
log
∫
[
0
,
1
)
D
∫
v
p
(
d
−
u
,
v
∣
c
t
e
x
t
)
q
(
u
,
v
∣
d
,
c
t
e
x
t
)
q
(
u
,
v
∣
d
,
c
t
e
x
t
)
d
v
d
u
=
log
E
u
,
v
∼
q
(
u
,
v
∣
d
,
c
t
e
x
t
)
[
p
(
d
−
u
,
v
∣
c
t
e
x
t
)
q
(
u
,
v
∣
d
,
c
t
e
x
t
)
]
≥
E
u
,
v
∼
q
(
u
,
v
∣
d
,
c
t
e
x
t
)
[
log
p
(
d
−
u
,
v
∣
c
t
e
x
t
)
q
(
u
,
v
∣
d
,
c
t
e
x
t
)
]
\begin{aligned}\log P(d|c_{text})=&\log \int_{[0,1)^D}p(d-u|c_{text})du\\=&\log\int_{[0,1)^D}\int_vp(d-u,v|c_{text})dvdu\\=&\log\int_{[0,1)^D}\int_v\frac{p(d-u,v|c_{text})}{q(u,v|d,c_{text})}q(u,v|d,c_{text})dvdu\\=&\log\mathbb{E}_{u,v\sim q(u,v|d,c_{text})}\left[\frac{p(d-u,v|c_{text})}{q(u,v|d,c_{text})}\right]\\\ge&\mathbb{E}_{u,v\sim q(u,v|d,c_{text})}\left[\log\frac{p(d-u,v|c_{text})}{q(u,v|d,c_{text})}\right]\end{aligned}
logP(d∣ctext)====≥log∫[0,1)Dp(d−u∣ctext)dulog∫[0,1)D∫vp(d−u,v∣ctext)dvdulog∫[0,1)D∫vq(u,v∣d,ctext)p(d−u,v∣ctext)q(u,v∣d,ctext)dvdulogEu,v∼q(u,v∣d,ctext)[q(u,v∣d,ctext)p(d−u,v∣ctext)]Eu,v∼q(u,v∣d,ctext)[logq(u,v∣d,ctext)p(d−u,v∣ctext)]
最后一个不等号利用的是jensen不等式。所得到的结果,其实也是变分下界
由于不知道
p
(
d
−
u
,
v
∣
c
t
e
x
t
)
、
q
(
u
,
v
∣
d
,
c
t
e
x
t
)
p(d-u,v|c_{text})、q(u,v|d,c_{text})
p(d−u,v∣ctext)、q(u,v∣d,ctext)的分布,故而很难去求取期望,所以我们对他进行蒙特卡洛近似
E
u
,
v
∼
q
(
u
,
v
∣
d
,
c
t
e
x
t
)
[
log
p
(
d
−
u
,
v
∣
c
t
e
x
t
)
q
(
u
,
v
∣
d
,
c
t
e
x
t
)
]
≈
1
N
∑
i
=
1
N
log
p
(
d
−
u
i
,
v
i
∣
c
t
e
x
t
)
q
(
u
i
,
v
i
∣
d
,
c
t
e
x
t
)
\mathbb{E}_{u,v\sim q(u,v|d,c_{text})}\left[\log\frac{p(d-u,v|c_{text})}{q(u,v|d,c_{text})}\right]\approx \frac{1}{N}\sum\limits_{i=1}^N\log\frac{p(d-u^i,v^i|c_{text})}{q(u^i,v^i|d,c_{text})}
Eu,v∼q(u,v∣d,ctext)[logq(u,v∣d,ctext)p(d−u,v∣ctext)]≈N1i=1∑Nlogq(ui,vi∣d,ctext)p(d−ui,vi∣ctext)
当N=1,我们便可得到(等式右边省略上标i)
1
N
∑
i
=
1
N
log
p
(
d
−
u
i
,
v
i
∣
c
t
e
x
t
)
q
(
u
i
,
v
i
∣
d
,
c
t
e
x
t
)
=
log
p
(
d
−
u
,
v
∣
c
t
e
x
t
)
−
log
q
(
u
,
v
∣
d
,
c
t
e
x
t
)
\frac{1}{N}\sum\limits_{i=1}^N\log\frac{p(d-u^i,v^i|c_{text})}{q(u^i,v^i|d,c_{text})}=\log p(d-u,v|c_{text})-\log q(u,v|d,c_{text})
N1i=1∑Nlogq(ui,vi∣d,ctext)p(d−ui,vi∣ctext)=logp(d−u,v∣ctext)−logq(u,v∣d,ctext)
对式子右边的两项都使用归一化流(由于不知道分布,所以使用归一化流)
对第一项:
log
p
(
d
−
u
,
v
∣
c
t
e
x
t
)
=
log
N
(
f
θ
(
d
−
u
,
v
)
∣
μ
p
(
c
t
e
x
t
)
,
σ
p
(
c
t
e
x
t
)
)
∣
det
∂
f
θ
(
d
−
u
,
v
)
∂
(
d
−
u
,
v
)
∣
=
log
N
(
f
θ
(
d
−
u
,
v
)
∣
μ
p
(
c
t
e
x
t
)
,
σ
p
(
c
t
e
x
t
)
)
+
log
∣
det
∂
f
θ
(
d
−
u
,
v
)
∂
(
d
−
u
,
v
)
∣
(5)
\begin{aligned}\log p(d-u,v|c_{text})=&\log N(f_{\theta}(d-u,v)|\mu_{p}(c_{text}),\sigma_p(c_{text}))|\det\frac{\partial f_{\theta}(d-u,v)}{\partial (d-u,v)}|\\=&\log N(f_{\theta}(d-u,v)|\mu_{p}(c_{text}),\sigma_p(c_{text}))+\log|\det\frac{\partial f_{\theta}(d-u,v)}{\partial (d-u,v)}|\end{aligned}\tag{5}
logp(d−u,v∣ctext)==logN(fθ(d−u,v)∣μp(ctext),σp(ctext))∣det∂(d−u,v)∂fθ(d−u,v)∣logN(fθ(d−u,v)∣μp(ctext),σp(ctext))+log∣det∂(d−u,v)∂fθ(d−u,v)∣(5)
第二项:
设
f
θ
(
z
)
=
(
u
,
v
)
,
f
θ
−
1
(
u
,
v
)
=
z
f_{\theta}(z)=(u,v),f_{\theta}^{-1}(u,v)=z
fθ(z)=(u,v),fθ−1(u,v)=z,则
log
q
(
u
,
v
∣
d
,
c
t
e
x
t
)
=
log
N
(
f
θ
−
1
(
u
,
v
)
∣
μ
q
(
d
,
c
t
e
x
t
)
,
σ
q
(
d
,
c
t
e
x
t
)
)
∣
det
∂
f
θ
−
1
(
u
,
v
)
∂
(
u
,
v
)
∣
=
log
N
(
z
∣
μ
q
(
d
,
c
t
e
x
t
)
,
σ
q
(
d
,
c
t
e
x
t
)
)
∣
det
∂
f
θ
(
z
)
∂
z
∣
−
1
=
log
N
(
z
∣
μ
q
(
d
,
c
t
e
x
t
)
,
σ
q
(
d
,
c
t
e
x
t
)
)
−
log
∣
det
∂
f
θ
(
z
)
∂
z
∣
(6)
\begin{aligned}\log q(u,v|d,c_{text})=&\log N(f^{-1}_{\theta}(u,v)|\mu_{q}(d,c_{text}),\sigma_q(d,c_{text}))|\det\frac{\partial f^{-1}_{\theta}(u,v)}{\partial (u,v)}|\\=&\log N(z|\mu_{q}(d,c_{text}),\sigma_q(d,c_{text}))|\det\frac{\partial f_{\theta}(z)}{\partial z}|^{-1}\\=&\log N(z|\mu_{q}(d,c_{text}),\sigma_q(d,c_{text}))-\log|\det\frac{\partial f_{\theta}(z)}{\partial z}|\end{aligned}\tag{6}
logq(u,v∣d,ctext)===logN(fθ−1(u,v)∣μq(d,ctext),σq(d,ctext))∣det∂(u,v)∂fθ−1(u,v)∣logN(z∣μq(d,ctext),σq(d,ctext))∣det∂z∂fθ(z)∣−1logN(z∣μq(d,ctext),σq(d,ctext))−log∣det∂z∂fθ(z)∣(6)
对于Eq.(5)、Eq.(6),论文都假设里面的N服从标准高斯分布,所以里面的期望跟方差分别是0,1。
所以,最大化似然,到最大化下界,也就是
max
(
log
p
(
d
−
u
,
v
∣
c
t
e
x
t
)
−
log
q
(
u
,
v
∣
d
,
c
t
e
x
t
)
)
=
min
(
log
q
(
u
,
v
∣
d
,
c
t
e
x
t
)
−
log
p
(
d
−
u
,
v
∣
c
t
e
x
t
)
)
\max\left(\log p(d-u,v|c_{text})-\log q(u,v|d,c_{text})\right)=\min\left(\log q(u,v|d,c_{text})-\log p(d-u,v|c_{text})\right)
max(logp(d−u,v∣ctext)−logq(u,v∣d,ctext))=min(logq(u,v∣d,ctext)−logp(d−u,v∣ctext))
即
L
d
u
r
=
log
N
(
z
∣
0
,
1
)
−
log
∣
det
∂
f
θ
(
z
)
∂
z
∣
−
(
log
N
(
f
θ
(
d
−
u
,
v
)
∣
0
,
1
)
+
log
∣
det
∂
f
θ
(
d
−
u
,
v
)
∂
(
d
−
u
,
v
)
∣
)
(7)
L_{dur}=\log N(z|0,1)-\log|\det\frac{\partial f_{\theta}(z)}{\partial z}|-\left(\log N(f_{\theta}(d-u,v)|0,1)+\log|\det\frac{\partial f_{\theta}(d-u,v)}{\partial (d-u,v)}|\right)\tag{7}
Ldur=logN(z∣0,1)−log∣det∂z∂fθ(z)∣−(logN(fθ(d−u,v)∣0,1)+log∣det∂(d−u,v)∂fθ(d−u,v)∣)(7)
2.7、对抗训练
对抗训练一直都是一个很好的方法,在论文中,作者在里面也引用了对抗训练
论文添加了一个判别器D,主要用于区分解码器G生成的输出和真实波形y,其损失如下:
L
a
d
v
(
D
)
=
E
y
,
z
[
(
D
(
y
)
−
1
)
2
+
(
D
(
G
(
z
)
)
2
)
]
L
a
d
v
(
G
)
=
E
z
[
(
D
(
G
(
z
)
)
−
1
)
2
]
(8)
\begin{aligned}L_{adv}(D)=&\mathbb{E}_{y,z}\left[\left(D(y)-1\right)^2+\left(D(G(z))^2\right)\right]\\L_{adv}(G)=&\mathbb{E}_{z}\left[(D(G(z))-1)^2\right]\end{aligned}\tag{8}
Ladv(D)=Ladv(G)=Ey,z[(D(y)−1)2+(D(G(z))2)]Ez[(D(G(z))−1)2](8)
另外,为了提高解码器的生成能力,论文还使用了特征匹配损失
L
f
m
(
G
)
L_{fm}(G)
Lfm(G)
L
f
m
(
G
)
=
E
y
,
z
[
∑
l
=
1
T
1
N
l
∥
D
l
(
y
)
−
D
l
(
G
(
z
)
)
∥
1
]
(9)
\\L_{fm}(G)=\mathbb{E}_{y,z}\left[\sum\limits_{l=1}^T\frac{1}{N_l}\Vert D^l(y)-D^l(G(z))\Vert_1\right]\tag{9}
Lfm(G)=Ey,z[l=1∑TNl1∥Dl(y)−Dl(G(z))∥1](9)
其中T表示判别器中的总层数,
D
i
D^i
Di表示第i层的判别器输出的特征图,
N
l
N_l
Nl是第
l
l
l层的特征图维度
2.8、总损失
所以总损失为Eq.(1)、Eq.(2)、Eq.(7)、Eq.(8)、Eq(9)的求和
L
v
a
e
=
L
r
e
c
o
n
+
L
k
l
+
L
d
u
r
+
L
a
d
v
(
G
)
+
L
f
m
(
G
)
L_{vae}=L_{recon}+L_{kl}+L_{dur}+L_{adv}(G)+L_{fm}(G)
Lvae=Lrecon+Lkl+Ldur+Ladv(G)+Lfm(G)
当燃了,我们可以给每一项都乘以一个权重系数,以权衡各个损失的重要程度
3、网络结构
3.1、后验编码器 q ( z ∣ x ) q(z|x) q(z∣x)
论文使用非因果WaveNet残差块,对于多说话人,使用全局调节, 参考WaveNet那期视频
3.2、先验编码器
先验编码器主要是文本编码器( P ( z ∣ c t e x t ) P(z|c_{text}) P(z∣ctext)),和对应的归一化转化。文本编码器使用transformer的编码器,使用相对位置编码,参考transformer那期视频 。进行文本编码后,把得到的结果再通过一个线性投影层,得到隐层表示 h t e x t h_{text} htext,然后,把 h t e x t h_{text} htext拆分成均值和方差。 而此处的归一化流,为了简单作者,作者使用加性耦合层
多话说人的情况,通过全局调节,嵌入到归一化流的残差块中
3.3、解码器G
采用HiFi-GAN的生成器作为解码器,对于多说话人的情况,添加一个说话人的嵌入的线性层,然后把它添加到输入潜变量z当中, 参考HiFi-GAN那期视频
3.4、判别器D
使用HiFi-GAN中提出的多周期判别器,参考HiFi-GAN那期视频
3.5、随机时长预测器
归一化流使用神经样条流——单调有理二次样条, 参考 Neural Spline Flows (arxiv.org),里面有完整的计算方法。
归一化流的主要结构如下(DDSConv残差块)
所有输入条件都通过条件编码器进行处理,每个条件编码器由两个1x1卷积层和一个DDSConv残差块组成。
后验编码器和归一化流模块有四个神经样条流的耦合层。每个耦合层首先通过DDSConv块处理输入和输入条件,并产生29个通道参数,这些参数用于构造10个有理二次函数。我们将所有耦合层和条件编码器的隐藏维度设置为192。
对于多说话人的情况,添加一个说话人嵌入的线性层,并将其添加到输入 h t e x t h_{text} htext中
4、结束
好了,本篇文章到此为止,如有问题,还望指出,阿里嘎多!