本文介紹一種在隨機神經元組成的多層網絡上的無監督學習算法。自下而上的「認知」鏈接把輸入轉化成後續隱層的表示(representation),自上而下的「生成」鏈接利用前一層的表示來重構數據。在wake過程,神經元用認知權值來驅動,並調整生成權值來增長下一層重構正確數據的機率。在sleep過程,神經元用生成權值來驅動,並調整認知權值來增長上一層產生正確數據的機率。算法
多層神經網絡的監督學習算法面臨兩個問題:須要一個「老師」指出網絡的預期輸出,須要一個方法把錯誤(誤差、殘差)信息告訴全部的鏈接。WS(wake-sleep)算法避免了這些問題。沒有外界指導信號相匹配時,須要一些別打目標來強迫隱藏節點提取潛在的結構。在WS算法中,目標就是學習容易描述但可以使輸入精確重構的表示(recognition)。咱們能夠量化這個目標,想象一個交互遊戲,每一個輸入向量與接受者進行通訊,第一次發送隱藏的表示,而後發送原始輸入向量和他從隱藏表示中獲取的的TD(top-down)重構之間的差別。學習的目標是最小化「描述長度」,就是用這種方法與輸入向量通訊須要的總數據位數。實際上並無進行交互,但最小化必需的描述長度迫使網絡學習經濟的(開銷少的)表示,並可以捕捉數據中的規律。網絡
這個神經網絡有兩組不一樣的鏈接。自下而上的「認知」鏈接是用來把輸入向量轉化成一層或多層隱藏節點中的表示。而後,自上而下的「生成」鏈接是用來從隱含的表示當中重構一個輸入向量的近似。對這兩組鏈接的訓練算法可用於多種隨機神經元,但簡單起見,咱們只用二元隨機節點,只有0和1兩種狀態。節點 的狀態是 ,機率以下所示:框架
是節點的偏置, 是與節點 的鏈接權值。有時候節點由生成權值驅動,有時候由認知權值,但都用這同一個公式(圖1)。學習
在「wake」階段,節點自下而上驅動,使用認知權重,在第一隱層產生一個輸入向量的表示,在第二隱層產生第一隱層的數據的表示…。全部層的表示合起來叫作輸入數據的「整體表示」,在整體表示 中隱藏節點 的二元狀態表示爲 。這個整體表示能夠用來把輸入向量 傳達給接受者。根據香農編碼定理,若是發送者和接受者約定的分佈中某事件的機率爲 ,則傳輸他須要 位數據。咱們假設接受者知道自上而下的生成權重,於是這就能夠創建一個傳達須要的約定機率分佈。首先,頂層隱藏層的節點 的活動被告知使用分佈 ,這是經過對節點 的單獨的生成偏置權重套用公式1所得的。而後,下面各層的節點的活動被告知使用分佈 ,這是經過對上層已有的狀態 和生成權重 套用公式1獲得的。節點 的二元狀態的描述長度是:測試
使用表示 的輸入數據 的描述長度就是全部隱藏層隱層狀態的開銷加上給定隱層狀態後描述輸入向量的開銷。優化
是 層隱層的序號, 是輸入節點的序號,其狀態是 。編碼
由於隱層節點狀態是隨機的,因此輸入數據的表示並不老是一致的。在「wake」階段,認知權重決定了一個整體表示上的條件機率分佈 。然而,若是認知權值肯定了,有一個簡單的在線方法能夠修改生成權值,來最小化 ,這是用隨機選取的整體表示描述輸入向量的指望開銷。用認知權值選擇一個整體表示後,每一個生成權值都被按比例調整到公式3的導數,經過使用純局部delta規則:設計
是 學習速率。儘管節點是用認知權值驅動的,在wake階段訓練的卻僅僅是生成權值。訓練使得整體表示中的每一層都能更好的重構下一層的活動(激活狀態、數據)。component
對 最小的 ,看起來認知權值彷佛應該被調整到使它的機率最大。但這是錯的。當有不少方法來描述輸入向量時,可以設計一個隨機的編碼方案,該方案利用各類表示的熵。那麼,開銷(cost)就是:遊戲
第二項就是認知權值分配給不一樣的表示的分佈的熵。好比,若是有兩個表示,每一個開銷是4bit,若是咱們用相同的機率使用他們,聯合開銷只有3bit(爲啥這麼定義?)。這就相似物理系統中不一樣狀態的能量聯合起來抑制整個系統Helmholtz自由能的方法。在物理中,當狀態的機率和他們在玻耳茲曼分佈(溫度爲1)下的開銷呈指數關係時, 被最小化。
因此,與其調整認知權值使全部機率都集中在最低耗的表示上面。咱們更應該嘗試讓認知分佈 儘可能與玻耳茲曼分佈 相似,對於給定數據和網絡的生成模型,它(玻耳茲曼分佈)是表示(recognition)的後驗機率。精確計算 是指數級的複雜度,但有一個簡單的方法計算近似正確的隱藏節點的目標狀態,從而能夠訓練自下而上的認知權值的分佈 。
咱們撇下認知權值,用生成權值來驅動整個網絡,從頂層開始,向下一直運行到輸入節點。由於節點是隨機的,重複這個過程一般會在輸入節點產生不少不一樣的「fantasy」向量。這些向量提供了一個生成模型關於世界的無偏採樣。生成一個fantasy以後,咱們隨後調整認知權值來最大化重現生成fantasy的隱層狀態的對數機率。
是對於特定的fantasy,隱藏節點和輸入節點的狀態。 是認知權值做用時,節點k爲1的機率。 是下一層的機率。咱們把這個叫作算法的「sleep」過程。相似wake過程,他只用到本地的信息。Sleep過程的一個潛在缺點是,咱們但願認知權值能更好的擬合真實的緣由(生成訓練數據的),但sleep過程實際上是對fantasy作最優化。在訓練過程早期,fantasy和訓練數據的分佈很不同。
認知權值產生的分佈 在每一個隱層是一個factorial(因子的,乘積的)分佈,由於給定下一層的狀態後,認知權值產生的各節點的狀態是條件獨立的。神經網絡用factorial分佈是天然的,由於 個可選的隱藏表示的機率分佈能夠用 個數字來指定而非 個。可是,這個簡化會使 很難徹底匹配公式6中的後驗機率 。好比說,當某一層的活動向量取決因而否激活了上一層中a節點和b節點中任意一個而非同時激活他們的時候,很難捕捉到「explaining away」效果。
把 限制成factorial分佈多是一個嚴重的限制。但他不是個致命的缺陷,由於算法的wake過程調整生成權值以使 更接近 ,從而限制 在爲非factorial分佈建模時的無能致使的損失。爲了說明爲何這個效果出現,咱們把公式5寫成另外一種形式:
公式8的前兩項就是當前生成模型下的 。最後一項,保證非負,是 和 的KL距離。 就是用 時的描述長度超出 的數量。因此,對於兩個給 分配了相等機率的生成模型,給定生成權值後最小化公式8就會傾向於支持後驗機率最接近 的模型。在生成模型的可能空間裏,wake過程找出使近似factorial的後驗機率提升的樣本。
由於咱們作了幾個近似,全部算法必須經過效果來評估。圖2顯示他能訓練一個正確的多層生成模型。對於一個簡單的問題。此外,進過訓練,公式8中的KL距離只有0.08bit,說明這個過程產生了一個有幾乎完美factorial後驗機率的生成模型。咱們還在多變的手寫數字圖上測試了他產生模型的容量的兩個量化方面(圖3a)。訓練十個不一樣的模型,每一個數字一個,咱們可以準確識別新數字,經過看那個模型給出最實惠的表示。圖3b顯示,當訓練一個數字模型後,網絡生成的fantasy很接近真實數據。咱們一樣對全部數字訓練了一個單獨的大網絡,並確認了他可以像這是個單獨網絡同樣好的壓縮新的數字,並且比簡單編碼好兩倍。
神經網絡的兩個普遍應用的無監督訓練算法是principal components analysis和competitive learning(有時候也叫vector quantization or clustering)。他們均可以被看做只有一個隱層的最小表示程度方法的特例,並且區分認知權值和生成權值不必,由於他們常常是相等的。其餘的學習框架用分離的前饋和反饋權值。相比Adaptive Resonance Theory [8], Counter-Streams model [9],和Kawatoetal’s algorithm [10],wake-sleep算法把無監督學習的問題看做統計學——一個能精確的捕捉輸入向量的結構的生成模型。Kawato的模型用前向和反向模型來表達,是咱們的生成模型和認知模型的另外一種表達。wake-sleep算法最接近Barlow的思想和Mumford的建議的靈魂,前者是關於可逆的階乘表示,後者將Grenander的生成模型方法映射到大腦。
無監督學習的最小表示長度方法用來提升人工神經網絡的模式識別能力。但wake-sleep學習算法的簡單性使得它在生物學方面頗有趣。好比,Hasselmo已經提出輸入到皮層的膽鹼能能夠調節正在進行的活動的前饋控制的程度。有一個奇怪的巧合,使用生成模型的感知系統的想法由Helmholtz主張,因此咱們把經過最小化公式5表示的自由能來配置一個數據的生成模型的神經網絡都稱做「Helmholtz機」。
圖1:一個三層HM(Helmholtzmachine)。底層表明原始感官輸入節點。I,J,K 層的節點都是認知鏈接(實現)和生成鏈接(虛線)的全鏈接節點。J層節點 的二元狀態是 。 由認知權重決定, 由生成權值決定。當節點由下而上驅動, 的機率是 ,當由上而下驅動時,這個機率是 。
圖2:a)4*4圖像的一個生成模型。頂層決定使用水平仍是豎直的條。下一層決定所選擇的方向的每一個可能的條是否應出如今圖像中。b)一個由a中模型用移除的模糊的全白圖像產生的樣本圖像。一個包含16個輸入節點、第一層隱層有8個節點、第二個隱層有1個節點的神經網絡,在用生成模型產生的2*106個隨機樣本上訓練。訓練以後,sleep階段產生的機率分佈幾乎是正確的。c)進入和離開第一層隱層8個節點的鏈接的生成權重。正權重是白色,負權重是黑色,並且面積和幅度成比例。顯示的最大權重是14.1。節點的生成偏置在每一個塊的右上方顯示,它鏈接上層惟一一個節點的生成權重在左上方顯示。最右邊的塊表示輸入節點的生成偏置。爲了產生一個容易解釋的解決方案,輸入節點的生成權重限定爲正。若是容許爲負的話,算法能獲得正確的分佈,但方法很複雜,同時也須要第二個隱層有更多的節點。
圖3:手寫數字被規格化並量化成8*8的二值圖像。左邊展現了每種數字的24個樣例。每一個數字都訓練了一個單獨的網絡,右邊展現了每一個網絡的24個產物。每一個數字的變換都進行了很好的建模。當選擇能最小化描述長度的網絡做爲分類結果時,錯誤率是4.8%。對於一樣的數據,最近鄰分類錯誤率有6.7%,BP神經網絡訓練一個有10個輸出節點的網絡錯誤率最小也有5.6%,哪怕咱們用測試數據來最優化隱層節點數量、訓練時間、和權值衰減。