?神經(jīng)網(wǎng)絡:Epoch焰盗、Batch Size和迭代
為什么我會在代碼中使用這三個術(shù)語璧尸,它們有什么區(qū)別嗎?
為了理解這些術(shù)語有什么不同熬拒,你需要了解一些關(guān)于機器學習的術(shù)語爷光,比如梯度下降,以幫助你理解澎粟。
這里簡單總結(jié)梯度下降的含義...
梯度下降
這是一個在機器學習中用于尋找最佳結(jié)果(曲線的最小值)的迭代優(yōu)化算法蛀序。
梯度的含義是斜率或者斜坡的傾斜度欢瞪。
下降的含義是代價函數(shù)的下降。
算法是迭代的哼拔,意思是需要多次使用算法獲取結(jié)果引有,以得到最優(yōu)化結(jié)果。梯度下降的迭代性質(zhì)能使欠擬合的圖示演化以獲得對數(shù)據(jù)的最佳擬合倦逐。
梯度下降中有一個稱為學習率的參量。如上圖左所示宫补,剛開始學習率更大檬姥,因此下降步長更大。隨著點下降粉怕,學習率變得越來越小健民,從而下降步長也變小。同時贫贝,代價函數(shù)也在減小秉犹,或者說代價在減小,有時候也稱為損失函數(shù)或者損失稚晚,兩者都是一樣的崇堵。(損失/代價的減小是一件好事)
只有在數(shù)據(jù)很龐大的時候(在機器學習中,幾乎任何時候都是)客燕,我們才需要使用?epochs鸳劳,batch?size,迭代這些術(shù)語也搓,在這種情況下赏廓,一次性將數(shù)據(jù)輸入計算機是不可能的。因此傍妒,為了解決這個問題幔摸,我們需要把數(shù)據(jù)分成小塊,一塊一塊的傳遞給計算機颤练,在每一步的末端更新神經(jīng)網(wǎng)絡的權(quán)重既忆,擬合給定的數(shù)據(jù)。
EPOCHS
當一個完整的數(shù)據(jù)集通過了神經(jīng)網(wǎng)絡一次并且返回了一次昔案,這個過程稱為一個?epoch尿贫。
然而,當一個?epoch?對于計算機而言太龐大的時候踏揣,就需要把它分成多個小塊庆亡。
為什么要使用多于一個?epoch?
? ? 在神經(jīng)網(wǎng)絡中傳遞完整的數(shù)據(jù)集一次是不夠的捞稿,而且我們需要將完整的數(shù)據(jù)集在同樣的神經(jīng)網(wǎng)絡中傳遞多次又谋。我們使用的是有限的數(shù)據(jù)集拼缝,并且我們使用一個迭代過程即梯度下降,優(yōu)化學習過程和圖示彰亥。因此僅僅更新權(quán)重一次或者說使用一個?epoch?是不夠的咧七。
隨著?epoch?數(shù)量增加,神經(jīng)網(wǎng)絡中的權(quán)重的更新次數(shù)也增加任斋,曲線從欠擬合變得過擬合继阻。
那么,幾個?epoch?才是合適的呢废酷?
不幸的是瘟檩,這個問題并沒有正確的答案。對于不同的數(shù)據(jù)集澈蟆,答案是不一樣的墨辛。但是數(shù)據(jù)的多樣性會影響合適的?epoch?的數(shù)量。比如趴俘,只有黑色的貓的數(shù)據(jù)集睹簇,以及有各種顏色的貓的數(shù)據(jù)集。
BATCH?SIZE
batchsize:中文翻譯為批大辛壬痢(批尺寸)太惠。
簡單點說,批量大小將決定我們一次訓練的樣本數(shù)目橙垢。
batch_size將影響到模型的優(yōu)化程度和速度垛叨。
為什么需要有 Batch_Size :
batchsize 的正確選擇是為了在內(nèi)存效率和內(nèi)存容量之間尋找最佳平衡。?
Batch_Size的取值:
Batch(藍色)
如果數(shù)據(jù)集比較小我們就采用全數(shù)據(jù)集柜某。全數(shù)據(jù)集確定的方向能夠更好地代表樣本總體嗽元,從而更準確地朝向極值所在的方向。
注:對于大的數(shù)據(jù)集我們不能使用全批次喂击,因為會得到更差的結(jié)果剂癌。
Mini-batch(綠色)
選擇一個適中的 Batch_Size 值。就是說我們選定一個batch的大小后翰绊,將會以batch的大小將數(shù)據(jù)輸入深度學習的網(wǎng)絡中佩谷,然后計算這個batch的所有樣本的平均損失,即代價函數(shù)是所有樣本的平均监嗜。
Stochastic(batch_size等于1的情況)(紅色)
每次修正方向以各自樣本的梯度方向修正谐檀,橫沖直撞各自為政,難以達到收斂裁奇。
適當?shù)脑黾覤atchsize 的優(yōu)點:
1.通過并行化提高內(nèi)存利用率桐猬。
2.單次epoch的迭代次數(shù)減少,提高運行速度刽肠。(單次epoch=(全部訓練樣本/batchsize) / iteration =1)
3.適當?shù)脑黾覤atch_Size溃肪,梯度下降方向準確度增加免胃,訓練震動的幅度減小。(看上圖便可知曉)
經(jīng)驗總結(jié):
相對于正常數(shù)據(jù)集惫撰,如果Batch_Size過小羔沙,訓練數(shù)據(jù)就會非常難收斂,從而導致underfitting厨钻。
增大Batch_Size扼雏,相對處理速度加快。
增大Batch_Size莉撇,所需內(nèi)存容量增加(epoch的次數(shù)需要增加以達到最好結(jié)果)呢蛤。
這里我們發(fā)現(xiàn)上面兩個矛盾的問題,因為當epoch增加以后同樣也會導致耗時增加從而速度下降棍郎。因此我們需要尋找最好的batch_size。
再次重申:batchsize 的正確選擇是為了在內(nèi)存效率和內(nèi)存容量之間尋找最佳平衡银室。
迭代是重復反饋的動作,神經(jīng)網(wǎng)絡中我們希望通過迭代進行多次的訓練以到達所需的目標或結(jié)果蜈敢。
每一次迭代得到的結(jié)果都會被作為下一次迭代的初始值辜荠。
一個迭代 = 一個正向通過+一個反向通過
一個時期 = 所有訓練樣本的一個正向傳遞和一個反向傳遞抓狭。
深度學習中經(jīng)巢。看到epoch、 iteration和batchsize否过,下面按自己的理解說說這三個的區(qū)別:
(1)batchsize:批大小午笛。在深度學習中,一般采用SGD訓練苗桂,即每次訓練在訓練集中取batchsize個樣本訓練药磺;
(2)iteration:1個iteration等于使用batchsize個樣本訓練一次;
(3)epoch:1個epoch等于使用訓練集中的全部樣本訓練一次煤伟;
舉個例子癌佩,訓練集有1000個樣本,batchsize=10便锨,那么:
訓練完整個樣本集需要:
100次iteration围辙,1次epoch。