神經網路訓練技巧討論:如何選取batch size
本文中關於Online/Batch learning的觀點大多總結自lecun98年的論文:Efficient BackProp,關於Mini-Batch learning的觀點大多總結自BatchNorm論文,詳情請參考原論文。翻譯總結中如有疏漏,歡迎指教。
先放最後結論:
筆者總結的batch size選取策略如下:
- 考慮記憶體/視訊記憶體/計算資源限制,得到被允許的最大值,選取的batch size不能大於最大值。
- 考慮資料集的平衡性,儘量使得batch中包含各個類別的樣本。
- 通過loss/metric變化曲線觀察收斂穩定性,極度不穩定的情況可以增加batch size或者減小學習率;過於穩定的情況可以考慮減少batch size。
- 收斂末期,可以考慮逐漸增加batch size,以及逐漸減小learning rate,使得學習結果更接近區域性最小值。
- batch size通常在log scale中調節,常見4的倍數筆者猜測是為了更高效的CUDA計算。
以下是正文:
神經網路通常基於梯度進行訓練(gradient descent: ),不同的梯度值估計策略(不同的取樣數)就對應了不同的學習策略:
- Batch Learning: 使用整個訓練集計算梯度值
- Online/Stochastic Learning: 使用單個樣本估計梯度值
- Mini-Batch Learning: 使用部分樣本估計梯度值,並定義樣本數為batch size
lecun98的論文中探討了Batch Learning 和 Online Learning的優缺點,總結如下 :
Online Learning的優點有:
- much faster than batch learning:基於資料集大且冗餘的假設,即資料集中相似模態往往多次出現(clusters of patterns that are very similar),online learning可以在一個epoch內對其多次學習,而batch learning只能學習一次。(筆者直覺上認為online learning快速的另一個原因是:權重初始狀態距離最小值很遠,絕大多數樣本的權重更新方向相近,少量樣本即足以得到差不多的梯度估計,即質量相近的情況下節約了時間,很適合於前期搜尋)
- often results in better solutions:Batch Learning的梯度值計算是穩定且唯一的,權重會嚴格按照損失函式下降最快的方向前進,從而相同的初始化權重必定收斂於相同的區域性最小值。而online learning估計梯度值的過程存在噪音(樣本數少),此噪音使得權重不嚴格按照損失函式值下降的方向前進,從而使得權重有機會跳出當前權重所在的basin(定義會收斂到同一區域性最小值的權重值位於同一basin),增加了權重搜尋空間,最終使得網路有可能收斂到更深的區域性最小值。
- can be used for tracking changes
Batch Learning的優點更多是理論上的,而非實際應用相關的:
- conditions of convergence are well understood
- Many acceleration techniques (e.g. conjugate gradient) only operate in batch learning.
- Theoretical analysis of the weight dynamics and convergence rates are simpler.
關於batch learning的優點討論中提及了online learning梯度值估計過程中噪音的缺點:此噪音使得online learning無法完全的收斂於區域性最小值(而是在附近震盪),震盪幅度與學習率成比例。從而建議在收斂末期,通過降低學習率或者增加batch size的方式減弱其負面影響。
由上可知,online learning與batch learning各有優劣,Mini-Batch Learning是兩者的折衷,是最常用的神經網路學習策略,BatchNorm論文中總結Mini-Batch Learning的優點如下:
- Quality of estimation improves as the batch size increases:梯度值估計質量隨batch size增加而增加。
- Computation over a batch can be much more efficient than computations for individual examples, due to the parallelism afforded by the modern computing platforms:現代平行計算技術使得多樣本共同計算更有效率。
總結上文中關於batch size選取的資訊如下:
- 梯度值預估的噪聲隨batch size增加而減小,減少而增大。
- 梯度預估的噪音既有優點,也有缺點:
- 優點1:增大權重搜尋空間,使得權重得以跳出初始化權重所在basin,搜尋其他可能的區域性最小值。
- 優點2:噪音使得權重不會完美地收斂於區域性最小值,一定程度上減小了過擬合的風險[3]。
- 缺點1:不完美收斂於區域性最小值,增加了欠擬合的風險。
筆者總結的batch size選取策略如下:
- 考慮記憶體/視訊記憶體/計算資源限制,得到被允許的最大值,選取的batch size不能大於最大值。
- 考慮資料集的平衡性,儘量使得batch中包含各個類別的樣本。
- 通過loss/metric變化曲線觀察收斂穩定性,極度不穩定的情況可以增加batch size或者減小學習率;過於穩定的情況可以考慮減少batch size。
- 收斂末期,可以考慮逐漸增加batch size,以及逐漸減小learning rate,使得學習結果更接近區域性最小值。
- batch size通常在log scale中調節,常見4的倍數筆者猜測是為了更高效的CUDA計算。
參考資料:
[1] LeCun, Yann A., et al. “Efficient backprop.” Neural networks: Tricks of the trade. Springer, Berlin, Heidelberg, 2012. 9-48.
[2] Ioffe, Sergey, and Christian Szegedy. “Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift.” ICML. 2015.
[3] Keskar, Nitish Shirish, et al. “On large-batch training for deep learning: Generalization gap and sharp minima.” arXiv preprint arXiv:1609.04836 (2016).
相關推薦
神經網路訓練中-Epoch、Batch Size和迭代
在資料很龐大的時候(在機器學習中,幾乎任何時候都是),我們需要使用 epochs,batch size,迭代這些術語,在這種情況下,一次性將資料輸入計算機是不可能的。因此,為了解決這個問題,我們需要把資料分成小塊,一塊一塊的傳遞給計算機,在每一步的末端更新神經網路的權重,
神經網路訓練技巧討論:如何選取batch size
本文中關於Online/Batch learning的觀點大多總結自lecun98年的論文:Efficient BackProp,關於Mini-Batch learning的觀點大多總結自BatchNorm論文,詳情請參考原論文。翻譯總結中如有疏漏,歡迎指教。
神經網路訓練技巧討論:為什麼需要標準化
本文關注:對於神經網路(主要是全連線網路+SGD)的學習訓練,標準化有什麼好處(加速收斂),以及為什麼有這樣的好處。本文觀點大多總結自lecun98年的論文:Efficient BackProp,詳情請參考原論文。翻譯以及總結過程如有疏漏,歡迎指教。另需說明的是
神經網路訓練中,傻傻分不清Epoch、Batch Size和迭代
你肯定經歷過這樣的時刻,看著電腦螢幕抓著頭,困惑著:「為什麼我會在程式碼中使用這三個術語,它們有什麼區別嗎?」因為它們看起來實在太相似了。 為了理解這些術語有什麼不同,你需要了解一些關於機器學習的術語,比如梯度下降,以幫助你理解。 這裡簡單總結梯度下降的含義… 梯度下降 這是一個在機器學習中用於尋找最
深度學習神經網路訓練調參技巧
本文主要介紹8種實現細節的技巧或tricks:資料增廣、影象預處理、網路初始化、訓練過程中的技巧、啟用函式的選擇、不同正則化方法、來自於資料的洞察、整合多個深度網路的方法原文如下:http://blog.csdn.net/u013709270/article/details/70949304。
深度神經網路訓練的技巧
這裡主要介紹8中實現細節的技巧或tricks:資料增廣、影象預處理、網路初始化、訓練過程中的技巧、啟用函式的選擇、不同正則化方法、來自於資料的洞察、整合多個深度網路的方法。 1. 資料增廣 在不改變影象類別的情況下,增加資料量,能提高模型的泛化能力 自然
AndrewNg機器學習第四周作業:關於使用邏輯迴歸、神經網路訓練資料並應用之的心得
ex3的作業是根據已有的資料集 (20*20畫素的圖片,每個畫素是一個feature,總共400個features,400個features作為輸入X,資料集已經包含輸出的y,代表這是什麼數字) ,去識別手寫數字。 首先是使用邏輯迴歸方法來分類10
神經網路訓練的一些建議(Batch Normalization)
資料的歸一化 先放上巨集毅大神的圖,說明一下我們為什麼要做資料的歸一化 說明:x2的變化比較大,使用w2方向上就顯得比較陡峭(梯度),學習率就不能設定得過大。 Batch Normalization 為什麼要有batch normalizat
【資料極客】Week3_訓練深度神經網路的技巧
Tips for Training DNN 訓練深度神經網路技巧 【李巨集毅2017秋天 課程】 1 Vanishing Gradient Problem 梯度消失問題 在輸入層部分,即便有很大的變化,通過 Sigmoid 啟
python資料分析與挖掘實戰筆記二:第99頁神經網路訓練出現的錯誤'Some keys in session_kwargs are not supported at this time: %s'
在使用神經網路模型預測銷量高低時,系統指出模型訓練時出現錯誤: ValueError Traceback (most recent call last) <ipython-input-20-e46e29b76a5e> in <module&g
改善深層神經網路_優化演算法_mini-batch梯度下降、指數加權平均、動量梯度下降、RMSprop、Adam優化、學習率衰減
1.mini-batch梯度下降 在前面學習向量化時,知道了可以將訓練樣本橫向堆疊,形成一個輸入矩陣和對應的輸出矩陣: 當資料量不是太大時,這樣做當然會充分利用向量化的優點,一次訓練中就可以將所有訓練樣本涵蓋,速度也會較快。但當資料量急劇增大,達到百萬甚至更大的數量級時,組成的矩陣將極其龐大,直接對這麼大
TensorFlow官方文件樣例——三層卷積神經網路訓練MNIST資料
上篇部落格根據TensorFlow官方文件樣例實現了一個簡單的單層神經網路模型,在訓練10000次左右可以達到92.7%左右的準確率。但如果將神經網路的深度拓展,那麼很容易就能夠達到更高的準確率。官方中文文件中就提供了這樣的樣例,它的網路結構如
為什麼使用神經網路訓練得到的語言模型不需要做資料平滑
我們都知道,在自然語言處理的語言模型裡面,最核心的就是計算得到一個句子的概率,為了得到這個概率,我們需要計算得到一系列的條件概率。這些條件概率就是整個語言模型的引數。 為了得到條件概率,我們可以有兩種不同的方法。 第一種就是使用統計概率方法,通過統計的方法得到不同的詞對的條件概率。這種方
#####好好好好####Keras深度神經網路訓練分類模型的四種方法
Github程式碼: Keras樣例解析 歡迎光臨我的部落格:https://gaussic.github.io/2017/03/03/imdb-sentiment-classification/ (轉載請註明出處:https://gaussic.github.io) Keras的官方E
【opencv3--ANN神經網路訓練識別OCR資料集】
#include <string> #include <iostream> #include <opencv2\opencv.hpp> #include <opencv2\ml.hpp> #include<fstream> using n
Tensorpack,一個基於TensorFlow的神經網路訓練介面,原始碼包含很多示例
Tensorpack是一個基於TensorFlow的神經網路訓練介面。 https://github.com/tensorpack/tensorpack 特徵: 它是另一個TF高階API,具有速度,可讀性和靈活性。
TensorFlow遊樂園介紹及其神經網路訓練過程
TensorFlow遊樂場是一個通過網頁瀏覽器就可以訓練簡單神經網路。並實現了視覺化訓練過程的工具。遊樂場地址為http://playground.tensorflow.org/ 一、TensorFlow遊樂園引數介紹&nb
神經網路訓練中Epoch、batch_size、iterator的關係
為了理解這些術語的不同,需要先了解些機器學習術語,如:梯度下降 梯度下降 這是一個在機器學習中用於尋找最佳結果(曲線的最小值)的迭代優化演算法。 梯度的含義是斜率或者斜坡的傾斜度。 下降的含義是代價函式的下降。 演算法是迭代的,意思是需要多次使用演算法獲取結果,以得
將神經網路訓練成一個“放大鏡”
摘要: 想不想將神經網路訓練成一個“放大鏡”?我們就訓練了一個這樣炫酷的神經網路,點選文章一起看下吧! 低解析度蝴蝶的放大 當我們網購時,我們肯定希望有一個貼近現實的購物體驗,也就是說能夠全方位的看清楚產品的細節。而解析度高的大影象能夠對商品進行更加詳細的介紹,這真的可以改變顧客的購物體驗,
BP神經網路——訓練一個加法運算
#include <stdio.h> #include <math.h> #include <time.h> #include <stdlib.h> #define num 3000 #define learn 0.001 double qian