上一篇主要是對(duì)卷積神經(jīng)網(wǎng)絡(luò)的整個(gè)訓(xùn)練過程中公式以及誤差的推導(dǎo)給出詳細(xì)的分析。
博客地址:http://blog.csdn.net/u010402786/article/details/51226825
這一篇主要對(duì)卷積神經(jīng)網(wǎng)絡(luò)中出現(xiàn)的一些問題進(jìn)行一個(gè)詳細(xì)的闡述。
第一個(gè)問題:模型過擬合
所謂過擬合(Overfit),是這樣一種現(xiàn)象:一個(gè)假設(shè)在訓(xùn)練數(shù)據(jù)上能夠獲得比其他假設(shè)更好的擬合,但是在訓(xùn)練數(shù)據(jù)外的數(shù)據(jù)集 上卻不能很好的擬合數(shù)據(jù)。此時(shí)我們就叫這個(gè)假設(shè)出現(xiàn)了overfit的現(xiàn)象。
如上圖所示:過擬合,就是擬合函數(shù)需要顧忌每一個(gè)點(diǎn),最終形成的擬合函數(shù)波動(dòng)很大。在某些很小的區(qū)間里,函數(shù)值的變化很劇烈。這就意味著函數(shù)在某些小區(qū)間里的導(dǎo)數(shù)值(絕對(duì)值)非常大,由于自變量值可大可小,所以只有系數(shù)足夠大,才能保證導(dǎo)數(shù)值很大。
過擬合其中一個(gè)可能的成因就是模型的vc維過高,使用了過強(qiáng)的模型復(fù)雜度(model complexity)的能力。(參數(shù)多并且過訓(xùn)練)
還有一個(gè)原因是數(shù)據(jù)中的噪聲,造成了如果完全擬合的話,也許與真實(shí)情景的偏差更大。
最后還有一個(gè)原因是數(shù)據(jù)量有限,這使得模型無法真正了解整個(gè)數(shù)據(jù)的真實(shí)分布。
權(quán)值學(xué)習(xí)迭代次數(shù)足夠多(Overtraining),擬合了訓(xùn)練數(shù)據(jù)中的噪聲和訓(xùn)練樣例中沒有代表性的特征。
1.權(quán)值衰減
在每次迭代過程中以某個(gè)小因子降低每個(gè)權(quán)值,這等效于修改E的定義,加入一個(gè)與網(wǎng)絡(luò)權(quán)值的總量相應(yīng)的懲罰項(xiàng),此方法的動(dòng)機(jī)是保持權(quán)值較小,避免weight decay,從而使學(xué)習(xí)過程向著復(fù)雜決策面的反方向偏。(L2正則化)
2.適當(dāng)?shù)膕topping criterion(驗(yàn)證集)
3.Cross-validation with some patterns
交叉驗(yàn)證方法在可獲得額外的數(shù)據(jù)提供驗(yàn)證集合時(shí)工作得很好,但是小訓(xùn)練集合的過度擬合問題更為嚴(yán)重
k-fold交叉方法:
把訓(xùn)練樣例分成k份,然后進(jìn)行k次交叉驗(yàn)證過程,每次使用不同的一份作為驗(yàn)證集合,其余k-1份合并作為訓(xùn)練集合.每個(gè)樣例會(huì)在一次實(shí)驗(yàn)中被用作驗(yàn)證樣例,在k-1次實(shí)驗(yàn)中被用作訓(xùn)練樣例;每次實(shí)驗(yàn)中,使用上面討論的交叉驗(yàn)證過程來決定在驗(yàn)證集合上取得最佳性能的迭代次數(shù)n*,然后計(jì)算這些迭代次數(shù)的均值,作為最終需要的迭代次數(shù)。
4.正則化
這里有點(diǎn)疑問,正則化是為了防止過擬合還是為了解決過擬合。對(duì)部分無用的feature,定義其parameter(p3,p4)非常大,這樣會(huì)導(dǎo)致訓(xùn)練結(jié)果w3,w4非常小,幾乎為0,降低模型復(fù)雜度。
關(guān)于正則化具體的解釋請(qǐng)移步到博主另一篇博文中:
(
http://blog.csdn.net/u010402786/article/details/49592239)
第二個(gè)問題:數(shù)據(jù)集不平衡
不平衡訓(xùn)練集會(huì)對(duì)結(jié)果造成很大的負(fù)面影響,而訓(xùn)練集在平衡的情況下,能夠達(dá)到最好的performance。
1. 訓(xùn)練數(shù)據(jù)分布情況對(duì)CNN結(jié)果產(chǎn)生很大影響;
2. 平衡的訓(xùn)練集是最優(yōu)的,數(shù)據(jù)越不平衡,準(zhǔn)確率越差;
3. 如何提升準(zhǔn)確率(使用Oversampling)
相關(guān)論文是:
《The Impact of Imbalanced Training Data for Convolutional Neural Networks》
第三個(gè)問題:Batchsize的影響
Batch_Size(批尺寸)是機(jī)器學(xué)習(xí)中一個(gè)重要參數(shù)。
?、偃绻麛?shù)據(jù)集比較小,完全可以采用全數(shù)據(jù)集 ( Full Batch Learning )的形式,這樣做至少有 2 個(gè)好處:其一,由全數(shù)據(jù)集確定的方向能夠更好地代表樣本總體,從而更準(zhǔn)確地朝向極值所在的方向。其二,由于不同權(quán)重的梯度值差別巨大,因此選取一個(gè)全局的學(xué)習(xí)率很困難。
②Batch_Size = 1。這就是在線學(xué)習(xí)(Online Learning)。使用在線學(xué)習(xí),每次修正方向以各自樣本的梯度方向修正,橫沖直撞各自為政,難以達(dá)到收斂。
?、廴绻W(wǎng)絡(luò)中采用minibatch SGD算法來優(yōu)化,所以是一個(gè)batch一個(gè)batch地將數(shù)據(jù)輸入CNN模型中,然后計(jì)算這個(gè)batch的所有樣本的平均損失,即代價(jià)函數(shù)是所有樣本的平均。而batch_size就是一個(gè)batch的所包含的樣本數(shù),顯然batch_size將影響到模型的優(yōu)化程度和速度。mini batch只是為了充分利用GPU memory而做出的妥協(xié)
在合理范圍內(nèi),增大 Batch_Size 的好處:內(nèi)存利用率提高了,大矩陣乘法的并行化效率提高。跑完一次 epoch(全數(shù)據(jù)集)所需的迭代次數(shù)減少,對(duì)于相同數(shù)據(jù)量的處理速度進(jìn)一步加快。在一定范圍內(nèi),一般來說 Batch_Size 越大,其確定的下降方向越準(zhǔn),引起訓(xùn)練震蕩越小。
下面是參考文獻(xiàn)中博主給出的實(shí)驗(yàn)結(jié)果:
Batch_Size 太小,算法在 200 epoches 內(nèi)不收斂。
隨著 Batch_Size 增大,處理相同數(shù)據(jù)量的速度越快。
隨著 Batch_Size 增大,達(dá)到相同精度所需要的 epoch 數(shù)量越來越多。
由于上述兩種因素的矛盾, Batch_Size 增大到某個(gè)時(shí)候,達(dá)到時(shí)間上的最優(yōu)。
由于最終收斂精度會(huì)陷入不同的局部極值,因此 Batch_Size 增大到某些時(shí)候,達(dá)到最終收斂精度上的最優(yōu)。
第四個(gè)問題:梯度彌散
梯度彌散的問題很大程度上是來源于激活函數(shù)的“飽和”。因?yàn)樵诤笙騻鞑サ倪^程中仍然需要計(jì)算激活函數(shù)的導(dǎo)數(shù),所以一旦卷積核的輸出落入函數(shù)的飽和區(qū),它的梯度將變得非常小。
梯度彌散。使用反向傳播算法傳播梯度的時(shí)候,隨著傳播深度的增加,梯度的幅度會(huì)急劇減小,會(huì)導(dǎo)致淺層神經(jīng)元的權(quán)重更新非常緩慢,不能有效學(xué)習(xí)。這樣一來,深層模型也就變成了前幾層相對(duì)固定,只能改變最后幾層的淺層模型。
一種新的方法batch normalization,相關(guān)論文:
《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》 顧名思義,batch normalization嘛,就是“批規(guī)范化”咯。Google在ICML文中描述的非常清晰,即在每次SGD時(shí),通過mini-batch來對(duì)相應(yīng)的activation做規(guī)范化操作,使得結(jié)果(輸出信號(hào)各個(gè)維度)的均值為0,方差為1. 而最后的“scale and shift”操作則是為了讓因訓(xùn)練所需而“刻意”加入的BN能夠有可能還原最初的輸入,從而保證整個(gè)network的capacity。
BN可以應(yīng)用于網(wǎng)絡(luò)中任意的activation set。文中還特別指出在CNN中,BN應(yīng)作用在非線性映射前,即對(duì)x=Wu+b做規(guī)范化。另外對(duì)CNN的“權(quán)值共享”策略,BN還有其對(duì)應(yīng)的做法(詳見文中3.2節(jié))。
那BN到底是什么原理呢?說到底還是為了防止“梯度彌散”。關(guān)于梯度彌散,大家都知道一個(gè)簡(jiǎn)單的栗子:。在BN中,是通過將activation規(guī)范為均值和方差一致的手段使得原本會(huì)減小的activation的scale變大??梢哉f是一種更有效的local response normalization方法。
參考文獻(xiàn)
1.談?wù)勆疃葘W(xué)習(xí)中的 Batch_Size
http://blog.csdn.net/ycheng_sjtu/article/details/49804041
2.正則化方法:L1和L2 regularization、數(shù)據(jù)集擴(kuò)增、dropout
http://blog.csdn.net/u010402786/article/details/49592239
3.深度學(xué)習(xí)中 Batch Normalization為什么效果好?
http://www.zhihu.com/question/38102762