【深度学习】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、结束

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/908112.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

git 入门作业

任务1: 破冰活动:自我介绍任务2: 实践项目:构建个人项目 git使用流程: 1.将本项目直接fork到自己的账号下,这样就可以直接在自己的账号下进行修改和提交。 这里插一条我遇到的问题,在fork的时候没有将那个only camp4的…

再探“构造函数”(2)友元and内部类

文章目录 一. 友元‘全局函数’作友元‘成员函数’作友元‘类‘作友元 内部类 一. 友元 何时会用到友元呢? 当想让(类外面的某个函数/其它的类)访问 某个类里面的(私有或保护的)内容时,可以选择使用友元。 友元提供了一种突破&a…

从零到一构建C语言解释器-CPC源码

文章目录 参考框架设计vm指令集分配空间词法分析语法分析递归下降表达式优先级爬山 参考 https://lotabout.me/2015/write-a-C-interpreter-1/ https://github.com/archeryue/cpc https://www.bilibili.com/video/BV1Kf4y1V783/?vd_sourcea1be939c65919194c77b8a6a36c14a6e …

关于我、重生到500年前凭借C语言改变世界科技vlog.14——常见C语言算法

文章目录 1.冒泡排序2.二分查找3.转移表希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力! 根据当前所学C语言知识,对前面知识进行及时的总结巩固,出了这么一篇 vlog 介绍当前所学知识能遇到的常见算法,这些算法是…

我也谈AI

“随着人工智能技术的不断发展,我们已经看到了它在各行业带来的巨大变革。在医疗行业中,人工智能技术正在被应用于病例诊断、药物研发等方面,为医学研究和临床治疗提供了新的思路和方法;在企业中,人工智能技术可以通过…

Flutter 13 网络层框架架构设计,支持dio等框架。

在移动APP开发过程中,进行数据交互时,大多数情况下必须通过网络请求来实现。客户端与服务端常用的数据交互是通过HTTP请求完成。面对繁琐业务网络层,我们该如何通过网络层架构设计来有效解决这些问题,这便是网络层框架架构设计的初…

Spring Boot2.x教程:(十)从Field injection is not recommended谈谈依赖注入

从Field injection is not recommended谈谈依赖注入 1、问题引入2、依赖注入的三种方式2.1、字段注入(Field Injection)2.2、构造器注入(Constructor Injection)2.3、setter注入(Setter Injection) 3、为什…

Nginx的基础架构解析(下)

1. Nginx模块 1.1 Nginx中的模块化设计 Nginx 的内部结构是由核心部分和一系列的功能模块所组成。这样划分是为了使得每个模块的功能相对简单,便于开发,同时也便于对系统进行功能扩展。Nginx 将各功能模块组织成一条链,当有请求到达的时候&…

【网络】网络层协议IP

目录 IP协议报头 报头分离和向上交付 四位版本 8位服务类型 16位总长度 八位生存时间 16位标识一行 网段划分 DHCP 私有IP范围 公网划分之CIDR 特殊的IP地址 缓解IP地址不够用的方法 NAT技术 路由 IP是用来主机定位和路由选择的,它提供了一种能力&am…

HTML 基础标签——多媒体标签<img>、<object> 与 <embed>

文章目录 1. `<img>` 标签主要属性示例注意事项2. `<object>` 标签概述主要属性示例注意事项3. `<embed>` 标签概述主要属性示例注意事项小结在现代网页设计中,多媒体内容的使用变得越来越重要,因为它能够有效增强用户体验、吸引注意力并传达信息。HTML 提…

【Canal 中间件】Canal 实现 MySQL 增量数据的异步缓存更新

文章目录 一、安装 MySQL1.1 启动 mysql 服务器1.2 开启 Binlog 写入功能1.2.1创建 binlog 配置文件1.2.2 修改配置文件权限1.2.3 挂载配置文件1.2.4 检测 binlog 配置是否成功 1.3 创建账户并授权 二、安装 RocketMQ2.1 创建容器共享网络2.2 启动 NameServer2.3 启动 Broker2.…

深度学习(九):推荐系统的新引擎(9/10)

一、深度学习与推荐系统的融合 深度学习在推荐系统中的融合并非偶然。随着互联网的飞速发展&#xff0c;数据量呈爆炸式增长&#xff0c;传统推荐系统面临着诸多挑战。例如&#xff0c;在处理大规模、高维度的数据时&#xff0c;传统方法往往显得力不从心。而深度学习以其强大的…

masm汇编字符串输出演示

assume cs:code, ds:datadata segmentmassage db zhouzunjie, 0dh, 0ah, $ data endscode segmentstart:mov ax, datamov ds, axmov ah, 09hlea dx, massageint 21hmov ax, 4c00hint 21hcode ends end start 效果演示&#xff1a;

在昇腾Ascend 910B上运行Qwen2.5推理

目前在国产 AI 芯片&#xff0c;例如昇腾 NPU 上运行大模型是一项广泛且迫切的需求&#xff0c;然而当前的生态还远未成熟。从底层芯片的算力性能、计算架构的算子优化&#xff0c;到上层推理框架对各种模型的支持及推理加速&#xff0c;仍有很多需要完善的地方。 今天带来一篇…

HarmonyOS一次开发多端部署三巨头之界面级一多开发

界面级一多开发 引言1. 布局能力1.1 自适应布局1.1.1 拉伸能力1.1.2 均分能力1.1.3 占比能力1.1.4 缩放能力1.1.5延伸能力1.1.6 隐藏能力1.1.7 折行能力 1.2 响应式布局1.2.1 断点和媒体查询1.2.2 栅格布局 2. 视觉风格2.1 分层参数2.2 自定义资源 3. 交互归一4. IDE多设备预览…

(58)LMS自适应滤波算法与系统辨识的MATLAB仿真

文章目录 前言一、LMS算法的基本步骤二、LMS算法的一些主要应用1. 通信系统2. 信号分离与增强3. 控制系统4. 生物医学信号处理5. 机器学习与模式识别6. 其他应用 三、LMS算法用于系统辨识的MATLAB仿真四、仿真结果 前言 LMS&#xff08;Least Mean Squares&#xff0c;最小均方…

bootstrap应用1——计算n从1-100000的每个整数,第j个观测在自助法样本里的概率。

计算n从1-100000的每个整数&#xff0c;第j个观测在自助法样本里的概率。 pr function(n) return(1 - (1 - 1/n)^n) x 1:10000 plot(x, pr(x))

AI-基本概念-向量、矩阵、张量

1 需求 需求&#xff1a;Tensor、NumPy 区别 需求&#xff1a;向量、矩阵、张量 区别 2 接口 3 示例 4 参考资料 【PyTorch】PyTorch基础知识——张量_pytorch张量-CSDN博客

【设计模式】策略模式定义及其实现代码示例

文章目录 一、策略模式1.1 策略模式的定义1.2 策略模式的参与者1.3 策略模式的优点1.4 策略模式的缺点1.5 策略模式的使用场景 二、策略模式简单实现2.1 案例描述2.2 实现代码 三、策略模式的代码优化3.1 优化思路3.2 抽象策略接口3.3 上下文3.4 具体策略实现类3.5 测试 参考资…

2025年PMP考试的3A好考吗?

确实&#xff0c;PMP正式抛弃第六版用第七版教材了&#xff0c;但是考纲还是跟24年一样的&#xff0c;情景题多&#xff0c;考的比之前灵活&#xff0c;但是 3A 的人也不少&#xff0c;按照机构的计划来学习并没有很难&#xff0c;给大家说说我的备考经历吧&#xff0c;希望对你…