1. 程式人生 > >《白話深度學習與Tensorflow》學習筆記(2)梯度下降、梯度消失、引數、歸一化

《白話深度學習與Tensorflow》學習筆記(2)梯度下降、梯度消失、引數、歸一化

1、CUDA(compute unified device architecture)可用於平行計算:

GTX1060 CUDA核心數:1280 視訊記憶體大小:6G

2、隨機梯度下降:計算偏導數需要的計算量很大,而採用隨機梯度下降(即採用取樣的概念)從中提取一部分樣本來,這些樣本中的特徵已經可以在一定程度上代表完整訓練集的特徵。 Tensorflow中可以指定一個batch的size,規定每次被隨機選擇參與歸納的樣本數。

3、梯度消失與梯度爆炸問題:

梯度消失:兩個節點相連的神經網路,在使用鏈式法則的時候,會對導數進行連乘。即使用Sigmoid函式在自變數很大或者很小的時候,由下圖可以看出,導數接近於0,這樣在導數連乘的時候會使得w沒什麼變化。



Sigmoid啟用函式

而對於這種問題比較好的解決方案是改用ReLu(修正線性單元)啟用函式,如下圖所示:


ReLu啟用函式(修正線性單元)

這樣在第一象限中導數恆為1,不會很容易出現很大很小的值,求解複合函式的導數更簡單。

4、歸一化:

一般採用線性函式歸一化(max-min)、0均值標準化(z-score standardization),在深度學習中,常見的是使用batch-normalization,這樣可以讓網路儘可能避免沒有資料,程式碼為:

h2=tf.contrib.layers.batch_norm(h1,center=True,scale=True,is_training=false,scope=’bn’).

5、引數初始化問題:

常見的初始化為使用以0為均值,1為方差的分佈生成後除以當前層的神經單元個數的算術平方根。或者初始為以0為均值,以很小的值為標準差的正態分佈的方式。

中心極限定理:任何獨立隨機變數和極限分佈都為正態分佈。

6、正則化:

為防止出現過擬合問題,則進行正則化約束。方法是在損失函式中加入一個正則化項,以防止模型的規模過大所產生的過擬合。


正則化公式
正則化項

這個因子的含義是把整個模型中所有的權重w的絕對值加起來,lamda是懲罰因子,表示對這一項的重視程度。

L1正則化項即採用L1範數,L2正則化就是所有權重的平方之和。

C0往往是經驗風險,即誤差所帶來的代價,其收斂中心點記為黑色圓的圓心,其收斂中心為精確解,而藍色的圓中心為正則化項的收斂點,即結構風險的最小化的收斂點,那麼引入正則化項後,黑色大圓與藍色圓相切的切點即為最後模型的收斂點。


結構化風險與經驗風險視覺化

7、其他超引數:有一些值需要在演算法訓練之前設定,無法通過學習獲得,這就需要經驗獲得或者進行一定的預估、嘗試。比如深度學習中的學習率,K-means演算法中的簇數k.

8、Dropout:方法的目的在於剋制過擬合狀態,由於網路VC維很高,記憶能力很強,所以有些細枝末節的特徵也會被網路記憶,從而削弱網路整體的泛化效能,使得其沒有辦法在驗證集通過,僅有較好的訓練集分類效能。這時候選擇性的(隨機)臨時丟棄(關閉)一些節點,可以降低VC維,減小過擬合風險。

Keep_prob=tf.placehoder(tf.float32)

H_fc1_drop=tf.nn.dropout(h_fc1,keep_prob)



結構化風險與經驗風險視覺化

7、其他超引數:有一些值需要在演算法訓練之前設定,無法通過學習獲得,這就需要經驗獲得或者進行一定的預估、嘗試。比如深度學習中的學習率,K-means演算法中的簇數k.

8、Dropout:方法的目的在於剋制過擬合狀態,由於網路VC維很高,記憶能力很強,所以有些細枝末節的特徵也會被網路記憶,從而削弱網路整體的泛化效能,使得其沒有辦法在驗證集通過,僅有較好的訓練集分類效能。這時候選擇性的(隨機)臨時丟棄(關閉)一些節點,可以降低VC維,減小過擬合風險。

Keep_prob=tf.placehoder(tf.float32)

H_fc1_drop=tf.nn.dropout(h_fc1,keep_prob)