學(xué)習(xí)筆記
softmax
sigmod? 1/1+exp(-x)
交叉熵?fù)p失函數(shù)
Relu激活函數(shù)
相較于sigmoid和tanh柒瓣,Relu的主要優(yōu)勢是計(jì)算效率高且不會(huì)出現(xiàn)梯度消失問題
ReLu函數(shù)是一個(gè)通用的激活函數(shù)赔硫,目前在大多數(shù)情況下使用桐经。但是熟吏,ReLU函數(shù)只能在隱藏層中使用挡育。
用于分類器時(shí)敛惊,sigmoid函數(shù)及其組合通常效果更好嗜暴。由于梯度消失問題精堕,有時(shí)要避免使用sigmoid和tanh函數(shù)孵淘。?
在神經(jīng)網(wǎng)絡(luò)層數(shù)較多的時(shí)候,最好使用ReLu函數(shù)歹篓,ReLu函數(shù)比較簡單計(jì)算量少瘫证,而sigmoid和tanh函數(shù)計(jì)算量大很多揉阎。
在選擇激活函數(shù)的時(shí)候可以先選用ReLu函數(shù)如果效果不理想可以嘗試其他激活函數(shù)。
importtorch
fromtorchimportnn
fromtorch.nnimportinit
importnumpyasnp
importsys
sys.path.append("/home/kesci/input")
importd2lzh1981asd2l
?
print(torch.__version__)
?
num_inputs,num_outputs,num_hiddens=784,10,256
net=nn.Sequential(
d2l.FlattenLayer(),
nn.Linear(num_inputs,num_hiddens),
nn.ReLU(),
nn.Linear(num_hiddens,num_outputs),
? ? ?? )
forparamsinnet.parameters():
init.normal_(params,mean=0,std=0.01)?
batch_size=256
train_iter,test_iter=d2l.load_data_fashion_mnist(batch_size,root='/home/kesci/input/FashionMNIST2065')
loss=torch.nn.CrossEntropyLoss()
optimizer=torch.optim.SGD(net.parameters(),lr=0.1)????
num_epochs=5
d2l.train_ch3(net,train_iter,test_iter,loss,num_epochs,batch_size,None,None,optimizer)
L2范式正則化
dropout
訓(xùn)練誤差 泛化誤差
通俗來講背捌,前者指模型在訓(xùn)練數(shù)據(jù)集上表現(xiàn)出的誤差毙籽,后者指模型在任意一個(gè)測試數(shù)據(jù)樣本上表現(xiàn)出的誤差的期望,并常常通過測試數(shù)據(jù)集上的誤差來近似毡庆。
K折交叉驗(yàn)證
由于驗(yàn)證數(shù)據(jù)集不參與模型訓(xùn)練坑赡,當(dāng)訓(xùn)練數(shù)據(jù)不夠用時(shí),預(yù)留大量的驗(yàn)證數(shù)據(jù)顯得太奢侈么抗。一種改善的方法是K折交叉驗(yàn)證(K-fold cross-validation)毅否。在K折交叉驗(yàn)證中,我們把原始訓(xùn)練數(shù)據(jù)集分割成K個(gè)不重合的子數(shù)據(jù)集蝇刀,然后我們做K次模型訓(xùn)練和驗(yàn)證搀突。每一次,我們使用一個(gè)子數(shù)據(jù)集驗(yàn)證模型熊泵,并使用其他K-1個(gè)子數(shù)據(jù)集來訓(xùn)練模型仰迁。在這K次訓(xùn)練和驗(yàn)證中,每次用來驗(yàn)證模型的子數(shù)據(jù)集都不同顽分。最后徐许,我們對這K次訓(xùn)練誤差和驗(yàn)證誤差分別求平均。
梯度消失和梯度爆炸
當(dāng)神經(jīng)網(wǎng)絡(luò)的層數(shù)較多時(shí)卒蘸,模型的數(shù)值穩(wěn)定性容易變差
解決辦法
換用relu 激活函數(shù)
BatchNormalization
ResNet殘差結(jié)構(gòu)
LSTM結(jié)構(gòu)
預(yù)訓(xùn)練加finetunning
此方法來自Hinton在06年發(fā)表的論文上雌隅,其基本思想是每次訓(xùn)練一層隱藏層節(jié)點(diǎn),將上一層隱藏層的輸出作為輸入缸沃,而本層的輸出作為下一層的輸入恰起,這就是逐層預(yù)訓(xùn)練。
訓(xùn)練完成后趾牧,再對整個(gè)網(wǎng)絡(luò)進(jìn)行“微調(diào)(fine-tunning)”检盼。
此方法相當(dāng)于是找全局最優(yōu),然后整合起來尋找全局最優(yōu)翘单,但是現(xiàn)在基本都是直接拿imagenet的預(yù)訓(xùn)練模型直接進(jìn)行finetunning吨枉。
梯度剪切、正則
這個(gè)方案主要是針對梯度爆炸提出的哄芜,其思想是設(shè)值一個(gè)剪切閾值貌亭,如果更新梯度時(shí),梯度超過了這個(gè)閾值认臊,那么就將其強(qiáng)制限制在這個(gè)范圍之內(nèi)圃庭。這樣可以防止梯度爆炸。
另一種防止梯度爆炸的手段是采用權(quán)重正則化,正則化主要是通過對網(wǎng)絡(luò)權(quán)重做正則來限制過擬合剧腻,但是根據(jù)正則項(xiàng)在損失函數(shù)中的形式:
可以看出拘央,如果發(fā)生梯度爆炸,那么權(quán)值的范數(shù)就會(huì)變的非常大恕酸,反過來堪滨,通過限制正則化項(xiàng)的大小,也可以在一定程度上限制梯度爆炸的發(fā)生蕊温。