1. 程式人生 > >神經網路訓練技巧討論:如何選取batch size

神經網路訓練技巧討論:如何選取batch size

本文中關於Online/Batch learning的觀點大多總結自lecun98年的論文:Efficient BackProp,關於Mini-Batch learning的觀點大多總結自BatchNorm論文,詳情請參考原論文。翻譯總結中如有疏漏,歡迎指教。

先放最後結論:

筆者總結的batch size選取策略如下:

  1. 考慮記憶體/視訊記憶體/計算資源限制,得到被允許的最大值,選取的batch size不能大於最大值。
  2. 考慮資料集的平衡性,儘量使得batch中包含各個類別的樣本。
  3. 通過loss/metric變化曲線觀察收斂穩定性,極度不穩定的情況可以增加batch size或者減小學習率;過於穩定的情況可以考慮減少batch size。
  4. 收斂末期,可以考慮逐漸增加batch size,以及逐漸減小learning rate,使得學習結果更接近區域性最小值。
  5. batch size通常在log scale中調節,常見4的倍數筆者猜測是為了更高效的CUDA計算。

以下是正文:

神經網路通常基於梯度進行訓練(gradient descent: W=WηLW),不同的梯度值估計策略(不同的取樣數)就對應了不同的學習策略:

  • Batch Learning: 使用整個訓練集計算梯度值
  • Online/Stochastic Learning: 使用單個樣本估計梯度值
  • Mini-Batch Learning: 使用部分樣本估計梯度值,並定義樣本數為batch size

lecun98的論文中探討了Batch Learning 和 Online Learning的優缺點,總結如下 :

Online Learning的優點有:

  1. much faster than batch learning:基於資料集大且冗餘的假設,即資料集中相似模態往往多次出現(clusters of patterns that are very similar),online learning可以在一個epoch內對其多次學習,而batch learning只能學習一次。(筆者直覺上認為online learning快速的另一個原因是:權重初始狀態距離最小值很遠,絕大多數樣本的權重更新方向相近,少量樣本即足以得到差不多的梯度估計,即質量相近的情況下節約了時間,很適合於前期搜尋)
  2. often results in better solutions:Batch Learning的梯度值計算是穩定且唯一的,權重會嚴格按照損失函式下降最快的方向前進,從而相同的初始化權重必定收斂於相同的區域性最小值。而online learning估計梯度值的過程存在噪音(樣本數少),此噪音使得權重不嚴格按照損失函式值下降的方向前進,從而使得權重有機會跳出當前權重所在的basin(定義會收斂到同一區域性最小值的權重值位於同一basin),增加了權重搜尋空間,最終使得網路有可能收斂到更深的區域性最小值。
  3. can be used for tracking changes

Batch Learning的優點更多是理論上的,而非實際應用相關的:

  1. conditions of convergence are well understood
  2. Many acceleration techniques (e.g. conjugate gradient) only operate in batch learning.
  3. 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的優點如下:

  1. Quality of estimation improves as the batch size increases:梯度值估計質量隨batch size增加而增加。
  2. Computation over a batch can be much more efficient than m computations for individual examples, due to the parallelism afforded by the modern computing platforms:現代平行計算技術使得多樣本共同計算更有效率。

總結上文中關於batch size選取的資訊如下:

  1. 梯度值預估的噪聲隨batch size增加而減小,減少而增大。
  2. 梯度預估的噪音既有優點,也有缺點:
    • 優點1:增大權重搜尋空間,使得權重得以跳出初始化權重所在basin,搜尋其他可能的區域性最小值。
    • 優點2:噪音使得權重不會完美地收斂於區域性最小值,一定程度上減小了過擬合的風險[3]。
    • 缺點1:不完美收斂於區域性最小值,增加了欠擬合的風險。

筆者總結的batch size選取策略如下:

  1. 考慮記憶體/視訊記憶體/計算資源限制,得到被允許的最大值,選取的batch size不能大於最大值。
  2. 考慮資料集的平衡性,儘量使得batch中包含各個類別的樣本。
  3. 通過loss/metric變化曲線觀察收斂穩定性,極度不穩定的情況可以增加batch size或者減小學習率;過於穩定的情況可以考慮減少batch size。
  4. 收斂末期,可以考慮逐漸增加batch size,以及逐漸減小learning rate,使得學習結果更接近區域性最小值。
  5. 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