前言算法
偏差計算是深度學習中的核心,很是重要!!! 關於偏差計算,有以下概念:編程
下面咱們舉個例子解釋一下:(圖片來自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)
過擬合很差,因此要儘可能避免
防止過擬合, 比較經常使用的技術包括:
正則化(Regularization)
咱們不只要讓經驗風險儘可能小, 還要讓結構風險儘可能小, 怎麼解決???
經過對模型參數添加懲罰參數來限制模型能力,能夠下降模型的複雜度來防止過擬合,這種規則稱爲正則化
正則化中咱們將保留全部的特徵變量, 可是會減少特徵變量的數量級
咱們定義了一個函數J(f) 用來度量模型的複雜度
經常使用的正則化公式:
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正則化項: 所有參數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%
一般狀況下, 深度學習中只對參數添加約束, 對偏置項不加約束. 主要緣由是偏置項通常須要較少的數據就能精確的擬合. 若是添加約束經常會致使欠擬合
目標函數
咱們的目標是讓經驗風險儘可能小, 還要讓結構風險儘可能小!!!
最優化經驗風險和結構風險, 而這個函數就被稱爲目標函數, 公式以下:
結合上面的例子來分析:
沒有最優的模型,只有更優的模型!!!
風險函數
機器學習的優化目標就是讓預測值與真實值之間的偏差越小越好, 這種差異也叫作風險
風險分爲經驗風險, 指望風險, 結構風險
風險的性質:
代價函數
什麼是代價函數?
假設有訓練樣本(x,y), 模型爲h, 參數爲θ, h(θ) = θTx(θT表示θ的轉置), 那麼:
任何可以衡量模型預測出來的值h(θ)與真實值y之間的差別的函數就叫代價函數C(θ)
若是有多個樣本, 則能夠將全部代價函數的取值求均值, 記作J(θ)
總的代價函數J(θ)能夠用來評價模型的好壞, 代價函數的性質:
經常使用代價函數:
二次代價函數(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′)
其中:
對數損失函數或對數似然損失函數
對數損失函數(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)
結尾
關於偏差方面的研究,目前概念比較多,還在持續更新...