之前我們討論到正規化的時候,大概提到了 L1 norm 和 L2 norm 的方式,這邊來更深入的討論正規化的差別。
下面是 L1 norm 的式子,和 L2 norm 相比,L1 norm 更傾向於讓模型不重要的參數變成 0,這意味著參數將更加稀疏,而這麼做除了可以讓模型泛化能力更好外,還有額外的 2 個好處:
那用 L2 norm 正規化不行嗎?差別在哪邊?L2 norm 傾向於讓參數的值更小,而不是變成 0,L1 norm 這種盡量讓參數為 0 的正規化,在特徵組合時特別重要,例如下圖,當我們將兩個特徵分別有 7 種和 24 種做特徵組合後,將會有 168 個輸入,其中大部分組合後的特徵實際上是沒有什麼意義的,所以 L1 norm 的正規化就會展現它的效用。
另外一般常使用 L1 norm 和 L2 norm 正規化的原因還有一個就是函數是凸函數(Convex function)與否。下面看到 L0 norm (計算有幾個非 0 參數的個數),其損失函數很明顯就是非凸函數,這種函數形式對於找最小值是不利的。
若把 L1 norm 和 L2 norm 正規化的參數機率分佈畫出來後,可以明顯看到兩個都在參數為 0 附近的機率最高,而 L1 norm 最高點又明顯比 L2 norm 還高,意味著 L1 norm 正規化更傾向於將參數值約束至 0。
當然除了 L0 norm、L1 norm 和 L2 norm 之外,還有各種 Ln norm 存在,下面是 Ln norm 的通式:
接著你可能會想到的是,我何不乾脆將 L1 norm 和 L2 norm 結合起來做正規化?沒錯,確實有這樣的做法,Elastic Net 就是採用這樣的正規化,畫出來後就像下面的紅色圈部分,不過使用這種方式就多了一個正規率參數需要設定。
舉一個實際簡單的例子,若我有一組資料是兩種顏色,藍點是一個一個圓中的點,橘色則是圓以外的點,這時候若訓練一個模型,不使用正規化,可以看到下面圓的右上缺了一角,很明顯地發生了過擬合的現象;但若在相同模型搭配上正規化,就可以看到模型學出來就是一個圓了,這也表示著使用正規化確實可以讓模型泛化能力更好,減輕過擬合的現象。
邏輯迴歸可以說是最重要的基本迴歸也不為過,因為他簡單的形式,在許多分類問題,甚至是神經網路裡面也大量使用到它。
邏輯迴歸的數學形式如下,畫出來是一個介於 0 到 1 之間的函數 (Sigmoid function):
在分類問題的時候,我們會使用邏輯迴歸而不使用線性迴歸,對於邏輯迴歸的損失函數,RMSE 並不適用,因為 RMSE 沒有辦法很好的描述種類錯誤時候的損失,真正適用的損失函數是交叉熵損失 (Cross Entropy Loss),它可以很好的懲罰分類錯誤的輸出值,下面是其式子和函數形狀:
不過在訓練邏輯迴歸模型的時候,主要會有 2 個問題點:
這時候可以使用另一個技巧,稱作提早停止(Early stopping),這個技巧的概念是在訓練的時候,同時監測訓練損失和驗證損失,正確地訓練損失當然會隨著訓練時間一直下降,然而驗證損失一開始一樣會下降,但在到某個階段的時候反而會開始上升,而提早停止便是當開始上升時,就停止訓練,確保模型不要過度擬合。
下圖則是一般邏輯迴歸可以應用的地方,例如說垃圾郵件的分類、核貸、導航路徑等等,含有決策和分類的問題。
而在分類問題中,最後的表現衡量就會用到混淆矩陣 (Day4有詳細介紹),但是如果我有很多個模型要比較哪個比較好,這時候要用什麼指標比較好呢?答案就是 ROC (Receiver Operating Characteristic) 和 AUC (Area Under Curve),ROC是 TP對FP 的做圖,越往左上代表模型越好。
那如果要量化比較 ROC 的話,使用 AUC 就是最直接的方式,值越高代表越好,詳細 ROC 和 AUC 的介紹可以參考這裡。
今天介紹了正規化和邏輯迴歸,明天我們將介紹 “神經網路”。