why-what-how方式的機器學習總結之四
玻爾茲曼機
why
1.之前看到的神經網路基本都可以表示成有向圖的形式,那必然也有無向圖的模型,這個就是玻爾茲曼機了。
2.神經網路在做梯度下降的時候有一定概率陷入區域性極小值,而玻爾茲曼機訓練的時候採用一種叫模擬退火的方法可以避免這種情況。詳情可見 隨機神經網路之玻爾茲曼機
3.對玻爾茲曼機加上一些限制後的受限玻爾茲曼機廣泛的應用於降維,特徵提取,自編碼器以及深度信念網路等等。
what
1.玻爾茲曼分佈,(1)BM 網路處於某一狀態(P(x=α))下的概率主要取決於此狀態下的能量 Eα,能量越低,出現的概率越大。(2)BM 網路處於某一狀態的概率還取決於溫度引數 T,溫度越高,不同狀態出現的概率越接近,網路能量也較易跳出區域性最小而搜尋全域性最小,溫度低的時候相反。詳情見 熵的理解(玻爾茲曼分佈)
2.玻爾茲曼機(BM)又稱作隨機神經網路
(1)BM的神經元只有兩種輸出狀態0和1
(2)BM的節點可以分為輸入節點,輸出節點和隱藏節點,但是這些節點之間是全連線的而且沒有沒有明顯的層次,連線形式可以如下圖。
(3)BM神經元輸入和輸出的關係類似於邏輯迴歸,其中netj是輸入,
但是受溫度T的影響較大,下圖可以看出對同一輸入,溫度高的時候輸出0和1的概率差距較小也就是隨機性大,溫度低的時候相反
(4)能量函式如下圖
當第j個神經元變更狀態能量變化如下
(5)模擬退火機制,根據 隨機神經網路之玻爾茲曼機 裡面的討論無論輸入大於0還是小於0,ΔE都是大概率減少的,但是比如輸入大於0時也有可能狀態為0如果原來狀態為1就可能ΔE>0,網路就有可能往能量升高的方向走,而且系統能量越高的時候這樣的概率越大,這就是模擬退火機制。
(6)BM當然是符合玻爾茲曼分佈的,任意兩個狀態出現的概率與之對應能量之間的關係,
(7)根據節點是否能同時是輸入和輸出節點,BM又分為自聯想型和異聯想型。
(8)BM的典型應用場景還沒有找到相關資料,先存疑。
3.受限玻爾茲曼機(RBM)
(1)受限體現在RBM是二分圖,層內無連線,可參考 受限玻爾茲曼機(Restricted Boltzmann Machine)分析 。
(2)RBM的網路結構,如下圖分為隱藏層和可見層,詳情可參考 受限玻爾茲曼機(RBM)學習筆記系列文章 以及 深度學習之受限玻爾茲曼機
(3)RBM的能量函式,
這個能量函式實際上是表示v和h的一種親密關係(見 從邏輯迴歸到玻爾茲曼機 )
(4)v和h的聯合概率分佈,其中Z被稱作配分函式,比較難計算
這裡我比較疑惑是怎麼從能量函式到概率分佈的,感覺用熵和狀態數應該能推匯出來。
我們訓練RBM的時候拿到的資料集合是
所以我們需要知道觀察資料v的概率分佈,這是個邊緣分佈
還可以得到可見層上所有節點狀態已知的時候,隱藏層某個節點被啟用(狀態為1)的概率
(5)接下來是損失函式和梯度下降法
求偏導數有,
上面的式子中對P(v)的求和計算複雜度是指數級的所以不能直接算,如果使用吉布斯取樣來做近似計算取樣計算量也相當大,所以就引出了對比散度演算法(CD)。
(6)對比散度演算法
對比散度演算法的基本思路是讓MCMC以訓練資料的狀態作為起點,這樣只需要很少的跳轉就能抵達RBM的分佈了。細節見 受限玻爾茲曼機(RBM)學習筆記(六)對比散度演算法
(7)RBM應用於推薦系統,輸入到可見層的是打分資訊通過RBM把隱含的特徵輸出到隱藏層,再把隱含特徵解碼到可見層以達到推薦的效果。有兩個問題,RBM的節點應該都是0-1變數,使用者的評分一般很稀疏怎麼處理確實評分。解決辦法是修改RBM的模型,可見層使用Softmax神經元,對於沒有評分的項使用特殊神經元,如下圖(更多細節看 基於深度學習的推薦系統之受限玻爾茲曼機 )。
(8)RBM如果只能是0-1的總感覺使用會很不方便,所以有實數值的RBM,0-1RBM節點的值相當於一個伯努利分佈而實數值RBM節點的值相當於一個高斯分佈。從能量函式的定義能看出來,
更詳細的推導就不寫了,可以參考 受限玻爾茲曼機(RBM)的非二值情況的推導 和 二值RBM與實值RBM理論及程式碼解讀
(9)深度玻爾茲曼機(DBM)加深RBM的層次就變成了DBM,結構如下
DBM訓練的方法有兩種,一種就是直接對整個分佈求導,求導的過程中用到了變分貝葉斯+gibbs取樣,第二種是逐層貪婪無監督學習演算法。
(10)深度置信網路(DBN)把DBM稍加改變靠近可見層的地方變成有向圖就變成了著名的DBN了。
DBN的應用可以看看這篇 DBN【深度置信網路】【受限玻爾茲曼機深層】詳解
變分法
why
經典的case是最速降線問題,高點a和低點b之間有任意多種線連線,可以是直線也可以是弧線,那每條線都可以看成一個函式,有一個小球靠著重力加速度從a運動到b,問沿著怎樣的弧線最快?
上面的問題公式化一下就是求下式的極值,
上面的函式中y是一個函式,要求這樣的極值就引出了泛函和變分法。抽象一點說變分問題在數學上的定義通俗地可以理解為泛函的極值問題(參考 最速降線的數學模型—變分法 )。
what
摘錄自 變分貝葉斯演算法理解與推導
1.泛函的概念,設對於(某一函式集合內的)任意一個函式y(x),有另一個數J[y]與之對應,則稱J[y]為y(x)的泛函。泛函可以看成是函式概念的推廣。 這裡的函式集合,即泛函的定義域,通常要求y(x) 滿足一定的邊界條件,並且具有連續的二階導數.這樣的y(x)稱為可取函式。
2.注意不要把泛函和函式複合g=g(f(x))弄混,函式複合g還是和x對應的,而泛函g只和f發生關係。
3.泛函極值的概念,當變數函式為y(x)時,泛函J[y]取極大值,對於極值函式y(x)及其“附近”的變數函式y(x)+δy(x),恆有J[y+δy]≤J[y]; 這裡自變數是y,δy(x) 稱為函式y(x)的變分。
4.泛函求極值和普通函式求極值類似,也是求導等於零,泛函J[y]取到極大值的必要條件是一級變分δJ[y]為0,其微分形式一般為二階常微分方程,即Euler-Largange方程。
how
1.這裡記錄一個變分法令我感覺很神奇的應用,來自 變分法和變分貝葉斯推斷
首先給出一個概率質量分佈函式f(x),定義該分佈下的資訊熵為:
由於f(x)是個概率所以有
概率分佈總有期望和方差,給出定義
使用拉格朗日乘子法求極值,並引入變分法推導(過程省略),可以得到
因此可以得出當概率質量分佈f(x)為正態分佈時,資訊熵最大,大自然偏愛正態分佈,是不是很神奇?!
2.變分貝葉斯推斷
(1)要解決的問題和吉布斯取樣以及EM演算法比較類似,也是求隱變數的方法。吉布斯取樣有一定隨機性而對比較複雜的後驗概率形式EM演算法計算複雜度會太高。
(2)計算過程有三個要素,用KL散度對原始分佈求近似,用獨立場假設化簡,用變分法求極值。詳細內容可看 變分貝葉斯演算法理解與推導
變分自編碼器(VAE)
why
普通自編碼器做特徵提取以及資料重構是ok的,但是想做資料生成,比如用提取到的特徵去生成新的資料比如生成音樂,生成圖片等等卻往往做的不好。主要的原因是普通自編碼器提取的特徵是不連續的,而VAE的隱含空間被設計成連續的,所以VAE就比較擅長做圖片生成音樂生成這些工作(較詳細的可以看 是什麼讓變分自編碼器成為如此成功的多媒體生成工具呢? 以及 論文最愛的變分自編碼器,不瞭解一下? )。
what
來自 變分自編碼器系列 , 變分自編碼器的原理和程式解析 做一些摘要整理。
1.VAE希望通過隱變數z分解描述資料X的分佈
2.模型大致的過程
和一些簡單自編碼器模型直接把z看做一個確定的隱變數不一樣,VAE把z看成一個高斯分佈從而提高了解碼時候的魯棒性。
3.更詳細的過程
模型認為一個訓練樣本和隱變數的關係是這樣的,先得到一套獨立的均值和方差引數,再用這兩個引數對應的高斯分佈生成隱變數z。模型的一個基本假設是p(z|x)是正態分佈。
這裡均值和方差都是未知變數,所以兩個神經網路來擬合
VAE還讓所有的p(Z|X)都向標準正態分佈看齊,這樣就防止了噪聲為零,同時保證了模型具有生成能力。
做法就是加入了額外的損失項,
4.重引數化技巧,主要是在模型的計算過程中需要用p(z|x)取樣出一個z來,而做優化的過程中需要求導,取樣的動作又不可導但取樣的結果是可導的,所以就做了變換。
5.損失函式計算(參考 變分自編碼器 ),生成模型中有一個難點是我不知道樣本資料的真是分佈,所以我也沒法判斷訓練分佈和真實分佈之間的相似度。我們先假設p(x)已經存在了。
那我們要優化的對數最大似然函式是
我們需要最小化訓練模型q和真實模型p的kl散度,經過變換我們轉過來求對數似然函式的變分下界,
然後用蒙特卡洛+minibatch來做估算,
上面的式子還有不少未知變數,我們再把先驗知識加入進來
最後有
6.VAE感覺牛逼的地方是並沒有直接假設資料的分佈,只是對資料做了一些相關假設,真正有泛函的感覺。
生成式對抗網路(GAN)
why
GAN的用途和VAE比較類似,也是可以學習特徵然後進行以假亂真的圖片生成,音樂生成等等,GAN生成圖片的時候沒有VAE可能會碰到的模糊問題。
GAN有一個較大的優勢是不用計算配分函式,不用做取樣這些特別麻煩的事情。
GAN要解決的最大的問題和VAE一樣,不知道目標分佈該是什麼,所以也不知道該怎麼寫損失函式。GAN的思路是不知道沒關係,就把未知的東東當成一個神經網路,慢慢訓練就知道了。GAN網路和它的名字“幹”一樣,主要思路就是搞一個生成網路G和一個判別網路D然後讓兩個網路幹起來,最後幹不動了,就意味著模型訓練好了。
what
主要摘錄自 GAN(生成對抗網路)學習筆記 , 互懟的藝術:從零直達WGAN-GP , 生成式對抗網路(GAN)基礎
1.主要結構如下圖,
左下的神經網路G是生成網路用於生成假樣本集,右邊的神經網路D是判別網路用來判斷樣本是否為真,訓練過程就是反覆生成和判別的過程,生成過程儘量讓D(G(z))接近1,判別的時候儘量讓D(G(z))接近0,直到兩個網路都飽和輸出0.5的概率。
2.形式化定義就是輪換D和G,D的時候最大化G的時候最小化下式