神經網路模型無法正常工作時我們應該做什麼(系列)——Batch Size
前言
當你進入深度學習領域,準備好深度神經網路,開始進行訓練時,遇到這樣一個大部分新手都會遇到的問題:你的神經網路沒法正常工作,而你不知道該如何去修正它。你去問你的老闆或者導師,他們也不知道該如何處理,因為在深度神經網路面前,他們和你一樣也是新手。那麼現在該如何來處理呢?
幸運的是我來啦!我列出了幾乎所有新手都會犯的錯誤,以及我自己和身邊一些學生在同樣情況下遇到過的問題:
- 沒有對資料進行標準化處理(Normalize)
- 沒有檢查結果(Results)
- 沒有對資料進行預處理(Preprocess)
- 沒有使用正則化方法(Regularlization)
- Batch Size 取值過大
- 學習率(Learning Rate)設定有誤
- 最後一層 Layer 使用了錯誤的啟用函式(Activation Function)
- 網路結構中包含了有害的梯度(Bad Gradient)
- 初始化網路權重(Network Weights)有誤
- 神經網路結構過深(Too Deep)
使用了錯誤數目的隱藏單元(Hidden Units)
Batch Size 取值過大
What?
網路訓練過程中使用過大的 batch size 會對精度造成不利影響,因為它降低了梯度下降過程中的隨機性。
How?
訓練的時候,找到一個你能忍受的最小的 batch size。當談到精度時,如果根據GPU並行性運算力來選擇的 batch size 可能不是最好的,因為在某些情況下,在同等水平的正確率下,更大 batch size 在訓練過程中會訓練更多的 epoch。因此開始訓練網路時,不要總使用大的 batch size,16、 8甚至1的 batch size 也是可取的。
Why?
使用較小的 batch size 會產生更多的碎片,更多的隨機權重更新。這會引起兩個好的影響。首先,它可幫助訓練“跳出”陷入區域性最優,然後,它可使訓練過程到達一個較“平坦(flatter)”的水平,這通常意味著更好的網路更好的泛化能力
And?
資料中的其他一些因素有時可以像 batch size 一樣起到有效的作用。例如,以兩倍於前面的解析度的影象可以與四倍批量大小的 batch size 起到相似的效果。為了得出這樣的推論,我們可以考慮如下,在CNN中每個濾波器的權重更新將在輸入影象的每個畫素上進行平均,同樣的處理也發生在一個 batch 裡的每一個影象。將影象解析度提高兩倍與將 batch size 提高四倍的方式非常相似。總的來說,最重要的是應該思考每次迭代過程中平均梯度更新的程度,並平衡這些對GPU並行需要帶來的不利影響。