1、玻爾茲曼機的學習算法算法
在上一課中,介紹了玻爾茲曼機可使用二值數據向量集合的機率模型來解釋,在這一課中,會介紹玻爾茲曼機的學習算法,一個很是簡單的學習模型,它有着優美的原理解釋,可是在實際操做中它不但至關的慢,並且多噪音,簡單來講就是不work,因此在許多年來,人們認爲玻爾茲曼機不會是一個有實際操做價值的東西。而後Hinton們發現了幾個不一樣的用來加速學習的方法,如今,這個算法可以更好的具備實際意義了,事實上,已經用在了那些爲了得到一百萬機器學習比賽的獲勝算法中了,這個在稍後會介紹。網絡
玻爾茲曼機學習算法是一個無監督學習算法,不像你們典型使用的BP算法,它會涉及到一個輸入向量和一個理想的輸出(做爲目標或者標籤),而在玻爾茲曼機學習中咱們只須要輸入向量便可。該算法試圖要作的就是創建一個有關輸入向量集合的模型,並經過該集合來考慮輸出向量。機器學習
咱們要作的就是最大化這些機率的積,這些機率也就是在訓練集合中玻爾茲曼機指派的二值向量的集合。這等於最大化由玻爾茲曼機指派到訓練向量的log機率的和;若是咱們按照下面的方式來運行玻爾茲曼機,那麼它一樣的等於最大化咱們得到的N個訓練樣本的機率:首先,讓網絡在N次不一樣的時間上在沒有外部輸入的狀況下穩定到它的平穩分佈;而後對可視向量進行採樣,而後讓網絡再次穩定下來,而後接着對可視向量進行採用,以此類推。函數
那麼爲何這個學習是很困難的呢?最主要的可能的緣由是,若是你考慮一個單元鏈,這裏是一個隱藏單元鏈,在兩端是兩個可視單元。若是咱們使用一個訓練集合,其中包含着(1,0)和(0,1),換句話說,咱們想要這兩個可視單元處於相反的狀態,那麼達到這樣的結果的方式是確保全部的這些權重的積是負數。例如,若是全部的權重都是正的,打開W1將會傾向於打開第一個隱藏單元,而這將會傾向於打開第二個隱藏單元,以此類推。第四個隱藏單元將會傾向於打開另外一個可視單元;若是這些權重中有一個是負的,那麼就能夠獲得一個介於這兩個可視單元之間的反相關,意思就是若是咱們考慮學習權重W1,咱們須要知道其餘的權重。因此假如這是w1(紅框框起來),爲了知道如何更改這個權重,咱們須要知道w3,咱們須要知道有關w3的信息,由於若是w3是負的,咱們對w1所要作的應該就是當w3爲正的時候所作的相反的事情。學習
因此甚至在正確的方向上,爲了可以改變,給定的一個權重卻仍須要知道其餘權重,使人驚訝的是有一個很是簡單的學習算法只須要知道局部信息。因此事實證實,一個權重須要知道全部的其餘權重和數據的任何事情都包含在兩個相關性的差別之中的。另外一個方法是若是你使用這個由玻爾茲曼機指派到可視向量V的log機率,而後對這個進行求關於權重wij的偏導。這就是當這個網絡使用夾在可視單元上的v創建的熱平衡穩定以後,狀態i和狀態j的積的指望值之間的差別。也就是當v夾在可視單元中,而該網絡處理熱平衡的時候,減去一樣的數量。可是當V沒夾在可視單元上,由於可視向量的log機率的導數是簡單的相關性的差,咱們可使得權重之間的變化按照基於訓練集合中的全部可視向量的激活均值的指望積成比例改變,這就是咱們稱之爲的數據。當你沒有夾緊任何東西,並且網絡已經達到了熱平衡而沒有額外的干擾的時候,減去一樣的兩個激活值的積。因此這是一個很是有趣的學習規則,規則的第一項說的是當你要表達數據的時候,按與激活的單元的積的比例提高權重。這是所知做爲一個hebbian學習規則的最簡單的形式。在1940或者1950年代donald hebb 認爲大腦中的突觸也許會使用相似這樣的規則。可是若是你只使用這個規則,突觸的強度會變得愈來愈強,全部的權重都會變成正的,整個系統會被毀掉。你須要某些東西來控制,而這個學習算法經過使用第二項來進行控制的,當你從模型的分佈中進行採樣的時候,它按照兩個常常在一塊兒的單元的頻率來下降權重。你一樣能夠將這個做爲第一項就像一個Hopfield網絡的存儲項同樣,而第二項做爲逃離僞最小的一項,事實上這也是正確的考慮方式。這個規則準確的告訴你多少程度的非學習。測試
一個顯而易見的問題是爲何這個偏導這麼簡單。在熱平衡上一個全局組態的機率,是一個能量的指數函數,這個機率是相關於E的負能量指數。因此當咱們達到了平衡狀態,咱們得到一個log機率和能量函數之間的線性關係。spa
如今這個能量函數在權重中是線性的。因此咱們有一個介於權重和log機率之間的線性關係。由於咱們試圖經過對權重進行操做來達到操做log機率的目的,這是一個log線性模型。事實上,這個關係很是簡單。這是可以關於一個具體權重wij的偏導等於兩個被權值鏈接起來的激活值的積。翻譯
因此這裏所發生的是什麼呢?是經過傳播權重的信息而穩定到熱平衡的過程?咱們不須要一個顯式的BP階段。咱們只須要兩個階段,咱們須要解決有數據的時候和沒有數據的時候。不過注意到這個網絡的行爲在這兩個階段中是至關同樣的。網絡中的深度的內部單元所幹的事情是同樣的,只是有着不一樣的邊界條件。在BP中,前饋傳播和反向傳播事實上是至關不一樣的。視頻
另外一個你可能會問的問題是,爲何須要這個負階段?以前已經說過了這個就像一個Hopfield網絡中的非學習,用來逃離僞最小的。更詳細的說,上圖中的可視向量的機率的等式,(如上圖所描述的同樣,這裏省略不翻譯了,說的就如上圖解釋通常就爲了說明這個公式罷了。並且我的以爲,這裏用機率統計的角度看看得了。不過的確本身對這裏的理解還不夠*************)事件
如今,爲了運行這個學習規則,你須要收集這些統計數據。你須要收集咱們稱之爲正的統計數據,這些是當有數據夾在可見單元上的時候;一樣的負統計數據,這些是當你沒有數據被夾的時候,這時候你會使用非學習(其實能夠稱之爲遺忘)。在1983年Hinton和Terry Sejnowski提出了一個效率低下的方法去收集這些統計數據。該想法是,在正階段,你經過可視單元來夾逼一個數據向量,而後將隱藏單元設置成隨機的二值狀態,而後在網絡中進行更新這些隱藏單元,一次一個單元,直到這個網絡到達了溫度爲1的熱平衡。事實上是經過高溫度做爲起始,而後開始進行減小的,不過這不是這裏的重點。而後一旦你達到了熱平衡,你就能夠進行採樣關於兩個單元在一塊兒的頻率,因此你須要測量被可視向量夾逼的I和J的相關性。而後你基於全部的可視向量進行重複這樣的操做,因此這個在被採樣的相關性是基於全部數據上的一個均值。
而後在負階段中,你無需夾逼任何東西。這個網絡已經不受外部干擾的影響了。因此這就算設置好了全部的單元,包括可視單元和隱藏單元到隨機的二值狀態,而後更新這些單元,一次一個,直到這個網絡達到了溫度爲1的熱平衡,就像以前在正階段作的同樣。再一次,對每一對單元i和j的相關性進行採樣,而後這樣重複許屢次,如今是比較困難的知道到底須要重複多少次,不過在負階段中,你指望這個能量景觀可以有許多不一樣的最小值,可是卻分的至關開,並且有着差很少同樣的能量。你這樣指望的緣由是由於咱們使用玻爾茲曼機去作相似於對圖片集合進行建模的事情。並且你指望這樣合理的圖片全部都有着差很少同樣的能量,而後那些不合理的圖片有着很是高的能量,因此你指望有一小部分的空間有着低能量狀態,而一個很是大片的空間有着壞的高能量狀態。(我的:這就相似於找局部最小同樣)若是你有好幾個模型,那麼其實並不清楚你須要多少次去重複這個過程使得可以對這些模型進行採樣。(我的:就是重複到本身認爲滿意就夠了)。
2、獲得準確統計的更多有效的方法有比Terry和Hinton在開始提出的更好的方法來收集統計數據。若是以一個隨機狀態開始,那麼就會花費很長的時間來達到熱平衡狀態,固然也沒那麼容易來測試是否已經達到了熱平衡狀態,因此咱們不知道咱們須要多久來運行這個中間過程。因此爲何不以你上次結束時遇到的那個具體的數據向量的狀態做爲開始呢。咱們記得隱藏單元中數據向量的解釋,那麼咱們就從那裏開始。這個存儲的狀態,也就是這個數據向量的解釋,被稱之爲一個粒子(particle)。使用粒子可讓咱們有一個良好的開始而且有個巨大的優點。若是咱們以前處在平穩狀態,咱們只須要更新權重一點點就夠了,只須要在一個粒子中更新一小部分就能返回到平穩狀態,咱們可使用粒子在正階段和負階段,在正階段咱們會夾逼出一個數據向量,而負階段就無需夾逼任何東西。
上圖就是直接的收集統計數據,該方法由Radford Neal在1992年引入的。在正階段中,你有一些具體的數據粒子,每一個訓練樣本有一個或者一些這樣的粒子,每一個粒子的當前的值是隱藏單元們的一個組態加上該粒子涉及到的數據向量 。在每一個粒子中你使用相關的夾逼到的數據向量按順序來更新全部的隱藏單元好幾回。而後對於每一個鏈接到的單元對,基於全部的這些粒子來均化的這兩個單元的機率。
在負階段,保留一組fantasy的粒子,這些都是全局組態,再一次,在每一個權重更新以後,在每一個fantasy粒子中按順序更新全部的這些單元好幾回,如今你一樣能夠更新這些可視單元。對於每對鏈接起來的單元對,基於全部的這些fantasy粒子進行均化SiSj。該學習規則按照比例來改變權重來達到均化的數據的目的,均化全部的訓練數據,均化當沒有東西被夾逼時隨着fantasy粒子獲得的數據。該方法比Terry Snofsky和Hinton提出的學習規則更work,至少對於全批量學習來講是這樣的。
然而,將這個方法用在mini批量上是比較困難的,是由於當咱們回到了一樣的數據向量,若是咱們使用的是mini批量,這些權重將會更新不少回,因此針對於數據向量的存儲的具體的數據粒子將再也不會在熱平衡附近了。在給定新的權重下這些隱藏單元隨着粒子的可視單元下將不會處在熱平衡中。再一次說明,咱們不知道再一次接近熱平衡狀態的這個過程須要多久,因此咱們能夠經過作出一個強烈的假設關於咱們理解這個世界的程度來解決這個問題。這是一種認識論的假設,咱們假設當一個數據向量被夾逼的時候,這些好的解釋,也就是隱藏單元的狀態,扮演着那個數據向量的解釋 是單峯的。意思就是說對於一個給定的數據向量,沒有兩個很是不一樣的解釋。咱們對於感知輸入假設只有一個正確的解釋,若是咱們對這些數據有個很好的模型,咱們的模型在這個數據點將會給咱們一個能量最小值。這是在咱們將要學習的這種模型上的約束,咱們使用的學習算法對於一個數據向量有着許多不一樣的解釋的模型是沒法學習的。假設咱們有着這樣的假設,咱們可使用一個很是有效的方法來達到熱平衡或者逼近熱平衡。
該方法被稱之爲平均場逼近。因此若是咱們想要獲得正確的統計數據,咱們須要統計的和順序的更新這些單元。這個更新規則是打開單元 i 的機率(上圖第一個式子),是總的來自其餘單元和他們的偏置的輸入的邏輯函數,這裏Sj是另外一個單元的狀態,是隨機二值。
如今不使用這個規則,咱們能夠說咱們不打算保持來自單元 i 的二值狀態,咱們會保持一個實值基於0和1之間被稱之爲機率的值。而在時間t+1時的機率是是邏輯函數的輸出,更多你須要放入的是這個偏置和在時間t時權重和這些機率積的和,因此咱們經過一個實值機率來替換以前的隨機二值。不過這還不是那麼正確,由於這個隨機二值是在非線性函數內部的,若是這是一個線性函數,那麼沒事,可是由於邏輯非線性,咱們當咱們使用機率來替換波動的內部二值時得不到正確的答案 。不過,它仍是work的很好,它可能在給咱們雙向振盪的時候發生錯誤,由於如今咱們想要並行的更新任何事物,並且咱們正常的使用在計算p(t+1)_i 時被稱之爲阻尼平均場來處理這些,不過咱們不是徹底聽從這樣的方式的,咱們首先選擇咱們如今所處的一個點,而後更新到咱們想要去的地方(上圖第三個式子),因此在阻尼平均場,咱們使用lambda乘以咱們如今的狀態並加上(1-lambda)乘以這個更新規則讓咱們去的地方,這會解決振盪問題。
如今,咱們獲得了一個對於玻爾茲曼機來講有效的mini批量學習方法,這是Russ Salakhutdinov發現的。在正階段,咱們能夠初始化全部的機率爲0.5,咱們能夠在可視單元上夾逼一個數據向量,而後使用平均場的方法來並行的更新全部的隱藏單元直到收斂。對於平均場,你能夠發現當機率中止改變的時候就是收斂了。一旦咱們收斂了,咱們就對每一對鏈接起來的單元對進行記錄PiPj。
在負階段,咱們作咱們以前作過的,咱們保持一組fantasy粒子,每一個粒子擁有的值是一個全局組態。在每一次權重更新後,咱們在每個fantasy粒子中按順序更新全部的單元好幾回。而後在基於全部的fantasy粒子上對於每一對鏈接的單元對,咱們均化SiSj這些隨機二值,這些均化之間的不一樣在於學習規則。也就是咱們經過對這些差別的量成比例來改變權重。
若是咱們想要更並行的使用這些fantasy粒子來更新,咱們能夠改變玻爾茲曼機的結構,因此咱們有一個特殊的結構容許交替的對這些fantasy粒子進行並行更新,在層內咱們沒有鏈接,並且也沒有跨越層的鏈接,不過咱們容許有許多的隱藏層。因此這個結構看上去像上圖所示,咱們稱這個爲深度玻爾茲曼機(deep boltzmann machine)。其實這就是一個普通的玻爾茲曼機有着許多消失的鏈接罷了,若是它們表現出來的話,全部的這些就是跨越層的鏈接。若是沒有層次的話,它也只是一個普通的玻爾茲曼機。可是在這特殊的結構中,有些nice的事情仍是能夠作的。
(這時候上圖的從上往下數第一行第三行有問號),例如咱們能夠更新第一個隱藏層和第三個隱藏層,給定可視單元的當前的狀態和第二層隱藏層的狀態,而後咱們能夠在第二個隱藏層中更新可視單元(這時候從上往下是第二和第四行有問號)。而後咱們能夠回頭而後更新其餘狀態(這時候是第一行第三行有問號,其實也就是交替的更新),咱們能夠迴向和前向像這樣,咱們能夠並行的更新全部單元的一半狀態,而這能夠是正確的更新。
因此一個問題就是,若是咱們有一個DBM,經過使用平均場進行訓練正階段而後經過基於奇數層和偶數層交替的使用fantasy例子更新的負階段獲得的,咱們能夠爲了MNIST數字學到好的模型,或者一個更復雜的事物嗎?因此一個告訴是否你獲得的是一個好的模型的方法,是在學習以後,你移除全部的輸入而後只是從這個模型中進行生成樣本,因此你運行馬爾可夫鏈很長時間直到它起效果了,而後你觀察你獲得的採樣結果。因此Russ Salakhutdinov使用一個DBM去對MNIST進行建模,對正階段使用平均場,而後爲負階段交替的更新粒子的層。真實的數據如上圖右邊所示,從模型中的獲得的數據如上圖左邊所示,你能夠發現,他們事實上至關類似。這個模型生成的東西很是MNIST因此這是一個至關好的模型。
因此這裏有個謎題,當他在學習的時候,他使用帶有100個數據樣本的mini批量和一樣適用100個fantasy粒子,一樣的100fantasy粒子針對每個mini批量,問題就是,咱們如何使用這100個負樣本去特徵化整個空間來評估這些負的統計數據?對於全部的有趣的問題來講,這個全局組態空間是高度多峯的。咱們如何成功的找到和表示全部的這些節點,在只是用100個粒子的狀況下
這裏是一個有趣的答案,用馬爾可夫鏈交互的學習用來收集負統計數據,不管是否用來更新fantasy粒子的,它交互是爲了有更好更有效的混合率。也就是說,咱們不可能經過認爲這是一個更新權值的外部循環,和一個內部訓練來收集固定的權重集合的統計數據同樣來分析這個學習。這個學習影響着內部循環的有效程度。
緣由是不論什麼時候這個fantasy粒子超過正數據,能量表面都是增加的,並且這會影響到馬爾可夫鏈的混合率。它使得fantasy超激活的,並且它們比馬爾可夫鏈的混合率更快的進行周圍的移動去尋找更好的當前的靜態權重。
因此這圖是展現發生的事情。若是在能量表面有一個模式,它有着比數據更多的fantasy 粒子,這個能量表面將會上升直到fantasy粒子逃離這個模式。因此上圖右邊的左邊的模式有四個fantasy粒子(四個紅色箭頭)和兩個數據點。因此學習的影響是爲了提高這裏的能量。而這個能量障礙對於馬爾可夫鏈來講過高了,使得不能跨越,因此混合率會變得很慢。可是這個學習事實上經過提高這個最小值來讓紅的粒子逃出這個能量最小,在填充的時候這個fantasy粒子將會逃離到到其餘更深的最小值。因此咱們能夠逃出最小值使得馬爾可夫鏈沒法逃出,至少再也不一個合理的時間上逃出。因此這裏發生的就是這個能量表面是真的用來做爲兩個不一樣的目的的。這個能量表面表示咱們的模型,但是他一樣經過學習算法操做使得馬爾可夫鏈混合得更快;或者 影響一個更快混合的馬爾可夫鏈。一旦這個fantasy粒子填滿了一個洞,它們將會衝到其餘地方,而後處理下一個問題。一個針對它們的分析就是他們看上去像調查的記者,衝去調查一些嚴重的問題,一旦公佈告終果使得問題解決了,他們又衝去找下一個嚴重的問題。
3、受限玻爾茲曼機在RBM中,咱們約束了網絡的鏈接爲了使得在推論上和學習上都變得更加簡單。因此,它只有一層隱藏單元,並且在隱藏單元之間沒有鏈接,一樣在可視單元之間也沒有連接,因此這個結構看上去如上圖右上角所示,它就是計算機科學家稱之爲一個二分圖,它有着兩部分,在每一個部分中沒有鏈接。關於RBM的好事是若是你在可視單元上夾逼一個數據向量,你能夠在下一步達到熱平衡,意思就是隨着一個夾逼獲得的數據向量,咱們能夠快速的計算ViHj的指望值,由於咱們能夠計算每一個打開的單元J的準確的機率,而這在隱藏層中它是與其餘單元之間獨立的。單元J打開的機率是從可視單元獲得的輸入的邏輯函數,並且這與其餘隱藏單元之間相互獨立。因此咱們能夠並行的計算這個機率。這是巨大的勝利。
若是你想要一個關於二值向量的好的模型,那麼正確的使用RBM的算法是有Tieleman在2008年引入的方法,該方法是基於更早的Neal的方法。在正階段,你從可視單元上夾逼數據向量,而後計算在隱藏單元中不可見的全部對的vihj準確的指望值,你能夠這麼作是由於vi是固定的,並且你能夠準確的計算vj,而後對於每一對鏈接的單元對,在mini批量中基於全部的數據向量來均化vihj的指望值。
在負階段,保持的一組fantasy粒子是全局組態,而後經過交替的並行更新來更新每一個fantasy粒子好幾回。因此在每一個權重更新後,更新fantasy粒子會使得它們更加接近平穩,而後對於每一對鏈接的單元對,基於全部的fantasy粒子來均化vihj,這會獲得負統計數據。該算法事實上work的很好,而且容許RBM創建很好的密度模型或者生成二值向量集合。
如今,來講說學習算法,該算法不擅長創建密度模型,不過卻更快,因此先以一張對於RBM來講低效的學習算法的圖片開始。(上圖t=0)先基於可視單元夾逼數據向量,而後稱該時刻爲t=0,因此如今是使用時間來標記,而不是意味着權重的更新,而是指在馬爾可夫鏈中的步驟。給定這個可視向量,如今來更新隱藏單元,因此咱們對隱藏單元來選擇二值狀態,而後對於全部鏈接的可視和隱藏單元對測量這個指望值,vihj,稱之爲vihj0 來指明這是在t=0的時候測量到的,這時候是可視單元決定着隱藏單元。固然,能夠並行的更新全部的隱藏單元,而後使用這個隱藏向量來並行的更新全部的可視單元(這時候t=1),而後再一次並行的更新全部的隱藏單元,因此這時候可視單元向量t = 1,咱們稱這個爲重構,或者說是一步重構,咱們能夠一直這樣交替這個鏈以這種方式,更新可視單元,而後隱藏單元,每一組都能並行更新。在咱們運行很長一段時間以後,咱們就獲得了可視單元的某個狀態,或者稱之爲t=infinity來指明這是在很長一段時間以後,而後該系統將會處於熱平衡了,如今咱們能夠測量vi和hj的相關性了,這時候稱之爲vihj_infinity,這時候的可視狀態被稱之爲fantasy。因此如今這個學習算法看上去很簡單,經過學習率乘以t=0時刻的vihj和在infinity時候的vihj之間的差別來改變權重。固然問題是在達到熱平衡以前須要運行這個鏈很長一段時間,若是咱們運行的時間不夠長的話,這個學習最後可能會犯錯。事實上最後的狀態是很是有誤導性的。結果證實即便咱們只運行這個鏈很短的時間,該學習算法依然work。
因此這裏就是很是使人驚訝的快捷方式,你只是運行這個鏈up,down,up這樣。因此從數據中,你生成一個隱藏狀態,而後你生成一個重構,而後接着生成另外一個隱藏狀態。一旦結束後,你也許會有一個統計數據,因此不經過在平穩狀態測量獲得這個統計數據,而是使用在一個完整的馬爾可夫鏈以後測量獲得的統計數據。該學習規則但願計算可以更加的快速,這很清楚的這不是最大似然學習,由於咱們爲了負統計數據使用的這一項是錯的。不過這個學習算法仍是很work,後面的課會介紹它爲何work。
因此一個顯而易見的問題是爲何這個快捷方式會work?,這就是緣由,若是咱們在數據上開始這個鏈,該馬爾可夫鏈將會離開數據並朝着他的平穩狀態前進,目標是初始化的權重更加像這些數據。咱們能夠觀察到在一些步驟以後遊蕩到哪裏了,若是咱們知道初始化的權重很差的話,那麼就是在浪費時間,如今咱們知道如何改變他們來阻止它遠離數據而不朝着平衡狀態前進的狀況。全部咱們須要的就是下降這個像心理學家稱呼的虛構事件的重構機率,這支在一個完整的步驟以後就產生,而後提高數據的機率,這能夠阻止它遠離數據,一旦這個數據和在一個完整的步驟以後的位置有着一樣的分佈,那麼這個學習就會中止。
因此這就是一張到底發生了什麼的圖片。(上圖上面的紅綠點的部分圖),這是在全局組態空間中能量表面。綠點是在能量表面上的數據點,數據點的意思是包括了可視向量和具體的經過隨機更新隱藏單元獲得的隱藏向量。因此這個隱藏向量是一個該數據點是什麼的函數。因此從這個數據點開始,咱們運行馬爾可夫鏈一個完整的步驟來獲得一個新的可視向量,而後隱藏向量就到了上圖紅點部分。因此一個數據點的重構加上從重構獲得的隱藏向量。而後改變這個權重去將能量下降到這個數據點,而後接着經過重構來提高這個能量。這樣作的結果是能量表面如上圖下面那個曲線圖所示。你能夠注意到在開始的時候數據部分在構建一個能量最小值,你同時注意到它在遠離數據,並且前往和以前差很少的狀態。
因此這個只作一次完整的步驟的快捷方式獲得的重構會在它遠離數據的地方失敗。咱們須要擔憂這個模型很像的數據空間卻很是遠離數據點的區域。這些低能量洞致使這個歸一項變得很大,以致於在使用快捷方式的時候沒法感知到他們。若是咱們使用持續不斷的粒子,這其中咱們會記得他們的狀態,而後在每一次更新後,咱們更新它們(粒子)更屢次,而後它們最終會找到這些洞。它們會移動到這些洞內部,而後學習着將這些洞補起來。一個介於速度和正確性之間的權衡是開始於很是小的權重,而後使用CD1(也就是一個完整的步驟)來獲得負數據。一旦這個權重增加了,馬爾可夫鏈就會混合的更慢,如今咱們可使用CD3.一旦這個權重增加的更多,咱們可使用CD5,或者9 或者10.因此這是按照權重的增加而增長的,咱們能夠保持這個學習work的更合理,即便這個馬爾可夫鏈的混合率降低了。
4、對比散度學習的例子如今介紹一個至關簡單的RBM如何學習創建一個圖像數字2的模型。該圖像是16×16像素的圖片,這個模型有着50個二值隱藏單元來做爲特徵檢測器。因此當它爲了表現數據狀況的時候,第一件要作的事情就是使用這個權重和像素與特徵之間的鏈接像上圖綠色箭頭同樣,去激活這些特徵。這是對於每一個二值神經元如此的,作出決定關因而否將這個特徵檢測器的狀態爲1仍是0.。而後使用這些爲了激活的二值神經元來重構這個數據(上圖淡藍色箭頭),也就是對於每個像素,它作出決定關因而否爲1仍是0的決定,而後從新激活這個二值特徵檢測器,經過使用重構來激活而不是以前的原始數據,這樣權重經過基於一個激活像素和激活的特徵檢測器之間的增量權重來更新,在觀察數據的時候這會下降數據的全局組態的能量,不論隱藏模式會變成什麼,並且在觀察重構的時候它減量基於一個激活像素和一個激活的特徵檢測器之間的權重,這會提高重構的能量。在學習開始的附近,當權重隨機時,這個重構幾乎老是會下降能量到數據如下(意思就是下降能量),由於這個重構是在給定激活的隱藏模式基礎上從新基於可視單元來從新生成。明顯的這是基於他的能量函數從新生成有着低能量的模式,你能夠認爲這個學習是改變權重使得數據有着低能量,而崇高是一般有着更高的能量。
因此讓咱們以有着50個特徵檢測器且是隨機權重開始,咱們使用很是小的權重,並且這每個方塊表示權重的樣子。這個很小的隨機權重是用來打破對稱性的。由於這個更新是隨機的,因此其實咱們也不須要這樣。
在輸入了幾百張圖片以後,這些權重開始造成一些模式了
若是接着這麼幹,你能夠發現許多特徵檢測器開始檢測一個2的洞了這些都是至關的全局特徵檢測器。並且這些特徵檢測器變得更強大了
許多特徵檢測器開始局部化了,變得更加的局部,
這就是最終的權重,你能夠發現每一個神經元變成一個不一樣的特徵檢測器,大部分特徵檢測器都至關局部化了。若是觀察上圖紅框中的特徵檢測器,他是檢測2的頂部的,並且當2的頂部是白色像素並且沒有黑色像素的時候這個特徵檢測器會興奮起來,因此它是表示2的頂部的
一旦咱們學好了這個模型,咱們能夠觀察它重構的如何,而後咱們給它一些測試數字,一些以前沒見過的數字,這裏先給它一個2的測試例子,(上圖左邊),他的崇高看上去至關像測試例子。這個測試例子在頂部有個回勾,而在重構以後就被平滑掉了,不過這仍是一個很不錯的重構。更有趣的是給它一個不一樣的數字類,若是咱們給它一個數字3來進行重構,它重構的事實上看上去更像是一個2而不是3,全部的這些學好的特徵檢測器都是很好的表現2的,而不是爲了檢測3中間的那個尖端的。因此結束重構以後,它仍是聽從2的規則的,而不是3的規則。事實上,這個網絡試圖表示做爲2的事情。
因此這裏是一些特徵檢測器,在這個模型的第一層隱藏層中,使用了500個隱藏單元去對全部的這10個數字類進行建模。這個模型被使用CD算法訓練很長時間。它有着很是不一樣的特徵檢測器。若是觀察從上往下數第6行,左邊第二個,這是顯而易見的用來檢測數字8的。若是接着看第8行左數第5個,這不是你指望看到的,這看上去是爲了檢測底部的像素的,而它看上去不像是檢測像素,而卻有21個底部的像素,其實這是數據被歸一化了,因此這個數字不會有比20個像素更大的高度,意思就是若是你知道有一個像素在這些大的正權重上,也就是在負權重上這個像素不太可能被打開。因此這是挑選出的歸一化後安排好的規律。觀察倒數第二行左數第二個,它作的是同樣的事情,數據不可能有大於20個像素的寬度;觀察第二行左數6個,它是爲了檢測一個豎直拐彎的底部的,它檢測一些不一樣的位置而且而後拒絕檢測那些中間位置。因此這很是像一個明顯的二值數字中的數字,當你增長數字的強度,它會on 而後off,而後on 而後off。這是爲了找到表達這些數據更復雜的方法。
5、應用在協同過濾下的RBM
在這部分,會介紹將RBM應用在協調過濾上。協同過濾意思是試圖指出一個用戶在基於喜歡其餘產品的程度和有多少用戶喜歡這個產品上,該用戶有多喜歡這個產品。具體的狀況能夠在Netflix比賽中看到,在這其中,一個機器學習算法能夠預測一個具體的永輝將會喜歡一個具體的電影。這個比賽的訓練數據包括了50萬個用戶的18000個電影的100百萬個評級,因此這是一個至關大的數據集。這任何人都不認爲RBM能夠處理的了。咱們能夠看到,有一個很是重要的技巧可使得RBM來處理全部的這些幾乎消失的電影評級(就是爲了預測這些消失的評級)。可是當咱們使用這個技巧的時候,咱們能夠訓練這個模型,在實際操做中,這很是的實用,並且得到了勝利。
因此如今咱們來解釋如何將RBM用在Netflix比賽中的協同過濾吧。在這個比賽中,給你的數據是50萬個用戶寫的給18000個電影的評級,每一個電影的評級是從1到5.固然,每一個用戶只評級一部分電影。可是即便這樣,仍是有1百萬個評級,因此這也是個至關大的數據集。你須要預測用戶對給出的電影的評級,若是你乾的好,獎勵也是很豐厚的。若是你贏了,就能夠獲得1百萬的獎勵。因此你能夠在一個巨大的表格中劃出這個評級結果,頂部是電影編號,左邊是用戶編號。上圖中數字都是評級,問題就是如何預測出那個問號的數字,你可能以爲結果和用戶2差很少,由於看上去他兩是以同一個思想來評級電影的,另外一方面,用戶4喜歡電影6,此次你能夠預測的更合理,由於你發現可使用更多的統計數據。
讓咱們使用一個語言模型來講明,乍一聽很奇怪,不過能夠發現其實至關於一個標準的方法。因此咱們能夠按照三元組字符串的形式來寫數據,更像是一個家族樹。每一個三元組有用戶,電影和評級三個內容。上圖左邊就是上上圖的數據內容,咱們只預測三元組的第三個值,因此若是咱們創建一個語言模型,咱們要作的就是轉換每個用戶到這個用戶的向量特徵上,這是咱們學到的向量,並且咱們將電影轉換到這個電影的向量特徵,從這兩個特徵向量上,咱們試圖進行預測評級。如今這個顯而易見的方法就是將它放在一個大的隱藏層中,而後將特徵向量饋送到這個隱藏層,而後用這個隱藏層來預測這個評級。咱們的結果顯示咱們並不比一個很是簡單的方法結果更好,這個方法是簡單的使用用戶的特徵向量和電影的特徵向量的標量積,你只須要將它們逐點乘起來,加起來,而後就像你的評級同樣輸出。這甚至不是一個softmax,事實上輸出的是你從這個標量積得來的實數。如今這至關於作一個被稱之爲矩陣分解模型的事情。若是咱們安排用戶的特徵爲行,電影特徵爲列,咱們能夠發現若是咱們將它們乘起來,這個用戶的矩陣乘以電影的特徵,而後咱們就獲得了評級的預測。這準確的等於隔壁這個語言模型。因此這個矩陣分解模型是最通用的做爲協同過濾,並且它work的很好。
如今,讓咱們考慮一個可代替的模型,使用咱們的RBM,用RBM來解決這個問題看上去不是很明顯。因此咱們須要一些思考。在最後咱們決定咱們能夠將每一個用戶視爲一個訓練樣本。因此一個用戶是一個電影評級的向量,對於每一個電影,咱們有一個可視單元,有着5個可代替的值。因此可視單元再也不是二值,而是5種softmax.因此咱們的RBM的網絡如上圖右邊所示。每一個可視單元是一個5方式的softmax,一個電影一個可視單元,你可能會擔憂會有18000個可視單元存在。而後咱們有大約100個隱藏單元,每一個隱藏單元連接着softmax的5個輸出,一樣的它還有一個偏置。你能夠發現參數的數量是很是巨多的。對於softmax的cd算法是與二值單元同樣的,就像以前說的有100個單元。咱們要作的學習一個模型,而後試圖填滿那些消失的數據。
如今,使用這個方法來解決這個問題,咱們不想要一個RBM有着18000個可視單元,並且只有一小部分是有值的。這是一個很是巨大的消失的數據量。有一個整潔的方法,對於每一個用戶,咱們使用一個RBM,它有着和用戶評級過的電影數量同樣多的可視單元。因此,每一個用戶均可能對應一個不一樣的RBM,有着一個不一樣的子集和可視單元。如今全部的這些RBM共享一樣的權重。也就是咱們知道哪一個電影是哪一個,因此若是兩個用戶看同一部電影,並且評級了同一部電影,來自這個電影到這個隱藏單元的權重將會針對這兩個用戶來講是同樣的。因此咱們有着許多權重共享。很是的幸運,由於對於每一個用戶來講,咱們只有一個訓練樣本。咱們讓具體的有着正確結構的RBM對應每個用戶,也就是可視單元正確的數量對應用戶評級過的電影。如今只有一個訓練樣本,也就是這個評級向量,可是這50萬的訓練樣本共享到隱藏單元的權重,因此學習算法work的很好,該模型使用cd1訓練,而後過段時間使用cd3訓練,而後使用cd5和cd9,那麼它們的效果如何呢?
這個RBM的效果和以前的矩陣分解的方法效果同樣好,不過它給出的是徹底不一樣的錯誤,意思就是若是你均化RBM的預測結果和矩陣分解模型的預測結果,你獲得一個很大的勝利,而冠軍團隊實際上使用多個不一樣的RBM模型,而後進行均化,並且使用了多個不一樣的矩陣分解模型。據Hinton所知他們使用的主要模型就是矩陣分解模型和RBM模型。