天天看點

Coursera deeplearning.ai 深度學習筆記2-3-Hyperparameter tuning, Batch Normalization and Programming Framew

1 超參數(Hyperparameter)

神經網絡中,最重要的超參數是學習因子α;其次是Momentum參數β(通常0.9)、mini-batch大小、隐含層單元數;再其次是隐含層層數、學習因子衰減率。如果采用Adam算法,其參數通常可以選用預設,β1 = 0.9、β2 = 0.999、ε = 10-8。

在嘗試參數時,建議先對比較重要的參數随機取樣,并嘗試盡可能多的組合。當尋找到參數比較合适的範圍後,對随機取樣範圍進一步細化,進而尋找更加合适的參數範圍。

在搜尋參數範圍時,需要選擇合适的尺度,例如學習因子可以在log域上搜尋,而Momentum參數β可以對1 - β在log域上搜尋。

訓練模型的兩種方式:

(1) 訓練單個模型:沒有足夠的計算資源,針對單個模型,不斷調整參數進行訓練。

(2) 訓練多個模型:擁有足夠的計算資源,設定多個超參數,同時訓練多個模型,選取最優的參數。

2 批量歸一化(BN, Batch Normalization)

BN算法的思路就是在前向傳播的過程中,對每一層的z(1), z(2), …, z(m)進行歸一化,進而提高下一層的計算效率。具體如下:

μ=1m∑iz(i)σ2=1m∑i(zi−μ)2z(i)norm=z(i)−μσ2+ε√(1)

式中,ε為小量。由于各個隐含層的分布可能不同,需要作如下修正:

z~(i)=γz(i)norm+β(2)

通過設定不同的γ和β,就可以設定不同的隐含層分布。具體流程如下:

x→z[1]→z~[1]→a[1]→z[2]→z~[2]→a[2]→⋯(3)

如果采用BN算法,每次對Z[l]歸一化的過程中,實際會将b[l]項減去,是以可以忽略b[l]項,即前向傳播寫成:

z[l]=W[l]a[l−1]→z[l]norm→z~[l](4)

采用mini-batch + BN算法的具體流程如下:

fort=1,...,num_minibatches:computeforwardpropagationonX{t},ineachhiddenlayer,useBNtoreplacez[l]withz~[l],usebackwardpropagationtocomputedW[l],dβ[l],dγ[l],updateparameters:⎧⎩⎨⎪⎪⎪⎪W[l]=W[l]−αdW[l]β[l]=β[l]−αdβ[l]γ[l]=γ[l]−αdγ[l](5)

采用BN算法,由于各隐含層的均值和方差已經确定,訓練更加受到後面層的影響,前面層的影響較小。同時,BN算法在中引入了一些噪聲,與dropout具有類似的效果,是以具有一定的正則化效果,能夠提升訓練的魯棒性。不過,不要将BN當作一種正則化來使用,而是當作歸一化算法來加速訓練。

在訓練時采用多個樣本訓練,但是在測試時可能會選用單個樣本來測試,是以需要對均值μ和方差σ2進行估計。例如,對于l層,對于第t個mini-batch的樣本X{t},采用BN算法可以得到μ{t}[l],然後使用指數權重平均來估計均值μ的平均值,同樣可以得到估計的方差σ2的平均值。

3 Softmax回歸

Softmax回歸可以對多個類别中的分類進行預測。如果有C種類别,分類标簽即為0 ~ C – 1,輸出y的次元為(C, 1)。如果C = 2,softmax回歸就等同于邏輯回歸。

對于第L層,仍然有:

z[l]=W[l]a[l−1]+b[l](6)

不過激活函數與邏輯回歸不同:

t=ez[l],a[l]=ez[l]∑j=1Cti(7)

損失函數可以寫成:

L(y^,y)=−∑j=1Cyjlogy^j(8)

則代價函數為:

J=1m∑i=1mL(y^(i),y(i))(9)

反向傳播過程中有:

dz[L]=y^−y(10)

4 深度學習架構TensorFlow

目前,有多個深度學習架構,如Caffe/Caffe2、CNTK、DL4J、Keras、Lasagne、Mxnet、PaddlePaddle、TensorFlow、Theano、Torch。

選擇深度學習架構:程式設計簡單、運作速度快、開源,TensorFlow就是一個十分好用的深度學習架構,下面熟悉一些簡單的用法。

在TensorFlow中執行程式,主要有以下幾個步驟:

(1) 建立變量Tensors;

(2) 建立Tensors之間的關聯;

(3) 初始化Tensors,init = tf.global_variables_initializer();

(4) 建立Session;

(5) 運作Session以執行以上的Tensors。

采用TensorFlow實作損失函數:

Loss=L(y^,y)=(y^−y)2(11)

代碼如下:

Coursera deeplearning.ai 深度學習筆記2-3-Hyperparameter tuning, Batch Normalization and Programming Framew

Placeholder可以在session運作階段,利用feed_dict的字典結構來提供資料,使用如下:

Coursera deeplearning.ai 深度學習筆記2-3-Hyperparameter tuning, Batch Normalization and Programming Framew

5 TensorFlow建構DNN代碼實作

案例:對手勢進行分類,總共有6種類别如下。訓練集總共1080張圖檔,每種類别180張;測試集總共120張圖檔,每種類别20張。采用3層神經網絡Linear -> ReLU -> Linear -> ReLU -> Linear -> Softmax,各層單元數分别為25、12、6。

Coursera deeplearning.ai 深度學習筆記2-3-Hyperparameter tuning, Batch Normalization and Programming Framew

5.1 建立placeholder

先建立輸入變量X和Y的placeholder,核心代碼如下:

Coursera deeplearning.ai 深度學習筆記2-3-Hyperparameter tuning, Batch Normalization and Programming Framew

5.2 參數初始化initialize_parameters

采用3層神經網絡,各層單元數分别為25、12、6,對W和b進行初始化,W采用xavier初始化tf.contrib.layers.xavier_initializer(seed),b采用tf.zeros_initializer()初始化為0,核心代碼如下:

Coursera deeplearning.ai 深度學習筆記2-3-Hyperparameter tuning, Batch Normalization and Programming Framew

5.3 前向傳播forward_propagation

實作3層神經網絡的前向傳播,a = tf.nn.relu(z)實作ReLU函數,核心代碼如下:

Coursera deeplearning.ai 深度學習筆記2-3-Hyperparameter tuning, Batch Normalization and Programming Framew

5.4 計算代價函數compute_cost

采用tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits = …, labels = …))計算代價函數,注意先要采用tf.transpose()對Z[3]和Y轉置,核心代碼如下:

Coursera deeplearning.ai 深度學習筆記2-3-Hyperparameter tuning, Batch Normalization and Programming Framew

5.5 模型建構model

采用Adam算法進行梯度下降:

optimizer = tf.train.AdamOptimizer(learning_rate = learning_rate).minimize(cost)

然後進行反向傳播:

_ , minibatch_cost = sess.run([optimizer, cost], feed_dict = {X: minibatch_X, Y: minibatch_Y})

構模組化型的核心代碼如下:

Coursera deeplearning.ai 深度學習筆記2-3-Hyperparameter tuning, Batch Normalization and Programming Framew
Coursera deeplearning.ai 深度學習筆記2-3-Hyperparameter tuning, Batch Normalization and Programming Framew

5.6 測試

測試核心代碼如下:

Coursera deeplearning.ai 深度學習筆記2-3-Hyperparameter tuning, Batch Normalization and Programming Framew

得到如下結果,可以看出,訓練得到了99.9%的準确率,測試準确率為71.7%,說明模型過拟合,可以通過L2或者Dropout正則化來緩解過拟合問題。

Coursera deeplearning.ai 深度學習筆記2-3-Hyperparameter tuning, Batch Normalization and Programming Framew

代碼下載下傳位址:https://gitee.com/tuzhen301/Coursera-deeplearning.ai2-3

繼續閱讀