1. Introduction

1.1 問題提出

1) 神經網路的優缺點

  • 優點 : 在測試時能夠快速得到結果.
  • 缺點 : 因為其在訓練後無法再被更新, 因此神經網路在訓練完成後引用到測試集是已經變為了一種確定性演算法. 這樣的方法的有點

2) 高斯過程的優缺點

  • 優點 :
    • 高斯過程不是確定性演算法, 根據採樣可以獲得無數次個預測函數. 因此可以捕捉預測過程中的不確定性.
    • 高斯過程不需要大量時間去進行training. 並且在測試階段具有極強的靈活性.
  • 缺點:
    • 計算量大, 在進行矩陣運算時需要耗費很大計算資源.
    • 對於不同的kernel函數需要定義不同的優化過程. 無法向神經網路這樣簡介.

1.2 Nerual process

神經過程的提出就是為了改進上述兩種方法.

1) 相比於NN

  • 學習的是模型的分布, 而不是一個確定性模型.
  • 在根據已觀測數據分析新數據的時候能夠處理不確定性.

2) 相比於GP

  • 大幅降低訓練複雜度.
  • 移除了對於kernel函數的限制和依賴.

2. Model

2.1 作為一個隨機過程的神經過程

1) 隨機過程定義

下面摘自維基百科:

定義 : 在概率論概念中,隨機過程是隨機變數的集合。若一隨機系統的樣本點是隨機函數,則稱此函數為樣本函數,這一隨機系統全部樣本函數的集合是一個隨機過程

  • 我的理解 :
  1. 這裡的樣本函數皆為一個分布中抽樣出來的, 而我們要求的就是這個可以抽樣出函數的確定性分布. 然後從這個確定性分布中可以採樣出不確定性函數
  2. 其實本質上求這個分布的過程是一個求泛函最優解的過程. 我們求解神經網路的最優解是對一個函數進行最優化, 相對應的, 在泛函上進行最優化我們是要求出一個最優函數 q .
  • 基本概念 :

在隨機過程中, 每組數據都是一個變數, 有N個數據就有N個變數. 這些變數應該儘可能的滿足函數 f , 而函數 f 是從一個分布 mathcal{F} 中採樣出來的.

2) 符號定義

在本文中的符號定義:

  • f : 某一個採樣出來的函數.
  • mathcal{F} : 使我們所有求的確定性分布.
  • mathcal{F}:mathcal{X}	omathcal{Y} : mathcal{X},mathcal{Y} 分別是輸入數據和輸出數據. 其數據構成如下:
  • 
ho_{x_{1:n}} 是所有數據的聯合概率.

3) 隨機過程擁有的兩個特性

  • 可交換性 是指數據的無序性: 交換數據的順序, 聯合分布不變
  • 連續性 指的是, 一部分的數據的邊緣分布可用其他變數的積分來求得.

2.1(1) mathcal{F} 的推導過程

本節最好結合我的另外一個筆記, [高斯過程] 來看, 這樣會理解的深刻一些.

現在定義聯合概率為 p(f,y|x) .

1) 邊緣概率

首先, 我們知道我們從 mathcal{F} 可以採樣出很多很多的函數, 關於數據的邊緣分布應該符合下面的式子:

其中, f sim F .

在高斯過程中, F就是根據核函數和其對應的優化過程, 利用已觀測數據得出一個高維高斯, 這個高維高斯的維度是已觀測數據的size.

2) 加入雜訊

這一步相當於數據增強. 對應著高斯過程筆記的2.4節內容.

首先看條件分布 p(y|f,x)

這樣情況下的邊緣分布為:

3) 參數化泛函

我們在上面假設的是, f 可以是任何函數, 但是實際上這樣是無法計算的, 必須要要賦予 f 一個具體的函數形式, 然後通過調整這個函數的參數來具現化函數, 這裡為了提高模型capacity, 這裡使用的是神經網路 g(x,z) , 其中, x 是輸入, z 是參數.

注意!!!! 現在我們面對一個新數據 x 的時候, 做法從

從一個泛函中採樣出函數應用於與 x 變為了 large	o

從一個分布中採樣出參數 z, 將其應用於神經網路 g , 再將 x 輸入這個神經網路.

4) 再次強調現在的目標

從一個分布中採樣出參數 z, 將其應用於神經網路 g , 再將 x 輸入這個神經網路.

即, mathcal{F}=g(x,z) , 其中, zsim q(z)

那麼現在的目標就是求 p(z)

2.1(2) 變分法求 q(z)

變分推理詳見 PRML 第十章. 我也放上了我的一部分筆記, [變分推理(2)] 由於太多隻做了一部分, 結果還因為忘記保存丟了一大部分, 生氣啊, 不過放上的那些也夠用了.

我們現在要求的 q(z) 的變分後驗 q(z|x_{1:n},y_{1:n}) , 這裡用到了第二個神經網路. 但不是完全的輸入 x,y 輸出 z 的形式, 因為不是一組 x,y 對應一個 z , 其只為一個變數.

1) 分解邊緣分布

變分法是從分解邊緣分布 p(x) 開始的.

但是在這篇文章中的邊緣分布是 p(y_{1:n}|x_{1:n}) , 由於在後續的分析中, x_{1:n} 一直處於條件的位置, 因此為了簡化運算, 這裡將 p(y_{1:n}|x_{1:n}) 設為 p(y) .

之後的運算中也不會再出現 x , 但是有 y 的地方, 就肯定有一個條件的 x_{1:n}

分解公式為: egin{aligned} p(y) &= p(y,z)/p(z|y) = frac{p(y,z)}{q(z)} /frac{p(z|y)}{q(z)} 	o\ln p(y)&=lnfrac{p(y,z)}{q(z)}-ln frac{p(z|y)}{q(z)}&=int q(z)lnfrac{p(y,z)}{q(z)}dz - int q(z)lnfrac{p(z|y)}{q(z)}dz &=ELBO + KL(q||p) end{aligned}

2) 求下界ELBO

我們是希望能夠使得關於潛在變數的後驗分布 p(z|y) 去更新先驗分布 q(z) , 所以要最小化 KL 距離. 即, 最大化 ELBO, 由於KL距離的值一定是大於等於0的, 因此:

egin{aligned} ln p(y) &geq ELBO&=int q(z)lnfrac{p(y,z)}{q(z)}dz & end{aligned}

由於這個裡面的 p(y,z) 是無法計算的, 因此我們需要對其進行求解, 並且, 這裡的 q(z) 是做了零先驗假設, 但是在有上下文數據的情況下, 我們可以使用先驗, 即: q(z)	o q(z|y) .

下面的 p(z) 是我們假設的 z 的真實分布.

egin{aligned} ln p(y) &geq int q(z)lnfrac{p(y,z)}{q(z)}dz &=int q(z|y)ln frac{p(y|z)p(z)}{q(z|y)} end{aligned}

=mathbb{E}_{q(z|y)}Big[ ln p(y|z)-ln frac{p(z)}{q(z|y)} Big]&=mathbb{E}_{q(z|y)}Big[ sum_{i=1}^nln p(y_i|z)-ln frac{p(z)}{q(z|y)} Big]

x 加入式子就是:

3) 應用到實際的計算

我們是希望能夠用一些部分已知數據對 x_{1:m},y_{1:m} , 去求解另一部分的數據對應的 x_{m+1,n},y_{m+1:n} , 即: p(y_{m+1:n}|x_{1:n}, y_{1:m}) 這樣就有如下的式子(不想推了):

由於真實概率 p(z|x_{1:m},y_{1:m}) 是無法處理的, 因此這裡需要用變分後驗近似分布 q(z|x_{1:m},y_{1:m}) 去替代它.

這裡最難理解的一個地方是, 如何優化得到 q(z|x_{1:m},y_{1:m}) .

我的個人理解是, 這裡其實就是用的簡單的隨即下降加上一些對從分布中生成數據進行梯度下降的方法, 這個在第2.4節會細講.

2.2 Distribution over functions

這一節雖然短, 但是確實最精華, 最insight的地方, 推薦去看原文. 害怕自己理解不到位.

首先在講這一節的內容之前很有必要看第2.4節的內容, 其先直接去看2.4節.

  • Test 時的靈活性
    • 其中很重要的一點是, 訓練神經網路應該用全部數據去訓練. 是為了提供神經網路可以生成任何參數的能力.
    • 並且, 訓練完成後可以只選擇一部分數據去作為 上下文數據 去生成參數. 這就是提供了選擇性以及特性性.

這裡就可以做一件非常有意思的事情!!!!!! 比如用在對話分析的地方就可以進行語言風格分類, 然後根據提供的上下文語句實現不同風格的對話. 可以幫助你過聖誕節, 春節, 清明節, 七夕節(雖然和我沒什麼關係).

2.3 Global latent variable

還是接著上一步整體數據上下文數據的區別展開的討論.

當我們不向數據新的數據提供 上下文數據 的時候, 像2.4.2)展示的那樣, p(z) 用到的只是訓練 數據的平均信息.

而當提供了一些上下文數據的時候, 就會為 p(z) 提供先驗, 使其成為 q(z|x_{1:m},y_{1:m}) .

不同的上下文數據會提供不同的先驗. 產生不同的結果.

2.4 The Nerual process model

1) 概率圖

2) 計算圖

3) 三個組成

  • Encoder h : 利用一個神經網路 h 去處理 上下文數據(context data). 這裡經過對上下文數據的處理得到的是一個這寫上下文數據的特徵參數. 這個參數可以在下一步作為分布函數的參數. 這裡非常值得注意的一點是 : 訓練神經網路應該用全部數據去訓練. 通過上面的計算圖可以看出來, 在一次計算中, Encoder會被用兩次. 一次用於上下文數據, 一次用於目標數據.
  • Aggregator a : 這個部分就是將上下文數據的信息用來形成分布 q(z|x_{1:m},y_{1:m}) , 進而採樣 z. 這裡用的方法是:

?這樣就有了採樣出泛函參數 z 的分布, 也就有了泛函的形式 g(x, z) . 這個和Encoder一樣也要用兩次.
  • Conditional decoder g : 這一部分處理的是target數據, x_T,y_T 用的是最直接的神經網路前向計算 : y_T = g(z,x_T) .

4. Result

第四章感覺很重要, 但是我完全不想寫....

推薦閱讀:

相关文章