深度學習-何如計算偏差(圖片有問題,後期修復)

前言算法

偏差計算是深度學習中的核心,很是重要!!! 關於偏差計算,有以下概念:編程

  • 損失函數(Loss Function) : 定義在單個樣本上的, 算的是一個樣本的偏差
  • 代價函數(Cost Function) : 定義在整個訓練集上的, 是全部樣本偏差的平均, 也就是損失函數的平均
  • 目標函數(Object Function): 最終優化的函數.等於經驗風險+結構風險(也就是Cost Function+正則化項)
  • 風險函數(Risk Function) : 風險函數是損失函數的指望
  • 過擬合(Over-Fitting) : 過分擬合訓練集, 致使它在真正預測時效果會很很差
  • 正則化(Regularization) : 經過下降複雜模型的複雜度來防止過擬合的規則稱爲正則化,具體見'正則化'
  • 極大似然估計(MLE) :
  • 權重衰減(weight decay) : 具體見'正則化'
  • Dropout : 具體見'Dropout'
  • MSE: 均方偏差(Mean squared error)
  • RSS: 殘差的平方和(residual sum of squares)
  • 均方差代價函數: 見二次代價函數

下面咱們舉個例子解釋一下:(圖片來自Andrew Ng Machine Learning公開課視頻):網絡

上面三個圖的函數依次爲f1(x), f2(x), f3(x). 咱們是想用這三個函數分別來擬合Price, Price的真實值記爲Y機器學習

損失函數函數

咱們給定x, 這三個函數都會輸出一個f(X),這個輸出的f(X)與真實值Y多是相同的, 也多是不一樣的. 爲了表示咱們擬合的好壞, 咱們就用一個函數來度量擬合的程度:學習

這個函數就稱爲損失函數(loss function)或者叫代價函數(cost function) (有的地方將損失函數和代價函數沒有細分也就是二者等同的).優化

損失函數越小, 就表明模型擬合的越好.視頻

風險函數blog

那是否是咱們的目標就只是讓loss function越小越好呢?還不是!!!圖片

因爲咱們輸入輸出的(X,Y)遵循一個聯合分佈, 可是這個聯合分佈是未知的(包含未知的樣本),因此沒法計算!!!

可是咱們是有歷史數據的-就是訓練集, f(X)在訓練集的平均損失稱做經驗風險

風險函數是損失函數的指望.因此咱們的目標就是最小化經驗風險,稱爲經驗風險最小化

過擬合

經驗風險最小就必定好嗎?還不是!!!

咱們看最右面的 f3(x) 的經驗風險函數最小了, 由於它對歷史的數據擬合的最好!!!
可是咱們從圖上來看它確定不是最好的, 由於它過分學習訓練集, 致使它在真正預測時效果會很很差, 這種狀況稱爲過擬合(over-fitting)

過擬合很差,因此要儘可能避免

防止過擬合, 比較經常使用的技術包括:

  • 儘可能減小選取參數的數量(當你捨棄一部分特徵變量時, 你也捨棄了問題中的一些信息)
  • L1, L2 範數
  • 訓練集合擴充,例如添加噪聲、數據變換等
  • Dropout

 

正則化(Regularization)

咱們不只要讓經驗風險儘可能小, 還要讓結構風險儘可能小, 怎麼解決???

經過對模型參數添加懲罰參數來限制模型能力,能夠下降模型的複雜度來防止過擬合,這種規則稱爲正則化

正則化中咱們將保留全部的特徵變量, 可是會減少特徵變量的數量級

咱們定義了一個函數J(f) 用來度量模型的複雜度

經常使用的正則化公式:

  • L1正則化項,標準如圖(C0表明原始的代價函數, 後面那一項就是L1正則化項):

    L1正則化項: 所有權重w的絕對值的和, 乘以λ/n

    λ就是正則項係數, 權衡正則項與C0項的比重

    L1正則化項求導:

    上式中sgn(w)表示w的符號

    L1正則化項對w的更新的影響:

    比原始的更新規則多出了η * λ * sgn(w)/n這一項

    經過上圖可知:

    在編程的時候令: sgn(0)=0, sgn(w>0)=1, sgn(w<0)=-1

    當w爲正時, 更新後的w變小; 當w爲負時, 更新後的w變大;

    它的效果就是使網絡中的權重儘量爲0, 也就至關於減少了網絡複雜度, 防止過擬合

    L1 正則化能夠理解爲每次從權重中減去一個常數

  • L2正則化項,標準如圖(C0表明原始的代價函數, 後面那一項就是L2正則化項):

    L2正則化項: 所有參數w的平方的和, 除以訓練集的樣本大小n

    λ就是正則項係數, 權衡正則項與C0項的比重

    '係數1/2'主要是爲了後面求導的結果方便,後面那一項求導會產生一個2,與'1/2'相乘恰好湊整

    L2正則化項求導:

    能夠看到: L2對b的更新沒有影響. 對w的更新有影響

    L2正則化項對w的更新的影響:

    w前面係數爲'1−ηλ/n', 因爲η、λ、n都是正的, 因此 '1−ηλ/n' 小於1

    經過上圖可知:

    L2正則化的效果是減少w.這也就是權重衰減(weight decay)的由來

    L2正則化效果其實是使得參數a值每次都以必定的比例縮小, 防止參數變得過大, 防止過擬合

    L2正則化能夠理解爲每次移除權重的 x%

 

一般狀況下, 深度學習中只對參數添加約束, 對偏置項不加約束. 主要緣由是偏置項通常須要較少的數據就能精確的擬合. 若是添加約束經常會致使欠擬合

目標函數

咱們的目標是讓經驗風險儘可能小, 還要讓結構風險儘可能小!!!

最優化經驗風險和結構風險, 而這個函數就被稱爲目標函數, 公式以下:

結合上面的例子來分析:

  • 最左面的f1(x) 結構風險最小(模型結構最簡單), 可是經驗風險最大(對歷史數據擬合的最差)
  • 最右面的f3(x) 經驗風險最小(對歷史數據擬合的最好), 可是結構風險最大(模型結構最複雜)
  • 而f2(x) 達到了兩者的良好平衡, 最適合用來預測未知數據集

 

沒有最優的模型,只有更優的模型!!!

風險函數

機器學習的優化目標就是讓預測值與真實值之間的偏差越小越好, 這種差異也叫作風險

風險分爲經驗風險, 指望風險, 結構風險

  • 經驗風險(Empirical Risk) : 訓練集的平均損失, 經驗風險越小說明模型對訓練集的擬合程度越好
  • 結構風險(Structural Risk): 使用正則化度量模型結構的複雜度. 越複雜的模型,結構風險越大
  • 指望風險(Expected Risk) : 全部樣本(包含未知的樣本和已知的訓練樣本)的平均損失

風險的性質:

  • 經驗風險表示的是局部的概念, 是能夠可求的
  • 指望風險表示的是全局的概念, 是理想化的不可求的
  • 結構風險是針對模型複雜度的,用來折中 經驗風險 與 指望風險

代價函數

什麼是代價函數?

假設有訓練樣本(x,y), 模型爲h, 參數爲θ, h(θ) = θTx(θT表示θ的轉置), 那麼:

任何可以衡量模型預測出來的值h(θ)與真實值y之間的差別的函數就叫代價函數C(θ)

若是有多個樣本, 則能夠將全部代價函數的取值求均值, 記作J(θ)

總的代價函數J(θ)能夠用來評價模型的好壞, 代價函數的性質:

  • 對於每種算法來講, 代價函數不是惟一的
  • 代價函數是參數θ的函數
  • 代價函數越小說明模型和參數越符合訓練樣本
  • J(θ)是一個標量
  • 選擇代價函數時, 最好挑選對參數θ可微的函數(全微分存在, 偏導數必定存在)
  • 一個好的代價函數須要知足兩個最基本的要求: 可以評價模型的準確性, 對參數θ可微

經常使用代價函數:

  • 交叉熵函數(Cross Entropy Cost): 是一個常見的代價函數, 在神經網絡中也會用到
  • 二次代價函數(Quadratic Cost): 指望不符合,不太經常使用

二次代價函數(Quadratic Cost)

二次代價函數即均方差代價函數

二次代價函數: C表示代價, x表示樣本, y表示實際值, a表示輸出值, n表示樣本的總數. 公式爲:

當n=2時,簡化公式爲:

利用反向傳播算法沿着梯度方向調整參數大小, w和b的梯度推導以下:

其中: z表示神經元的輸入, δ表示激活函數.

從以上公式能夠看出, w和b的梯度跟激活函數的梯度成正比, 激活函數的梯度越大, w和b的大小調整得越快.

而神經網絡經常使用的激活函數爲sigmoid函數, 該函數的曲線以下所示:

如圖所示: 初始輸出值爲0.98對應的梯度明顯小於輸出值爲0.82的梯度. 這就是初始的代價(偏差)越大, 致使訓練越慢的緣由. 與咱們的指望不符,即: 不能像人同樣, 錯誤越大, 改正的幅度越大, 從而學習得越快.

更換激活函數解決這個問題,會引發更大問題!!! 因此不如換代價函數!!!

交叉熵代價函數(Cross Entropy Cost)

信息熵由香農提出, 它描述了數據的混亂程度. 熵越大, 混亂程度越高;反之, 熵越小, 混亂程度越低

交叉熵代價函數: C表示代價, x表示樣本, y表示實際值, a表示輸出值, n表示樣本的總數. 公式爲:

其中, x表示樣本, n表示樣本的總數. 那麼從新計算參數w的梯度:

該梯度公式中的表示輸出值與實際值之間的偏差.因此當偏差越大則梯度就越大,參數w調整得越快.

實際狀況證實: 交叉熵代價函數帶來的訓練效果每每比二次代價函數要好!!!

損失函數

損失函數指的是對於單個樣本的損失或偏差.與代價函數的區別在於:代價函數是多樣本的平均值

鉸鏈損失(Hinge Loss)

用來解'間距最大化'的問題, 最有表明性的就是SVM(支持向量機)問題. 通用的函數表達式爲:

y是預測值(-1到1之間), t爲目標值(±1)

其含義爲: y的值限定在-1到1之間. 當|y|>=1時, L(y)=0, 即並不鼓勵分類器過分自信, 從而使得分類器能夠更專一總體的分類偏差.

Hinge Loss變種, 假設:
一方面, 咱們可能更但願y更接近於一個機率, 即其值域最好是[0,1].
另外一方面,不少時候咱們但願訓練的是兩個樣本之間的類似關係,而非樣本的總體分類.
因此不少時候咱們會用下面的公式:
l(y,y′) = max(0,m−y+y′)
其中: y是正樣本的得分, y’是負樣本的得分, m是margin(本身選一個數)
即咱們但願正樣本分數越高越好, 負樣本分數越低越好, 但兩者得分之差最多到m就足夠了,差距增大並不會有任何獎勵

鉸鏈損失變種

一方面, 咱們可能更但願y更接近於一個機率, 即其值域最好是[0,1]

一方面,不少時候咱們但願訓練的是兩個樣本之間的類似關係,而非樣本的總體分類

因此不少時候咱們會用下面的公式:

l(y,y′) = max(0,m−y+y′)

其中:

  • y是正樣本的得分
  • y’是負樣本的得分
  • m是margin(本身選一個數)
  • 即咱們但願正樣本分數越高越好, 負樣本分數越低越好
  • 但兩者得分之差最多到m就足夠了,差距增大並不會有任何獎勵

 

對數損失函數或對數似然損失函數

對數損失函數(logarithmic loss function)或對數似然損失函數(log-likehood loss function)

假設樣本服從伯努利分佈(0-1分佈), 那麼能夠經過機率的方式計算偏差. 對數損失函數的標準形式:

 

上述公式表達的意思是:

樣本X在分類Y的狀況下, 使機率P(Y|X)達到最大值. 也就是說, 就是利用已知的樣本分佈, 找到最有可能(即最大機率)致使這種分佈的參數值 或者說什麼樣的參數才能使咱們觀測到目前這組數據的機率最大. 由於Log函數是單調遞增的, 因此logP(Y|X) 也會達到最大值,所以在前面加上負號以後, 最大化P(Y|X)就等價於最小化L

邏輯迴歸的P(Y=y|x)表達式以下:

其求導後的公式與交叉熵類似, 兩者僅相差一個符號

對數損失函數用於'機率'方面,好比分類

Softmax損失函數(Softmax loss)

Softmax損失函數是Log損失函數的一種. Softmax損失函數的標準形式:

L是損失
Sj是softmax的輸出向量S的第j個值, 表示的是這個樣本屬於第j個類別的機率
y是一個1*T的向量, 裏面的T個值, yj是指向當前樣本的真實標籤

當輸入P是softmax的輸出時,Log損失函數即爲Softmax損失函數

平方損失函數(Quadratic Loss Function)

平方損失函數 又稱爲 最小二乘法(Ordinary Least Squares), OLS

基本原則是: 最優擬合直線應該是使各點到迴歸直線的距離和最小的直線 - 即平方和最小

OLS是基於距離的, 而這個距離就是咱們用的最多的歐幾里得距離

 

Y-f(X)表示的是殘差,整個式子表示的是殘差的平方和.而咱們的目的就是最小化這個目標函數值, 也就是最小化殘差的平方和

若是預測的是一個任意實數(如迴歸),則沒法使用交叉熵類的損失函數,可使用OLS

均方偏差損失函數(Mean-Square Error, MSE)

是反映估計量與被估計量之間差別程度的一種度量, 是目標變量與預測值之間距離平方之和

標準形式如圖:

上式中, y爲正確答案,而y'爲神經網絡給出的預測值

若是預測的是一個任意實數(如迴歸),則沒法使用交叉熵類的損失函數,可使用MSE

平均絕對偏差損失函數(Mean Absolute Error, MAE)

反映估計量與被估計量之間差別程度的一種度量, 是目標變量與預測值之間差別絕對值之和

它在一組預測中衡量偏差的平均大小, 而不考慮偏差的方向. 標準形式如圖:

 

上式中, y爲正確答案,而h爲神經網絡給出的預測值

若是預測的是一個任意實數(如迴歸),則沒法使用交叉熵類的損失函數,可使用MAE

自定義損失函數

損失函數是能夠自定義的,特此標記!!!

一個使用自定義損失函數的例子是機場準時的不對稱風險。問題是:你要決定何時從家裏出發,這樣你才能在按時到達機場。咱們不想太早走,在機場等上幾個小時。同時,咱們不想錯過咱們的航班。任何一方的損失都是不一樣的: 若是咱們提早到達機場,狀況真的沒有那麼糟;若是咱們到得太晚而錯過了航班,那真是糟透了

Dropout

L一、L2正則化是經過改動代價函數來實現的,而Dropout則是經過改動神經網絡自己來實現的.

它是在訓練網絡時用的一種技巧(trike)

  • 在訓練開始時,咱們隨機地「刪除」部分(通常爲一半)的隱層單元, 視它們爲不存在
  • 保持輸入輸出層不變, 依照BP算法更新神經網絡中的權值, 刪除的單元不更新.
  • 在第二次迭代中, 隨機地'刪除'部分隱層單元(注意是隨機的!!!).
  • 更新神經網絡中的權值, 刪除的單元不更新, 重複迭代直至訓練結束.
  • 隨着訓練的進行, 大部分網絡都可以給出正確的分類結果, 少數的錯誤結果就不會對最終結果形成大的影響

結尾

關於偏差方面的研究,目前概念比較多,還在持續更新...

  • Log損失是經過幾率計算的偏差,因此在特定條件下Log損失與交叉熵的具備等價性
  • Softmax函數會將結果映射到[0,1]間,而且總值是1,能夠看作'機率'. 結合交叉熵做爲代價函數, 就是Softmax損失函數.