柯基寧波seo企業(yè)網(wǎng)絡(luò)推廣
文章目錄
- 引子
- 生成問(wèn)題回顧:Generator
- Math Background
- Jacobian Matrix
- Determinant 行列式
- Change of Variable Theorem
- 簡(jiǎn)單實(shí)例
- 一維實(shí)例
- 二維實(shí)例
- 網(wǎng)絡(luò)G的限制
- 基于Flow的網(wǎng)絡(luò)構(gòu)架
- G的訓(xùn)練
- Coupling Layer
- Coupling Layer反函數(shù)計(jì)算
- Coupling Layer Jacobian矩陣計(jì)算
- Coupling Layer Stacking
- 1×1 Convolution
- GLOW效果
- 其他工作
原視頻見(jiàn)油管https://www.youtube.com/watch?v=uXY18nzdSsM
Latex編輯器
引子
之前有講過(guò)三種生成模型:
1.Component-by-component (也叫:Auto-regressive Model):按component進(jìn)行生成,如何確定最佳的生成順序?而且一個(gè)個(gè)的生成會(huì)使得速度比較慢。特別是語(yǔ)音生成,一秒鐘需要生成的采樣點(diǎn)個(gè)數(shù)約為20萬(wàn)個(gè),有人聲稱:生成一秒鐘,合成90分。
2.Autoencoder(VAE):這個(gè)模型證明了是在優(yōu)化似然的Lower bound,而非去maximize似然,這樣的效果有多好還不好說(shuō)。
3.Generative Adversarial Network(GAN):雖然很強(qiáng),但是很難訓(xùn)練。
生成問(wèn)題回顧:Generator
A generator G G G is a network. The network defines a probability distribution p G p_G pG?
為什么說(shuō)生成器網(wǎng)絡(luò)定義了一個(gè)概率分布?看下面的流程:
圖中 G G G吃一個(gè)向量 z z z得到一個(gè)表示 x = G ( z ) x=G(z) x=G(z),這個(gè) x x x是一個(gè)高維向量,是一張圖像, x x x里面每一個(gè)維度就是這個(gè)圖像的每一個(gè)像素。
輸入向量 z z z是用一個(gè)Normal Distribution中采樣得來(lái)的:
因此經(jīng)過(guò)多次采樣經(jīng)過(guò) G G G后會(huì)得到一個(gè)比較復(fù)雜的分布 p G p_G pG?:
我們希望找到一個(gè) G G G,使得其生成的分布 p G p_G pG?與實(shí)際圖像分布 p d a t a ( x ) p_{data}(x) pdata?(x)越接近越好。
越接近越好就是要求最大似然,也就是要使得 p G ( x ) p_G(x) pG?(x)的似然與 p d a t a ( x ) p_{data}(x) pdata?(x)采樣得到的樣本越接近越好,用數(shù)學(xué)表示為:
G ? = a r g max ? G ∑ i = 1 m log ? p G ( x i ) , { x 1 , x 2 , ? , x m } f r o m p d a t a ( x ) ≈ a r g min ? G K L ( p d a t a ∣ ∣ p G ) \begin{aligned} G^*&=arg\max_G\sum_{i=1}^{m}\log p_G(x^i),\{x^1,x^2,\cdots,x^m\}\text{ } from\text{ } p_{data}(x)\\ &\approx arg\min_G KL(p_{data}||p_G)\end{aligned} G??=argGmax?i=1∑m?logpG?(xi),{x1,x2,?,xm}?from?pdata?(x)≈argGmin?KL(pdata?∣∣pG?)?
上式中的求兩個(gè)概率越接近越好也相當(dāng)于求他們的KL散度越小越好。
由于 G G G是一個(gè)網(wǎng)絡(luò),因此其生成概率的最大似然非常難求,Flow-based Generative Model提出了一種可以直接求最大似然的方法,接下來(lái)進(jìn)入難點(diǎn),補(bǔ)充部分?jǐn)?shù)學(xué)推導(dǎo)。
Math Background
三個(gè)東西:Jacobian, Determinant, Change of Variable Theorem
Jacobian Matrix
假如有一個(gè)函數(shù) x = f ( z ) x=f(z) x=f(z),吃一個(gè)二維向量 z = [ z 1 z 2 ] z=\begin{bmatrix} z_1 \\ z_2 \end{bmatrix} z=[z1?z2??],得到輸出: x = [ x 1 x 2 ] x=\begin{bmatrix} x_1 \\ x_2 \end{bmatrix} x=[x1?x2??]。(Jacobian Matrix的輸入和輸出維度不一定一樣,這里先簡(jiǎn)化來(lái)舉例)
這里的函數(shù)可以看做上面提到的生成器 G G G。
函數(shù) x = f ( z ) x=f(z) x=f(z)的Jacobian Matrix J f J_f Jf?可以寫(xiě)為輸入和輸出兩兩組合做偏導(dǎo)后形成的矩陣:
J f = [ ? x 1 ? z 1 ? x 1 ? z 2 ? x 2 ? z 1 ? x 2 ? z 2 ] (1) J_f=\begin{bmatrix} \cfrac{\partial x_1}{\partial z_1} & \cfrac{\partial x_1}{\partial z_2}\\ \cfrac{\partial x_2}{\partial z_1} &\cfrac{\partial x_2}{\partial z_2} \end{bmatrix}\tag1 Jf?= ??z1??x1???z1??x2????z2??x1???z2??x2??? ?(1)
Jacobian Matrix小例子,假如有這樣的函數(shù):
[ z 1 + z 2 2 z 2 ] = f ( [ z 1 z 2 ] ) \begin{bmatrix} z_1+z_2 \\ 2z_2 \end{bmatrix}=f\left(\begin{bmatrix} z_1 \\ z_2 \end{bmatrix}\right) [z1?+z2?2z2??]=f([z1?z2??])
則根據(jù)上面的公式1可以求得:
J f = [ ? ( z 1 + z 2 ) ? z 1 ? ( z 1 + z 2 ) ? z 2 ? 2 z 2 ? z 1 ? 2 z 2 ? z 2 ] = [ 1 1 2 0 ] J_f=\begin{bmatrix} \cfrac{\partial (z_1+z_2)}{\partial z_1} & \cfrac{\partial (z_1+z_2)}{\partial z_2}\\ \cfrac{\partial 2z_2}{\partial z_1} &\cfrac{\partial 2z_2}{\partial z_2} \end{bmatrix}=\begin{bmatrix} 1 & 1\\ 2 &0 \end{bmatrix} Jf?= ??z1??(z1?+z2?)??z1??2z2????z2??(z1?+z2?)??z2??2z2??? ?=[12?10?]
同理,若有 z = f ? 1 ( x ) z=f^{-1}(x) z=f?1(x),則有函數(shù) f f finverse 的Jacobian Matrix:
J f ? 1 = [ ? z 1 ? x 1 ? z 1 ? x 2 ? z 2 ? x 1 ? z 2 ? x 2 ] (2) J_{f^{-1}}=\begin{bmatrix} \cfrac{\partial z_1}{\partial x_1} & \cfrac{\partial z_1}{\partial x_2}\\ \cfrac{\partial z_2}{\partial x_1} &\cfrac{\partial z_2}{\partial x_2} \end{bmatrix}\tag2 Jf?1?= ??x1??z1???x1??z2????x2??z1???x2??z2??? ?(2)
公式1和2的兩個(gè)矩陣互逆,二者的乘積結(jié)果是Identity矩陣(對(duì)角線是1,其他都是0)。
反函數(shù)的Jacobian Matrix小例子,假如有這樣的函數(shù):
[ x 2 / 2 x 1 ? x 2 / 2 ] = f ? 1 ( [ x 1 x 2 ] ) \begin{bmatrix} x_2/2 \\ x_1-x_2/2 \end{bmatrix}=f^{-1}\left(\begin{bmatrix} x_1 \\ x_2 \end{bmatrix}\right) [x2?/2x1??x2?/2?]=f?1([x1?x2??])
則根據(jù)上面的公式2可以求得:
J f ? 1 = [ ? ( x 2 / 2 ) ? x 1 ? ( x 2 / 2 ) ? x 2 ? ( x 1 ? x 2 / 2 ) ? x 1 ? ( x 1 ? x 2 / 2 ) ? x 2 ] = [ 0 1 / 2 1 ? 1 / 2 ] J_{f^{-1}}=\begin{bmatrix} \cfrac{\partial (x_2/2)}{\partial x_1} & \cfrac{\partial (x_2/2)}{\partial x_2}\\ \cfrac{\partial (x_1-x_2/2)}{\partial x_1} &\cfrac{\partial (x_1-x_2/2)}{\partial x_2} \end{bmatrix}=\begin{bmatrix} 0 & 1/2\\ 1 &-1/2 \end{bmatrix} Jf?1?= ??x1??(x2?/2)??x1??(x1??x2?/2)???x2??(x2?/2)??x2??(x1??x2?/2)?? ?=[01?1/2?1/2?]
兩個(gè)小例子的結(jié)果相乘:
J f J f ? 1 = [ 1 1 2 0 ] [ 0 1 / 2 1 ? 1 / 2 ] = I J_fJ_{f^{-1}}=\begin{bmatrix} 1 & 1\\ 2 &0 \end{bmatrix}\begin{bmatrix} 0 & 1/2\\ 1 &-1/2 \end{bmatrix}=I Jf?Jf?1?=[12?10?][01?1/2?1/2?]=I
Determinant 行列式
The determinant of a square matrix is a scalar that provides information about the matrix.
對(duì)于2×2的矩陣:
A = [ a b c d ] A=\begin{bmatrix} a&b \\ c &d \end{bmatrix} A=[ac?bd?]
有:
d e t ( A ) = a d ? b c det(A)=ad-bc det(A)=ad?bc
對(duì)于3×3的矩陣:
[ a 1 a 2 a 3 a 4 a 5 a 6 a 7 a 8 a 9 ] \begin{bmatrix} a_1 & a_2& a_3\\ a_4 & a_ 5&a_6 \\ a_7 & a_8 &a_9 \end{bmatrix} ?a1?a4?a7??a2?a5?a8??a3?a6?a9?? ?
有:
d e t ( A ) = a 1 a 5 a 9 + a 2 a 6 a 7 + a 3 a 4 a 8 ? a 3 a 5 a 7 ? a 2 a 4 a 9 ? a 1 a 6 a 8 det(A)=a_1a_5a_9+a_2a_6a_7+a_3a_4a_8-a_3a_5a_7-a_2a_4a_9-a_1a_6a_8 det(A)=a1?a5?a9?+a2?a6?a7?+a3?a4?a8??a3?a5?a7??a2?a4?a9??a1?a6?a8?
行列式性質(zhì):
d e t ( A ) = 1 d e t ( A ? 1 ) det(A)=\cfrac{1}{det(A^{-1})} det(A)=det(A?1)1?
對(duì)于Jacobian Matrix則有:
d e t ( J f ) = 1 d e t ( J f ? 1 ) det(J_f)=\cfrac{1}{det(J_{f^{-1}})} det(Jf?)=det(Jf?1?)1?
行列式的幾何含義是指行向量在高維空間形成的體積。對(duì)于低維,例如下面2×2的矩陣,其行列式就對(duì)應(yīng)了其行向量所形成的面積
對(duì)于3×3的矩陣,,其行列式就對(duì)應(yīng)了其行向量所形成的體積
Change of Variable Theorem
變量變換定理。
簡(jiǎn)單實(shí)例
假設(shè)有分布 π ( z ) \pi(z) π(z),其圖像如下:
另有函數(shù)可以以上面的分布作為輸入 x = f ( z ) x=f(z) x=f(z),得到的結(jié)果是另外一個(gè)分布 p ( x ) p(x) p(x),其圖像如下:
現(xiàn)在要弄清楚 π ( z ) \pi(z) π(z)和 p ( x ) p(x) p(x)兩個(gè)分布之間的關(guān)系。
下面來(lái)看簡(jiǎn)單的例子,假設(shè)分布 π ( z ) \pi(z) π(z)如下圖:
可以看到 π ( z ) \pi(z) π(z)是一個(gè)簡(jiǎn)單的均勻分布,它在0~1之間有分布。根據(jù)概率的定義:
∫ 0 1 π ( z ) d z = 1 \int_0^1\pi(z)dz=1 ∫01?π(z)dz=1
因此可以知道該分布的高度為1。
令假設(shè)有函數(shù)
x = f ( z ) = 2 z + 1 x=f(z)=2z+1 x=f(z)=2z+1
則可以得到函數(shù)生成的分布 p ( x ) p(x) p(x)的圖像為:
由于 p ( x ) p(x) p(x)是概率分布,因此其也要滿足:
∫ 1 3 p ( x ) d x = 1 \int_1^3p(x)dx=1 ∫13?p(x)dx=1
則綠色分布的高度為0.5,則可以德奧兩個(gè)分布之間的關(guān)系:
可以寫(xiě)成:
p ( x ′ ) = 1 2 π ( z ′ ) p(x')=\cfrac{1}{2}\pi(z') p(x′)=21?π(z′)
一維實(shí)例
下面再推廣到更一般的情況。
現(xiàn)在有一個(gè)分布記為 π ( z ) \pi(z) π(z),它經(jīng)過(guò)一個(gè)變換(或者按上面的說(shuō)法經(jīng)過(guò)一個(gè)函數(shù))后,得到另外一個(gè)分布 p ( x ) p(x) p(x),對(duì)于下圖而言, z ′ z' z′通過(guò)變換后就到 x ′ x' x′的位置,對(duì)應(yīng)的概率密度從 π ( z ′ ) \pi(z') π(z′)變成了 p ( x ′ ) p(x') p(x′)。
雖然我們不知道 π ( z ) \pi(z) π(z)和 p ( x ) p(x) p(x)具體的公式,但是我們?nèi)绻雷儞Q所涉及的函數(shù),是可以寫(xiě)出二者的關(guān)系的,這就是通過(guò)Change of Variable Theorem來(lái)找到這個(gè)關(guān)系的過(guò)程。
先將 z ′ z' z′做一個(gè)小小的變動(dòng),成為: z ′ + Δ z z'+\Delta z z′+Δz,相應(yīng)的,根據(jù)變換函數(shù),可以得到對(duì)應(yīng)的 x ′ + Δ x x'+\Delta x x′+Δx
由于我們做的小小的變動(dòng),因此,從 z ′ z' z′到 z ′ + Δ z z'+\Delta z z′+Δz對(duì)應(yīng)的概率密度可以看做是均勻分布,同理,從 x ′ x' x′到 x ′ + Δ x x'+\Delta x x′+Δx應(yīng)的概率密度也可以看做是均勻分布:
相當(dāng)于將藍(lán)色方塊經(jīng)過(guò)變形,得到綠色方塊,二者的面積是相等的,二者長(zhǎng)×寬應(yīng)該結(jié)果一樣。即:
p ( x ′ ) Δ x = π ( z ′ ) Δ z p(x')\Delta x=\pi(z')\Delta z p(x′)Δx=π(z′)Δz
移項(xiàng)辦得到二者的關(guān)系可以寫(xiě)為:
p ( x ′ ) = π ( z ′ ) Δ z Δ x p(x')=\pi(z')\cfrac{\Delta z}{\Delta x} p(x′)=π(z′)ΔxΔz?
由于 Δ \Delta Δ是很小的值,因此根據(jù)導(dǎo)數(shù)的概念,上式可以寫(xiě)為:
p ( x ′ ) = π ( z ′ ) d z d x p(x')=\pi(z')\cfrac{d z}{d x} p(x′)=π(z′)dxdz?
由于上面的求導(dǎo)項(xiàng)可能有正負(fù):
因此要加上絕對(duì)值避免負(fù)值:
p ( x ′ ) = π ( z ′ ) ∣ d z d x ∣ p(x')=\pi(z')\left|\cfrac{d z}{d x}\right| p(x′)=π(z′) ?dxdz? ?
二維實(shí)例
對(duì)于二維的情況:
同樣的,現(xiàn)在有一個(gè)分布記為 π ( z ) \pi(z) π(z),它經(jīng)過(guò)一個(gè)變換后,得到另外一個(gè)分布 p ( x ) p(x) p(x),對(duì)于下圖而言, z ′ z' z′通過(guò)變換后就到 x ′ x' x′的位置,對(duì)應(yīng)的概率密度從 π ( z ′ ) \pi(z') π(z′)變成了 p ( x ′ ) p(x') p(x′)。
還是給 z ′ z' z′做一個(gè)小小的變動(dòng),藍(lán)色方形和綠色菱形的對(duì)應(yīng)的概率密度體積應(yīng)該相等。這里的體積就是底面積×概率密度,藍(lán)色底面積好求,綠色菱形底面積用上面的行列式的幾何概念來(lái)求,可以看到下圖中菱形可以寫(xiě)為成兩個(gè)向量的表示 [ Δ x 11 , Δ x 21 ] [\Delta x_{11}, \Delta x_{21}] [Δx11?,Δx21?], [ Δ x 12 , Δ x 22 ] [\Delta x_{12},\Delta x_{22}] [Δx12?,Δx22?]。
最后就是寫(xiě)成:
p ( x ′ ) ∣ d e t [ Δ x 11 Δ x 21 Δ x 12 Δ x 22 ] ∣ = π ( z ′ ) Δ z 1 Δ z 2 (3) p(x')\left| det\begin{bmatrix} \Delta x_{11}&\Delta x_{21} \\ \Delta x_{12} &\Delta x_{22} \end{bmatrix} \right|=\pi(z')\Delta z_{1}\Delta z_{2}\tag3 p(x′) ?det[Δx11?Δx12??Δx21?Δx22??] ?=π(z′)Δz1?Δz2?(3)
下面開(kāi)始數(shù)學(xué)上的化簡(jiǎn),假設(shè)變換函數(shù)為: x = f ( z ) x=f(z) x=f(z),則公式3可以寫(xiě)為:
p ( x ′ ) ∣ 1 Δ z 1 Δ z 2 d e t [ Δ x 11 Δ x 21 Δ x 12 Δ x 22 ] ∣ = π ( z ′ ) p(x')\left|\cfrac{1}{\Delta z_{1}\Delta z_{2}} det\begin{bmatrix} \Delta x_{11}&\Delta x_{21} \\ \Delta x_{12} &\Delta x_{22} \end{bmatrix} \right|=\pi(z') p(x′) ?Δz1?Δz2?1?det[Δx11?Δx12??Δx21?Δx22??] ?=π(z′)
根據(jù)線代的指數(shù),將分?jǐn)?shù)項(xiàng)放入行列式:
p ( x ′ ) ∣ d e t [ Δ x 11 Δ z 1 Δ x 21 Δ z 1 Δ x 12 Δ z 2 Δ x 22 Δ z 2 ] ∣ = π ( z ′ ) p(x')\left|det\begin{bmatrix} \cfrac{\Delta x_{11}}{\Delta z_1} &\cfrac{\Delta x_{21}}{\Delta z_1} \\ \cfrac{\Delta x_{12}}{\Delta z_2} &\cfrac{\Delta x_{22}}{\Delta z_2} \end{bmatrix} \right|=\pi(z') p(x′) ?det ?Δz1?Δx11??Δz2?Δx12???Δz1?Δx21??Δz2?Δx22??? ? ?=π(z′)
由于:
Δ x 11 \Delta x_{11} Δx11?是 Δ z 1 \Delta z_{1} Δz1?在 x 1 x_1 x1?上的改變量;
Δ x 21 \Delta x_{21} Δx21?是 Δ z 1 \Delta z_{1} Δz1?在 x 2 x_2 x2?上的改變量;
Δ x 12 \Delta x_{12} Δx12?是 Δ z 2 \Delta z_{2} Δz2?在 x 1 x_1 x1?上的改變量;
Δ x 22 \Delta x_{22} Δx22?是 Δ z 2 \Delta z_{2} Δz2?在 x 2 x_2 x2?上的改變量。
上面的式子可以寫(xiě)成:
p ( x ′ ) ∣ d e t [ ? x 1 ? z 1 ? x 2 ? z 1 ? x 1 ? z 2 ? x 2 ? z 2 ] ∣ = π ( z ′ ) p(x')\left|det\begin{bmatrix} \cfrac{\partial x_{1}}{\partial z_1} &\cfrac{\partial x_{2}}{\partial z_1} \\ \cfrac{\partial x_{1}}{\partial z_2} &\cfrac{\partial x_{2}}{\partial z_2} \end{bmatrix} \right|=\pi(z') p(x′) ?det ??z1??x1???z2??x1????z1??x2???z2??x2??? ? ?=π(z′)
將矩陣進(jìn)行Transpose不會(huì)改變行列式的值,上式可以寫(xiě)成:
p ( x ′ ) ∣ d e t [ ? x 1 ? z 1 ? x 1 ? z 2 ? x 2 ? z 1 ? x 2 ? z 2 ] ∣ = π ( z ′ ) p(x')\left|det\begin{bmatrix} \cfrac{\partial x_{1}}{\partial z_1} &\cfrac{\partial x_{1}}{\partial z_2} \\ \cfrac{\partial x_{2}}{\partial z_1} &\cfrac{\partial x_{2}}{\partial z_2} \end{bmatrix} \right|=\pi(z') p(x′) ?det ??z1??x1???z1??x2????z2??x1???z2??x2??? ? ?=π(z′)
上面行列式中的句子和公式1中的Jacobian Matrix形式一樣,因此可以寫(xiě)成:
p ( x ′ ) ∣ d e t ( J f ) ∣ = π ( z ′ ) (4) p(x')\left|det(J_f) \right|=\pi(z')\tag4 p(x′)∣det(Jf?)∣=π(z′)(4)
也可以寫(xiě)為:
p ( x ′ ) = π ( z ′ ) ∣ 1 d e t ( J f ) ∣ = π ( z ′ ) ∣ d e t ( J f ? 1 ) ∣ (5) p(x')=\pi(z')\left|\cfrac{1}{det(J_f) }\right|=\pi(z')|det(J_{f^{-1}})| \tag5 p(x′)=π(z′) ?det(Jf?)1? ?=π(z′)∣det(Jf?1?)∣(5)
網(wǎng)絡(luò)G的限制
先把上面最大似然的式子copy下來(lái)
G ? = a r g max ? G ∑ i = 1 m log ? p G ( x i ) , { x 1 , x 2 , ? , x m } f r o m P d a t a ( x ) G^*=arg\max_G\sum_{i=1}^{m}\log p_G(x^i),\{x^1,x^2,\cdots,x^m\}\text{ } from\text{ } P_{data}(x) G?=argGmax?i=1∑m?logpG?(xi),{x1,x2,?,xm}?from?Pdata?(x)
根據(jù)上面公式5,可以把 p G p_G pG?寫(xiě)成:
p G ( x i ) = π ( z i ) ∣ d e t ( J G ? 1 ) ∣ p_G(x^i)=\pi (z^i)|det(J_{G^{-1}})| pG?(xi)=π(zi)∣det(JG?1?)∣
由已知的 x = G ( z ) x=G(z) x=G(z)可以得其反函數(shù)為: z i = G ? 1 ( x i ) z^i=G^{-1}(x^i) zi=G?1(xi),帶入上式:
p G ( x i ) = π ( G ? 1 ( x i ) ) ∣ d e t ( J G ? 1 ) ∣ p_G(x^i)=\pi \left(G^{-1}(x^i)\right )\left|det(J_{G^{-1}})\right | pG?(xi)=π(G?1(xi))∣det(JG?1?)∣
兩邊同時(shí)取對(duì)數(shù),然后乘變加展開(kāi):
log ? p G ( x i ) = log ? [ π ( G ? 1 ( x i ) ) ∣ d e t ( J G ? 1 ) ∣ ] = log ? ( G ? 1 ( x i ) ) + log ? ∣ d e t ( J G ? 1 ) ∣ \begin{aligned} \log p_G(x^i)&=\log \left[\pi \left(G^{-1}(x^i)\right )\left|det(J_{G^{-1}})\right |\right]\\ &= \log \left(G^{-1}(x^i)\right )+\log\left|det(J_{G^{-1}})\right |\end{aligned} logpG?(xi)?=log[π(G?1(xi))∣det(JG?1?)∣]=log(G?1(xi))+log∣det(JG?1?)∣?
要求 G ? G^* G?就是要求上式的最大值,如果要想用GD來(lái)求解,必須要計(jì)算兩個(gè)東西:
1. d e t ( J G ? 1 ) 或 d e t ( J G ) det(J_{G^{-1}})或det(J_{G}) det(JG?1?)或det(JG?):這個(gè)還比較好算,就是要計(jì)算輸入 z z z和輸出 x x x的偏導(dǎo)即可,但是如果輸入和輸出各自有1000維,由于Jacobian Matrix是輸入輸出的各個(gè)維度的兩兩偏導(dǎo),其大小就是:1000×1000,這個(gè)大小的矩陣求行列式的值計(jì)算量會(huì)很大。
2. G ? 1 G^{-1} G?1:主要是要確保 G G G有反函數(shù),由于 G G G是一個(gè)網(wǎng)絡(luò),因此其構(gòu)架要精心設(shè)計(jì)才會(huì)有反函數(shù)。
根據(jù)上面的兩點(diǎn),如果要輸出一張100×100×3的圖片,那么輸入也要100×100×3,這個(gè)是確保 G G G有反函數(shù)的必要條件。
顯然,網(wǎng)絡(luò) G G G不可以是簡(jiǎn)單的、任意的類似CNN、RNN等網(wǎng)絡(luò)架構(gòu),于是就有了流式設(shè)計(jì)。
基于Flow的網(wǎng)絡(luò)構(gòu)架
一個(gè)網(wǎng)絡(luò) G G G不夠,因此考慮像流水一樣設(shè)計(jì)多個(gè)網(wǎng)絡(luò)進(jìn)行concat:
根據(jù)上面的公式,這些網(wǎng)絡(luò)之間的輸入輸出關(guān)系如下:
p 1 ( x i ) = π ( z i ) ( ∣ d e t ( J G 1 ? 1 ) ∣ ) p 2 ( x i ) = π ( z i ) ( ∣ d e t ( J G 1 ? 1 ) ∣ ) ( ∣ d e t ( J G 2 ? 1 ) ∣ ) ? p K ( x i ) = π ( z i ) ( ∣ d e t ( J G 1 ? 1 ) ∣ ) ? ( ∣ d e t ( J G K ? 1 ) ∣ ) \begin{aligned} p_1(x^i)&=\pi \left(z^i\right )\left(\left|det(J_{G^{-1}_1})\right |\right )\\ p_2(x^i)&=\pi \left(z^i\right )\left(\left|det(J_{G^{-1}_1})\right |\right )\left(\left|det(J_{G^{-1}_2})\right |\right )\\ &\quad\vdots\\ p_K(x^i)&=\pi \left(z^i\right )\left(\left|det(J_{G^{-1}_1})\right |\right )\cdots\left(\left|det(J_{G^{-1}_K})\right |\right ) \end{aligned} p1?(xi)p2?(xi)pK?(xi)?=π(zi)( ?det(JG1?1??) ?)=π(zi)( ?det(JG1?1??) ?)( ?det(JG2?1??) ?)?=π(zi)( ?det(JG1?1??) ?)?( ?det(JGK?1??) ?)?
兩邊同時(shí)取對(duì)數(shù),乘變加:
log ? p K ( x i ) = log ? π ( z i ) + ∑ h = 1 K log ? ∣ d e t ( J G K ? 1 ) ∣ (6) \log p_K(x^i)=\log \pi \left(z^i\right )+\sum_{h=1}^K\log\left|det(J_{G^{-1}_K})\right |\tag6 logpK?(xi)=logπ(zi)+h=1∑K?log ?det(JGK?1??) ?(6)
其中:
z i = G 1 ? 1 ( ? G K ? 1 ( x i ) ) z^i=G^{-1}_1\left(\cdots G^{-1}_K\left(x^i\right )\right ) zi=G1?1?(?GK?1?(xi))
現(xiàn)在要求的就是公式6的最大化。
G的訓(xùn)練
為了求公式6的最大化,這里先簡(jiǎn)化一下問(wèn)題,先考慮只有一個(gè) G G G情況:
此時(shí)需要最大化的式子為:
log ? p G ( x i ) = log ? π ( G ? 1 ( x i ) ) + log ? ∣ d e t ( J G ? 1 ) ∣ (7) \log p_G(x^i)=\log \pi \left(G^{-1}\left(x^i\right )\right )+\log\left|det(J_{G^{-1}})\right |\tag7 logpG?(xi)=logπ(G?1(xi))+log∣det(JG?1?)∣(7)
式子中只有出現(xiàn) G ? 1 G^{-1} G?1,因此可以訓(xùn)練一個(gè) G ? 1 G^{-1} G?1對(duì)應(yīng)的網(wǎng)絡(luò),訓(xùn)練好后,將其輸入輸出反過(guò)來(lái),就變成了 G G G。
具體訓(xùn)練過(guò)程是從真實(shí)數(shù)據(jù) p d a t a ( x ) p_{data}(x) pdata?(x)中采樣一些樣本 x i x^i xi出來(lái),丟進(jìn) G ? 1 G^{-1} G?1對(duì)應(yīng)的網(wǎng)絡(luò),得到對(duì)應(yīng)的 z i z^i zi
先看公式7中的前半部分:
log ? π ( G ? 1 ( x i ) ) \log \pi \left(G^{-1}\left(x^i\right )\right ) logπ(G?1(xi))
這里的 π \pi π是正態(tài)分布,也就是當(dāng) z i = G ? 1 ( x i ) = 0 z^i=G^{-1}\left(x^i\right )=0 zi=G?1(xi)=0的時(shí)候,正態(tài)分布 π \pi π會(huì)得到最大值(正態(tài)分布最正中的地方就是波峰);
如果 z i z^i zi趨向于0或者說(shuō)0向量的時(shí)候,其對(duì)應(yīng)的Jacobian Matrix, J G ? 1 J_{G^{-1}} JG?1?也會(huì)是0矩陣(因?yàn)樵摼仃嚸總€(gè)元素都是要求 z z z對(duì) x x x的偏導(dǎo)),0矩陣的行列式 d e t ( J G ? 1 ) = 0 det(J_{G^{-1}})=0 det(JG?1?)=0,再取對(duì)數(shù)會(huì)使得公式7中的后半部分趨向于負(fù)無(wú)窮大。
總之就是一項(xiàng)要使得 z i z^i zi趨向于0,后一項(xiàng)使得 z i z^i zi不為0。
Coupling Layer
Coupling Layer反函數(shù)計(jì)算
這個(gè)設(shè)計(jì)可以參考兩篇文章:NICE: Non-linear Independent Components Estimation、Density estimation using Real NVP
具體結(jié)構(gòu)如下圖:
假設(shè) z z z是 D D D維,先將其分成兩部分,分別是: z 1 , ? , z d z_1,\cdots,z_d z1?,?,zd?和 z d + 1 , ? , z D z_{d+1},\cdots,z_D zd+1?,?,zD?。
1.將 z z z的第一部分 z 1 , ? , z d z_1,\cdots,z_d z1?,?,zd?直接復(fù)制,成為 x x x的第一部分: x 1 , ? , x d x_1,\cdots,x_d x1?,?,xd?;
2.將 z z z的第一部分 z 1 , ? , z d z_1,\cdots,z_d z1?,?,zd?分別丟進(jìn)兩個(gè)網(wǎng)絡(luò) F F F和 H H H(兩個(gè)網(wǎng)絡(luò)沒(méi)有invertiable的限制,可以是深度CNN),分別得到 β d + 1 , ? , β D \beta_{d+1},\cdots,\beta_D βd+1?,?,βD?和 γ d + 1 , ? , γ D \gamma_{d+1},\cdots,\gamma_D γd+1?,?,γD?;
3.將 z z z的第二部分 z d + 1 , ? , z D z_{d+1},\cdots,z_D zd+1?,?,zD?先和 β d + 1 , ? , β D \beta_{d+1},\cdots,\beta_D βd+1?,?,βD?點(diǎn)積,然后再加上 γ d + 1 , ? , γ D \gamma_{d+1},\cdots,\gamma_D γd+1?,?,γD?,得到 x x x的第二部分: x d + 1 , ? , x D x_{d+1},\cdots,x_D xd+1?,?,xD?:
x i > d = β i z i + γ i x_{i>d}=\beta_iz_i+\gamma_i xi>d?=βi?zi?+γi?
Coupling Layer之所以這樣設(shè)計(jì),就是可以計(jì)算反函數(shù),現(xiàn)在利用 x x x來(lái)算 z z z,看下圖的紅線及序號(hào):
1.將 x x x的第一部分: x 1 , ? , x d x_1,\cdots,x_d x1?,?,xd?直接復(fù)制,成為 z z z的第一部分 z 1 , ? , z d z_1,\cdots,z_d z1?,?,zd?;
2.和上面的步驟2一樣,將 z z z的第一部分 z 1 , ? , z d z_1,\cdots,z_d z1?,?,zd?分別丟進(jìn)兩個(gè)網(wǎng)絡(luò) F F F和 H H H,分別得到 β d + 1 , ? , β D \beta_{d+1},\cdots,\beta_D βd+1?,?,βD?和 γ d + 1 , ? , γ D \gamma_{d+1},\cdots,\gamma_D γd+1?,?,γD?;
3.根據(jù)以下公式計(jì)算 z i > d z_{i>d} zi>d?:
z i > d = x i ? γ i β i z_{i>d}=\cfrac{x_i-\gamma_i}{\beta_i} zi>d?=βi?xi??γi??
Coupling Layer Jacobian矩陣計(jì)算
先把上面的Coupling Layer 結(jié)構(gòu)簡(jiǎn)化成下面的樣子,注意顏色:
將Jacobian矩陣的計(jì)算結(jié)果分為四個(gè)部分,這里的顏色和上面的簡(jiǎn)化模型顏色是對(duì)應(yīng)的:
左上角是Identity矩陣,因?yàn)檫@里 x i < d = z i < d x_{i<d}=z_{i<d} xi<d?=zi<d?,淺藍(lán)對(duì)淺綠的偏導(dǎo)結(jié)果除了對(duì)角線其他位置都是0;
右上角結(jié)果是0,因?yàn)檫@里淺藍(lán)部分 x 1 , ? , x d x_1,\cdots,x_d x1?,?,xd?與深綠部分 z d + 1 , ? , z D z_{d+1},\cdots,z_D zd+1?,?,zD?無(wú)關(guān),求偏導(dǎo)后均為0;
左下角的內(nèi)容不需要考慮,因?yàn)樽笊辖鞘荌dentity矩陣和右上角是0,整個(gè)灰色大矩陣的行列式的值等于右下角的行列式的值,這個(gè)是行列式的某個(gè)推論;
右下角就是要看深綠和深藍(lán)部分的關(guān)系,他們的關(guān)系在上面有寫(xiě):
x i > d = β i z i + γ i (8) x_{i>d}=\beta_iz_i+\gamma_i\tag8 xi>d?=βi?zi?+γi?(8)
從這個(gè)式子可以看到, x d + 1 x_{d+1} xd+1?只與 z d + 1 z_{d+1} zd+1?有關(guān),與 z d + 2 , ? , z D z_{d+2},\cdots,z_D zd+2?,?,zD?無(wú)關(guān),因此,右下角只有對(duì)角線上有值(但不為1),是一個(gè)對(duì)角線矩陣。
現(xiàn)在問(wèn)題變成要求右下角矩陣行列式的值,由于右下角是一個(gè)對(duì)角線矩陣,因此其行列式的值等于對(duì)角線上的所有值的乘積(行列式定義簡(jiǎn)單推導(dǎo)即可得到該結(jié)論),可寫(xiě)為:
d e t ( J G ) = ? x d + 1 ? z d + 1 ? x d + 2 ? z d + 2 ? ? x D ? z D det(J_G)=\cfrac{\partial x_{d+1}}{\partial z_{d+1}}\cfrac{\partial x_{d+2}}{\partial z_{d+2}}\cdots\cfrac{\partial x_D}{\partial z_D} det(JG?)=?zd+1??xd+1???zd+2??xd+2????zD??xD??
根據(jù)公式8可以將每一項(xiàng)偏導(dǎo)求出來(lái):
d e t ( J G ) = β d + 1 β d + 2 ? β D det(J_G)=\beta_{d+1}\beta_{d+2}\cdots\beta_D det(JG?)=βd+1?βd+2??βD?
Coupling Layer Stacking
下面來(lái)看Coupling Layer如何疊加,假設(shè)有多個(gè)Coupling Layer如下圖
按照單個(gè)Coupling Layer的原理,我們發(fā)現(xiàn)它會(huì)把第一層淺黃色部分直接copy到最后一層,這樣會(huì)使得最后的部分和原始輸入的noise一樣(原始輸入是從搞屎分布中隨機(jī)sample出來(lái)),這樣沒(méi)有啥意義。
因此在堆疊的時(shí)候可以適當(dāng)做一些反向,注意看函數(shù)的箭頭:
經(jīng)過(guò)Copy操作后變成:
在做圖像生成實(shí)操的時(shí)候如何做反向?有兩種方法:
第一種,按棋盤(pán)式的前后兩兩反向
第二種,將圖片的channel進(jìn)行反接,一層做copy,一層做Transform:
兩種方法還可以混合使用。
1×1 Convolution
另外一個(gè)技巧讓基于Flow的網(wǎng)絡(luò)構(gòu)架對(duì)稱的技巧就是1×1的卷積,這個(gè)是15年就提出來(lái)的概念,但是22年又用在了GLOW上面,使得我們?cè)诓皇褂肎AN的情況下也能做圖像生成。
Glow: Generative Flow with Invertible 1x1 Convolutions
假設(shè)輸入為 z z z,輸出為 x x x,由于是圖像問(wèn)題,圖片中每個(gè)像素看做一個(gè)單位,且有RGB三個(gè)channel,1×1的卷積過(guò)程如下圖所示:
將 z z z中的每一個(gè)像素對(duì)應(yīng)的3個(gè)channel與大小為3×3的矩陣 W W W相乘,得到x相同位置上的一個(gè)像素的3個(gè)channel。
x = f ( z ) = W z (9) x=f(z)=Wz\tag9 x=f(z)=Wz(9)
矩陣 W W W是通過(guò)訓(xùn)練學(xué)習(xí)得來(lái),其作用為將3個(gè)channel進(jìn)行shuffle,例如:
[ 0 0 1 1 0 0 0 1 0 ] W [ 1 2 3 ] = [ 3 1 2 ] \overset{W}{\begin{bmatrix} 0& 0&1 \\ 1 & 0&0 \\ 0 & 1 &0 \end{bmatrix}}\begin{bmatrix} 1 \\ 2 \\ 3 \end{bmatrix}=\begin{bmatrix} 3 \\ 1 \\ 2 \end{bmatrix} ?010?001?100? ?W? ?123? ?= ?312? ?
這樣就可以使得在用Coupling Layer stacking的時(shí)候,不需要進(jìn)行反接,而是讓模型自己學(xué)習(xí) W W W,決定如何來(lái)交換channel的位置。將 W W W加入Generator構(gòu)架 G G G中后,也必須是是invertiable的,即: W W W必須存在 W ? 1 W^{-1} W?1。GLOW文章中沒(méi)有證明 W W W一定可逆,僅提到使用了存在 W ? 1 W^{-1} W?1的 W W W進(jìn)行初始化,并希望在模型自動(dòng)學(xué)習(xí)收斂后, W W W還是可逆。當(dāng)然三階矩陣不可逆的條件比較苛刻(除非該矩陣對(duì)應(yīng)的行列式值為0),一般三階矩陣都可以滿足可逆這一條件。
下面根據(jù)公式9來(lái)求單個(gè)像素點(diǎn)對(duì)應(yīng)的Jacobian Matrix,將該公式寫(xiě)開(kāi):
[ x 1 x 2 x 3 ] = [ w 11 w 12 w 13 w 21 w 22 w 23 w 31 w 32 w 33 ] [ z 1 z 2 z 3 ] \begin{bmatrix} x_1 \\ x_2 \\ x_3 \end{bmatrix}=\begin{bmatrix} w_{11} & w_{12} & w_{13}\\ w_{21} & w_{22} &w_{23} \\ w_{31} &w_{32} &w_{33} \end{bmatrix}\begin{bmatrix} z_1 \\ z_2 \\ z_3 \end{bmatrix} ?x1?x2?x3?? ?= ?w11?w21?w31??w12?w22?w32??w13?w23?w33?? ? ?z1?z2?z3?? ?
Jacobian Matrix計(jì)算結(jié)果就為:
j f = [ ? x 1 / ? z 1 ? x 1 / ? z 2 ? x 1 / ? z 3 ? x 2 / ? z 1 ? x 2 / ? z 2 ? x 2 / ? z 3 ? x 3 / ? z 1 ? x 3 / ? z 2 ? x 3 / ? z 3 ] = [ w 11 w 12 w 13 w 21 w 22 w 23 w 31 w 32 w 33 ] = W j_f=\begin{bmatrix} \partial x_1/\partial z_1 & \partial x_1/\partial z_2 & \partial x_1/\partial z_3 \\ \partial x_2/\partial z_1 & \partial x_2/\partial z_2 & \partial x_2/\partial z_3 \\ \partial x_3/\partial z_1 & \partial x_3/\partial z_2 & \partial x_3/\partial z_3 \end{bmatrix}=\begin{bmatrix} w_{11} & w_{12} & w_{13}\\ w_{21} & w_{22} &w_{23} \\ w_{31} &w_{32} &w_{33} \end{bmatrix}=W jf?= ??x1?/?z1??x2?/?z1??x3?/?z1???x1?/?z2??x2?/?z2??x3?/?z2???x1?/?z3??x2?/?z3??x3?/?z3?? ?= ?w11?w21?w31??w12?w22?w32??w13?w23?w33?? ?=W
接下來(lái)看整個(gè)圖片的Jacobian Matrix,假設(shè)圖片大小是 d × d d\times d d×d:
根據(jù)上面的圖來(lái)看,只有對(duì)應(yīng)位置上的像素點(diǎn)做了乘 W W W的操作,而與其他像素點(diǎn)是沒(méi)有關(guān)系的,因而整個(gè)圖片的Jacobian Matrix可以表示為下圖:
只有對(duì)角線部分是由一個(gè)個(gè) W W W組成,其他位置都是0,根據(jù)線性代數(shù)的推論,整個(gè)矩陣的行列式的值為:
( d e t ( W ) ) d × d \left(det(W)\right)^{d\times d} (det(W))d×d
由于 W W W是3×3的矩陣,其行列式的值很容易算(可參加上面有公式)。
GLOW效果
接下來(lái)演示了OpenAI的GLOW模型效果GLOW模型效果,合成:
魔改笑臉,收集不笑的人臉和有笑容的人臉,通過(guò) G ? 1 G^{-1} G?1求向量后,分別求兩組人臉的平均,然后求差就得到從不笑到笑之間的向量為 z s i m l e z_{simle} zsimle?:
找一張要改笑容的圖片,通過(guò) G ? 1 G^{-1} G?1求向量后,加上 z s i m l e z_{simle} zsimle?,再過(guò) G G G得到結(jié)果:
其他工作
語(yǔ)音合成
Parallel WaveNet: Fast High-Fidelity Speech Synthesis
WaveGlow: A Flow-based Generative Network for Speech Synthesis