HInton第9課,這節課沒有放論文進去。。。。。如有不對之處還望指正。話說hinton的課果然信息量夠大。推薦認真看PRML《Pattern Recognition and Machine Learning》。
摘自PRML中22頁。
正文:
一、提高泛化方法的概述
在這部分中,將會介紹通過減少(當一個模型的數據表現能力大大的超過訓練時提供的數據而產生的)過擬合來提高模型的泛化能力,將會介紹不同的方法去控制網絡的數據表達能力,並介紹當我們使用這樣一種方法的時候如何設置元參數,然后給出一個通過提早結束訓練來控制網絡能力(其實就是防止過擬合)的例子。
回顧前面的課程,過擬合的原因是因為和從輸入映射到輸出的映射中中有着真正規律性的信息一樣,任何有限集合的訓練數據同樣包含采用誤差。訓練集中的偶然性的規律是因為搞好某些具體的訓練樣本被選中而已。
所以當我們擬合這個模型的時候,它不能說哪些規律性是真實的,並且當再次對訓練集進行采樣的時候還是存在的,而哪些規律性是由采樣誤差導致的。所以模型同時擬合了兩種數據規律,如果模型太靈活了,它就會很好的對采樣誤差進行擬合,然后它的泛化能力就會很差。
所以我們需要方法來阻止過擬合,第一個方法也是目前最好的方法:就是簡單的增加更多的數據,如果你能提供更多的數據,那么就不需要去提出更多花哨的方法了,數據永遠有着防止過擬合的正確的特性,在假設你的電腦足夠快的情況下,數據是越多越好的。
第二個方法就是試着對模型的能力進行約束,這樣使得模型有足夠的能力去擬合真實的規律性,但是卻沒有足夠的能力去擬合由采樣誤差導致的虛假的規律性。當然這很難,隨后會介紹各種方法去試圖控制這個能力。
在下一課將會介紹關於許多不同模型的平均化,如果我們對有着不同形式的模型和犯着不同錯誤的模型進行均化,那么這個均化后的效果要好於單獨的模型。可以通過在訓練數據的不同子集上訓練這些不同的模型。這種技術也叫做“bagging”。當然也有很多其他的方法去打亂數據使得模型都盡可能的不同。
第四種方法:也叫做貝葉斯方法,是通過使用一個單一的NN結構,但是卻能找到許多不同的權重集合來很好的預測輸出。然后再測試數據上,使用所有的這些不同的權重向量來均化這些預測的結果。
上圖就是一些控制模型能力的方法。最顯而易見的就是通過這個結構,通過限定隱藏層的數量和每層的單元的個數,這就控制了網絡中連接的數量,也就是參數的個數。
第二個方法也是較為便利的方法就是以很小的權值開始,然后再快要過擬合的時候停止學習,也就是假設它已經找到了正確的規律,但是還沒找到由特定的訓練集所帶來的錯誤的規律性,在本小結的最后會介紹這方面。
一個常見的方法去控制NN的能力就是通過給定隱藏層數或者每層的單元數量是從小到大,然后懲罰這些權重,通過使用懲罰項或者使用權值的平方值約束(就是L2范數)或者權重的絕對值(L 1范數)。
最后,可以通過對權重加上噪音的方法或者對激活值加上噪音的方法來控制模型的能力。
通常來說,我們使用這些不同的能力控制方法中的幾種的組合方法。
對於大多數方法來說,有些元參數還是需要去設置的,就像隱藏單元的數量或者層數或者權值懲罰的尺寸(size,或者翻譯成范圍,規模)。一個顯而易見的選擇元參數方法就是在每個元參數中的每個參數都使用許多不同的值,例如:隱藏單元的數量,然后看當數量為多少的時候才是在測試集合上表現最好的時候。但是有時候這也是很錯的方法,因為這就像說當你給出另一個測試集合的情況下這個方法的工作效果會有多好一樣。所以在某個具體測試集上表現的最好的設置不可能說它也能夠在一個來自同一個分布數據的新的測試集上工作很好,因為它們是在特定的測試集上調整好了的。也就是說給出一個模型可以在新的測試集上能有多好的效果一樣的假象。
舉個極端的例子:假設測試集合是完全隨機的,就像很多的的金融數據一樣,所以結果不是依賴於輸入或者說不能從輸入來預測輸出,如果選擇了一個在你自己的測試集合上最好結果的模型,那么它顯然比在這個測試集上偶然結果要好,因為你選擇的就是比偶然更好的結果,但是如果你在一個同樣隨機的新的數據上,那么就不可能期望它會比偶然性更好的結果,所以通過選擇一個模型,那么就得到了一個假象:一個模型可以在新數據上工作的多好。那么問題就是有解決方法嗎?
所以上圖就是一個比選擇元參數更好的方法。將數據分成三部分:訓練,交叉驗證和測試集合。驗證集合不是用來訓練的,而是用來決定如何選擇元參數的。換句話說,就是看這個模型在驗證集合上有多好的效果,然后再去決定一個大致的隱藏單元數量或者一個權重懲罰的尺寸。但是一旦你這么做了,那么就在驗證集合上找出最好的參數集合,然后再第三個測試集合上進行測試,而且測試集合只能用一次,這會給出一個這個網絡工作有多好的無偏估計,通常來說這這個估計會比驗證集合差那么一點。
在近來的比賽中,組織比賽的人們都學會了先不動真正的測試數據,然后讓人們發送預測結果這樣他們就知道是否他們真的可以在真正的測試數據上很好的預測,或者他們是在驗證數據上通過在具體的驗證數據上選擇的元參數而導致過擬合了,從而沒法再新的測試集合上很好的泛化(也就是在舉辦比賽的時候,不會把真正的測試數據放出來,只放訓練數據和驗證數據,通過結果來發現你的結果是真的泛化還是過擬合什么的)。
一個可以得到更好的有關權值懲罰或者隱藏單元數量或者其他試圖擬合驗證數據的評估的方法是循環這個驗證集合。所以先不動為了最后的無偏估計的真正的測試集合,通過將其他的數據划分成N個相等尺寸的子數據集,然后再其中的(N-1)個數據集上訓練,然后將沒有訓練的那個作為驗證集合(也就是切分成N等分,然后隨機組合排列),所以就能夠得到許多不同的權值懲罰的最好的估計,和單元數量的最好的數量。這也被稱之為“N-fold cross-validation”,N
折交叉驗證。要記得,這N個不同的估計之間不是相互獨立的。例如,如果我們很不幸的,所有屬於同一個類別的樣本都落在了一個子集上,那么泛化能力就是相當差了,所以不論是這個子集在驗證集合還是訓練集合中,泛化能力都是很差的(這里的意思就是不要產生特定的同類別扎堆現象,最好都能很好的均勻隨機分布)。
上圖就是一個比較簡單的防止過擬合的方法。,當在一個小的計算機上訓練一個大模型的時候而且也沒那么多時間去使用不同的隱藏單元數量或者不同的權值懲罰尺寸來訓練多次的時候是很好的。你所要做的就是以小權值開始,然后隨着模型的訓練,不斷的增大,然后盯着驗證集合上的效果,一旦結果開始變差,那么就可以停止訓練了。如果使用的是錯誤率而不是平方誤差或者其他什么誤差,那么在集合上的效果折線圖也許會特別的波動。所以很難看出它什么時候該停止,所以通常要做的就是看着,然后確定事情真的變壞了,那么就退回到之前最好的那個點上。
這個方法的原理就是當以很小的權值開始的模型通常來說不會有多大的能力,而且這個權值也沒有時間變大。有趣的是為什么小權值有着更低的能力。
考慮一個有着許多輸入、許多隱藏單元和許多輸出單元的模型,當權值很小的時候,如果隱藏單元是邏輯單元,那么他們總的輸入將會接近於0,而且它們差不多會在線性范圍的中間,也就是說它們的行為很像線性單元,意思就是當權值很小,整個網絡和一個將輸入直接映射到輸出的線性網絡是一樣的。所以如果將權值矩陣W1乘以W2,那么就得到了一個用來連接輸入和輸出的權重矩陣,假設權值很小,那么一層邏輯隱藏單元的網絡的行為就很像是線性網絡了。同樣假設我們將線性網絡中的權重划分成四份,考慮這么一個事實:當對於隱藏單元來說,在線性區域中,他們是有着四分之一的斜面,所以它們的能力不比線性網絡強多少。所以在這里顯示的網絡中,是3x6和6x2的權重,它的能力不比一個3x2的網絡強多少。
按照這種方法增長,開始先使用序列的非線性區域,然后使用所有的這些參數,所以如果這個網絡在開始的時候有6個權重,並以30個權重(3x6+6x2)結束.那么就可以認為這個網絡的能力是平滑的隨着權重變得更大的從6個參數過渡到30個參數(這里看來size應該翻譯成規模的意思)。在早期停止所發生的就是在驗證數據上有着盡可能正確數量的參數,也就是在擬合正確的規律性和具體選擇的訓練樣本導致的錯誤的規律性之間的優化。
二、約束權重的大小(對比前面的尺寸,范圍,規模的意思)
這部分將會介紹通過限制權重的大小來控制模型的能力,標准的方法就是通過引入一個懲罰項來防止權重變得太大,這里是包含一個隱藏的假設:有着很小權值的網絡比有着大權值的網絡更簡單。有好幾個不同的懲罰項可以使用,同樣也可以限定權值來使得輸入到每個隱藏單元的權重向量不允許比某個具體的長度要長(個人:這里是使用的歐式距離的長度,其實就是自身的平方再開根)。
標准的限制權重的大小的方法就是使用一個L2權重懲罰,也就是懲罰權重的平方值,在NN文獻中有時候也叫做權重衰減,因為這個懲罰項的導數扮演着將權重強制推向0的行為。這個權重懲罰可以使得權值保持很小,除非它們有很大的誤差導數來抵消掉,所以如果觀察這個懲罰項像什么,就如上圖中的矩形區域,權重如果遠離0的話,那么就得到一個拋物線似的代價損失(cost)。;如果觀察上圖中的式子部分,所需要優化的損失(cost)就是試圖減小的正常的誤差,加上一個有着一個lambda前置系數的權重平方的和的項(C =E+。。那個式子),而且系數除以2,是為了求導的時候可以剛好抵消掉。在和項之前的系數有時候也叫做權重代價(weight cost),是用來決定這個懲罰的程度的。如果進行求導。可以發現cost的導數就是誤差的導數加上某個具體的權重大小乘以lambda。當權重的大小是-(1/lambda)乘以誤差關於權重大小的導數的時候,損失的導數是為0的。所以唯一使得權重變大的時候就是當損失函數達到最小值的時候,而且同時還擁有大誤差導數的時候。這使得權重更容易被解釋。所以你就不會有着整個權重集合中很多權重很大但是卻沒法做任何事的情況。
在權重上的L2懲罰的影響是為了防止網絡使用不需要的權重。這也通常可以提高泛化能力,因為它能夠阻止那些不需要的權重去擬合采樣誤差。同樣的它還能使得模型更平滑,使得當輸入改變的時候輸出的改變會更緩慢。
所以如果網絡有兩個非常相似的輸入,那么使用一個L2權重懲罰后,它更願意使得在這兩個相似的輸入上權重減半,而不是所有的權重都是1.。上圖右邊部分:如果兩個輸入都是相似的,那么兩個網絡會輸出相似的輸出值,但是下面這個網絡會當輸入改變的時候輸出有着更少的極端變化(就是變化比較緩慢,而上面那個一個為1 一個為0的,變化較為極端。)
上圖是另一種權重懲罰方法。L1懲罰,這里損失函數是一個 “V”字形。所以這里我們所要作的就是懲罰權重的絕對值。這個方法的一個妙處在於可以使得許多的權重更接近於0,這有助於解釋(很像權重稀疏化)。如果只有一點非0的權重留下,那么就更容易懂得網絡會發生什么。
同樣我們可以使用比L1還極端的權重懲罰(沒說是什么懲罰,但是照推測,一個平方,一個絕對值,那么一個應該是開根號什么的吧),這里損失函數的梯度實際上隨着權重變得更大的時候是會更小的(上圖中紅線在綠線之下)。這使得網絡可以在沒有將權值推向0的時候保持權重很大的情況。所以我們甚至更喜歡有着一些很大權重的情況出現。
這里的方法不同於在權重上放上懲罰,而是使用權重約束。意思是不采用懲罰每個權重的平方值,而是在每個隱藏單元或者輸出單元的輸入權重中的最大平方長度(歐式距離法則,向量長度的概念)上加上一個約束。當我們更新權重的時候,如果這個輸入權重向量比約束的還長,那么就簡單的對這個向量進行縮放直到長度匹配允許的長度(縮放的方法:通過對所有的權重除以相同的數量值來進行縮放,也就是整體縮放)。
像這樣進行使用權重約束,比權重懲罰的一個好處在於:比選擇使用權重懲罰額來說,更容易的對輸入權重因子的平方長度設置合理的值,這是因為邏輯單元天生可以進行縮放所以我們就知道1的權重意味着什么。使用權重約束同樣可以阻止當所有的權重都超小而且也做不了什么有用的事的時候隱藏單元被陷入接近於0的狀況,因為當所有的權重都超小的時候,權重上也就沒什么約束了,所以也沒有東西可以阻止它們增長;權重約束同樣可以阻止權重爆炸的情況。
權重約束中一個不易察覺的事情是當一個單元命中他的約束的時候,在所有的權重上的有效的懲罰是由大梯度決定的,所以如果某些輸入權重有着大梯度,它們會試圖將輸入權重的長度因子往上推(值變大),這會將其他的權重往下推(值變小)。所以實際上,如果認為它像一個懲罰,這個懲罰會縮放他自己使得能夠對大權重來說是合適的,而且能夠壓縮小的權重。這比一個固定懲罰去對不相關的權重往0的方向上推更有效,這些也就是la Grange 乘法,其中的懲罰就是La Grange 乘法需要能夠滿足約束。
三、使用噪音作為正則化
在這部分中,會介紹另一個約束NN網絡能力的方法。可以通過不論是在權重還是在激活值上增加噪音。開始的部分會介紹,如果在一個簡單的線性網絡的輸入部分增加噪音,然后試圖對平凡誤差進行最小化,也就是等於在網絡的權重上使用L2懲罰。然后介紹在更復雜的網絡中有關噪音權重的用處,最后介紹一個近來的發現:在激活值上極端的噪音同樣可以作為一個很好的正則化器。
首先先介紹當在一個簡單的NN的輸入部分添加高斯噪音會發生什么事情。噪音的方差可以通過通過與下一層隱藏層中的連接的平方權重來進行放大。如果我們有個很簡單的網絡,只有一個線性輸出單元去直接與輸入相連,那么這個放大的噪音就會加到輸出上。如上圖右邊部分,首先是一個輸入Xi和額外的采樣自0均值和方差sigma的平方的高斯的高斯噪音,這個額外的噪音是通過平方權重與其相乘的。然后輸出到神經元 j 上,所以神經元 j 的輸出前的部分(就是經過激活函數前的部分,這里不確定是前還是后,個人傾向於前)就是 yj + 有着0均值和wi平方乘以sigma i 平方的高斯噪音。額外的方差使得對平方誤差來說有額外的貢獻,可以認為這像pythagoras 理論,也就是平方誤差是由yj和額外的噪音導致的平方誤差的和,因為這個噪音與yj之間是獨立的。如果它是個噪音-free系統,那么當我們最小化總的平方誤差的時候,就能出現平方誤差的最小化值。另外,我們還會對第二項進行最小化,也就是會最小化第二項的期望平方值,而這個期望平方值就是Wi2乘以sigma i2(就是上圖中輸出單元部分的高斯方差),所以這也相對應於一個在wi上和sigma i2上的L2懲罰。
上圖就是數學上的解釋,輸出為y^noisy,假設當我們在所有的輸入上加了噪音后,那么有着噪音-free系統的輸出會變得怎樣?在wixi上的輸入的所有的和加上wi乘以epilision_i(也就是對每個輸入增加的噪音)的所有的和,這些噪音都采樣自一個0均值和方差為sigma_i的高斯分布。(第二行)所以如果我們計算這個期望平方誤差(帶有噪音的輸出y^noisy和目標值 t 之間的誤差),也就是上圖中第二行的式子的左邊部分。這里會使用一個E后面跟着平方括號來表示一個期望,這里不是表示誤差,而是表示一個期望。計算這個期望的部分就是在這個平方括號中的部分,所以這里是計算從帶有噪音的系統中得到的平方誤差的期望(上圖第二行應該看得懂,就不翻譯了)。(第三行)當完成了這個平方后,首先得到的就是(y-t)^2,而這不再期望括號中是因為它不涉及到噪音;第二項是兩項的交叉乘積,第三項就是最后一項的平方。現在這個式子簡單多了。(第四行)事實上,如圖中的解釋,兩者是獨立的,所以它可以簡化到正常的平方誤差加上第四行的第二項,能夠這么簡化的原因是因為epsilion_i與epsilion_j是相互獨立的,所以如果觀察最后一項(第三行第三項),當在那個平方上相乘,所有的交叉乘積都得到一個期望值為0,因為是將兩個有着0均值的獨立項相乘的。如果觀察中間的部分(第三行第二項),同樣也有着期望為0的值,因為每個epsilion_i是與誤差相獨立的。所以我們可以重寫第四行的式子為第五行。所以發現我們之前的期望平方誤差只是一個噪音free系統中的平方誤差加上一個額外的項。則看上去就像是在Wi上的一個L2懲罰項,並且有個懲罰項的強度系數sigma_i^2罷了。
在更復雜的網絡中,我們可以通過在權重上增加高斯噪音的方式來約束模型的能力,這不完全等於一個L2懲罰,但是這看上去有更好的效果,特別是在遞歸網絡中。所以AlexGrave近來在他的識別手寫數字的遞歸網絡的權重上增加噪音,實驗表明效果更好了。
我們可以同樣的在激活值上使用噪音作為一個正則化器,所以假設我們使用BP去訓練一個有着邏輯隱藏單元的多層網絡。如果我們在前饋中使單元是二值化和隨機的,但是在后向傳播上就像使用正常的確定性直傳中使用實值那么會發生什么事情。所以我們是將邏輯單元在前饋中當成隨機二值神經元,也就是我們計算邏輯P的輸出,然后將P視為輸出 1 的概率。在前饋中,使用的是概率隨機來決策是否輸出是1還是0。但是在后向路徑中,使用p的實值作為后向傳播的導數來通過這些隱藏單元。這不是很准確,但是它很接近一個為了隨機系統所做的正確的事情,如果所有的單元都對上層的每個單元都有很小的貢獻。
這么做的話,在訓練集上的效果會更差,而且訓練相對來說更慢了,而且是幾倍的慢。但是在測試集上它很明顯的會更好。這也是當前一個沒公開發表的結果。
四、貝葉斯方法的介紹(這部分不推薦看,直接跳過,就是簡單的貝葉斯規則,hinton老人家說的比較羅嗦,可以直接拿本統計書看看就得了)
這部分將會介紹貝葉斯的方法去擬合模型,通過使用一個簡單的拋硬幣的例子來講解。貝葉斯的原理是不使用模型的參數最可能的設置,而是考慮所有可能的參數設置然后試着對每個可能的設置找出在給定數據下它的概率。
貝葉斯機制假設我們對於每件事總會有個先驗分布,也就是說對於任何你所關心的事件來說,必須有關於這些事件會發生的先驗概率。
先驗也許是很模糊的;我們的數據會給我們一個似然項,我們可以通過我們的先驗與它結合然后得到一個后驗。這里的似然項是為了我們的參數的設置能夠讓數據更具可能性。它有可能會與先驗沖突,但是在約束條件下,如果我們有足夠的數據,那么不論先驗多么的不可能,數據總是能夠戰勝它的,然后在最后(也就是預測的部分,即后驗概率)有着足夠的數據下,真實結果就會顯現。也就是說即使你的先驗是錯的,但是卻能得到正確的假設結果;但是如果你確信你的結果是不符合先驗的,那么這也需要相當多的數據才能搞定的。
那么就講解一個拋硬幣的例子吧。假設完全不知道任何有關硬幣的事情,除了它們可以被拋起和當拋完之后就可以得到任意一面,並假設每次事件之間都是相互獨立的。所以我們的硬幣模型就是只有一個參數P,這個參數P決定着這個硬幣的關於結果是頭朝上的概率。
假設拋了100次,得到53次頭朝上的結果,那么這個參數P的值該是多少。當然一看,會說結果是0.53,但是有證據嗎?最通常的答案就是,也被稱之為最大似然,是為了選擇一個使得觀察結果最可能的參數值,而這個值就是0.53。可惜的是,這不正確。
所以一個包含53個頭朝上和47個頭朝下的序列的概率可以被寫成每次拋的頭朝上的結果p和頭朝下的結果(1-p)的乘積,如上圖第一行所示。如果現在問,在依賴p的情況下觀察的數據的概率是多少,我們就可以對關於p進行求導,然后得到了上圖中的結果,如果將這個導數設置成0,我們就發現這個當這個數據的概率最大化(看成一個函數,然后求導觀察導數走勢,在0的地方肯定是最大或者最小值)的時候,就是將p設置成0.53的時候,這也就是最大似然。
但是在使用最大似然去決定一個模型的參數也會遇到很多問題。假設那個例子,我們只拋一次,就得到一個頭朝上,這不代表我們認為硬幣的概率為1,這也就是說如果概率為1,那么在無限次的拋結果中都得不到頭朝下的事件,這擺明不可能。直觀的認為概率應該為0.5,但是如何來證明它。
更重要的是,我們可以合理的得到一個簡單的答案嗎。我們不知道,我們對數據知之甚少,所以也沒法確定p的值是多少,所以我們真正該做的就是拒絕使用一個簡單的答案,而是在所有的可能的答案上得到整個的概率分布,那么這樣0.5看上去就相當可信了。所以結果為1的情況假設我們有一些先驗置信而且在拋硬幣拋到一半的時候也是那么不可能的(這句話意思就是值為1 不可能)。
上圖就是個例子,從使用基於參數值的許多先驗分布來開始,然后得到一個很容易處理的后驗分布,這里的結果不是我們通常認為的合理解釋。(在隨后會展示如果使用自適應貝葉斯方法的話,先驗分布是怎么被數據自己所修改的。)所以這里先以基於所有的不同的p值的先驗概率都相同的情況(第一個圖)開始。我們認為硬幣是存在不同程度上的偏移的(即硬幣不是那么理想的均勻的)。而任何偏移上的數量都是相等的,即對於一些在半數時間上頭朝上的硬幣,與其他全部時間頭朝上的硬幣是一樣的(即,就是得到的硬幣之間我們認為都是一樣的)。
我們現在觀察一個頭朝上的硬幣的事件。也就是現在所要作的就是,對於p的每個可能的值,我們考慮它的先驗概率,然后將觀察到的頭朝上的概率與其相乘,基於此的話,即正確的p的值就是1 了。所以,如果我們把p賦值為1,也就是說每次投擲的話頭朝上的概率都是1了。如果p賦值為0,那么就剛好相反了。現在看上圖右邊的部分(第二幅圖),紅線就是我們的先驗概率了,按照假設將所觀察到的頭朝上的概率乘以它,現在就得到了一個類似坡的,這是一個未標准化的后驗概率,未標准化是因為紅線下面的區域面積不是1,當然對於一個概率分布來說,所有的概率值加起來一定是等於1的。
所以最后我們所要做的就是進行再次的標准化,對每個值進行縮放,使得總和為1。現在如果以統一關於 p 的先驗分布開始,然后以p的三角后驗分布結束。
那么再來一次(上圖第一個圖),這次假設尾朝上在,所以這里的先驗分布就是在觀察一個頭朝上的事件后得到的一個后連續分布,這里的綠線是按照關於p的值的每個假設的情況下得到一個尾朝上的概率。所以如果p等於1,那么觀察到的概率就是0。所以我們需要將我們的先驗與我們的似然項相乘。
那么就得到了一個曲線如上圖第二個圖。
然后進行再次標准化得到上圖第三個圖,這就是觀察到一個頭朝上和一個尾朝上后得到的一個后驗分布了。注意到這是一個相當明智的分布。在觀察到每個事件之后,就注意到p 不可能為0或者為1,它看上去最可能的應該是中間。
如果我們這么再次拋擲98次的話,同時使用同樣的策略:在基於不同的p的值的情況下,將最后一次任務的后驗概率乘以這次事件的觀察的似然。並假設有53次頭朝上和47次尾朝上。那么就得到上圖右邊那個圖的形狀,它的均值為53,是因為首先是以統一的先驗開始的,然后在0.53的時候達到峰值。不過這也說明其他的值是49,這也是基於此曲線圖下一個完美的合理的值。
所以我們可以進行如下的總結:為了得到上圖第一個公式中的中間那個關於參數W集合 和數據D的聯合分布。對於監督學習來說,這個數據是由目標值(標簽)組成的,所以我們假設在給定輸入和由目標值組成的數據的情況下,這就是我們所觀察到的。這個聯合分布可以重寫成一個獨立概率乘以一個條件概率,所以上圖第一個公式的第三部分,可以看出它與最左邊的部分相等。
那么就得到了上圖第二個公式,也就是通常的形式,也就是后驗概率等於。。。。(這個就是我們概率書的第一課部分了。)因為上面式子的分母無關於求后驗概率 W,所以其實它的存在與否也沒關系。
五、權重衰減的貝葉斯解釋
這部分將會介紹權重衰減的貝葉斯解釋。在全貝葉斯方法中,我們試圖計算模型中每個可能的參數集合下的后驗概率,但是那是一個貝葉斯方法的相當簡約的形式。簡單的說去尋找一個單一參數集合,能夠在先驗概率和數據的之間最好的比較下的值,也被稱為最大后驗學習(MAP)。這也可以用來解釋當使用權重衰減去控制模型能力的時候到底發生了什么。
這里會介紹當在有監督最大似然學習的過程中最小化平方誤差的時候會發生什么。即找到一個權重向量去最小化平方殘差(就是目標值和網絡的預測值之間的差異)等於找到一個權重向量去最大化有關正確解的log似然密度。為了找到這樣的等式,我們需要假設這個正確值是由網絡的輸出加上高斯噪音形成的。所以原理就是:我們首先在基於輸入的情況下運行一次這個網絡得到一個預測值,然后加上高斯噪音,然后我們就會問了,這樣做的正確的答案的概率是什么?
所以模型的輸出就是高斯的中間(上圖右邊的圖),我們所關心的就是希望在基於高斯的情況下目標值的概率最高,因為這個概率會生成 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函數。
這只是關於為什么我們最大化log概率的和或者最小化負的log概率的一方面。我們實際想要做的就是最大化數據的概率,也就是最大化基於不同訓練樣本下生成所有目標值的概率的積(就是本科上課的統計書上的最大似然)。如果我們假設這個輸出錯誤是基於不同樣本上互相獨立的,我們就能可以寫成上圖中第一個式子那樣。
log函數是單調的,所以在最大值的地方導數方向不會改變,所以不使用哪種最大化概率積的方法,而是最大化log每個概率的和的方法,這樣更容易在計算機上運行,而且更穩定。所以就是上圖第二個式子。
在最大后驗學習中,我們試圖找到權重的集合,它可以最優化基於擬合先驗和擬合數據之間的權衡。上圖就是基本原理。如果我們考慮負log去作為一個損失,那么就得到上圖第二個式子,即左右都用上log。上圖第二個式子中最后一個加的項就是基於所有可能的權重向量的積分,而且它不影響W,所以可以當最優化W的時候被忽略掉。式子右邊第二項是在給定W的時候關於數據D的負log概率,這就是我們的通常的錯誤項(個人:這項其實也就是在考慮一個網絡的情況下基於權重而生成的數據也就是輸出部分,所以這也就是錯誤的來源的地方)。而右邊的第一項只依賴於W是基於先驗的情況下W的負log概率(這里的先驗也就是對應於W的隨機初始化)。
最大化一個權重的log概率也就是最小化一個平方距離,同樣的道理,最大化生成正確目標值的log概率就是等同於最小化平方距離。所以最小化平方權重就等於最大化基於一個0均值的高斯先驗的權重的log概率。所以這里是一個高斯(上圖中的圖),是一個均值為0,我們希望最大化這個權重的概率或者權重的log概率。也就是我們希望w能夠盡可能的接近均值0。關於高斯的等式是如上圖右邊的式子,為0均值,所以我們不需要將它考慮進去。然后關於w的log概率就是平方權重被縮小2倍乘以方差,加上一個來自標准化高斯項的常量項,這個常數項當我們改變W的時候是不會被影響的。。
所以最后可以得到關於權重衰減或者權重懲罰的基本的解釋。我們試圖最小化在給定數據的時候權重的負log概率,這涉及到最小化依賴權重轉變的一項,即我們如何轉移目標並且確定這只依賴於權重。從給定權重的輸出的log概率中推出,如果我們假設高斯噪音被加在網絡的輸出上,然后log概率是基於被縮小2倍乘以高斯噪音方差網絡的的輸出值和目標值之間的平方距離。相似的,如果我們假設一個權重的高斯先驗,這個基於先驗的權重log概率就是被縮小2倍乘以這個高斯先驗方差的權重的平方值。所以現在將上圖中第二個式子進行化簡,得到第三個式子,將兩邊乘以2×數據方差的平方,我們就得到了一個新的損失函數,第一項就是當我們乘的過程中得到的簡單的所有訓練樣本得到的預測值與目標值差異平方的和,這就是我們通常說的平方誤差。這里的第二項現在變成了兩個方差的比率乘以權重平方的和,所以你所看到的就是這兩個方差的比率就是權重懲罰,所以我們最初的權重懲罰的想法就是一個試圖讓網絡效果更好的數值,這里你需要通過使用驗證集合來擬合權重懲罰的值,但是現在所見的就是如果我們使用這個高斯的解釋,即高斯先驗,那么對於這種關於網絡輸出與目標值關聯的高斯模型,權重懲罰是由這些高斯方差決定的,而這只是這些高斯的比率罷了,這不是基於所有這些框架的一個隨機值。
六、MacKay的固定權重損失的快速和臟(這個是字面意思)方法
這部分,介紹一個由David Mackay在1990年提出的方法,為了決定在一個沒有使用驗證集的NN中的權重懲罰。這是基於我們可以將權重懲罰解釋成映射估計使得權重懲罰的大小與基於權重的先驗分布的tightness(不知道怎么翻譯合適)有關的。Mackay的方法說明我們可以經驗性的擬合權重懲罰和假設在NN的輸出中的噪音兩個項去。為了得到不需要驗證集和而且擬合權重的方法,這樣就能允許我們可以在不同的子集上擁有不同的權重懲罰去作為NN中的連接,這些鏈接在驗證集合上的代價很大。mackay 在使用這種方法贏得了比賽。
這里介紹一個由David Mackay提出的簡單的,實用的方法,即我們可以將權重懲罰解釋成兩個方差的比率。在我們學到一個模型去最小化平方誤差的時候,我們就能找到關於輸出方差的最好的值,這個最好的值是通過簡單的殘差誤差的方差來找到的。
我們同樣可以子權重的高斯先驗中估計這個方差,我們需要猜測這些方差應該是什么值來作為開始,然后做一些學習,然后使用一個非常臟的技巧,被稱之為“經驗性貝葉斯”。我們將我們的先驗的方差設置成學到的模型的權重的方差,因為這個方差可以讓這些權重最相似。這真的違反了許多貝葉斯方法的前提。我們使用數據去決定我們的先驗置信該是什么。所以一旦我們學到了權重,我們使用一個0均值的高斯去擬合學到的權重的一維分布。然后我們考慮這個高斯的方差,然后將它作為我們的先驗。現在一個美妙的事情就是,不同的權重子集。就像在不同的層中一樣,例如,我們可以從不同的層中學習不同的方差。我們不需要驗證集和,所以我們可以使用所有非測試數據去訓練這個模型,因為我們不需要驗證集和去決定不同層中的懲罰項,所以我們實際上可以有許多不同的權重懲罰。而這是很難用驗證集和來得到的。
所以這就是Mackay的方法,以猜測噪音方差的值和權重先驗方差的值作為起始。實際上,所有你所需要做的就是猜測這個比率。然后做一些梯度下降學習去改善這些權重。然后從新設置這些噪音方差成為殘差誤差的方差,並從新設置權重的先驗方差成為實際學到的權重的分布的方差。
然后回到這個循環的開始部分再來一遍。所以這在實際中是很實用的。Mackay用這種方法贏得了一些比賽。
這節課就是說的如何以貝葉斯的觀點來看待NN,然后使用一些看起來莫名其妙的方法來訓練,不過那么問題就來了,為什么這個1990年發明的方法現在沒人用了,是不符合正統數學觀點,還是它的作用的確有限???