当前位置: 首页 > news >正文

【深度学习】VITS语音合成原理解析

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(xc)=logP(zx,c)P(x,zc)
等式左右都对 q ( z ∣ x ) q(z|x) q(zx)积分
左边: ∫ 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(zx)logP(xc)dz=logP(xc)zq(zx)dz=logP(xc)zq(zx)logP(zx,c)P(x,zc)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(xc)=====zq(zx)logP(zx,c)P(x,zc)dzzq(zx)logP(zx,c)/q(zx)P(x,zc)/q(zx)dzzq(zx)(logq(zx)P(x,zc)logq(zx)P(zx,c))dzzq(zx)logq(zx)P(x,zc)dzzq(zx)logq(zx)P(zx,c)dzzq(zx)logq(zx)P(x,zc)dz+KL(q(zx)P(zx,c))
注意到第二项的P(z|x,c)无法求解,故而关于参数 ϕ \phi ϕ最小化第二项(让q(z|x)逼近 P ( z ∣ x , c ) P(z|x,c) P(zx,c))。由于给定x,c,和参数 θ \theta θ的情况下, log ⁡ P ( x ∣ c ) \log P(x|c) logP(xc)是确定的。所以最小化第二项就相当于最大化第一项,不懂请看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(xc)====zq(zx)logq(zx)P(x,zc)dzzq(zx)logq(zx)P(xz,c)P(zc)dzzq(zx)(logP(xz,c)+logq(zx)P(zc))dzzq(zx)logP(xz,c)dz+zq(zx)logq(zx)P(zc)dzEzq(zx)[logP(xz,c)]KL(q(zx)P(zc))
假设在给定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(xc))max( Ezq(zx)[logP(xz)] KL(q(zx)P(zc)))

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=xmelx^mel1(1)
其中, x m e l x_{mel} xmel表示的是原始波形的梅尔谱。

为什么是L1损失呢?其实作者是假设 P ( x ∣ z ) P(x|z) P(xz)是拉普拉斯分布,我们来详细推导一下

拉普拉斯分布的概率密度函数为
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}) Ezq(zx)[logP(xz)]N1i=1NlogP(xzi)
其中, z i z^{i} zi采样自 q ( z ∣ x ) q(z|x) q(zx) q ( z ∣ x ) q(z|x) q(zx)被假设为高斯分布,它的期望和方差使用神经网络去逼近。我们假设 P ( x ∣ z ) P(x|z) P(xz)服从拉普拉斯分布,参数为 μ θ ( 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(xzi)==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)) maxKL(q(zx)∣∣P(zc))=minKL(q(zx)∣∣P(zc))
把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(zx)∣∣P(zc))====zq(zx)logP(zc)q(zx)dzzq(zx)(logq(zx)logP(zc))dzzq(zx)logq(zx)dzzq(zx)logP(zc)dz Ezq(zx)[logq(zx)] Ezq(zx)[logP(zc)]
对于第①项,已知 q ( z ∣ x ) q(z|x) q(zx)是高斯分布,假设各个维度相互独立,单个维度的期望和方差分别是 μ ϕ ( 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} Ezq(zx)[logq(zx)]==========zq(zx)logq(zx)dzzq(zx)log2πσϕ2(x) 1exp{2σ2(x)ϕ(zμϕ(x))2}dzzq(zx) log2πσϕ2(x) 12σϕ2(x)(zμϕ(x))2 dzzq(zx)log2πσϕ2(x) 1dzzq(zx)2σϕ2(x)(zμϕ(x))2dzlog2πσϕ2(x) 1zq(zx)dz2σϕ2(x)1zq(zx)(zμϕ(x))2dzlog2πσϕ2(x) 12σϕ2(x)1E[(zμϕ(x))2]log2πσϕ2(x) 12σϕ2(x)1σϕ2(x)log2πσϕ2(x) 121log2πσϕ2(x) 21log2π logσϕ(x)21
对于第②项, P ( z ∣ c ) P(z|c) P(zc)我们不知道是什么分布(在以前的VAE中,我们曾假设为标准高斯分布,然而高斯分布太过简单,也许很难表达出编码后的特征。作者发现提高先验,也就是 P ( z ∣ c ) P(z|c) P(zc)的复杂度,有助于提高样本生成的质量,因此,在此处,我们不把它假设成标准高斯分布了)

所以,此处,我们既要给 P ( z ∣ c ) P(z|c) P(zc)选择一个复杂的分布,又要让他是可计算的。那该怎么办呢?我们可以使用归一化流去计算

具体来说,我们可以这样,对于②,我们使用蒙特卡洛去近似它
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) Ezq(zx)[logP(zc)]N1i=1NlogP(zic)
其中, z i z^i zi采样自 q ( z ∣ x ) q(z|x) q(zx)

对于 P ( z i ∣ c ) P(z^i|c) P(zic)的概率分布,我们暂时不知道,所以,我们可以构造一个流模型 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(zc)=π(fθ(z)c)detzfθ(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(zc)=N(fθ(z)μθ(c),σθ(c))detzfθ(z)
也就是说,我们现在把 P ( z ∣ c ) P(z|c) P(zc)通过变量替换定理,将 P ( z ∣ c ) P(z|c) P(zc)变成了一个比较简单的概率分布乘以对应的雅克比行列式的绝对值。

那么, log ⁡ P ( z ∣ c ) \log P(z|c) logP(zc)就变成了(看作是各个维度相互独立,单个维度的期望和方差分别是 μ θ , σ θ 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(zc)====logN(fθ(z)μθ(c),σθ(c))detzfθ(z)log2πσθ2(c) 1exp{2σθ2(c)(fθ(z)μθ(c))2}detzfθ(z)log2πσθ2(c) 12σθ2(c)(fθ(z)μθ(c))2+logdetzfθ(z)logσθ(c)log2π 2σθ2(c)(fθ(z)μθ(c))2+logdetzfθ(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 logdetzfθ(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(zc)=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(zx)∣∣P(zc))==== Ezq(zx)[logq(zx)] Ezq(zx)[logP(zc)]log2π logσϕ(x)21N1i=1NlogP(zic)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(zc)=N(fθ(z)μθ(c),σθ(c))detzfθ(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(zx)∣∣P(zc))=min( Ezq(zx)[logq(zx)] Ezq(zx)[logP(zc)])
只有第②项跟条件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})] minEzq(zx)[logP(zc)]=maxEzq(zx)[logP(zc)]=maxEzq(zx)[logP(zA,ctext)]
为了让 log ⁡ P ( z ∣ A , c t e x t ) \log P(z|A,c_{text}) logP(zA,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})] θmaxEzq(zx)[logP(zA,ctext)]=w,AmaxEzq(zx)[logP(zA,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})] AmaxEzq(zx)[logP(zA,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} AmaxEzq(zx)[logP(zA,ctext)]==AmaxlogN(fθ(z)μθ(ctext,A),σθ(ctext,A))detzfθ(z)AmaxlogN(fθ(z)μθ(ctext,A),σθ(ctext,A))+logdetzfθ(z)
又因为 log ⁡ ∣ det ⁡ ∂ f θ ( z ) ∂ z ∣ = log ⁡ 1 = 0 \log |\det\frac{\partial f_{\theta}(z)}{\partial z}| = \log 1=0 logdetzfθ(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)) AmaxEzq(zx)[logP(zA,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=1pπ(fθi(z)ctext,A)i=1plogπ(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(Qi1,j1,Qi,j1)+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(dctext)(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(dctext):=[0,1)Dp(ductext)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(dctext)====log[0,1)Dp(ductext)dulog[0,1)Dvp(du,vctext)dvdulog[0,1)Dvq(u,vd,ctext)p(du,vctext)q(u,vd,ctext)dvdulogEu,vq(u,vd,ctext)[q(u,vd,ctext)p(du,vctext)]Eu,vq(u,vd,ctext)[logq(u,vd,ctext)p(du,vctext)]
最后一个不等号利用的是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(du,vctext)q(u,vd,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,vq(u,vd,ctext)[logq(u,vd,ctext)p(du,vctext)]N1i=1Nlogq(ui,vid,ctext)p(dui,victext)
当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=1Nlogq(ui,vid,ctext)p(dui,victext)=logp(du,vctext)logq(u,vd,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(du,vctext)==logN(fθ(du,v)μp(ctext),σp(ctext))det(du,v)fθ(du,v)logN(fθ(du,v)μp(ctext),σp(ctext))+logdet(du,v)fθ(du,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,vd,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))detzfθ(z)1logN(zμq(d,ctext),σq(d,ctext))logdetzfθ(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(du,vctext)logq(u,vd,ctext))=min(logq(u,vd,ctext)logp(du,vctext))

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)logdetzfθ(z)(logN(fθ(du,v)∣0,1)+logdet(du,v)fθ(du,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=1TNl1Dl(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(zx)

论文使用非因果WaveNet残差块,对于多说话人,使用全局调节, 参考WaveNet那期视频

3.2、先验编码器

先验编码器主要是文本编码器( P ( z ∣ c t e x t ) P(z|c_{text}) P(zctext)),和对应的归一化转化。文本编码器使用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、结束

好了,本篇文章到此为止,如有问题,还望指出,阿里嘎多!

在这里插入图片描述


http://www.mrgr.cn/news/62700.html

相关文章:

  • python+pptx:(一)占位符、文本框、段落操作
  • 从0学习React(7)
  • LINUX下使用SQLite查看.db数据库文件
  • 项目开发的架构模式与异步请求(AJAX)
  • Web3的去中心化社交网络:区块链技术如何改变互动方式
  • 论文阅读:MultiUI 利用网页UI进行丰富文本的视觉理解
  • 向量库Milvus异常挂了,重新启动
  • 有没有优质的公司可以提供高质量大模型数据?
  • Vue.js(2) 基础:指令与功能概览
  • C++对象模型:Function 语意学
  • 九泰智库 | 医械周刊- Vol.65 | 广州发布首批创新药械产品目录
  • 【产品经理】工业互联网企业上市之路
  • 【2024.10.31练习】123
  • 二分查找题目:搜索插入位置
  • 沈阳工业大学《2021年+2020年827自动控制原理真题》 (完整版)
  • Java - 手写识别; 如何用spring ai和大模型做手写识别教程
  • 监控pod日志
  • 集成学习(2)
  • Ethernet 系列(5)-- 物理层测试::PMA Test::MDI
  • 江协科技STM32学习- P28 USART串口数据包
  • 《暗河传》 顺利杀青,苏棋演绎“千面鬼”慕婴引期待
  • 微软办公三件套入局,苹果接力功能再升级!如何进一步提高跨平台协作效率?
  • 【C++】C++17结构化绑定、std::optional、std::variant、std::any
  • Vue全栈开发旅游网项目(3)-Vue路由配置
  • TransUNet 学习记录
  • 淘宝API接口(item_history_price- 淘宝商品历史价格信息查询)