【深度学习】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(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、结束
好了,本篇文章到此为止,如有问题,还望指出,阿里嘎多!