Lecture 09 & 10 Bayesian——Hinton課程

Link: Neural Networks for Machine Learning - 多倫多大學

Link: Hinton的CSC321課程筆記

 


Lecture 09

Lecture 10

 

提高泛化能力

介紹不同的方法去控制網絡的數據表達能力,並介紹當我們使用這樣一種方法的時候如何設置元參數,然後給出一個通過提早結束訓練來控制網絡能力(其實就是防止過擬合)的例子。

所以我們需要方法來阻止過擬合,

  1. 第一個方法也是目前最好的方法:就是簡單的增加更多的數據,如果你能提供更多的數據,那麼就不需要去提出更多花哨的方法了,數據永遠有着防止過擬合的正確的特性,在假設你的電腦足夠快的情況下,數據是越多越好的。
  2. 第二個方法就是試着對模型的能力進行約束,這樣使得模型有足夠的能力去擬合真實的規律性,但是卻沒有足夠的能力去擬合由採樣誤差導致的虛假的規律性。當然這很難,隨後會介紹各種方法去試圖控制這個能力。
  3. 第三種方法是關於許多不同模型的平均化,如果我們對有着不同形式的模型和犯着不同錯誤的模型進行均化,那麼這個均化後的效果要好於單獨的模型。可以通過在訓練數據的不同子集上訓練這些不同的模型。這種技術也叫做“bagging”。當然也有很多其他的方法去打亂數據使得模型都儘可能的不同。
  4. 第四種方法:也叫做貝葉斯方法,是通過使用一個單一的NN結構,但是卻能找到許多不同的權重集合來很好的預測輸出。然後再測試數據上,使用所有的這些不同的權重向量來均化這些預測的結果。

 

各種方法的詳解如下

 

第二個方法

小權值的魅力

也是較爲便利的方法就是以很小的權值開始,然後再快要過擬合的時候停止學習,也就是假設它已經找到了正確的規律,但是還沒找到由特定的訓練集所帶來的錯誤的規律性,在本小結的最後會介紹這方面。

一個常見的方法去控制NN的能力就是通過給定隱藏層數或者每層的單元數量是從小到大,然後懲罰這些權重,通過使用懲罰項或者使用權值的平方值約束(就是L2範數)或者權重的絕對值(L1範數)。

最後,可以通過對權重加上噪音的方法或者對激活值加上噪音的方法來控制模型的能力。

通常來說,我們使用這些不同的能力控制方法中的幾種的組合方法。

 

對於大多數方法來說,有些元參數還是需要去設置的,就像隱藏單元的數量或者層數或者權值懲罰的尺寸(size,或者翻譯成範圍,規模)。一個顯而易見的選擇元參數方法就是在每個元參數中的每個參數都使用許多不同的值,

那麼問題就是有解決方法嗎?

將數據分成三部分:訓練交叉驗證 和 測試集合

 

當在一個小的計算機上訓練一個大模型的時候而且也沒那麼多時間去使用不同的隱藏單元數量或者不同的權值懲罰尺寸來訓練多次的時候是很好的。你所要做的就是:

以小權值開始,然後隨着模型的訓練,不斷的增大,然後盯着驗證集合上的效果,一旦結果開始變差,那麼就可以停止訓練了。

 

如果使用的是錯誤率而不是平方誤差或者其他什麼誤差,那麼在集合上的效果折線圖也許會特別的波動。所以很難看出它什麼時候該停止,所以通常要做的就是看着,然後確定事情真的變壞了,那麼就退回到之前最好的那個點上。

這個方法的原理就是當以很小的權值開始的模型通常來說不會有多大的能力,而且這個權值也沒有時間變大。

有趣的是爲什麼小權值有着更低的能力?

考慮一個有着許多輸入、許多隱藏單元和許多輸出單元的模型,當權值很小的時候,如果隱藏單元是邏輯單元,那麼他們總的輸入將會接近於0,而且它們差不多會在線性範圍的中間,也就是說:

它們的行爲很像線性單元,意思就是當權值很小,整個網絡和一個將輸入直接映射到輸出的線性網絡是一樣的。

所以如果將權值矩陣W1乘以W2,那麼就得到了一個用來連接輸入和輸出的權重矩陣,假設權值很小,那麼一層邏輯隱藏單元的網絡的行爲就很像是線性網絡了。

同樣假設我們將線性網絡中的權重劃分成四份,考慮這麼一個事實:當對於隱藏單元來說,在線性區域中,他們是有着四分之一的斜面,所以它們的能力不比線性網絡強多少。

所以在這裏顯示的網絡中,是3x6和6x2的權重,它的能力不比一個3x2的網絡強多少。

 

按照這種方法增長,開始先使用序列的非線性區域,然後使用所有的這些參數,所以如果這個網絡在開始的時候有6個權重,並以30個權重(3x6+6x2)結束.那麼就可以認爲這個網絡的能力是平滑的隨着權重變得更大的從6個參數過渡到30個參數(這裏看來size應該翻譯成規模的意思)。

在早期停止所發生的就是在驗證數據上有着儘可能正確數量的參數,也就是在擬合正確的規律性和具體選擇的訓練樣本導致的錯誤的規律性之間的優化。

 

L1 & L2 

通過限制權重的大小來控制模型的能力。

標準的方法就是通過引入一個懲罰項來防止權重變得太大,這裏是包含一個隱藏的假設:有着很小權值的網絡比有着大權值的網絡更簡單。有好幾個不同的懲罰項可以使用,同樣也可以限定權值來使得輸入到每個隱藏單元的權重向量不允許比某個具體的長度要長(個人:這裏是使用的歐式距離的長度,其實就是自身的平方再開根)。

 

標準的限制權重的大小的方法就是使用一個L2權重懲罰,也就是懲罰權重的平方值,在NN文獻中有時候也叫做權重衰減,因爲這個懲罰項的導數扮演着將權重強制推向0的行爲。

L1懲罰,這裏損失函數是一個 “V”字形。所以這裏我們所要作的就是懲罰權重的絕對值。這個方法的一個妙處在於可以使得許多的權重更接近於0,這有助於解釋(很像權重稀疏化)。如果只有一點非0的權重留下,那麼就更容易懂得網絡會發生什麼。

【參見ML系列線性分類】

 

使用噪音作爲正則化

在這部分中,會介紹另一個約束NN網絡能力的方法。可以通過不論是在權重還是在激活值上增加噪音。開始的部分會介紹,如果在一個簡單的線性網絡的輸入部分增加噪音,然後試圖對平方誤差進行最小化,也就是等於在網絡的權重上使用L2懲罰。然後介紹在更復雜的網絡中有關噪音權重的用處,最後介紹一個近來的發現:在激活值上極端的噪音同樣可以作爲一個很好的正則化器。

首先先介紹當在一個簡單的NN的輸入部分添加高斯噪音會發生什麼事情。

噪音的方差可以通過通過與下一層隱藏層中的連接的平方權重來進行放大。如果我們有個很簡單的網絡,只有一個線性輸出單元去直接與輸入相連,那麼這個放大的噪音就會加到輸出上。

如上圖右邊部分,

首先是一個輸入Xi和額外的採樣自0均值和方差sigma的平方的高斯的高斯噪音,這個額外的噪音是通過平方權重與其相乘的。

然後輸出到神經元 j 上,所以神經元 j 的輸出前的部分(就是經過激活函數前的部分,這裏不確定是前還是後,個人傾向於前)就是 yj + 有着0均值和wi平方乘以sigma i 平方的高斯噪音。額外的方差使得對平方誤差來說有額外的貢獻,可以認爲這像pythagoras 理論,也就是平方誤差是由yj和額外的噪音導致的平方誤差的和,因爲這個噪音與yj之間是獨立的。如果它是個噪音-free系統,那麼當我們最小化總的平方誤差的時候,就能出現平方誤差的最小化值。

另外,我們還會對第二項進行最小化,也就是會最小化第二項的期望平方值,而這個期望平方值就是Wi2乘以sigma i2(就是上圖中輸出單元部分的高斯方差),所以這也相對應於一個在wi上和sigma i2上的L2懲罰。 

 在更復雜的網絡中,我們可以通過在權重上增加高斯噪音的方式來約束模型的能力,這不完全等於一個L2懲罰,但是這看上去有更好的效果,特別是在遞歸網絡中。所以AlexGrave近來在他的識別手寫數字的遞歸網絡的權重上增加噪音,實驗表明效果更好了。

 

我們可以同樣地在激活值上使用噪音作爲一個正則化器,所以假設我們使用BP去訓練一個有着邏輯隱藏單元的多層網絡。如果我們在前饋中使單元是二值化和隨機的,但是在後向傳播上就像使用正常的確定性直傳中使用實值那麼會發生什麼事情。所以我們是將邏輯單元在前饋中當成隨機二值神經元,也就是我們計算邏輯P的輸出,然後將P視爲輸出 1 的概率。在前饋中,使用的是概率隨機來決策是否輸出是1還是0。但是在後向路徑中,使用p的實值作爲後向傳播的導數來通過這些隱藏單元。這不是很準確,但是它很接近一個爲了隨機系統所做的正確的事情,如果所有的單元都對上層的每個單元都有很小的貢獻。

這麼做的話,在訓練集上的效果會更差,而且訓練相對來說更慢了而且是幾倍的慢。但是在測試集上它很明顯的會更好。這也是當前一個沒公開發表的結果。

 

第四個方法

貝葉斯方法的介紹

這部分將會介紹貝葉斯的方法去擬合模型,通過使用一個簡單的拋硬幣的例子來講解。貝葉斯的原理是不使用模型的參數最可能的設置,而是考慮所有可能的參數設置然後試着對每個可能的設置找出在給定數據下它的概率。

(略)

 

權重衰減的貝葉斯解釋

這部分將會介紹權重衰減的貝葉斯解釋。在全貝葉斯方法中,我們試圖計算模型中每個可能的參數集合下的後驗概率,但是那是一個貝葉斯方法的相當簡約的形式。簡單的說去尋找一個單一參數集合,能夠在先驗概率和數據的之間最好的比較下的值,也被稱爲最大後驗學習(MAP)。這也可以用來解釋當使用權重衰減去控制模型能力的時候到底發生了什麼。


這裏會介紹當在有監督最大似然學習的過程中最小化平方誤差的時候會發生什麼。即:找到一個權重向量去最小化平方殘差(就是目標值和網絡的預測值之間的差異)等於找到一個權重向量去最大化有關正確解的log似然密度。【logistic的感覺】

爲了找到這樣的等式,我們需要假設這個正確值是由網絡的輸出加上高斯噪音形成的。所以原理就是:我們首先在基於輸入的情況下運行一次這個網絡得到一個預測值,然後加上高斯噪音,然後我們就會問了,這樣做的正確的答案的概率是什麼?

所以模型的輸出就是高斯的中間(上圖右邊的圖),我們所關心的就是希望在基於高斯的情況下目標值的概率最高,因爲這個概率會生成 t ,這樣的情況下網絡會給出一個輸出,即 y 是當高斯的中心在y 的時候 t 的 概率密度。

所以數學上看上去是這樣的:假設基於訓練樣本c的網絡的輸出爲yc,這個輸出是由作用在輸入c上的權值W一起生成的。那麼基於輸出值的情況下的目標值的概率就是在輸出yc上加上由高斯中心在yc上的高斯噪音(上圖第二個式子)。所以我們對基於高斯中心位於網絡的輸出的情況下目標值的概率密度很感興趣。在上圖第二個式子的右邊部分,就是有着均值爲yc的高斯分佈,並也假設一些方差,在隨後介紹。如果我們現在使用log函數,然後使用負號,那麼就得到上圖第三個式子,一個在給定網絡輸出yc的情況下目標值tc的概率 負log函數,是一個來自於對高斯的標準化的常數項加上指數的log項(上圖第三個式子的右邊部分)。即如果我們的損失韓式是關於正確解的負log分佈,也就轉換成最小化一個平方距離(上面第三個式子右邊的tc-yc),這有助於瞭解當在使一個平方誤差最小的時候,可以找到一個概率的解釋,在這個概率解釋中,就可以在基於高斯的情況下最大化log概率。

所以合適的貝葉斯方法就是找到基於所有可能的權重向量的情況下的全後驗分佈。如果有很多權重,那麼當有個非線性網絡的時候,這就變得即沒希望而且很困難。貝葉斯有許多方法來逼近這個分佈,比如Monte Carlo 方法,但是這次,我們試圖讓事情變得更簡單一些。

【以下是重點】

讓我們找到這個最可能的權重向量,所以這個單一權重設置就是在知道先驗知識的時候和數據的時候,找最可能的值。所以我們要做的就是找到W的最優值,

通過使用隨機權重向量初始化,

然後將權重進行調整使得能夠提升在給定數據的時候權重的概率;它有可能是個局部最優值。

現在在log領域工作會比概率更容易,所以如果我們想要最小化一個損失,那麼就是用負的log函數【這就是logstic收斂的問題】。

 

所以,最後可以得到關於權重衰減或者權重懲罰的基本的解釋。

我們試圖最小化在給定數據的時候權重的負log概率,這涉及到最小化依賴權重轉變的一項,即我們如何轉移目標並且確定這隻依賴於權重。從給定權重的輸出的log概率中推出,如果我們假設高斯噪音被加在網絡的輸出上,然後log概率是基於被縮小2倍乘以高斯噪音方差網絡的的輸出值和目標值之間的平方距離。相似的,如果我們假設一個權重的高斯先驗,這個基於先驗的權重log概率就是被縮小2倍乘以這個高斯先驗方差的權重的平方值。

所以,現在將上圖中第二個式子進行化簡,得到第三個式子,將兩邊乘以2×數據方差的平方,我們就得到了一個新的損失函數:

    • 第一項就是當我們乘的過程中得到的簡單的所有訓練樣本得到的預測值與目標值差異平方的和,這就是我們通常說的平方誤差。
    • 第二項現在變成了兩個方差的比率乘以權重平方的和,

所以,你所看到的就是這兩個方差的比率就是權重懲罰,所以我們最初的權重懲罰的想法就是一個試圖讓網絡效果更好的數值,這裏你需要通過使用驗證集合來擬合權重懲罰的值,但是現在所見的就是如果我們使用這個高斯的解釋,即高斯先驗,那麼對於這種關於網絡輸出與目標值關聯的高斯模型,權重懲罰是由這些高斯方差決定的,而這只是這些高斯的比率罷了,這不是基於所有這些框架的一個隨機值。

 

MacKay的固定權重損失的快速和髒方法

這部分,介紹一個由David Mackay在1990年提出的方法,爲了決定在一個沒有使用驗證集的NN中的權重懲罰。這是基於我們可以將權重懲罰解釋成映射估計使得權重懲罰的大小與基於權重的先驗分佈的tightness(不知道怎麼翻譯合適)有關的。

Mackay的方法說明我們可以經驗性的擬合權重懲罰和假設在NN的輸出中的噪音兩個項去。

爲了得到不需要驗證集和而且擬合權重的方法,這樣就能允許我們可以在不同的子集上擁有不同的權重懲罰去作爲NN中的連接,這些鏈接在驗證集合上的代價很大。mackay 在使用這種方法贏得了比賽。

這裏介紹一個由David Mackay提出的簡單的,實用的方法,即我們可以將權重懲罰解釋成兩個方差的比率。在我們學到一個模型去最小化平方誤差的時候,我們就能找到關於輸出方差的最好的值,這個最好的值是通過簡單的殘差誤差的方差來找到的。

 

我們同樣可以子權重的高斯先驗中估計這個方差,我們需要猜測這些方差應該是什麼值來作爲開始,然後做一些學習,然後使用一個非常髒的技巧,被稱之爲“經驗性貝葉斯”。我們將我們的先驗的方差設置成學到的模型的權重的方差,因爲這個方差可以讓這些權重最相似。這真的違反了許多貝葉斯方法的前提。我們使用數據去決定我們的先驗置信該是什麼。所以一旦我們學到了權重,我們使用一個0均值的高斯去擬合學到的權重的一維分佈。然後我們考慮這個高斯的方差,然後將它作爲我們的先驗。現在一個美妙的事情就是,不同的權重子集。就像在不同的層中一樣,例如,我們可以從不同的層中學習不同的方差。我們不需要驗證集和,所以我們可以使用所有非測試數據去訓練這個模型,因爲我們不需要驗證集和去決定不同層中的懲罰項,所以我們實際上可以有許多不同的權重懲罰。而這是很難用驗證集和來得到的。

 

所以這就是Mackay的方法,以猜測噪音方差的值和權重先驗方差的值作爲起始。實際上,所有你所需要做的就是猜測這個比率。

然後做一些梯度下降學習去改善這些權重。然後從新設置這些噪音方差成爲殘差誤差的方差,並從新設置權重的先驗方差成爲實際學到的權重的分佈的方差。

然後回到這個循環的開始部分再來一遍。所以這在實際中是很實用的。Mackay用這種方法贏得了一些比賽。

 

全貝葉斯學習

(略) 

 

第三種方法

模型的結合

這部分將介紹爲什麼當我們進行預測的時候,想要將許多模型結合起來。如果我們只有一個模型,我們不得不對這個模型選擇某些能力:【經典總結】

    • 如果我們選擇的能力太少,那麼模型可以在訓練數據中擬合規律;
    • 如果我們選擇過多的能力,那麼就有可能擬合到具體訓練數據集合中的採樣誤差。

通過使用一些模型,我們就能對擬合真實規律性和過擬合採用誤差之間進行權衡。

在這部分開始的時候,會展示當你對模型進行平均化的時候,你可以得到比任何單一模型更好的期望結果。而且當每個模型之間的預測有很大不同的時候這個結果是最顯著的;在本部分的結尾,會介紹幾種不同的方法來鼓勵不同的額模型進行非常不同的預測。

 

就像以前我們所認爲的那樣,當我們的訓練數據量是受約束的,那麼就傾向於會過擬合。如果我們對許多不同的模型的預測結果進行平均化,那麼就能減少過擬合的現象。當每個模型的預測結果有很大的不同的時候這是非常有幫助的。

對於迴歸來說,平方誤差可以被分解成 "一個偏置項 + 一個方差項",這有助於我們分析會發生什麼。

如果這個模型只有很少的能力去擬合數據(欠擬合),那麼偏置項會很大,它可以用來測量這個模型逼近真實函數的poorly程度;

如果模型有着過多的能力去擬合具體訓練數據集中的採樣誤差(過擬合),那麼這個方差項會很大,它之所以稱之爲方差,是因爲如果我們從同樣的分佈中取得同樣尺寸的另一個訓練數據集,我們的模型會對這個訓練數據集擬合出不同的情況(因爲有着不同的採樣誤差)。所以我們會以這種方式得到模型擬合不同訓練集和的方差。

如果我們對所有模型一起進行平均化,我們所作的就是希望將這個方差給平均化掉,這個原理可以讓我們使用那些有着高能力和因而具有的高方差模型。這些高能力模型通常都有着低偏置,所以我們可以通過均化來避免高方差,從而得到沒有高方差但卻有着低偏置的結果。

【主要是這三個概念:Bagging, Random forests, Boosting】

 

專家混合系統

在這部分將會介紹專家混合系統模型,是在1990年被提出的。這個模型的想法是先訓練一些NN,每個NN在數據的不同部分都是專家。也就是說,我們假設有一個來自於不同制度(這個詞爲regimes在第七課中有出現,當時翻譯成制度,雖然還是覺得規則比較好,直接翻譯成政權肯定怪怪的)的數據集,然後我們去訓練一個系統,在這個系統中每個NN在每個制度中是專業的,還有一個管理NN用來觀察輸入數據並且決定將數據給哪個專家。這種系統對於數據的利用來說並不高效,因爲這些數據被所有的不同的NN所劃分了,所以對於小數據集來說,也就不期望能夠有多好的效果了;但是隨着數據集合的變大,這種系統將會表現的越來越好,因爲它能夠極好的使用這些數據。

【專家投票機制,就是Bagging】

 

Dropout

現在想要介紹一種高效的方法去均化大量的NN,這是一種代替正確貝葉斯的方法。這個可選的方法可惜不能像正確的貝葉斯那樣得到很好的結果,但是它卻更實用。

所以,考慮一個只有一層隱藏層的NN(上圖右邊的網絡),每一次我們輸送一個訓練樣本到這個結構中,然後,以0.5的概率隨機忽略隱藏層中的隱藏單元,所以,這裏就相當於剔除了三個隱藏單元,我們運行這個樣本通過NN的時候是讓這幾個隱藏單元缺席的,意思就是我們從2^H個不同的結構中隨機採樣,這裏的h就是隱藏單元的個數,可以看得出來這是一個巨大的數字。當然所有的這些結構共享權重,也就是但我們使用一個隱藏單元的時候,它得到的權重與其他結構中是一樣的。

【相當於整合了更多的相對較弱的模型】

 

所以我們可以認爲dropout是模型均化的一種形式。我們從2^H個模型中進行採樣,事實上大多數的模型將不會被採樣到,而且這些採樣到的模型也只得到了一個訓練樣本。這是對於bagging來說是極端的存在。

這個訓練集合對於這些不同的模型來說是非常不同的,但是他們同樣很小。

基於所有模型的權重共享意味着每個模型是被其他模型強烈正則化的,而且這是一個比L2或者L2這樣的懲罰更好的正則化器,這些L2或者L2懲罰會將權重推向0。但是與其他模型的共享權重來說,是從那些傾向於將權重拉向正確值的正則化模型。

 

那麼對於輸入層來說呢,我們可以使用同樣的技巧。

我們在輸入上使用dropout,但是我們使用一個更高概率來保持一個輸入單元。這個技巧在被稱爲消噪自動編碼器系統中已經使用了,是由pascal  Vincent、 Hugo Laracholle 和 Yoshua  bengio在Montreal大學中提出的,它效果很好。

 

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