臺大李巨集毅--深度學習tip(模型優化)
訓練結果不好,並不總是因為過擬合
- 訓練結果不好,並不總是因為過擬合。有可能是你的training data都沒有訓練好,那最終結果一定不好
- 深度學習的層數越多,網路越複雜,並不一定模型會越複雜。有時會使得模型變簡單,變成欠擬合。
在機器學習中,要想讓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的變化,得到
,那麼再根據
即可。
根據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
- 不進行dropout , 使用完整的網路結構
2. 如果在訓練集training set中dropout的概率為p%。那麼再測試集testing set中每一個權重都要乘以(1-p%)
Dropout工作的原因
Dropout是一種整合方法。但也不完全相同。