一.過擬合欠擬合及其解決方案
在機(jī)器學(xué)習(xí)模型的訓(xùn)練中,我們需要區(qū)分訓(xùn)練誤差(training error)和泛化誤差(generalization error)牡拇,這兩種誤差過大都會(huì)導(dǎo)致模型不佳魁瞪,在訓(xùn)練過程中一般會(huì)有兩種情況出現(xiàn):
- 一類是模型無法得到較低的訓(xùn)練誤差穆律,我們將這一現(xiàn)象稱作欠擬合(underfitting);
- 另一類是模型的訓(xùn)練誤差遠(yuǎn)小于它在測(cè)試數(shù)據(jù)集上的誤差导俘,我們稱該現(xiàn)象為過擬合(overfitting)峦耘。
其中解決過擬合有幾種方式:
- 減小模型的復(fù)雜度;
- 增加數(shù)據(jù)量旅薄;
- 使用正則項(xiàng)L1, L2辅髓。其中L1也可以用來做特征選擇,它可以使得模型參數(shù)變得更為稀疏少梁;L2會(huì)傾向于減小模型中對(duì)結(jié)果影響較大的參數(shù)洛口,而不是直接置為0.
- 使用Dropout。
這里強(qiáng)調(diào)一下Dropout的原理和實(shí)現(xiàn)方式:
在神經(jīng)網(wǎng)絡(luò)的隱藏層中一般會(huì)有多個(gè)神經(jīng)元凯沪,如果每次訓(xùn)練使用全部的神經(jīng)元第焰,則很可能某個(gè)神經(jīng)元對(duì)整個(gè)模型的影響較大,Dropout即為隨機(jī)地丟棄某些神經(jīng)元妨马,這樣可以使得模型輸出值不會(huì)過度依賴某個(gè)神經(jīng)元挺举,最終起到添加正則化的效果。
具體來說身笤,設(shè)隨機(jī)變量為0和1的概率分別為和豹悬。使用丟棄法時(shí)我們計(jì)算新的隱藏單元
由于,因此
即丟棄法不改變其輸入的期望值液荸。
使用PyTorch實(shí)現(xiàn)Dropout:
def dropout(X, drop_prob):
X = X.float()
assert 0 <= drop_prob <= 1
keep_prob = 1 - drop_prob
# 這種情況下把全部元素都丟棄
if keep_prob == 0:
return torch.zeros_like(X)
mask = (torch.rand(X.shape) < keep_prob).float()
return mask * X / keep_prob
X = torch.arange(16).view(2, 8)
dropout(X, 0)
tensor([[ 0., 1., 2., 3., 4., 5., 6., 7.],
[ 8., 9., 10., 11., 12., 13., 14., 15.]])
如果drop掉的比例為0瞻佛,此時(shí)可以看到dropout之后的輸出值并沒有改變。
dropout(X, 0.5)
tensor([[ 0., 2., 0., 0., 0., 0., 0., 14.],
[16., 0., 20., 0., 0., 0., 0., 30.]])
如果drop掉的比例為0.5娇钱,則有一般的神經(jīng)元會(huì)被丟棄伤柄。同時(shí)剩下的神經(jīng)元輸出值會(huì)被拉伸1 / ( 1 - drop_prob)
,以此保證輸入的期望不變文搂。
二.模型初始化方式
在神經(jīng)網(wǎng)絡(luò)中适刀,如果神經(jīng)元權(quán)重參數(shù)都初始為0或者相同的值,則在反向傳播之后每個(gè)神經(jīng)元的值依舊相等煤蹭,在這種情況下笔喉,無論隱藏單元有多少,隱藏層本質(zhì)上只有1個(gè)隱藏單元在發(fā)揮作用硝皂。因此需要將參數(shù)隨機(jī)初始化常挚。
1.隨機(jī)初始化模型參數(shù)
PyTorch的默認(rèn)隨機(jī)初始化
隨機(jī)初始化模型參數(shù)的方法有很多。在線性回歸的簡潔實(shí)現(xiàn)中稽物,我們使用torch.nn.init.normal_()
使模型net
的權(quán)重參數(shù)采用正態(tài)分布的隨機(jī)初始化方式奄毡。不過,PyTorch中nn.Module
的模塊參數(shù)都采取了較為合理的初始化策略(不同類型的layer具體采樣的哪一種初始化方法的可參考源代碼)贝或,因此一般不用我們考慮吼过。
2.Xavier初始化方法:
假設(shè)某全連接層的輸入個(gè)數(shù)為锐秦,輸出個(gè)數(shù)為,Xavier隨機(jī)初始化將使該層中權(quán)重參數(shù)的每個(gè)元素都隨機(jī)采樣于均勻分布
它的設(shè)計(jì)主要考慮到盗忱,模型參數(shù)初始化后酱床,每層輸出的方差不該受該層輸入個(gè)數(shù)影響,且每層梯度的方差也不該受該層輸出個(gè)數(shù)影響趟佃。