1. 程式人生 > >深度神經網路之正則化

深度神經網路之正則化

1.正則化

之前介紹的文章之中,我們已多次接觸到正則化方法,但沒有詳細的解釋為什麼要正則化,什麼是正則化,以及L1正則化和L2正則化的區別。本次文章之中,我們將詳解機器學習中正則化的概念和深度神經網路中的正則化方法。

1.1 為什麼要正則化?

講到為什麼需要正則化,就需要了解什麼是過擬合問題。以下面圖片為例,我們能夠看到有兩個類別,其中以X代表男生,O代表女生。

01

我們想要通過學習來得到分類曲線,其中分類曲線能夠有效區分男生和女生,現在來分析下上面的三種分類結果。

  • **欠擬合:**圖1分類明顯欠缺,有些男生被分為女生,有些女生被分為男生。
  • **正擬合:**圖2雖然有兩個男生被分類為女生,但能夠理解,畢竟我們人類自己也有分類錯誤的情況,比如通過化妝,女裝等方法。
  • 過擬合:圖3雖然能夠全部分類正確,但結果全部正確就一定好嗎?不一定,我們能夠看到分類曲線明顯過於複雜,模型學習的時候學習了過多的引數項,但其中某些引數項是無用的特徵,比如眼睛大小。當我們進行識別測試集資料時,就需要提供更多的特徵,如果測試集包含海量的資料,模型的時間複雜度可想而知。

1.2 什麼是正則化?

既然我們已經知道什麼是過擬合,那麼怎麼解決過擬合問題呢?上面有介紹到,模型出現過擬合,是在模型特徵上過於複雜。而特徵又包含在我們的目標函式f(x)之中,那麼只能從目標函式f(x)中尋找解決問題的方法。假設目標函式f(x)和損失函式J0為
f(X)=w0x0+w1x1+w2x3+...+wnxn

f(X)=w_0x_0+w_1x_1+w_2x_3+...+w_nx_n

J0=f(x)y22=XWy22 J_0=||f(x)-y||_2^2=||XW-y||^2_2

對於上式,如果特徵項x0,x1,x2,...,xnx_0,x_1,x_2,...,x_n越多的話,自然w0,w1,w2,...,wnw_0,w_1,w_2,...,w_n也就越多。想要減少特徵的數量,自然減小N也就好了。而N影響的是X

=(x0,x1,x2,...,xn)X=(x_0,x_1,x_2,...,x_n)W=(w0,w1,w2,...,wn)W=(w_0,w_1,w_2,...,w_n)兩項,那麼是從X解決問題還是從W解決問題呢?

如果從X入手解決問題,但訓練過程中我們不知道下一個樣本X是什麼,會怎樣的影響目標函式,所以此路不通。那麼W如何呢?我們知道W係數是訓練過程中通過學習歷史資料得到的,和歷史資料有關,所以應該可以。現在再回到我們原來的問題,希望減少N的數目,而讓N最小化,其實就是讓X向量或W向量中項的個數最小化,既然X不行,那麼我們可以嘗試讓W向量中項的個數最小化。如何求解才能讓W向量中項的個數最小,我們先簡單介紹下0、1、2範數的概念。

  • **L0範數:**向量中非零元素的個數,記為W0||W||_0
  • **L1範數:**絕對值之和,記為W1||W||_1
  • **L2範數:**通常意義上的模,記為W2||W||_2

所以為了防止過擬合,我們需要讓W0||W||_0最小,同時讓損失函式J0J_0最小,為了滿足兩項最小化,可以讓J0J_0W0||W||_0之和最小化。但因為W0||W||_0比較難求(NP難問題),我們進而可以轉化為求W1||W||_1W1||W||_1W0||W||_0的最優凸近似,都可以實現稀疏,比較容易求解,這也是為什麼可以選用W1||W||_1的原因。最後損失函式後面新增的額外項W1||W||_1,也就是我們稱作的L1正則化,α\alpha含義在後面進行講解。
J=J0+L1=XWy22+αW1 J=J_0+L1=||XW-y||^2_2+\alpha||W||_1
說完L0範數和L1範數,就不得不提L2範數。L2範數是指先求向量各元素的平方和,然後再進行求平方根,也就是通常意義上的模。同樣,對於正則化問題,我們的目標是讓W向量中的每個元素都很小,也就是讓L2範數最小。L1範數和L2範數的不同點在於,L1範數會讓其中某些元素等於0,而L2範數只是讓其中元素接近0,這裡有很大不同,我們在後面會進行詳細講解。最後損失函式後面新增的額外項||W||2,也就是我們稱作的L2正則化。
J=J0+L2=XWy22+αW2 J=J_0+L2=||XW-y||^2_2+\alpha ||W||_2

1.3 L1正則化和L2正則化

L1正則化可以產生稀疏值矩陣,即產生一個稀疏模型,可以用於特徵選擇和解決過擬合。那什麼是稀疏值矩陣呢?稀疏矩陣是矩陣中很多元素為0,只有少數元素是非零值的矩陣,稀疏矩陣的好處就是能夠幫助模型找到重要特徵,而去掉無用特徵或影響甚小的特徵。

比如在分類或預測時,很多特徵難以選擇,如果代入稀疏矩陣,能夠篩選出少數對目標函式有貢獻的特徵,去掉絕大部分貢獻很小或沒有貢獻的特徵(因為稀疏矩陣很多值是0或是很小值)。因此我們只需要關注係數是非零值的特徵,從而達到特徵選擇和解決過擬合的問題。那麼為什麼L1正則化可以產生稀疏模型呢?

假如帶有L1正則化的損失函式方程如下所示,其中J0J_0是原始損失函式,αww\alpha \sum_{w}|w|是正則化項,α\alpha是正則化係數。根據1.2節的介紹,可以採用一定的方法,比如梯度下降法,求出在L1的約束下J0J_0的最小值。
J=J0+L1=J0+αww J=J_0+L_1=J_0+\alpha \sum_{w}|w|
以上述損失函式為例,我們考慮二維的情況,即只有兩個權值w1w_1w2w_2,此時L1=α(w1+w2)L1=\alpha(|w|_1+|w|_2)。對於梯度下降法,求解J0J_0的過程,可以畫出如下的等值線。同時L1正則化函式也可以在w1,w2w_1,w_2二維平面上表示出來,即黑色直線所圍成的菱形。
02

從上圖可以看出,當J0等值線與L1圖形首次相交的點就是最優解,也就是上圖中的(0,w)。而對於L1函式有許多突出的點(二維情況下是4個),J0函式與這些頂點接觸的概率遠大於與L1其他部分接觸的概率,恰好在這些頂點上會有很多權值等於0,這就是為什麼L1正則化可以產生稀疏模型,進而可以用於特徵選擇。最後針對L1正則化再介紹下係數α,其目的是控制L1圖形的大小。當α越小,L1的圖形越大,α越大,L1圖形也就越小。L1圖形可以小到在原點附近,這也就是為什麼w可以取到很小的原因。

另外L2正則化也可以很好的解決過擬合問題。從上面得知,擬合過程中通常都傾向於讓權值儘可能小,最後構造出一個讓所有引數都比較小的模型。因為一般認為引數值小的模型比較簡單,能夠適應於不同的資料集,比如對於目標方程,若引數很大,那麼資料只要偏倚一點點,那麼對結果的影響就很大。如果引數很小的話,即使資料變化範圍比較大,對結果影響也不是很大。相對來說,引數較小的話,對模型的抗擾動能力強。那麼為什麼L2正則化可以獲得很小的引數值呢?我們假設帶有L2正則化的損失函式方程如下所示,並對損失函式進行求導。
J=J0+L2=J0+λ2nww2 J=J_0+L_2=J_0+\frac{\lambda}{2n}\sum_{w}w^2

Jw=J0w+λnw \frac{\partial J}{\partial w}=\frac{\partial J_0}{\partial w}+\frac{\lambda}{n}w

Jb=J0n \frac{\partial J}{\partial b}=\frac{\partial J_0}{\partial n}

相關推薦

深度神經網路

1.正則化 之前介紹的文章之中,我們已多次接觸到正則化方法,但沒有詳細的解釋為什麼要正則化,什麼是正則化,以及L1正則化和L2正則化的區別。本次文章之中,我們將詳解機器學習中正則化的概念和深度神經網路中的正則化方法。 1.1 為什麼要正則化? 講到為什麼需要正則

深度學習神經網路的使用

目錄 前言 如果訓練資料集不夠大,由於深度學習模型具有非常大的靈活性和容量,以至於過度擬合可能是一個嚴重的問題,為了解決這個問題,引入了正則化的這個方法。要在神經網路中加入正則化,除了在啟用層中加入正則函式,應該dropout也是可以起到正則的效果

3. DNN神經網路

1. DNN神經網路的前向傳播(FeedForward) 2. DNN神經網路的反向更新(BP) 3. DNN神經網路的正則化 1. 前言 和普通的機器學習演算法一樣,DNN也會遇到過擬合的問題,需要考慮泛化,這裡我們就對DNN的正則化方法做一個總結。 2. DNN的L1和L2正則化 想到正則化,

TensorFlow北大公開課學習筆記4.4-神經網路優化----損失函式)

 今天學習了正則化,主要內容是:通過程式碼比較正則化與不正則化的區別。 什麼叫過擬合?           神經網路模型在訓練資料集上的準確率較高,在新的資料進行預測或分類時準確率較低, 說明模型的泛化能力差 什麼叫正則化:?           在損失函式中給每個引數

tensorflow 實現神經網路

import matplotlib.pyplot as plt import numpy as np import tensorflow as tf from sklearn import datasets from tensorflow.python.framework

79、tensorflow計算一個五層神經網路損失係數、防止網路過擬合、的思想就是在損失函式中加入刻畫模型複雜程度的指標

''' Created on Apr 20, 2017 @author: P0079482 ''' import tensorflow as tf #獲取一層神經網路邊上的權重,並將這個權重的L2正

深度學習系列(2):資料集增強(資料增廣)

讓機器學習模型泛化得更好的最好辦法是使用更多的資料進行訓練。當然,在實踐中,我們擁有的資料量是很有限的。解決這個問題的一種方法是建立假資料並新增到訓練集中。對於一些機器學習任務,建立新的假資料相當簡單。對分類來說這種方法是最簡單的。分類器需要一個複雜的高維輸入

HIVE詳解

div case details class null false TP CA hive 有大神寫的很好了,我借花獻佛,有興趣,看鏈接,在此不再贅述。想要學習Hive正則表達式重點應該是正則表達式的表示方式,只有正則表達式使用溜了,hive正則那就是小case. 附參考博文

資深程序員帶你玩轉深度學習中的技術(附Python代碼)!

c51 進行 ros batch num 簡單的 oat 深度學習 repr 目錄 1. 什麽是正則化? 2. 正則化如何減少過擬合? 3. 深度學習中的各種正則化技術: L2和L1正則化 Dropout 數據增強(Data augmentation) 提前停止(Ear

【Ian Goodfellow課件】深度學習中的

本課件主要內容包括: 正則化定義 權值退化與約束優化 範數懲罰 資料集擴充 多工學習 學習曲線 稀疏表達 Dropout 切線傳播 完整課件下載地址: http:/

神經網路權重初始(附程式碼)

摘要 神經網路/深度學習模型訓練的過程本質是對權重進行更新,在對一個新的模型進行訓練之前,需要每個引數有相應的初始值。對於多層神經網路/深度學習而言,如何選擇引數初始值便成為一個值得探討的問題。本文從實現啟用值的穩定分佈角度來探討神經網路的效率優化問題 權重在

AI聖經-深度學習-讀書筆記(七)-深度學習中的

深度學習中的正則化 0 簡介 機器學習中的一個核心問題是設計不僅在訓練資料上表現好,而且能在新輸入上泛化好的演算法。採用顯式減少測試誤差(可能會增加訓練誤差)的策略稱為正則化。 在深度學習的背景下,大多數正則化策略都會對估計進行正則化(以偏差的增加換取方差

機器學習演算法

>By joey周琦 正則化 假設目標函式為 J J, 比如 J J可以是對數似然函式的負數形式,特徵 i i的係數為 wi w_i, 係數向量 w=[w1,...,

深度神經網路tensorflow初體驗

tensorflow是一款基於資料流圖(data flow graphs)的開源軟體庫,可用於深度神經網路的快速搭建和實現。 其github原始碼庫中提供了五種開發平臺:Linux CPU, Linux GPU(這裡不得不吐槽下GPU所需配置太高了!!泰坦x,

theano學習

先上程式碼: from __future__ import print_function import theano from sklearn.datasets import load_boston#波士頓房價資料 import theano.tensor as T import numpy a

深度神經網路損失函式和啟用函式

1.損失函式和啟用函式簡介 通過前面深度神經網路之前向傳播演算法和深度神經網路之反向傳播演算法的學習,我們能夠了解到損失函式是用來評估模型的預測值與真實值之間的差異程度。另外損失函式也是神經網路中優化的目標函式,神經網路訓練或者優化的過程就是最小化損失函式的過程

機器學習總結

之前學習總是搞不懂正則化到底什麼玩意兒,就知道它的公式,它能降低過擬合,但是,它到底為什麼能降低過擬合呢,看了李航老師的《統計學習方法》有了些許體悟。以什麼方式呈現呢,就以問答的方式吧,三省吾身,挺好的。1 為什麼資料量過小會導致過擬合,為什麼正則化能夠降低過擬合?因為本質上

機器學習(Regularization)

1. The Problem of Overfitting 1 還是來看預測房價的這個例子,我們先對該資料做線性迴歸,也就是左邊第一張圖。 如果這麼做,我們可以獲得擬合數據的這樣一條直線,但是,實際上這並不是一個很好的模型。我們看看這些資料,很明顯,隨著房子面積增大,住房價格的變化趨於穩定或者說越往右越平緩

深度學習理論】方法:L1、L2、資料擴增、Dropout

正則化 在訓練資料不夠多時,或者過度訓練時,常常會導致overfitting(過擬合)。隨著訓練過程的進行,模型複雜度增加,在train data上的error漸漸減小,但是在驗證集上的err

系統學習機器學習(二)

監督機器學習問題無非就是“minimizeyour error while regularizing your parameters”,也就是在規則化引數的同時最小化誤差。最小化誤差是為了讓我們的模型擬合我們的訓練資料,而規則化引數是防止我們的模型過分擬合我們的訓練資料。多麼簡約的哲學啊!因為引數太多,會導致