感謝伯禹學(xué)習(xí)平臺(tái),本次學(xué)習(xí)將記錄記錄如何使用Pytorch高效實(shí)現(xiàn)網(wǎng)絡(luò),熟練掌握Pytorch的基礎(chǔ)知識(shí),記錄不包含理論知識(shí)的細(xì)節(jié)展開(kāi)。
一:過(guò)擬合與欠擬合
模型訓(xùn)練中經(jīng)常出現(xiàn)的兩類典型問(wèn)題:
- 一類是模型無(wú)法得到較低的訓(xùn)練誤差,我們將這一現(xiàn)象稱作欠擬合(underfitting);
- 另一類是模型的訓(xùn)練誤差遠(yuǎn)小于它在測(cè)試數(shù)據(jù)集上的誤差,我們稱該現(xiàn)象為過(guò)擬合(overfitting)。
過(guò)擬合與欠擬合
Pytorch 如何應(yīng)對(duì)過(guò)擬合
- 權(quán)重衰減:在pytorch 中的optim使用weight_decay可以指定權(quán)重衰減因子,引入正則化
import torch
optimizer_w = torch.optim.SGD(params=[net.weight], lr=lr, weight_decay=wd)
- 隨機(jī)丟棄(Dropout)Pytorch中可以直接使用封裝號(hào)的Dropout
import torch.nn as nn
nn.Dropout(drop_p)
Pytorch 如何應(yīng)對(duì)欠擬合
- 增加模型復(fù)雜度
- 提高輸入特征
二:梯度消失與梯度爆炸
以下內(nèi)容來(lái)自伯禹學(xué)習(xí)平臺(tái)教學(xué)內(nèi)容
當(dāng)神經(jīng)網(wǎng)絡(luò)的層數(shù)較多時(shí),模型的數(shù)值穩(wěn)定性容易變差。
假設(shè)一個(gè)層數(shù)為的多層感知機(jī)的第
層
的權(quán)重參數(shù)為
,輸出層
的權(quán)重參數(shù)為
。為了便于討論,不考慮偏差參數(shù),且設(shè)所有隱藏層的激活函數(shù)為恒等映射(identity mapping)
。給定輸入
,多層感知機(jī)的第
層的輸出
。此時(shí),如果層數(shù)
較大,
的計(jì)算可能會(huì)出現(xiàn)衰減或爆炸。舉個(gè)例子,假設(shè)輸入和所有層的權(quán)重參數(shù)都是標(biāo)量,如權(quán)重參數(shù)為0.2和5,多層感知機(jī)的第30層輸出為輸入
分別與
(消失)和
(爆炸)的乘積。當(dāng)層數(shù)較多時(shí),梯度的計(jì)算也容易出現(xiàn)消失或爆炸。
PyTorch的默認(rèn)隨機(jī)初始化
隨機(jī)初始化模型參數(shù)的方法有很多。在線性回歸的簡(jiǎn)潔實(shí)現(xiàn)中,我們使用torch.nn.init.normal_()使模型net的權(quán)重參數(shù)采用正態(tài)分布的隨機(jī)初始化方式。不過(guò),PyTorch中nn.Module的模塊參數(shù)都采取了較為合理的初始化策略(不同類型的layer具體采樣的哪一種初始化方法的可參考源代碼),因此一般不用我們考慮。