您當前的位置:首頁 > 舞蹈

Normalization Flow (標準化流) 總結

作者:由 Leo Guo 發表于 舞蹈時間:2019-03-18

最近系統的看了一下Normalization flow的相關文章,在這裡做一下總結。

0。 Preliminary

從Eric Jang的blog裡看到了一個很有啟發的結論,“Change of variables, change of volume”,記在最前面。

X

服從均勻分佈

Uniform(0,1)

,讓變數

Y=2X+1

,即Y是X的仿射變換,如圖所示:

Normalization Flow (標準化流) 總結

綠色正方形和藍色長方形分別表示兩個分佈

p(x)

p(y)

的機率分佈,由於任何一個機率分佈的積分均為1,所以他們的面積都是1。也就是說,當

X

水平被拉長兩倍後,豎直方向上也會相應的被壓縮成原來的一半。

我們用微分的角度來分析。給

x

一個變化量

dx

之後,

y

的變化量記為

dy

。由於要保證二者的變化量相等,則有:

p(x)dx=p(y)dy

進一步地,轉換後的機率分佈

p(y)=p(x) \left| \frac{dx}{dy} \right|

,取對數之後得到:

\log p(y) = \log p(x) + \log \left| \frac{dx}{dy} \right|

接下來考慮多變數的情況。先考慮兩個變數的情況,給定一個邊長為1的小方塊,給它乘以矩陣

\left[ a,b; c,d \right]

之後,就變成了一個平行四邊形,如圖所示:

Normalization Flow (標準化流) 總結

此時,平行四邊形的大小變為

ad-bc

,正是矩陣

\left[ a,b; c,d \right]

的行列式。在高維情況時依舊成立,即線性變換之後的體積等於轉換矩陣的行列式。

當變換是非線性時,每個點對應的體積變化是

\left| \det (J (f^{-1}(x))) \right|

,這裡

J(f^{-1}(x))

代表變換函式逆函式的雅可比矩陣,也就是

\left| \frac{dx}{dy} \right|

的高維形式。

作為總結,

y=f(x)\\ p(y)=p(f^{-1}(y)) \cdot \left| \det(J (f^{-1}(x))) \right| \\ \log p(y)=\log p(f^{-1}(y)) + \log \left| \det(J (f^{-1}(x))) \right|

也就是說,行列式可以被認為是變換

y=f(x)

的區域性線性體積變化率。

1。 Normalization Flow

接下來我會主要follow[1]這篇文章來介紹一下Normalization flow(標準化流)的概念。

在variational inference中,我們通常是在最佳化所謂的evidence lower bound(ELBO),即:

Normalization Flow (標準化流) 總結

在(3)式中,讓第一項為0的條件就是我們找到了一個與資料的後驗分佈一樣的分佈

p_{\phi}(z|x)=p_{\theta}(z|x)

,但一般的高斯分佈沒有辦法擬合足夠複雜的後驗分佈。因此,normalization flow應運而生。NF用一系列的可逆對映將原始分佈轉換成新的分佈,透過最佳化這一系列分佈,即可實現將簡單的高斯分佈轉換為複雜的真實後驗分佈的目的。

具體的,給定一個可逆對映

f: \mathbb{R}^{d}\rightarrow \mathbb{R}^{d}

,用它將隨機變數

z \sim q(z)

變換為新的變數

z^{

後,新變數的分佈為:

Normalization Flow (標準化流) 總結

第二項即是上一節中所講的逆函式的雅克比矩陣。接著,為了構建足夠複雜的分佈,我們可以用多個類似的可逆對映,對映套對映:

Normalization Flow (標準化流) 總結

用這樣的方式,當計算轉換後的分佈

q_{K}

的pdf時,不用顯式地計算

q_{K}

,而是透過初始分佈

q_{0}

的pdf以及對映的雅克比矩陣即可計算。而一般函式的雅克比矩陣的計算複雜度達到了

O(D^{3})

,在NF的應用中顯然不可行。因此,NF需要找到雅克比矩陣可以被高效運算的可逆對映函式。

在原文中,作者給出了兩種對映函式的選擇,分別是:

1)。 Planar Flow

Normalization Flow (標準化流) 總結

其中,

w,u,b

是要學習的引數,

h(\cdot)

是element-wise的非線性變換。該對映的雅克比可以在O(D)的時間複雜度內計算:

Normalization Flow (標準化流) 總結

2)。 Radial Flow

Normalization Flow (標準化流) 總結

Planar flow和radial flow分別是在平面空間和球形空間中對原分佈進行變換。下圖形象的表示了NF的不同長度(也可以叫層數)K與最終分佈的關係。

Normalization Flow (標準化流) 總結

這兩種簡單的對映函式只適用於低維的情況,為了處理高維的依賴,Autoregressive Flows(自迴歸流)是一種合適的選擇。

2。 Autoregressive Flows

關於自迴歸流,有三篇比較經典的文章,包括Real-NVP[2],MAF[3]和IAF[4]。這裡先講Real-NVP和IAF,MAF和IAF想法是映象的,就不贅述了。

需要說明的是,所有自迴歸流的模型都是建立在這樣的一條理論基礎上的:

三角矩陣的行列式是其對角元素的乘積。

形式上,第

i

維的變數

x_{i}

的生成只依賴於之前生成的變數

x_{1:i-1}

,即:

Normalization Flow (標準化流) 總結

2.1 Real-NVP

這篇文章引入了affine coupling layer(仿射耦合層)的概念。給定一個

D

維的輸入

x

d<D

,則該層的輸出

y

如下計算:

Normalization Flow (標準化流) 總結

s

t

分別對應上面的

\alpha

\mu

。也就是說,Real-NVP將輸入的一部分維度保持不變,而另一部分維度進行變換。這樣得到的對映函式的雅克比矩陣為:

Normalization Flow (標準化流) 總結

它的行列式可以被簡單的計算:

exp[\sum_{j}s(x_{1:d})_{j}]

。並且由於計算行列式的過程不依賴於

s

t

的行列式,所以可以選取任意複雜的函式作為

s

t

此外,這樣的對映函式還有一個性質,即它的逆對映的計算複雜度和正向的計算複雜度相等:

Normalization Flow (標準化流) 總結

也就是說,sampling和inference的時間複雜度相等,而且由於逆對映的計算也不依賴於

s

t

的逆,所以其函式的選擇可以任意複雜。

可以看出來,一層affine coupling layer只能變換輸入的部分維度,要想實現對整體的變換,可以將多層affine coupling layer堆疊起來。同時,用一個二元的mask

b

,即可高效的實現該層的計算:

Normalization Flow (標準化流) 總結

但在實驗中,Real-NVP的效果並沒有IAF和MAF好。最近在語音合成這個任務中,有兩篇文章[5,6]應用了Real-NVP,取得了不錯的效果。

2.2 IAF

Autoregressive Flow的sampling過程如下:首先隨機sample一個噪聲

\epsilon\sim N(0,I)

,其對應的變數

x_{0}=\mu_{0}+\sigma_{0}\odot\epsilon_{0}

,對於

i>1

x_{i}=\mu_{i}(x_{1:i-1})+\sigma_{i}(x_{1:i-1})\cdot \epsilon_{i}

。顯然這個過程是沒有辦法並行的,sample時速度很慢。IAF可以看做是上式的reparametrisation,即:

x_{i}=\mu_{i}(z_{1:i-1})+\sigma_{i}(z_{1:i-1})\cdot z_{i}

其中,

z\sim q(z)

。由於上式中

x_{i}

的計算不依賴於之前生成的

x_{1:i-1}

,因此可以被並行的計算:

x=\mu(z) +\sigma(z)\circ z

。也就是說,在sampling的時候,IAF可以被高效的並行。但是在inference的時候,想要得到

z_{i}

,還是需要根據

z_{i}=\mu_{i} + \sigma_{i}\odot z_{i-1}

依次計算,所以在訓練過程中,IAF是比較慢的。

相反的,MAF在訓練時快,sample時慢。Parallel-Wavenet實現了兩者的結合,用MAF作為teacher model,負責訓練時提供分佈的指導資訊;而用IAF作為student model,負責最終的sample。這個基於knowledge distillation的方法在語音合成上取得了很好的效果,同時也保證了生成語音的速度。

2.3 WaveGlow and FloWavenet

這裡再介紹一下Normalization Flow在語音合成上比較新的工作。WaveGlow[8]和FlowWavenet[9]的模型基本相同,也是同時放出來的,這裡按照WaveGlow的模型進行介紹。流程圖如下:

Normalization Flow (標準化流) 總結

WaveGlow引入了Real-NVP中的affine coupling layer,每一次對輸入向量的一半維度進行變換,另一半保持不變。上圖右側的轉換過程可以表示為:

Normalization Flow (標準化流) 總結

其中,

x_{a}

x_{b}

是將

x

等分的結果,FlowWavenet中是按照索引的奇偶來分的。

WN(\cdot)

是任意的變換函式,兩篇文章均用的non-causal Wavenet,也可以說是non-autoregressive的wavenet。該變換的雅克比矩陣的行列式為:

Normalization Flow (標準化流) 總結

前面提到過,Real-NVP每一層只能變換一部分的輸入。為了實現完整的變換,WaveGlow引入了與Glow[10]中相似的1x1 Invertible Convolution,因為還沒看過Glow,所以先留作一個坑。FlowWavenet中,作者則簡單的交換了輸入向量奇偶索引上的元素來實現這一目的。此外,兩個模型還有一些微小的差異,但motivation和idea都是一樣的。

3。 Conclusion

Variational inference中對後驗機率的估計一直是機器學習中很火的命題。Normalization Flow提供了一條可以efficient且flexible的擬合任意分佈的解決方案,即用一系列可最佳化的對映函式將簡單分佈對映為任意的複雜分佈。近幾年NF在語音生成等任務上取得了SOTA的效果,其在其他任務上的可擴充套件性值得期待。此外,理論上,Real-NVP和IAF都屬於finite flows,在[1]中作者還提出了infinitesimal flows,包括Langevin Flow和Hamiltonian Flow,由於時間關係還沒仔細調研,留待日後學習。

此外,本文的形成還參考了Eric Jang的兩篇Bl og及其中文版,特此致謝。

Reference

[1] Variational Inference with Normalizing Flows

[2] Density estimation using Real NVP

[3] Masked Autoregressive Flow for Density Estimation

[4] Improving Variational Inference with Inverse Autoregressive Flow

[5] WaveGlow: A Flow-based Generative Network for Speech Synthesis

[6] FloWaveNet : A Generative Flow for Raw Audio

[7] Parallel-Wavenet

[8] WaveGlow

[9] FlowWavenet

[10] Glow: Generative Flow with Invertible 1x1 Convolutions

標簽: flow  Real  NVP  IAF  變換