模型訓練中batch_size的選擇

總結:訓練過程中,batch_size的選取對模型精度和模型泛化能力的影響:

  1. batch_size過大,模型沒有BN層,模型收斂速度變慢。而且模型容易陷入局部最小值,模型精度低。
  2. batch_size適中,模型沒有BN層,模型收斂速度很快,模型不容易陷入局部最小值,而且模型精度很高。
  3. batch_size過小,比如說小於數據集中的類別個數,模型沒有BN層,模型會出現不收斂的情況。
  4. batch_size適中,模型的泛化能力會得到提升。
  5. 在GPU性能沒有被完全利用的情況下,batch_size越大,模型訓練的速度越快。

總結:如何確定batch_size

  1. 根據數據集的大小和樣本數目確定batch_size。
    樣本類別數目較少,而且模型沒有BN層,batch_size就設置得較小一點。
    樣本類別數目較多,而且模型沒有BN層,batch_size就設置得較大一點。儘量保證一個batch裏面各個類別都能取到樣本。
    數據集很小的時候,可以採取Full Batch Learning。每次用所有的訓練集進行訓練。
  2. batch_size的大小設置爲8的倍數。
  3. 有BN層的模型,而且數據集也很大,類別也較多時,batch_size儘量越大越好。

https://www.zhihu.com/question/32673260

卷積網絡訓練太慢?Yann LeCun:已解決CIFAR-10,目標 ImageNet:
CSDN翻譯鏈接:https://www.csdn.net/article/2015-01-16/2823579
kaggle英文鏈接:http://blog.kaggle.com/2014/12/22/convolutional-nets-and-cifar-10-an-interview-with-yan-lecun/
總結一下:

  1. 日本學者 Kunihiko Fukushima 提出的神經認知機(NeoCognitron)對CNN的發展有着啓迪性的意義,其提到模式識別機制的自組織神經網絡模型不受位置變化的影響。
  2. 在一個實際的應用中,沒人關心訓練到底要花多長時間,人們只關心運行需要多久。最終的核心機器是那些執行“美化模版匹配”的淺層網絡。
  3. idea:光譜卷積網絡,這是在ICLR 2014上我在紐約大學實驗室的同儕發佈的一篇論文,課題是廣義化的卷積網絡可以適用於任意圖像(規則的卷積網絡可以適用於1D,2D或3D數組,按圖像可以被看成規則網格)的確還存在一些實際的問題,但是它開啓了一扇大門,讓我們看到了通往卷積網絡非結構化數據的更多應用方向。《光譜網絡與圖形方面的深度本地連接網絡》
  4. CIFAR-10現在的錯誤率最好爲4.47%,人類的錯誤率爲6%,當時的LeCun就說,相比CIFAR-10現下人們對於 ImageNet (圖像識別目前最大的數據庫)更感興趣。(補一句:我自己用VGG在cifar10數據集上finetune,最好的精度在90%,待更新)
  5. 對於深層學習網絡真的需要那麼深麼這個問題?LeCun認爲,嘗試通過淺層網絡訓練來模擬在ImageNet上訓練過的深層卷積網絡,你會發現,理論上深層學習網絡可以與淺層的相接近,但是在複雜的任務上,淺層網絡相距甚遠。(我也人爲,對於簡單的任務來說,網絡的深度沒必要那麼深,但是,對於複雜的任務來說,深度是必須要的,實際應用中,對於簡單的任務,可以通過模型蒸餾等一些方法來使得淺層的網絡和深層網絡有同樣的精度)
  6. 深層神經網絡損失函數的收斂性證明(或保證),就有一點複雜了。多層網的損失函數不是凸值,因此簡易證明該函數爲凸不可行。但是我們都知道實際上卷積網絡幾乎總是會收斂到同一水平,無論起點是什麼(如果初始化完成正確)。有理論證明,有許許多多等效局部最小值,還有一個數字很小的“壞”局部最小值。因此收斂性並不會造成問題。

深度機器學習中的batch的大小對學習效果有何影響?
知乎鏈接:https://www.zhihu.com/question/32673260

每次只訓練一個樣本,即 Batch_Size = 1。這就是在線學習(Online Learning)。使用在線學習,每次修正方向以各自樣本的梯度方向修正,橫衝直撞各自爲政,難以達到收斂。

凸函數是一個定義在某個向量空間的凸子集C(區間)上的實值函數f,而且對於凸子集C中任意兩個向量, f((x1+x2)/2)>=(f(x1)+f(x2))/2,則f(x)是定義在凸子集c中的凸函數(該定義與凸規劃中凸函數的定義是一致的,下凸)。凹函數則定義相反。

關於batch_size的選取,ICLR 2017有一片文章可以借鑑:On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima
主要思想就是:太大的batch size 容易陷入sharp minima,泛化性不好。

關於網絡的收斂:
http://blog.kaggle.com/2014/12/22/convolutional-nets-and-cifar-10-an-interview-with-yan-lecun/

問:在您看來,一個運作良好且不受“爲什麼它會運作良好”這一理論原因影響的卷積網絡是什麼樣的?通常您是否偏好執行更甚於理論?如何平衡?

Lecun答:我不覺得執行與理論之間需要抉擇,如果能執行,就會有相關可解釋的理論。

另外,你談及的是什麼樣的理論?是說泛化界限嗎( generalization bound )?卷積網絡有着限定的VC維(VC Dimension),因此兩者一致並有着典型的VC維。你還想要什麼?是像SVM中那樣更嚴格的界限嗎?就我所知,沒有一個理論的界限會足夠嚴格,可以適用實際需求,所以我的確不太明白這個問題。當然,普通的VC維不夠嚴格,但是非泛型範圍(像SVMs)只會稍微欠缺一點嚴格性。

如果你希望的是收斂性證明(或保證),就有一點複雜了。多層網絡的損失函數不是凸值,因此簡易證明該函數爲凸不可行。但是我們都知道實際上卷積網絡幾乎總是會收斂到同一水平,無論起點是什麼(如果初始化完成正確)。有理論證明,有許許多多等效局部最小值,還有一個數字很小的“壞”局部最小值。因此收斂性並不會造成問題。(注:VC維用來表示模型的複雜度,機器學習基石課程上有提到)

轉自知乎:https://www.zhihu.com/question/32673260
沒有,按照我所瞭解的,目前除了SGD優化方法的變種都是爲了增加棄坑速度而作的,即增加脫離局部最小值的速度,使得網絡更快的收斂。

非凸的本質難題是鞍點數目太多,除非深度網絡設計使得非凸的函數繪景類似一個漏斗(類似“V”型)且最小值就在漏斗尖口(“V”尖尖的底部)附近(CNN奇蹟般的是),RMSprop方法會一衝到底,效率高。一些深度的貝葉斯模型不用初始化訓練,直接暴力利用上面的優化不一定有效果。原因可能(目前還很難理論分析)在於函數繪景類似一個W型或者VVV…V型,而不是單純的V型。直觀來說,尖尖底太多了,利用上面的優化的結果就仁者見仁,智者見智了。

彈性反向傳播(RProp)和均方根反向傳播(RMSProp)
都是一種權值更新算法,類似於SGD算法,其中,RMSProp是RProp算法的改良版。

RProp算法:首先爲各權重變化賦一個初始值,設定權重變化加速因子與減速因子,在網絡前饋迭代中當連續誤差梯度符號不變時,採用加速策略,加快訓練速度;當連續誤差梯度符號變化時,採用減速策略,以期穩定收斂。網絡結合當前誤差梯度符號與變化步長實現BP,同時,爲了避免網絡學習發生振盪或下溢,算法要求設定權重變化的上下限。(動態的調節學習率)

此外,RPROP針對不同的權值參數,提供了一種差異化學習的策略:
不同權值參數的梯度的數量級可能相差很大,因此很難找到一個全局的學習步長。這時,我們想到了在full-batch learning中僅靠權值梯度的符號來選擇學習步長。rprop算法正是採用這樣的思想:對於網絡中的每一個權值參數,當其對應的前面兩個梯度符號相同時,則增大該權值參數對應的學習步長;反之,則減小對應的學習步長。並且,rprop算法將每一個權值對應的學習步長限制在百萬分之一到50之間。但是,prop算法爲什麼不能應用於mini-batch learning中。
假設有一個在線學習系統,初始的學習步長較小,在其上應用prop算法。這裏有十組訓練數據,前九組都使得梯度符號與之前的梯度符號相同,那麼學習步長就會增加九次;而第十次得來的梯度符號與之前的相反,那麼學習步長就會減小一次。這樣一個過程下來,學習步長會增長很多(增大了9次學習步長,只減小了一次學習步長),如果系統的訓練數據集非常之大,那學習步長可能頻繁的來回波動,這樣肯定是不利於學習的。
改進版rmsprop:
rmsprop算法不再孤立地更新學習步長,而是聯繫之前的每一次梯度變化情況,具體如下。rmsprop算法給每一個權值一個變量MeanSquare(w,t)用來記錄第t次更新步長時前t次的梯度平方的平均值,具體計算方法如下圖所示(注意,其中的係數0.9和0.1只是個例子,具體取值還要看具體情況)。然後再用第t次的梯度除上前t次的梯度的平方的平均值,得到學習步長的更新比例,根據此比例去得到新的學習步長。如果當前得到的梯度爲負,那學習步長就會減小一點點;如果當前得到的梯度爲正,那學習步長就會增大一點點。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章