一、訓練神經網絡模型
1、神經網絡訓練流程
變量初始化:通過滿足正態分佈的隨機數來初始化神經網絡中的參數是一個常用的方法。
部分訓練數據:在每次迭代的開始,首先需要選取一小部分訓練數據,這一小部分數據叫做一個batch。這個batch的樣本會通過前向傳播算法得到神經網絡模型的預測結果。
前向傳播算法:神經網絡的結構,及每個神經元中的參數都已確定,根據輸入,計算輸出的過程,爲前向傳播算法。
後向傳播算法:定義一個損失函數,量化batch樣本通過前向傳播算法的預測值與真實值之間的差距,反向傳播算法更新神經網絡參數的取值,使得這個batch樣本通過神經網絡模型的預測值與真實值更加接近。
循環上述神經網絡模型參數的優化過程,直至達到指定的訓練次數。
2、前向傳播算法
輸入根據網絡結構和神經元參數計算預測結果的過程,爲前向傳播算法。
如上圖所示的神經網絡,前向傳播算法的計算過程爲:
3、反向傳播算法
使用梯度下降法,優化所有參數取值,從而使神經網絡在訓練數據上的損失函數儘可能小。
分類問題損失函數:
softmax函數將神經網絡前向傳播得到的結果變成概率分佈:
分類問題比較常用的損失函數爲交叉熵,計算預測的概率分佈和真實的概率分佈之間的距離:
迴歸問題損失函數:
迴歸問題常用的損失函數爲均方誤差:
二、卷積神經網絡CNN參數優化
1、learning_rate學習速率
0.001 |
0.005 |
0.01 |
0.05 |
0.1 |
Exponential_decay |
0.256 |
0.206 |
0.22 |
0.22 |
0.206 |
0.206 |
學習速率隨迭代次數逐漸減少:1、學習速率過大,導致損失函數無法收斂到最小值;2、學習速率過小,損失函數收斂速度過慢。
tf.train.exponential_decay函數實現了指數衰減學習率,通過這個函數,可以先用較大的學習率快速得到一個比較優的解,然後隨着迭代的繼續逐步減少學習率,使得模型在訓練後期更加穩定:
Delayed_learning_rate = learning_rate * decay_rate ^ (gloabal_step/decay_steps)
當staircase爲FALSE時,學習速率是連續衰減函數,不同的訓練數據有不同的學習率,當學習率減小時,對應的訓練數據對模型訓練結果的影響也就減小;當staircase爲True時,gloabal_step/decay_steps會被轉化成整數,這使得學習率爲一個階梯函數,Decay_steps通常代表完整的使用一遍訓練數據所需要的迭代輪數,也就是總訓練樣本數除以每一個batch中的訓練樣本數,每完整地過完一遍訓練數據,學習率就減少一次,使得訓練數據中的所有數據對模型訓練有相等的作用。
損失函數下降的速度和迭代結束後總損失的大小沒有必然的聯繫。
2、batch_size批數據大小
50 |
100 |
150 |
200 |
300 |
0.23 |
0.21 |
0.27 |
0.718 |
0.72 |
神經網絡的優化過程可以分爲兩個階段,第一個階段先通過前向傳播算法得到預測值,並將預測值和真實值做對比得出兩者之間的差距。然後在第二個階段通過反向傳播算法計算損失函數對每一個參數的梯度,再根據梯度和學習率使用梯度下降算法更新每一個參數。
梯度下降算法在每一輪迭代中都需要計算全部訓練數據上的損失函數,在海量訓練數據下,要計算所有訓練數據的損失函數是非常消耗時間的。隨機梯度下降算法,在每一輪迭代中,隨機優化一小部分(一個batch)訓練數據的損失函數,大大減少收斂所需要的迭代次數。
批數據使得隨機梯度下降的結果更加接近梯度下降的效果。Batch的選擇決定的是下降的方向,batchsize太小,會導致下降的方向隨機,難以達到收斂,在一定範圍內,batchsize越大,其確定的下降方向越準,引起訓練震盪越小。
3、網絡架構
經典的用於圖片分類問題的卷積神經網絡架構都滿足:
輸入層 --> (卷積層+ --> 池化層?)+ --> 全連接層+
LeNet模型(1998):
卷積層1(5*5*6) --> 池化層1 --> 卷積層2(5*5*16) --> 池化層2 --> FC3(120) --> FC4(84) -->FC5(10) --> softmax
AlexNet模型(2012):
輸入層(227*227*3) --> 卷積層1(11*11*96) --> 池化層1 --> 卷積層2(5*5*256) --> 池化層2 -->卷積層3(3*3*384) --> 卷積層4(3*3*384) --> 卷積層5(3*3*256) --> 池化層5 --> 全連接層6(4096) --> 全連接層7(4096) --> 全連接層8(1000)
參考資料:
《TensorFlow實戰Google深度學習框架》