Lecture 13 BP算法的討論和置信網——Hinton課程

轉載自https://www.cnblogs.com/shouhuxianjian/p/4529169.html

這是HInton課程第13課,這一課有兩篇論文可以作爲課外讀物《Connectionist learning of belief networks》和《The wake-sleep algorithm for unsupervised neural networks》,(下文中採樣和樣本是同一個單詞,泛化和生成是同一個單詞,我是按照自己的理解在不同的上下文中進行不同的翻譯,如果一個理解不通,可以換另一個)。

一、BP算法的Ups和downs

在這部分,將會介紹BP的歷史,先介紹在70和80年代它的來源,然後介紹爲什麼在90年代它失敗了,也就是爲什麼嚴謹的機器學習研究放棄了它。有一個流行的觀點關於爲什麼這會發生,而且現在我們可以說這個主流觀點是錯的,真正被放棄的原因是因爲當時的計算機太慢了,而數據集也很小。這裏會通過介紹簡短的文檔來進行總結。在1995年兩個機器學習研究者之間有個賭注,關於人們相信什麼和他們錯在哪裏了。

BP在70和80年代被獨立的發明了好幾次,在60年代後期Bryson和Ho隨着控制原理髮明瞭BP的線性版本。Paul Werbos聽了他們的課,然後發現其實這個可以是非線性的,在1974年他的論文中,他公開了第一個BP合適的版本。Rumelhart和Williams和Hinton在1981年沒瞭解到Paul Werbos的工作的時候也發明了這個方法,不過他們試過了,發現第一次結果不是那麼理想,所以他們放棄了。在1985年David Parker 再一次發明了,同年LeCun也發明了一次,同樣的在1985年,Hinton回去再試了一次,然後發現其實這個效果還是挺好的。在1986年,他們用一個真實的令人信服的例子來說明該方法可以做的事情,並發表了論文。結果顯示BP在學習有着非線性特徵檢測器的多層上有着很好的前景。不過還是沒有像前景想象的那麼好,在1990年後期,大多數嚴謹的研究者開始放棄BP算法。例如在David Mukai的筆記中,他幾乎沒提到BP,不過對於心理學模型來說,仍然被心理學家廣泛的使用着,同樣的廣泛用在實際的應用中,例如信用卡欺詐檢測。不過在機器學習中人們認爲它已經被SVM取代了。

主流的解釋在90年代後期BP上發生的事情是它沒法利用多層和非線性特徵,這在卷積網絡中站不住腳,不過通常來說,在多層隱藏層的情況下,人們沒法使用BP來訓練前饋NN來做一些令人印象深刻的事情,除了一些toy的樣本。同樣的BP在遞歸(recurrent)NN和深度自動編碼器(Deep ae)中不work,這將會在後面介紹。RNN也許是它最興奮的地方了,所以才成爲了最令人失望的地方,因爲人們沒法讓該網絡work的很好。通過對比,SVM卻work的很好,他們不需要許多的專業知識讓它work起來,他們生產可重複的結果,而且他們有着更好的原理。而且他們有着許多令人着迷的理論。所以這就是主流的認爲BP被拋棄的解釋。從一個更據歷史的角度來說,我們可以知道爲什麼它失敗了。計算機是千百倍的慢,而且有標籤的數據集卻太小或者太少。同樣的,對於深度網絡來說,網絡太小了,而且也沒有去有意識的初始化,所以在深度網絡上的BP不能很好的work,因爲求導的梯度傾向於消失掉了,而且因爲初始化的權重通常太小了。這些問題纔是阻止BP被重視的原因。對於類似視覺和語音的任務來說,最終它贏得了勝利。

所以我們需要區分不同種類的機器學習任務。有着用統計學來研究更典型的任務,而且有着有着更多的人們用人工智能來研究。所以在統計學的來說,你通常有着低維度的數據,一個統計學家認爲100維就是高維度數據了,而在人工智能領域中認爲例如圖像或者表示語音的係數通常都是超過100維的。對於統計學的來說,通常數據中有着許多的噪音,而在人工智能方面,他們認爲噪音不是真正的問題。對於統計學的來說,通常在數據中沒有很多結構,而且能夠通過一些相當簡單的模型來進行抓取結構,而對於人工智能方面,通常在數據中是有着超多的結構的,所以如果你處理一組圖片,它有着高度結構化的數據,不過這個結構太複雜以至於沒法使用簡單的模型來抓取。所以在統計學的來說,主要的問題是從噪音中劃分出真正的結構,而不是考慮這個噪音其實也是一些結構,這可以通過貝葉斯NN很好的解決,不過對於通常的非貝葉斯NN來說,這不是它們擅長的問題。所以對於類似這樣的問題來說,如果你要做迴歸的話會考慮使用SVM或者被稱爲高斯過程(Gaussian Process)的方法解決,這會在稍後介紹,對於人工智能方面,主要的問題是找到一種方法來表示所有的這些複雜的結構使得它可以被學習。顯而易見的事情就是試圖處理設計合適的表徵,不過事實上,讓BP來指出什麼樣的表徵被使用更容易,只需要給定一些多層和使用一些計算能力使得決定表徵的具體內容。

現在來簡短的介紹下SVM。這裏不會介紹它是如何工作的,不過這裏會說到HInton認爲的SVM的侷限性所在。所以有好幾種方法來理解SVM,這裏會給出兩種不同的觀點。對於第一種觀點來說,SVM只是感知機的轉世,並且帶有一些更加聰明的技巧比如核技巧罷了。所以idea就是通過處理一些輸入,然後擴展原始的輸入到一個非常大的非線性層,不過同樣這是非自適應的特徵,所以這只是像有着很大的特徵層而沒法學習的感知機。然後你只能學習一層自適應權重,該權重來自特徵到決策單元之間。SVM有一個非常聰明的方法來避免當學習這些權重的時候過擬合問題。它爲了在高維度空間中尋找被稱之爲最大邊界超平面,而且他們可以乾的比你認爲的更高效,這就是它爲什麼work的這麼好的原因。、

第二個觀點關於SVM是作爲一個更聰明的感知機,不過它有着完全不同於他們在使用的特徵的概念,所以按照第二種觀點,訓練集合中的每個輸入向量都是用來定義一個特徵的。這裏使用不一樣的單詞是爲了說明這是一種完全不同於第一種的特徵。每個特徵給出一個標量之用來作爲介於測試輸入和具體的訓練輸入之間的全局匹配。所以粗略的來說,它是用來測量測試輸入和一個具體的訓練樣本之間的相似程度。然後這是一種聰明的同時尋找如何權衡這些特徵使得做出正確決定和特徵選擇上的方法,也就是決定哪些特徵不需要使用。所以儘管這些觀點聽起來極端的不同,他們只是兩種相互代替的方法來觀察同一件事情罷了。在這兩種情況中,它使用非自適應特徵和一層自適應權重層。這限制了你能做的事情,你沒法學習多層的表徵

這是1995年的一份歷史性的文件。它是Yann LeCun給Hinton的,而且這是larry Jackel(在貝爾實驗室領導者自適應系統研究團隊)和Vladamir Vapnik(是SVM的支持者)之間的賭局。在2000年的時候Larry Jackel下了這個賭局,人們將會懂得爲什麼在大型數據集上使用BP算法訓練的大型NN可以很好的work。也就是人們會懂得原理上的條件和適用範圍。Vapnik認爲這不可能,不過他也下了另一個賭局,如果他指出了其中的一個,那麼他同樣算贏了。而且Vapnik在2005年,認爲沒人會使用BP來訓練大型NN。結果顯示,他兩都錯了。使用Bp訓練大型NN的約束在於不是它沒有個好的原理或者說它是無用的,而是我們沒有足夠大的計算機或者足夠大的數據集。這是實際操作上的限制而不是原理上的限制。

二、置信網

在1990年Hinton放棄了BP的一個原因是因爲它不需要太多的標籤,回頭來說,其實是因爲Hinton沒有足夠數量有標籤的數據集。而且HInton同樣受到人們成功的使用幾乎沒有標籤的數據學習的影響。然而,Hinton沒有想要放棄使用梯度下降學習一羣權重的優勢。所以問題就是,是否有另一個目標函數我們可以用來做梯度下降?這個顯而易見的地方就是通常的模型的目標函數都是爲了輸入數據建模而不是預測標籤。這種在統計學和人工智能中的很好的網狀的運動叫做圖模型。圖模型的idea是通過結合不同的圖結構來表徵變量是如何依賴於另一個的。在給定其他變量的觀測到的值的情況下推論另一個變量的概率的實數計算,玻爾茲曼機實際上是一個非常早期的圖模型的例子,不過它是無向圖模型。在1992年,Radford Neal 指出使用在玻爾茲曼機中同樣種類的單元,可以用來做有向圖模型,比如sigmoid置信網。問題就變成了我們如何來學習sigmoid置信網?

深度網絡的第二個問題就是學習時間沒法很好的縮放。當有許多隱藏層的時候,學習是非常慢的。你可能會問了爲什麼?我們現在知道其中的一個原因是因爲我們沒有以一種有意義的方法來很好的初始化權重。然而另一個問題是BP可能會陷入不好的局部最優,不過這通常來說還不錯,所以BP還是很有用的,不過我們現在可以說對於深度網絡陷入的局部最優的狀態來說,如果以很小的權重開始,通常都是遠離最優的。有退回到更簡單的模型能夠使用凸優化的可能性,不過Hinton認爲這不是個好idea。數學家喜歡這樣做是因爲這樣他們就可以證明了。不過在實際中,你只是爲了遠離真實數據的複雜性而已。

所以一個解決Bp的侷限性的方法是通過使用無監督學習。idea就是我們想要保持爲了調整權重而使用梯度方法和隨機mini批量下降方法的有效性和簡潔性。不過我們使用這個方法去對感知輸入的結構進行建模,而不是對輸入和輸出之間的關係進行建模。所以idea就是權重是被調整成最大化這個會生成感知輸入的生成模型概率,我們已經在學習玻爾茲曼機中看到了。一個考慮這個方法就是,如果你想要做計算機視覺,你可以首先做計算機圖形學。首先是因爲計算機圖形work而計算機視覺不行。正如我們在玻爾茲曼機中看到的,生成模型的學習目標是最大化觀測到的數據的概率而不是最大化給定輸入的情況下標籤的概率。然後問題來了,什麼樣的生成模型應該被學習?我們可以學習一個基於能量的模型就像玻爾茲曼機,或者我們可以學習一個由理想化神經元組成的因果模型,這就是我們首先看到的。最終,我們會學習一些這兩種的混合模型,這就是最後要做的。

所以在介紹由神經元組成的因果置信網之前,先簡短的介紹下人工智能和概率的背景。在1970年代和1980早期年代,人工智能的人們都不相信反概率,這時候Hinton是一個碩士生,如果你提到概率,如果你提到概率,那麼你就是愚蠢的,而且你沒法理解爲什麼。計算機們都是離散單一處理的,如果你引入概率,那麼概率只是用來爲了推論任何事情而已。很難去確認多少人反對概率,所以這裏是一個測試。上圖左邊的這段話是Patrick Henry Winston 的第一本AI教科書的第一版。這是當時的普遍觀點。Winston是MIT AI 實驗室的領導者;而上圖的右邊是另一個的觀點,是由Jhon Von Neumann在1957年在他的沒發表的手稿中的。Hinton認爲如果Neumann還活着的話,人工智能的歷史會有許多不同的。

所以,概率事實上找到了他的方法進入AI,就是被稱之爲圖模型的東西,這是有圖論和概率論結合得到的。在1980年代,在AI中有許多專家系統起作用,他們使用規則袋來應對任務,比如藥物診斷或者探索礦井。現在因爲有着這些實際操作上的問題,使得處理起來變得難以確定,他們不能只使用那些任何事情都確定的toy樣本來做實驗。AI中的人們不喜歡概率即使當他們在處理不確定事情的時候,他們也不想用概率。所以他們使用他們自己的那些不涉及概率方式來處理這些不確定性。你可以事實上證明這是一個壞賭注。圖模型是由Pearl,Heckman,Lauritz,和許多其他人引入的,他們分享的概率實際上比由那些做專家系統提出的ad hoc方法更work。離散圖擅長表示依賴於其他變量的變量,不過一旦你使用了這些圖,那麼你需要對那些表示概率規則的實數值計算,所以你可以在給定其他點的觀測的數據的基礎上計算圖中某些點的期望值。置信網是圖模型中的人們給圖的一個具體的子集命名的,這個子集中的圖都是有向無環圖。通常來說,他們使用稀疏連接,如果這些圖都是稀疏連接的,那麼就有更聰明的推論算法來有效的計算這個未觀察到節點的概率。不過這些聰明的算法都是以節點的個數指數級增長來推論每個節點的,所以對於密連接節點來說這不work。

置信網是有向無環圖,由隨機變量組成的,上圖就是一個例子。通常來說,你也許會觀察到任何一個變量。這裏先約束這個網絡,使得找你能觀測到葉子節點。所以我們想象的就是這些未觀測到的隱藏causes,他們可能是lead(這個不知道翻譯成什麼好),然後最後他們會影響到觀測到的effects。一旦我們觀測到一些變量,那麼就有兩個問題需要解決。第一個就是推論的問題,爲了推論出未觀測到的變量的狀態。當然我們沒法具體的來推論他們,所以我們接下來做的就是用未觀測到變量的概率分佈。如果在給定觀測到的變量的基礎上,未觀測到的變量之間不是相互獨立的,那麼這個概率分佈可能就是以涉及到的項的數量的指數級別的繁瑣了。第二個問題就是學習問題。也就是給定一個由觀測到的所有葉子節點狀態的向量的訓練集合之後,如何調整變量之間的交互使得網絡變得更好的泛化(generate)這些訓練數據?所以爲了調整這個交互,可能會涉及到決定哪個節點會被其他節點影響,同樣的決定這個影響的強度。

所以這裏先介紹圖模型和神經網絡之間的關係。早期的圖模型使用專家來定義圖結構和條件概率,通常需要一個藥學專家,然後問他很多問題,然後在做一個圖,並理解每個節點的含義。他們通常還有條件概率表,用來描述一組父節點的值如何決定這個節點的值的分佈。他們的圖都是稀疏連接的。他們關注的初始化問題是如何做正確的推論。最初,他們不關心學習問題,是因爲知識都來自於專家。

相比較來說,對於NN,學習總是一箇中心問題,而且手工接線(將節點連接起來)這些知識總是不爽。當然了,在例如CNN的這些基本的特性中,接線是一個非常有意義的事情。不過基本上,網絡中的知識都是來自於訓練數據的學習的,而不是來自於專家。NN的目標不是爲了可解釋性或者稀疏連接來使得推論變得容易的。然而,還是有置信網的NN版本。

所以,如果我們想考慮如何在理想化的神經元上得到生成模型,基本上有兩種生成模型。基於能量的模型,你通過使用對稱連接來講二值隨機神經元連接起來,然後你得到了一個玻爾茲曼機。正如我們看到的,一個玻爾茲曼機是很難學習的,不過如果我們限制了他的連接,那麼就很容易學習一個RBM了。然而,當我們這麼幹的時候,我們之學到一層隱藏層。所以我們也放棄了許多有着多層隱藏層的NN的很多特性,就爲了讓學習變得容易。

另一種模型就是因果模型。這是由二值隨機神經元組成的有向無環圖。當你這麼做之後,就得到了一個sigmoid置信網。在1992年 Neal以unrude模型就稀罕上圖下面那個模型一樣,然後將其與玻爾茲曼機進行了對比,結果顯示sigmoid置信網比較更容易學習。所以一個sigmoid置信網只是一個置信網,不過其中的所有的變量都是二值隨機神經元。爲了從這個模型中生成數據,你需要考慮頂層中的神經元,你需要在基於他們的偏置的基礎上決定他們是1還是0.所以你是隨機決定的,然後給定頂層中神經元的狀態,做出隨機決定關於這些中間層的神經元應該做什麼。然後給出他們的二值狀態,你做出決定這些可視effects應該是什麼。通過這些操作的結果,一個來自於層到層的因果結果,你可以得到一個你的NN相信的可視值向量的無偏估計樣本。所以不想玻爾茲曼機,在因果模型中,這是容易生成採樣的。

三、學習sigmoid置信網

這部分,將會介紹爲什麼學習sigmoiud置信網是很困難的。然後在接下來的兩節中,將會描述兩種不同的方法來進行學習。關於學習好消息是sigmoid置信網不像玻爾茲曼機,我們不需要兩個不同的階段。我們只需要玻爾茲曼機中的正階段即可。這是因爲sigmoid置信網是局部歸一化模型,所以我們不需要處理分區(partition)函數或者他的偏導。另一個關於sigmoid置信網的好消息是如果我們在給定數據向量的基礎上,基於隱藏單元從後驗分佈中得到無偏估計樣本,那麼學習就可以變得容易起來。也就是我們可以用最大似然學習得到的指定的梯度,以mini批量隨機的方法進行。問題是很難在基於隱藏單元上從後驗分佈中得到無偏估計樣本,這很大程度上是因爲Judeo Po 稱之爲explaining away這個現象的原因,在這部分中會解釋explaining away,理解他很重要。

現在,先來說下爲什麼學習sigmoid置信網是很難的。正如我們看到的,生成一個無偏估計樣本是很容易的,一旦你完成了學習。也就是一旦我們決定了權重和這個網絡,我們可以容易的通過讓這個模型生成樣本來觀察這個網絡相信的事情。這是自上而下的操作,一次一層。這很容易是因爲這是因果模型。然而,即使如果我們知道這些權重,還是很難去當我們觀測到可視effects的時候基於隱藏causes去推論這個後驗分佈。原因是因爲這些隱藏causes的可能的模式的數量是以隱藏節點數量的指數級的。甚至從這個後驗中得到一個採樣也是很困難的,這是我們在做隨機梯度下降的時候需要的。所以在給定這些從後驗中採樣的困難,很難說我們如何學習一個有着百萬級參數的sigmoid置信網。這對於來自一個正常使用的圖模型來說是一個非常困難的regime。有着可解釋性的模型,而且這些模型試圖學習成打的或者上百的參數,不過他們通常也不用來學習百萬級的參數。

在介紹我們可以使用的方法和從後驗分佈中採樣之前。先說下如果我們可以得到這些樣本的情況下,學習規則應該是什麼,所以如果我們在給定觀測到的數據的基礎上從隱藏狀態的後驗分佈得到了一個無偏估計樣本,然後學習就變得簡單了。上圖右上那個圖就是一個sigmoid置信網的一部分,並假設每個節點都有一個二值。所以對於節點j 來說,他的二值就是Sj,這個向量二值是節點的全局組態,是從後驗分佈中採樣得到的。爲了使用最大似然學習,我們所要做的就是最大化推論單元二值狀態概率的法則,可以從他的父節點的推論得到的二值狀態進行生成。所以這個學習規則是局部而且簡單的。單元i 的父節點將單元 i 打開的概率是由一個邏輯函數給出的,這個函數設計到父節點的二值狀態,我們需要做的就是讓這個概率相似於實際觀測到的單元i的二值,這裏就不推導了。關於權重wji的最大似然學習規則是簡單的按比例進行改變,按照單元 j  的狀態乘以單元 i 的二值狀態和i 的父節點會打開的二值狀態的概率之間的差異。所以總結下,如果我們有對所有隱藏節點的二值狀態的賦值,那麼在我們通常的隨機方法上就很容易進行最大似然學習。我們從後驗上進行採樣,然後基於這個採樣結果來更新權重。然後我們均化這個基於mini批量樣本上的更新。

所以我們回到之前的問題,爲什麼從後驗中進行採樣是很困難的。原因是因爲在給定觀測到葉子節點的數據向量的情況下,從基於隱藏節點上得到的後驗上得到一個無偏估計樣本是很困難的,有一種現象叫做explaining away。所以如果觀察上圖中那個圖,它有着兩個隱藏causes,和一個觀測到的effect,如果看到這個偏置,你可以知道這個房子跳躍的可觀測的effect是不會發生的,除非有任何一個causes發生了,不過如果其中的一個causes發生了,那麼20-20,房子跳躍由於任何一個causes引起的概率就爲一半。每一個causes自身看上去不會同時發生而使得房子跳躍,所以如果你發現房子跳躍了,一個可說的通的解釋就是一輛卡車撞擊了房子,而另一個不同的可說的通的解釋就是發生地震了,每一個的概率都是差不多e-10,然而,房子自發跳躍的概率差不多爲e-20.然而,如果你假設兩個隱藏causes有概率爲e-20,這看上去極端的不可能,即使房子確實跳躍了。所以假設發生了一個地震,減去因爲卡車撞擊引起的概率,然後我們在觀測到房子跳躍的時候,就得到了一個介於兩個隱藏causes的反相關。注意到這個模型自身,在先驗中,這兩個隱藏causes是相當相互獨立,所以如果房子跳躍了,基本的一個原因就是卡車撞擊或者地震。事實上,後驗看上去如上圖右下角部分。在給定房子已經跳躍的基礎上,有四個隱藏causes的可能的模式,其中兩個是極端不可能的,即卡車撞擊房子的同時發生了地震和房子自己沒事跳躍這兩個,其餘的兩個結合體有着相等的概率,你可以注意到他們形成了一個沒法分辨的情況。我們有兩個可能的causes模式,而他們之間卻剛好相反,這就是explaining away。現在我們知道了explaining away,讓我們考慮下,回到之前有關學習一個深度sigmoid置信網的學習問題。

所以我們先引入多層隱藏變量。這會在我們的因果模型中得到許多數據,我們想要學習這些權重W,介於第一層隱藏層和數據之間。讓我們來看看是什麼來學習W的。首先,基於第一層隱藏變量的後驗分佈不是一個階乘,在後驗中他們不是相互獨立的,這是因爲explaining away。所以即使如果我們有隱藏變量層,一旦我們觀測到了數據,他們不再相互獨立,不過因爲我們有着更高層的隱藏變量,他們甚至在先驗中也不相互獨立了。在這其中的隱藏變量產生了先驗,而這個先驗自身又會引起第一層隱藏變量之間有相關性。爲了學習W,我們需要學習第一層隱藏層中的後驗,或者至少逼近它。即使如果你只能逼近它,我們還是需要知道更高層中的所有權重使得能夠計算這些先驗項。事實上,有更壞的事情,因爲爲了計算這先驗項,我們需要積分出所有的隱藏變量和更高的層。也就是我們需要考慮所有的可能在更高層中的激活模式,然後結合所有的來計算先驗,其中更高層是爲了第一層而創建的。計算這個先驗是一項非常複雜的事情,所以這三個問題說明了學習這些權重W是極端的困難的。具體的,我們也沒法在沒有更高層中計算先驗的基礎上來學習他們。

現在我們來考慮下一些學習深度置信網(deep belief net)的方法。第一個就是蒙特卡羅方法(Monte Carlo),由Radford Neal 提出的,這個MC方法基本上一直都是work的,也就是如果我們回到之前的ppt,它會在基於所有的隱藏變量上考慮父節點的激活 ,然後在給定數據向量的基礎上,使用馬爾可夫鏈在通過很長一段時候之後讓他穩定下來,一旦穩定了下來達到了熱平衡,你就可以從後驗中進行採樣了。所以在DBN中,這個方法相當的慢。

在1990年熱門呢提出了更快的方法來學習DBN,稱之爲可變方法,事實上至少在AI社區中這是可變方法的發源地,該方法放棄從後驗和上得到無偏估計樣本,是隻通過得到對逼近的後驗上的分佈上進行逼近的採樣。

正如我們之前看到的,如果我們有了從後驗上得到的樣本,最大似然學習就很簡單了,如果我們從其他分佈上進行採樣,我們仍然可以使用最大似然學習規則,不過並不清楚之後會發生什麼。表面上來說,如果我們使用錯誤的分佈來得到樣本,那麼奇怪的事情就會發生,所以這沒法保證事情一定會有提升和改善。事實上還是有個保證能讓事情提升的,它不是模型可以生成數據的log概率,不過卻和這個相關。事實上在在這個log概率上有個下限,通過提升這個下限,我們可以提升這個log概率。

四、wake-sleep算法

這部分,將會介紹第一次有效的學習sigmoid置信網的方法。該方法被稱之爲wake-sleep算法,記得不要與玻爾茲曼機混淆起來。它有着兩個階段,一個正的和一個負的,可以合理的通過wake和sleep來解釋,不過wake-sleep算法是一個非常不同的學習方法,主要是因爲這是對於像sigmoid置信網這樣的有向圖模型來說的,而不是對於像玻爾茲曼機這樣的無向圖模型來說的。在wake-sleep算法背後的idea可以有着一個完整的機器學習的新領域叫做可變學習(variational learning),這在1990後期之前還沒有成型,即使有早期的例子比如wake-sleep算法,不過現在這成了機器學習中學習複雜圖模型主要的方法之一。在這些可變方法背後的基本idea聽起來很瘋狂,也就是既然計算正確的後驗分佈是很困難的,那麼就計算個容易計算的來逼近就好,然後接着使用最大似然學習,也就是如果我們從正確的後驗中得到樣本的話,我們可以正確的使用學習規則了,並且希望這能work,即使我們之前沒有work。現在你可以合理的認爲這是個災難,不過事實上,這個學習變得可能了。所以如果你觀察當你使用一個逼近後驗的時候,在學習的時候從權重中得到的東西,會發現有兩項可以從權重中得到。一項是驅動他們是的得到一個更好的數據模型,也就是讓sigmoid置信網在訓練的中心部分更好的泛化觀測到的數據。不過另一個項是驅動這些權重朝着很好的逼近真實後驗的似然後驗的權重前進,這通過操作真實的後驗試圖來擬合這些似然後驗來完成。因爲這個影響,這些模型的可變學習可以很好的work。回到90年代中期,當HInton第一次提出這個的時候,他們認爲這是一個關於大腦如何學習的新理論。這個idea被Karl Friston提出來了,他強烈的認爲這是真正的神經元的學習。

所以,現在我們更詳細的介紹下如何使用一個逼近的後驗分佈來進行學習。總結下,學習項sigmoid置信網這樣的複雜模型是很困難的,因爲在給定一個數據向量的基礎上,基於隱藏組態從真實的後驗分佈中進行推論是很困難的。甚至從這個後驗中進行採樣也是很困難的,也就是沒法輕鬆的得到一個無偏估計樣本。所以這個瘋狂的idea就是使用從其他分佈中得到的樣本,然後希望這個學習能夠work。正如我們看到則,對於sigmoid置信網來說,這行得通。所以我們使用的分佈是可以忽略explaining away的分佈,我們假設(這是錯誤的)這個基於隱藏組態的後驗可以分解成分離的隱藏單元分佈的積。換句話說,我們假設給定數據基礎上,每個隱藏層中的單元都是相互獨立的,正如RBM中一樣。不過在RBM中,這是正確的,然而在sigmoid置信網中,這是錯的。

所以,讓我們快速的觀察下階乘分佈是什麼,在階乘分佈中,整個向量的概率只是他的獨立項概率的積。所以假設一層中三個隱藏單元,然後有三個對應的概率爲0.3,0.6,0.8.如果我們想要計算隱藏層的狀態爲(1,0,1)的概率,我們可以通過0.3x(1-0.6)x0.8來得到。所以隱藏層的一個組態的概率是獨立概率的乘積,這就是爲什麼稱之爲階乘的原因。通車來說長度爲 n 的二值向量的分佈有着2^n個自由度。事實上,只有2^(n-1)個,因爲概率加起來必須等於1。通過對比可以知道,一個階乘分佈只有n個自由度。這是一個更簡單的情況。

所以現在來介紹下使用錯誤的分佈的idea的wake-sleep算法,在這個算法中,我們有一個NN,其中有着兩組不同的權重。這是一個生成模型,所以在上圖中綠色表示的權重是該模型爲了生成的權重,這些權重定義着基於數據向量的基礎上的概率分佈。我們也得到了許多額外的權重,上圖中紅色的權重是爲了模型的識別的權重,這些權重是用來逼近得到這個後驗分佈的,也就是我們使用這些權重在每一個隱藏層中爲了逼近這個後驗而得到一個階乘分佈,不過結果不是很好。

在這個算法中,有一個wake階段,在這個階段,你可以將數據放入可視層中,也就是上圖的底層,然後使用這個識別權重來進行前饋傳播,在每個隱藏層中,每個獨立的隱藏單元上你得到個隨機二值決策,關於該單元該打開還是關閉。所以前饋得到的所有隱藏單元的隨機二值狀態,然後一旦我們有了這些隨機二值狀態,我們視他們爲在給定數據的基礎上從真實後驗分佈中得到的採樣,然後就可以使用最大似然學習了,不過在做最大似然學習的時候不是爲了這個識別權重,這個只是爲了得到似然樣本。是生成權重來決定我們的模型的,所以在前饋傳播中你是通過識別權重驅動着這個系統,但是是爲了學習這個生成權重的。

在sleep階段中,做着相反的事情,你通過生成權重來驅動這個系統,也就是,先以頂層隱藏層的隨機向量開始,然後生成在先驗中相互獨立的隱藏單元的二值狀態,然後,往下通過這個系統,一次生成一層的狀態,這裏可以正確的使用生成模型,這就是生成模型所能生成的你所希望的數據,所以你能從這個模型中生成一個無偏估計樣本。在使用生成權重來生成一個無偏估計樣本之後,你可以說,讓我們看看是否我們能夠從數據中還原隱藏狀態。所以,讓我們看下是否我們可以從L1層的隱藏狀態中還原L2層的隱藏狀態。所以在訓練好了識別權重後,試圖還原事實上生成了下面層狀態的隱藏狀態。所以這只是和wake階段相反,我們現在使用生成權重來驅動系統,然後學習識別權重。結果顯示,如果以隨機權重開始,然後進行交替的wak和sleep,就能學到一個很好的模型。

在這個算法中還是有缺陷的,第一個缺陷就是一個相當小的,也就是這個識別權重是學習用來轉化這個生成模型的,不過在學習的開始,它們學習着在沒有任何數據的空間上轉化這個生成模型,因爲當你從這個模型中進行生成,你生成的東西看上去與真實的數據非常的不同,因爲權重不夠好。這是一種浪費,不過這不是一個大問題。該算法嚴重的問題是這個識別權重不止是不遵循數據的log概率梯度,他們甚至不遵循這個概率的可變邊界的梯度。因爲他們沒有遵循正確的梯度,就會得到的錯誤的模式均化,這會在下面解釋。最後一個問題就是我們知道基於頂層隱藏層的真實的後驗是被限制成非獨立的,這是因爲explaining away 的影響,而且,我們強制的假設獨立性來使用一個分佈來逼近他的,這個獨立性的逼近對於中間層的隱藏層來說,也沒有那麼糟糕,因爲如果我們夠幸運,這個來自於下層的explaining away影響會部分的被上層的先驗影響所抵消掉。後續可以看到更詳細的解釋。在無視所有的這些問題下,karl Friston 認爲這就是大腦工作的原理。當我們最初提出這個算法的時候,我們認爲這是有關大腦的一個新的理論。不過現在Hinton認爲這個算法有着太多的問題了,所以需要找到更好的算法。

所以現在來解釋下mode averaging吧,使用之前那個地震和卡車撞房子的小型模型來說明。假設我們處在sleep階段,然後我們從這個模型中生成數據。大部分的時間上,頂端的兩個單元都是off 的,因爲在基於他們的先驗下看上去不可能是on的,因爲他們都是off的這個可視單元也就是固定的off的,因爲他的偏置可是-20。巧合情況下,1 × e-10,這兩個單元中的一個就會打開,左邊這個和右邊這個是相等的。當這個單元(上層兩個中任意一個)打開的,就會有一半的概率這個可視單元會打開。所以如果考慮下這個可視單元打開的場景,一半的場景是左手的這個隱藏單元打開了,另一半的場景是右手的這個隱藏單元打開了,幾乎沒有場景是有關兩個單元同時打開或者同時關閉的。所以現在考慮學習能爲識別權重做什麼。一半的時間上,我們在可視層上有一個1,頂層最左邊的單元就會打開,所以我們學者預測這個單元以0.5的概率來打開的情況,同樣的對於右邊這個單元也是一樣。所以這個識別權重會學着基於隱藏層上生成一個階乘分佈,這個階乘分佈的1/4的組態(1,1),另一個1/4的組態是(0,0),這兩個是極度不可能的讓可視單元來打開的。

只挑選一個mode的話會更好,也就是,只由於卡車撞擊或者地震使得可視單元打開會更好,這就是當你強制有一個階乘模型的時候你可以有的最好的識別模型。所以即使這個我們處理的隱藏組態是可以最好的表達成一個方形的角,事實上顯示他就像他是一個一維的連續值,這個真實的後驗是單峯的,被強制成(1,0)或者(0,1),就是上圖右下角的黑色顯示的。如果你使用wake-sleep算法中的sleep階段中逼近的窗口,是這個紅色曲線,這個是給出了所有的相等概率的隱藏單元的四個狀態。最好的解決方案是挑選出其中的一個狀態,然後給他所有的概率mass。這就是最好的解決方案,因爲在可變學習中,我們操作這個真實的後驗來擬合我們在使用的似然後驗。正常的,在學習中,我們是操作似然來擬合這個真實的東西,不過這裏是相反的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章