1. 程式人生 > >臺大李巨集毅--深度學習tip(模型優化)

臺大李巨集毅--深度學習tip(模型優化)

這裡寫圖片描述

這裡寫圖片描述

訓練結果不好,並不總是因為過擬合

  1. 訓練結果不好,並不總是因為過擬合。有可能是你的training data都沒有訓練好,那最終結果一定不好
  2. 深度學習的層數越多,網路越複雜,並不一定模型會越複雜。有時會使得模型變簡單,變成欠擬合。

在機器學習中,要想讓training data 訓練的結果非常好是很容易做到的。比如,用svm,甚至可以使得raining data 的訓練結果為100%正確。
但是,在深度學習中,要想使training data 的訓練結果很好並不是那麼的容易。

所以,在模型中,要首先看看 模型對training data 的訓練 情況怎樣???只有先確定training data 的訓練好了,即只有先排除了欠擬合,才去看testing data的訓練情況。
訓練結果不好,並不總是因為過擬合。有可能是你的training data都沒有訓練好,那最終結果一定不好


這裡寫圖片描述

如上圖所示,在testing data 訓練結果中,56層的效果還沒有20層的效果好。但是,這並不代表是因為模型過擬合了。因為還可能是模型欠擬合。
將模型的training data的訓練結果也拿出來看看。如下圖所示,56層的效果依然沒有20層的效果好。即training data 都沒有訓練好 ,所以是欠擬合的原因。
這裡寫圖片描述

層數越深,並不代表training data就一定訓練得好
Deeper usually does not imply better.
這裡寫圖片描述
如上圖所示,是在手寫數字識別中,training data與網路層數之間的關係 。發現其實到最後,層數越大,training data訓練越大,模型越欠擬合。

sigmoid函式引起的 “梯度消失” 問題!!!

這裡寫圖片描述
我們要觀察梯度的變化,那麼就要看 L w i

的值,但是這樣太麻煩。一個簡單的方法就是我們就可以其他的 w 不變,稍調 w i Δ w ,觀察損失函式L的變化,得到 Δ L ,那麼再根據 L w i Δ L Δ w i 即可。
根據sigmoid函式影象
這裡寫圖片描述
根據sigmoid函式影象我們可以發現,當輸入的值(input)很大很大,哪怕無窮大時,我們所得到的輸出值(output)也不過是0~1的值。即sigmoid函式有將輸入變小的特性。
這裡寫圖片描述
這裡寫圖片描述
以上,由於sigmoid函式的“縮小”的性質,導致最終無論網路前面還是網路後面,梯度都為0,不能再繼續學習下去。模型停止。這就是 梯度消失問題

當training data沒訓練好(欠擬合),怎麼辦???

方法一:更換activation function(更換啟用函式)——ReLU函式 或者 Maxout 法

ReLU函式

這裡寫圖片描述

他為什麼可以消除 梯度消失 的情況?

這裡寫圖片描述
如上圖所示,每個神經元會根據輸入情況,把輸出變為y=0,或者線性方程=-x。
去除掉y=0這些沒用的線,就可以簡化為:
這裡寫圖片描述
等模型網路簡化成上圖所示時,由於不存在sigmid函式的“縮小”性質,而是線性output=input,所以不會出現梯度消失的情況。

問題,像上圖那樣,最終模型是線性的,可是線性模型很弱,那這裡為什麼就可以訓練出很好的模型呢?

原因:他這個線性模型不是固定的。沒進入一個樣本,那麼最初額模型就會根據輸入,來對神經元的輸出設定為哪個是y=0 , y=x,最終出現的線性模型是不一樣的。
即,每進一個樣本,就會有一個不同的線性網路模型為其所用。一個樣本對應一個不同的線性網路。那麼從整體來看,所有不同的線性模型加起來,就不是線性的了。

ReLU函式變形

這裡寫圖片描述

Maxout 法(可學習的啟用函式)

概述

神經元的內的函式:就是 output=max( input1 , input2 , input3, … , … , …… )
max()裡面設定多少個輸入來比較,由自己設定。
下面我們設定max()裡面有2個輸入進行比較。
這裡寫圖片描述

為什麼此方法有效?

ReLU函式 就是 Maxout法 的一個特例。
這裡寫圖片描述

其他的Maxout法:
這裡寫圖片描述
這裡寫圖片描述

Maxout 怎麼訓練?

這裡寫圖片描述
每一個樣本,就對應一個不同的線性網路模型。

方法二:調整learning rates

Adagrad

這裡寫圖片描述
前面部落格講了

RMSProp

這裡寫圖片描述

Momentum(動量)

這裡寫圖片描述
在梯度下降中,會出現上面三種問題(前面的部落格已講),那麼我們引入動量的知識進行講解(下面,都將動量 說成 慣性 ,好講解些)。
這裡寫圖片描述
這裡寫圖片描述
這裡寫圖片描述

Adam

Adam=RMSProp + Momentum

當training data訓練好了,但是testing data沒訓練好(過擬合),怎麼辦???

方法一:Early Stopping(早點結束)

這裡寫圖片描述

方法二:Regularization正則化

目標:找到的權重不僅僅要最小化損失函式loss function,還要使得權重(引數)接近於0。
這裡寫圖片描述

方法三:Dropout

Dropout+Maxout 的效果有時 大於 CNN

對於資料集training set

這裡寫圖片描述

訓練模型注意事項:
1. Using one mini-batch to train one network 。一個mini-batch訓練一個模型
2. Some parameters in the network are shared。在網路中引數是分享的。
這裡寫圖片描述

對於測試集testing set

  1. 不進行dropout , 使用完整的網路結構
    2. 如果在訓練集training set中dropout的概率為p%。那麼再測試集testing set中每一個權重都要乘以(1-p%)

Dropout工作的原因

Dropout是一種整合方法。但也不完全相同。
這裡寫圖片描述