K折交叉驗證
由于驗證數(shù)據(jù)集不參與模型訓練散休,當訓練數(shù)據(jù)不夠用時,預留大量的驗證數(shù)據(jù)顯得太奢侈恕稠。一種改善的方法是K折交叉驗證(K-fold cross-validation)搞乏。在K折交叉驗證中,我們把原始訓練數(shù)據(jù)集分割成K個不重合的子數(shù)據(jù)集眠屎,然后我們做K次模型訓練和驗證剔交。每一次,我們使用一個子數(shù)據(jù)集驗證模型改衩,并使用其他K-1個子數(shù)據(jù)集來訓練模型岖常。在這K次訓練和驗證中,每次用來驗證模型的子數(shù)據(jù)集都不同葫督。最后竭鞍,我們對這K次訓練誤差和驗證誤差分別求平均。
k折交叉驗證的目的:
- 判斷模型是否過擬合(估計模型的泛化誤差)橄镜。(以用來做模型選擇)
一個非常好的解釋:
一偎快、k折交叉驗證的目的(為什么要用k折交叉驗證?)
1.根本原因:數(shù)據(jù)有限蛉鹿,單一的把數(shù)據(jù)都用來做訓練模型滨砍,容易導致過擬合往湿。(反過來妖异,如果數(shù)據(jù)足夠多,完全可以不使用交叉驗證领追。)較小的k值會導致可用于建模的數(shù)據(jù)量太小他膳,所以小數(shù)據(jù)集的交叉驗證結果需要格外注意,建議選擇較大的k值绒窑。
2.理論上:使用了交叉驗證棕孙,模型方差“應該”降低了。
在理想情況下些膨,我們認為k折交叉驗證可以 O(1/k)的效率降低模型方差蟀俊,從而提高模型的泛化能力。通俗地說订雾,我們期望模型在訓練集的多個子數(shù)據(jù)集上表現(xiàn)良好肢预,要勝過單單在整個訓練數(shù)據(jù)集上表現(xiàn)良好。(注意:但實際上洼哎,由于所得到的k折數(shù)據(jù)之間并非獨立而是存在相關性烫映,k折交叉驗證到底能降低多少方差還不確定沼本,同時可能會帶來偏差上升。)
二锭沟、 從方差偏差的角度來看交叉驗證
(1)什么是模型的偏差和方差抽兆?
在機器學習中,我們用訓練集去訓練(學習)一個model(模型)族淮,通常的做法是定義一個loss function(誤差函數(shù))辫红,通過將這個loss最小化過程,來提高模型的性能(performance)瞧筛。然而我們學習一個模型的目的是為了解決實際的問題(或者說是訓練數(shù)據(jù)集這個領域(field)中的一般化問題)厉熟,單純地將訓練數(shù)據(jù)集的loss最小化,并不能保證在解決更一般問題時仍然是最優(yōu)的较幌,甚至不能保證模型是可用的揍瑟。這個訓練數(shù)據(jù)集的loss與一般化的數(shù)據(jù)集的loss之間的差異就叫generalization error=bias+variance。(注意:bias和variance是針對generalization(一般化乍炉,泛化)來說的绢片。)
generalization error分為bias和variance兩個部分。首先如果我們能夠獲得所有可能的數(shù)據(jù)集合岛琼,并在這個數(shù)據(jù)集合上將loss最小化底循,這樣學習到的模型就可以稱之為“真是模型”。當然槐瑞,我們無論如何都不能獲得并訓練所有可能的數(shù)據(jù)熙涤,所以“真是模型”肯定存在,但是無法獲得困檩,我們最終的目標就是去學習一個模型使其更加接近這個“真實模型”祠挫。
而bias和variance分別從兩個方面來描述我們學習到的模型與真實模型之間的差距。
Bias是“用所有可能的訓練數(shù)據(jù)集訓練出的所有模型的輸出的平均值(也就是去取期望的步驟)”與“真是模型”的輸出值之間的差異悼沿;
Variance則是“不同的訓練數(shù)據(jù)集訓練出的模型”的輸出值之間的差異等舔。也就是說bias反映的是模型在樣本上的輸出值與真實值之間的差距,即模型本省的精準度(或者說算法本省的擬合能力)糟趾;variance反映的是模型每次輸出結果與模型期望輸出之間的誤差慌植,即模型的穩(wěn)定性。
這里需要注意的是我們能夠用來學習的訓練數(shù)據(jù)集只是全部數(shù)據(jù)中的一個子集义郑。
————————————————
版權聲明:本文為CSDN博主「Ice Cream_069」的原創(chuàng)文章蝶柿,遵循 CC 4.0 BY-SA 版權協(xié)議,轉(zhuǎn)載請附上原文出處鏈接及本聲明非驮。
原文鏈接:https://blog.csdn.net/weixin_36103474/article/details/92799657
k的選擇
2017年的一項研究給出了另一種經(jīng)驗式的選擇方法交汤,作者建議
且保證
,n代表了數(shù)據(jù)量院尔,d代表了特征數(shù)蜻展。感興趣的朋友可以對照論文進一步了解喉誊。
from https://blog.csdn.net/Li_yi_chao/article/details/82665745
過擬合,欠擬合
一句話纵顾,過擬合會出現(xiàn)高方差問題伍茄。欠擬合會出現(xiàn)高偏差問題。
防止過擬合的辦法
正則化
dropout (dropout相當于一種bagging)
early stopping
數(shù)據(jù)增強(cv中常用)
simpler model structure
regularization
Bootstrap/Bagging
ensemble
data augmentation
utilize invariance
dropout
early stopping
Bayesian
正則
- 正則化為什么不對b加:
首先正則化主要是為了防止過擬合施逾,而過擬合一般表現(xiàn)為模型對于輸入的微小改變產(chǎn)生了輸出的較大差異敷矫,這主要是由于有些參數(shù)w過大的關系,通過對||w||進行懲罰汉额,可以緩解這種問題曹仗。而如果對||b||進行懲罰,其實是沒有作用的蠕搜,因為在對輸出結果的貢獻中怎茫,參數(shù)b對于輸入的改變是不敏感的,不管輸入改變是大還是小妓灌,參數(shù)b的貢獻就只是加個偏置而已轨蛤。舉個例子,如果你在訓練集中虫埂,w和b都表現(xiàn)得很好祥山,但是在測試集上發(fā)生了過擬合,b是不背這個鍋的掉伏,因為它對于所有的數(shù)據(jù)都是一視同仁的(都只是給它們加個偏置)缝呕,要背鍋的是w,因為它會對不同的數(shù)據(jù)產(chǎn)生不一樣的加權斧散」┏#或者說,模型對于輸入的微小改變產(chǎn)生了輸出的較大差異颅湘,這是因為模型的“曲率”太大话侧,而模型的曲率是由w決定的栗精,b不貢獻曲率(對輸入進行求導闯参,b是直接約掉的)。
作者:陽仔的下午茶
鏈接:https://www.zhihu.com/question/66894061/answer/653496474
來源:知乎
著作權歸作者所有悲立。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權鹿寨,非商業(yè)轉(zhuǎn)載請注明出處。
- L2正則后的參數(shù)更新公式推導
范數(shù)正則化在模型原損失函數(shù)基礎上添加
范數(shù)懲罰項薪夕,從而得到訓練所需要最小化的函數(shù)脚草。
范數(shù)懲罰項指的是模型權重參數(shù)每個元素的平方和與一個正的常數(shù)的乘積。以線性回歸中的線性回歸損失函數(shù)為例
其中是權重參數(shù)原献,
是偏差參數(shù)馏慨,樣本
的輸入為
埂淮,標簽為
,樣本數(shù)為
写隶。將權重參數(shù)用向量
表示倔撞,帶有
范數(shù)懲罰項的新?lián)p失函數(shù)為
其中超參數(shù)。當權重參數(shù)均為0時慕趴,懲罰項最小痪蝇。當
較大時,懲罰項在損失函數(shù)中的比重較大冕房,這通常會使學到的權重參數(shù)的元素較接近0躏啰。當
設為0時,懲罰項完全不起作用耙册。上式中
范數(shù)平方
展開后得到
给僵。
有了范數(shù)懲罰項后,在小批量隨機梯度下降中详拙,我們將線性回歸一節(jié)中權重
和
的迭代方式更改為
可見想际,范數(shù)正則化令權重
和
先自乘小于1的數(shù),再減去不含懲罰項的梯度溪厘。因此胡本,
范數(shù)正則化又叫權重衰減。權重衰減通過懲罰絕對值較大的模型參數(shù)為需要學習的模型增加了限制畸悬,這可能對過擬合有效侧甫。
dropout
多層感知機中神經(jīng)網(wǎng)絡圖描述了一個單隱藏層的多層感知機。其中輸入個數(shù)為4蹋宦,隱藏單元個數(shù)為5披粟,且隱藏單元(
)的計算表達式為
這里是激活函數(shù),
是輸入冷冗,隱藏單元
的權重參數(shù)為
守屉,偏差參數(shù)為
。當對該隱藏層使用丟棄法時蒿辙,該層的隱藏單元將有一定概率被丟棄掉拇泛。設丟棄概率為
,那么有
的概率
會被清零
思灌,有的概率
會除以
做
拉伸
俺叭。丟棄概率是丟棄法的超參數(shù)。具體來說泰偿,設隨機變量為0和1的概率分別為
和
熄守。使用丟棄法時我們計算新的隱藏單元
由于,因此
即丟棄法不改變其輸入的期望值。讓我們對之前多層感知機的神經(jīng)網(wǎng)絡中的隱藏層使用丟棄法裕照,一種可能的結果如圖所示攒发,其中和
被清零。這時輸出值的計算不再依賴
和
晋南,在反向傳播時晨继,與這兩個隱藏單元相關的權重的梯度均為0。由于在訓練中隱藏層神經(jīng)元的丟棄是隨機的搬俊,即
都有可能被清零紊扬,輸出層的計算無法過度依賴
中的任一個,從而在訓練模型時起到正則化的作用唉擂,并可以用來應對過擬合餐屎。在測試模型時,我們?yōu)榱四玫礁哟_定性的結果玩祟,一般不使用丟棄法
dropout實現(xiàn):
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
RNN
- RNN的數(shù)學表達
簡單的RNN可以看作是一個只有一個隱藏層的全連接神經(jīng)網(wǎng)絡腹缩,RNN模型關鍵的參數(shù)只有和
兩個矩陣,在所有時間步這兩個矩陣都是一樣的空扎。理解RNN關鍵的一點是在計算
的時候會用到上一步的
藏鹊。
若是時間步
的小批量輸入,
為t時刻的隱藏層結果转锈,則:
其中,(d為embedding的維度撮慨,h為隱藏層的神經(jīng)元的個數(shù))竿痰,
,
影涉,
函數(shù)是非線性激活函數(shù)。由于引入了
规伐,
能夠捕捉截至當前時間步的序列的歷史信息蟹倾。由于
的計算基于
,上式的計算是循環(huán)的猖闪。
在時間步鲜棠,輸出層的輸出為:
其中萧朝,
夏哭,q為輸出的類別的個數(shù)检柬,一般為詞匯量的個數(shù)vocab_size。
- RNN的損失函數(shù)
也就是下一個時刻對應的詞,是一個one-hot表達何址。
是第t步的預測輸出里逆。