本文面向稍有經驗的機器學習開發者,來自微軟的 lars hulstaert 在文中為我們介紹了訓練神經網路的幾種目標函式。
介紹首先,目前有很多文章都在介紹優化方法,比如如何對隨機梯度下降進行優化,或是提出乙個該方法的變種,很少有人會解釋構建神經網路目標函式的方法。會去回答這樣的問題:為什麼將均方差(mse)和交叉熵損失分別作為回歸和分類任務的目標函式?為什麼增加乙個正則項是有意義的?所以,寫作這篇博文的意義在於,通過對目標函式的考察,人們可以理解神經網路工作的原理,同時也就可以理解它們為何在其他領域卻無法發揮作用。
在分類任務中,(監督學習中)正確的標註 p(ground truth)與網路輸出 q 之間的交叉熵損失。
圖:在回歸任務中,(監督學習中)正確的標註 y 與網路輸出 y_tilde 之間的均方差。
其次,神經網路作出錯誤概率**是出了名的,並且,面對對抗性樣本(adversarial example,即一種特殊的輸入資料,它們由研究人員專門設計,用來讓神經網路作出錯誤**)它們也毫無辦法。總之,神經網路經常過度自信,甚至當它們判斷錯誤時也這樣。這個問題在真實環境中可不容忽視,以自動駕駛為例,一輛自動駕駛汽車要保證在 145km/h 的行駛速度下還能做出正確的決定。所以,如果我們要大規模應用深度學習,我們不僅要認識其優點,還要知道其缺點。
一直以來,我都想明白為何神經網路可以從概率的角度來加以解釋,以及它們為什麼適合作為廣義的機器學習模型框架。人們喜歡把網路的輸出作為概率來討論。那麼,神經網路的概率解釋與其目標函式之間是否存在聯絡呢?
寫作這篇文章的靈感**於作者和其朋友 brian trippe 在劍橋大學計算與生物學習實驗室工作期間對貝葉斯神經網路的研究,作者高度推薦讀者朋友閱讀其朋友 brian 關於神經網路中變分推理的**《complex uncertainty in machine learning: bayesian modeling for conditional density estimation and synaptic plasticity》。
監督學習
在監督學習問題中,我們一般會有乙個資料集 d,x 是其中的樣本,y 是樣本標籤,我們用(x, y)的方式來表示樣本,我們要做的,是對 p(y | x, θ) 這個條件概率分布進行建模。
舉個例子,在影象分類任務中,x 表示乙個影象,y 表示與之對應的影象標籤。 p(y | x, θ) 表示:在影象 x 和乙個由引數θ定義的模型下,出現標籤 y 的概率。
按照這種方法建立的模型被稱為判別式模型(discriminative model)。在判別式或條件模型中,定義條件概率分布函式 p(y|x, θ) 的引數θ是從訓練集中推出的。
基於觀察資料 x(輸入資料或特徵值),模型輸出乙個概率分布,之後會用這個分布來**標籤 y(類別或真值)。不同的機器學習模型要求**不同的引數。對於線性模型(如:邏輯回歸,由一系列值等於特徵數量的權重來定義)與非線性模型(如:神經網路,由其每一層的一系列權重所定義)而言,這兩類模型都可以近似等於條件概率分布。
對於典型的分類問題而言,(一系列可被學習的)引數θ用作定義乙個 x 到範疇分布(它們基於不同的標籤)的對映。乙個判別式模型會將概率 n(n 等於類的數量)作為輸出。每個 x 都屬於乙個單獨的類,但是模型的不確定性是由在類上輸出的乙個分布來反映的。一般來說,概率最大的類會在做出決定的時候被選擇。
在影象分類中,網路會基於影象類別輸出乙個範疇分布。上圖描述了一張測試影象中的前五個類(以概率大小為標準篩選)。
我們注意到,判別式回歸模型(discriminative regression model)經常只會輸出乙個**值,而不是乙個基於所有真值的分布。這與判別式分類模型(discriminative classification model)不同,後者會輸出乙個基於可能的類的分布。那麼這是否意味著判別式模型因回歸任務而瓦解了呢?模型的輸出難道不應該告訴我們哪些回歸值(regression value)會比其它值更有可能嗎?
說判別式回歸模型只有乙個輸出其實會讓人誤解,實際上,乙個回歸模型的輸出與乙個著名的概率分布有關:高斯分布。事實證明,判別式回歸模型的輸出代表了乙個高斯分布的均值(乙個高斯分布完全由乙個均值與標準差決定)。有了這個資訊,你就可以在輸入*x*的情況下決定每個真值的相似度了。
通常,只有這個分布的均值才會建模,高斯分布的標準差要麼沒有建模,要麼就是在所有 x 上保持乙個常值(constant)。因此,在判別式回歸模型中,θ規定了從 x 到高斯分布(y 從中取樣得來)均值的乙個對映。基本上每當要做出決定時,我們都會選擇均值,因為模型能夠通過提高標準差來表達哪個 x 是不確定的。
當沒有訓練資料的時候,乙個模型是需要保持不確定的,相反,當有訓練資料的時候,模型需要變得確定。上圖展示了這樣的乙個模型,來自 yarin gal 的博文。
在回歸問題裡,其他的概率模型(比如高斯過程)在對不確定性進行建模的過程中效果好得多。因為當要同時對均值與標準差建模的時候,判別式回歸模型會有過於自信的傾向。
高斯過程(gaussian process)可以通過對標準差精確建模來量化不確定性。其僅有的乙個缺點在於,高斯過程不能很好地擴大到大型資料集。在下圖中你可以看到,gp 模型在具有大量資料的區域周圍置信區間很小。在資料點很少的區域,置信區間又變得很大。
gp 模型在資料點上是確定的,但是在其他地方是不確定的(來自 sklearn)。
通過在訓練集上訓練,判別式模型可以學習資料(代表了乙個類或是真值)中的特徵。如果乙個模型能夠將高概率賦給正確地的樣本類,或是乙個接近測試集中真值(true value)的均值(mean),那麼我們說這個模型表現的不錯。
鏈結神經網路
當用神經網路來進行分類或回歸任務時,上述提到的引數分布(範疇分布與高斯分布)的建模就通過神經網路來完成。
這一點在當我們要決定神經網路引數θ的最大似然估計(mle)的時候比較清楚。mle 相當於找到訓練資料集似然度(或等效對數似然度)最大時的引數θ。更具體的來說,下圖的表述得到了最大化:
當 p(y | x, θ) 由模型確定時,它表示了訓練資料中真實標籤的概率。如果 p(y | x, θ) 接近於 1,這意味著模型能夠確定訓練集中正確的標籤/均值。在給定由 n 個觀察對組成的訓練資料(x,y)的條件下,訓練資料的似然度可被改寫成對數概率的總和。
在分類與回歸的情況下,p(y|x, θ) 作為乙個(x, y)的後驗概率,可以被改寫成範疇分布和高斯分布。在優化神經網路的情況下,目標則是去改變引數,具體方式是:對於一系列輸入 x,概率分布 y 的正確的引數可以在輸出(回歸值或類)中得到。一般這可以通過梯度下降和其變體來實現。因此,為了得到乙個 mle 估計,我們的目標是優化關於真實輸出的模型輸出:
最大化乙個範疇分布的對數值相當於最小化真實分布與其近似分布的交叉熵。
最大化高斯分布的對數值相當於最小化真實均值與其近似均值的均方差。
因此,前述中的表達就可以被改寫,分別變成交叉熵損失和均方差,以及分類和回歸的神經網路的目標函式。
相較於更加傳統的概率模型,神經網路從輸入資料到概率或是均數習得的非線性函式難以被解釋。雖然這是神經網路的乙個顯著的缺點,但是其可以模擬大量複雜函式的能力也帶來了極高的好處。根據這部分衍生討論的內容,我們可以明顯看到,神經網路的目標函式(在確定引數的 mle 似然度過程中形成)可以以概率的方式來解釋。
神經網路乙個有趣的解釋與它和那些一般的線性模型(線性回歸、邏輯回歸)的關係有關。相比於選擇特徵的線性組合(就像在 glm 做的一樣),神經網路會產生乙個高度非線性的特徵組合。
最大後驗概率(map)
但是如果神經網路可以被解釋成概率模型,那為什麼它們給出的概率**質量很差,而且還不能處理那些對抗性樣本呢?為什麼它們需要這麼多資料?
在選擇好的函式逼近器時,根據不同的搜尋空間我傾向於選擇不同的模型(邏輯回歸,神經網路等等)。當面對乙個極大的搜尋空間,也即意味著你可以很靈活地模擬後驗概率時,依然是有代價的。比如,神經網路被證明是乙個通用的函式逼近器。也就是說只要有足夠的引數,它們就可以模擬任何函式。然而,為了保證函式在整個資料空間上能夠得到很好的校準,一定需要極大的資料集才行。
通常,乙個標準的神經網路都會使用 mle 來進行優化,知道這一點很重要。使用 mle 進行優化可能會讓模型發生過擬合,所以模型需要大量資料來讓過擬合問題減弱。機器學習的目標不是去尋找乙個對訓練資料解釋度最好的模型。我們更需要的是找到乙個可以在訓練集外的資料上也有很好泛化能力的模型。
在這裡,最大後驗概率(map)方法是乙個有效的可選方案,當概率模型遭遇過擬合問題時我們經常會使用它。所以 map 相當於神經網路的語境下的什麼呢?對於目標函式它會有什麼影響呢?
與 mle 類似,map 也可以在神經網路的語境下被改寫成乙個目標函式。就本質而言,使用了 map 你就是在最大化一系列引數θ(給定資料下,在θ上假設乙個先驗概率分布)的概率:
使用 mle 時,我們只會考慮方程的第乙個元素(模型在何種程度上解釋了訓練資料)。使用了 map,為了降低過擬合,模型滿足先驗概率也很重要(θ在何種程度上滿足先驗概率)。
對θ使用均值為 0 的高斯先驗概率與把 l2 正則化應用到目標函式上是一致的(確保了有很多小權重),然而在θ上使用乙個拉普拉斯先驗概率與把 l1 正則化應用到目標函式上是一致的(確保很多權重的值為 0)。
左邊是 l1 正則化,右邊是 l2 正則化。
一種完全貝葉斯方法
在 mle 和 map 兩種情況中,都只使用了乙個模型(它只有一組引數)。對於複雜的資料尤其如此,比如影象,資料空間中特定的區域沒有被覆蓋這個問題不太可能出現。模型在這些地方的輸出由模型的隨機初始化與訓練過程決定,模型對處於資料空間覆蓋區域之外的點會給出很低的概率估計。
儘管 map 保證了模型在這些地方的過擬合程度不會太高,但是它還是會讓模型變得過於自信。在完全貝葉斯方法中,我們通過在多個模型上取平均值來解決這個問題,這樣可以得到更好的不確定性**。我們的目標是模擬引數的乙個分布,而不是僅僅一組引數。如果所有的模型(不同引數設定)在覆蓋區域之外都給出了不同的**,那麼這意味著這個區域有很大的不確定性。通過對這些模型取平均,最終我們會得到乙個在那些區域不確定的模型,這正是我們想要的。
Python中函式引數理解
python中函式定義主要包含4類引數 1 必選引數 2 預設引數 3 可變引數 4 關鍵字引數 def power x x 必選引數 return x 2def power x,n 2 n 預設引數 return x n即傳入的引數個數是可變的。def calc numbers numbers 可...
SetBkMode函式理解
輸出的字串時,發現存在背景色,這樣的輸出是破壞背景的。那需要使用什麼方法來保持背景不變,而又能輸出紅色的字串呢?比如按鈕的文字顏色是黑色的,而背景是灰色的。這就需要使用setbkmode函式來設定drawtext函式的輸出方式,顯示裝置共有兩種輸出方式 opaque和transparent。opaq...
OpenGl glenable 函式理解
glenable 用於啟用各種功能。功能由引數決定。與gldisable相對應。gldisable是用來關閉的。兩個函式引數取值是一至的。引數說明 void glenable glenum cap glenum 是unsigned int 型別 cap 是乙個取值。由值決定啟用的功能鍵。各種功能請看...