1. 程式人生 > >過擬合、正則化、泛化、歸一化

過擬合、正則化、泛化、歸一化

1、什麼是過擬合

過擬合現象:通常我們在分類任務過程中都會遇到過擬合這種現象,具體表現為,當我們增加訓練集的資料時,測試集的分類效果反而降低,這種現象稱為過擬合,或者叫過配。

過擬合的本質:是由於監督學習問題的不穩定,表現為三點

(1)、有限的訓練資料不能完全反映出一個模型的好壞,然而我們不得不在這有限的資料集上挑選模型,因此我們完全有可能挑選到訓練集上表現好而在測試集上表現很差的模型,也無法知道模型在測試集上的表現。

(2)、如果模型空間(也叫模型複雜度)足夠,當我們有很多待選模型的時候,我們挑到和任務資料集對應最好的模型的概率就小得多了。

(3)、如果我們想訓練集的效果表現很好,就需要挑選足夠多的模型,否則模型空間很小,就很可能不存在能夠擬合很好的模型。

2、正則化為什麼能夠防止過擬合

在機器學習中,資料中往往會存在噪聲,當我們用模型去擬合帶有噪聲的資料時,往往將模型便得更加複雜而正則化和懲罰因子,目的是為了平衡模型複雜度和損失函式之間的關係,從而得到更優的測試結果。為了解釋正則化,我準備引入一個公式來闡述正則化的概念。假設目標函式如:

min\left\{  \frac{1}{N}\sum_{i=1}^{N}{(y_{i} - f(x_{i} ))^{2}  + r(d)}   \right\} , 為了讓目標函式值最小。其中r(d)可以理解為有d的引數進行約束,或者 D 向量有d個維度

咱們可以令: f(x_{i}) = w_{0}x_{0} + w_{1} x_{1} + w_{2}x_{2} + w_{3}x_{3} + ..... + w_{n}x_{n},其中f(x)為什麼要用多項式的方式模擬,是根據泰勒公式展開式進行,任何函式都可以用多項式的方式趨近,e^{x} ,log x,lnx,\frac{1}{x}等等都可以去趨近,而不同的函式曲線其實就是這些基礎函式的組合,理所當然也可以用多項式去趨近。在分類過程中,產生過擬合的原因來源f(x)

,x_{0},x_{1},x_{2},x_{3}....x_{N}不斷增多,同樣w_{0} ,w_{1} ,w_{2} ,w_{3} ,...w_{N}等數量增多在強行解釋一下,x表示我們輸入特徵,而W使我們學習的係數。

我們首先想到就是控制N的數量,也就是要N最小化,其實也就是要W向量中項的個數最小化。

為什麼我們考慮W而不是x ? 因為你不知道下一個樣本想x輸入的是什麼,無法考慮x。在下一次輸入x^{(k)},即第k個樣本之前,我們已經根據x^{(1)} ,x^{(2)} ,....x^{(k-1)}次測試樣本的輸入,計算(學習)出了W.就是這麼個道理。

讓W向量中項的個數最小化”這個問題,學過數學的人是不是看到這個問題有點感覺?對,沒錯,這就是0範數的概念!什麼是範數,下文我特意查了資料進行闡述:

r(d) = “讓W向量中項的個數最小化” = \left| W \right| _{0}

所以為了防止過擬合,咱們除了需要前面的相加項最小,用公式R_{emp}(f)

 = \frac{1}{2}W^{T}W+\sum_{i}^{}{l(y_{i},f(x_{i} ) )}代替,使其最小,我們還需要讓 r(d)=\left| W \right| _{0}最小,所以,為了同時滿足兩項都最小化,咱們可以求解讓R_{emp}(f)和r(d)之和最小,這樣不就同時滿足兩者了嗎?如果r(d) 過大,R_{emp}(f)再小也沒用;相反r(d)再小,R_{emp}(f)太大也失去了問題的意義。
就是為什麼需要有個r(d)項,為什麼r(d)能夠防止過擬合原因了。

向量範數

0-正規化:非0的個數

1-範數:為絕對值之和

||x||_1 = \sum_{i=1}^N|x_i|,即向量元素絕對值之和,matlab呼叫函式norm(x, 1) 。

2-範數:就是通常意義上的模

||\textbf{x}||_2 =\sqrt{\sum_{i=1}^Nx_i^2},Euclid範數(歐幾里得範數,常用計算向量長度),即向量元素絕對值的平方和再開方,matlab呼叫函式norm(x, 2)。

\infty-範數:

||\textbf{x}||_\infty = \max_{i}|x_i|,即所有向量元素絕對值中的最大值,matlab呼叫函式norm(x, inf)。

-\infty-範數:

即所有向量元素絕對值中的最小值,matlab呼叫函式norm(x, -inf)。||\textbf{x}||_{-\infty}=\min_i|x_i|

p-範數:

||\textbf{x}||_p = (\sum_{i=1}^N|x_i|^p)^{\frac{1}{p}},即向量元素絕對值的p次方和的1/p次冪,matlab呼叫函式norm(x, p)。

L1範數和0範數可以實現稀疏,L1因具有比L0更好的優化求解特性而被廣泛應用L2範數是指向量各元素的平方和然後求平方根。我們讓L2範數的正則項||W||2最小,可以使得W的每個元素都很小,都接近於0,但與L1範數不同,它不會讓它等於0,而是接近於0,這裡是有很大的區別;所以大家比起1範數,更鐘愛L2範數

3、模型的泛化能力

  泛化能力(generalization ability): 是指機器學習對新鮮樣本的適應能力。學習的目的是學到隱含在資料對背後的規律,對具有統一規律的學習集以外的資料,經過訓練的網路也能給出合適的輸出,改能力也稱泛化能力。

通常期望經訓練樣本訓練的網路具有較強的泛化能力,也就是對新輸入給出合理響應的能力。應當指出並非訓練的次數越多越能得到正確的輸入輸出對映關係。網路的效能主要用它的泛化能力來衡量。

以我的理解,模型的泛化能力可以類比到程式的健壯性。

怎麼提高模型的泛化能力

與資料集無關的方法:

  1. 加入正則項
  2. 資料中加入噪音,
  3. 訓練多個模型,用模型融合的方式訓練資料

根據資料本身的結構特徵,構造一些方法:

  1. 特徵選取,減少輸入引數的數量
  2. 特徵提取,把多個特徵合併為少數幾個特徵如(PCA),同樣為了減少輸入引數的個數
  3. 根據已知的資料性質,構造新的樣本。
  4. 選取合適的神經網路,比如影象問題選取CNN,而時序問題選取RNN或者LSTM

4、歸一化

softmax解決多分類歸一化問題:

在多分類問題,我們通常在模型輸出資料之前進行一個softmax處理,因為經過經過一次softmax之後,每進行一次多分類,每個分類都會以概率的形式都顯示在一個集合之中,每個類別的概率範圍在[0,1],而且所有類別的概率之和是為1的。舉個簡單例子:如五分類資料[23,12, 13, 52, 0] 經過一次softmax之後,每個類別的可能性就以[0.23, 0.12, 0.13, 0.52, 0]形式表示。這就簡單介紹了softmax的歸一化操作。

當然還有max歸一化等其他方法進行歸一化處理。對於二分類問題,通常我們使用邏輯迴歸logistic Regression

softmax的形式:
P(y=i) = \frac{\exp(\sum_d w_{id}x_d)}{\sum_j \exp(\sum_d w_{jd}x_d)}
多類分類問題的目標函式常常選為cross-entropy,即L = -\sum_k t_k \log P(y = k),其中目標類的t_k等於1,其它類的t_k等於0。
在神經網路模型(最簡單的logistic regression也可看成沒有隱含層的神經網路)中,輸出層第i個神經元的輸入為a_i = \sum_d w_{id}x_d
神經網路是用error back-propagation訓練的,這個過程中有一個關鍵的量是\partial L / \partial a_i
可以算出,同時使用softmax和cross-entropy時,\partial L / \partial a_i = P(y=i) - t_i
這個形式非常簡潔,而且與線性迴歸(採用最小均方誤差目標函式)、兩類分類(採用cross-entropy目標函式)時的形式一致。

附註:本文參考知乎的答覆,如果發現相同的知乎回答,不要介意,可以一起探討,對於沒有在文章打上標記的引用部分,請勿噴。