原文鏈接(中文版)
第一章和三四章的筆記洞豁,從最簡單的神經(jīng)元模型感知機(jī)講起犀变,感知機(jī)的激活函數(shù)是階躍函數(shù),不能很好地反應(yīng)代價(jià)函數(shù)下降的變化量肥败,由此引入sigmoid激活函數(shù)趾浅,介紹了BP網(wǎng)絡(luò)的梯度下降法,使代價(jià)函數(shù)始終朝自變量負(fù)梯度方向下降馒稍,采用隨機(jī)梯度下降提升學(xué)習(xí)效率皿哨,最后從代價(jià)函數(shù)、正則化纽谒、權(quán)值初始化证膨、超參數(shù)選擇等方面入手優(yōu)化學(xué)習(xí)模型,加快學(xué)習(xí)速度鼓黔。
隨機(jī)梯度下降
每次迭代都進(jìn)行隨機(jī)梯度下降央勒,(隨機(jī)選擇訓(xùn)練輸入的少量樣本,并只計(jì)算這些樣本的?Cx的平均值來估算梯度 nablaC澳化。)每一次迭代隨機(jī)分配minibatch崔步,對每一個(gè)batch進(jìn)行參數(shù)更新,參數(shù)更新是依據(jù)batch中所有樣本的梯度的平均值缎谷。
累計(jì)BP則是求得所有樣本的變化量的均值C=1n∑xCx
神經(jīng)網(wǎng)絡(luò)的超參數(shù)
訓(xùn)練迭代數(shù)井濒,mini-batch的大小,學(xué)習(xí)率eta列林,隱藏神經(jīng)元個(gè)數(shù)
交叉熵代價(jià)函數(shù)
利用二次代價(jià)函數(shù)(均值方差)作為代價(jià)函數(shù)可能會(huì)因?yàn)槌跏紖?shù)選取不恰當(dāng)?shù)脑驅(qū)е聦W(xué)習(xí)速度下降瑞你,因?yàn)樵谔荻认陆邓惴ㄖ猩婕暗絪igmoid函數(shù)的導(dǎo)數(shù),當(dāng)接近1時(shí)變化緩慢希痴,解決方案是交叉熵代價(jià)函數(shù)
交叉熵由于非負(fù)和接近目標(biāo)值時(shí)交叉熵接近0的特性者甲,可作為代價(jià)函數(shù),同時(shí)也避免了學(xué)習(xí)速度下降的問題
因?yàn)榻徊骒卦趯ψ兞壳筇荻葧r(shí)砌创,約去了sigmoid函數(shù)項(xiàng)虏缸,所以避免了學(xué)習(xí)速率下降的問題,如下
一般當(dāng)輸出神經(jīng)元使用sigmoid激活函數(shù)時(shí)嫩实,交叉熵都是更好的選擇
softmax層
softmax函數(shù)也可以用于解決學(xué)習(xí)緩慢的問題刽辙,用softmax函數(shù)代替sigmoid函數(shù)作為激活函數(shù),softmax層的輸出都是一些相加為1的正數(shù)的集合舶赔,可被看作是概率分布
用log-likelihood函數(shù)作為代價(jià)函數(shù)
當(dāng)softmax的輸出接近于1時(shí)扫倡,log-likelihood的輸出接近于0,可用作概率分布的代價(jià)函數(shù)。softmax 加上 log-likelihood 的組合更加適用于那些需要將輸出激活值解釋為概率的場景撵溃。
過擬合
在訓(xùn)練集由于迭代的增加代價(jià)函數(shù)會(huì)不斷降低疚鲤,學(xué)習(xí)能力越來越強(qiáng),但但反映在測試集上可能會(huì)出現(xiàn)準(zhǔn)確率或代價(jià)函數(shù)在一段時(shí)間內(nèi)提升后震蕩或衰減的現(xiàn)象缘挑。原因是在學(xué)習(xí)過程中由于參數(shù)眾多集歇,可能導(dǎo)致模型學(xué)習(xí)到訓(xùn)練數(shù)據(jù)本身的性質(zhì)。方法之一是早停语淘,當(dāng)學(xué)習(xí)到驗(yàn)證集的準(zhǔn)確度出現(xiàn)飽和時(shí)诲宇,停止訓(xùn)練』谭或是增加訓(xùn)練樣本姑蓝。
另一種緩解過擬合的方法是規(guī)范化,或稱權(quán)值下降吕粗、L2正則化
規(guī)范化的效果是讓網(wǎng)絡(luò)傾向于學(xué)習(xí)小一點(diǎn)的權(quán)重纺荧,規(guī)范化可以當(dāng)做一種尋找小的權(quán)重和最小化原始的代價(jià)函數(shù)之間的折中。這兩部分之前相對的重要性就由lambda的值來控制了:lambda越小颅筋,就偏向于最小化原始代價(jià)函數(shù)宙暇,反之,傾向于小的權(quán)重议泵。在引入正則化后占贫,參數(shù)的下降會(huì)多減去關(guān)于lambda的一項(xiàng)
無規(guī)范化的網(wǎng)絡(luò)在隨機(jī)初始化參數(shù)后可能最終會(huì)得到極小值,規(guī)范化網(wǎng)絡(luò)能有效規(guī)避這一問題先口。規(guī)范化網(wǎng)絡(luò)使權(quán)重更小型奥,小的權(quán)重在某種程度上說表示更低的復(fù)雜度。更小的權(quán)重意味著網(wǎng)絡(luò)的行為不會(huì)因?yàn)槲覀冸S便改變了一個(gè)輸入而改變太大池充。這會(huì)讓規(guī)范化網(wǎng)絡(luò)學(xué)習(xí)局部噪聲的影響更加困難桩引。將它看做是一種讓單個(gè)的證據(jù)不會(huì)影響網(wǎng)絡(luò)輸出太多的方式缎讼。相對的收夸,規(guī)范化網(wǎng)絡(luò)學(xué)習(xí)去對整個(gè)訓(xùn)練集中經(jīng)常出現(xiàn)的證據(jù)進(jìn)行反應(yīng)。對比看血崭,大權(quán)重的網(wǎng)絡(luò)可能會(huì)因?yàn)檩斎氲奈⑿「淖兌a(chǎn)生比較大的行為改變卧惜。所以一個(gè)無規(guī)范化的網(wǎng)絡(luò)可以使用大的權(quán)重來學(xué)習(xí)包含訓(xùn)練數(shù)據(jù)中的噪聲的大量信息的復(fù)雜模型。簡言之夹纫,規(guī)范化網(wǎng)絡(luò)受限于根據(jù)訓(xùn)練數(shù)據(jù)中常見的模式來構(gòu)造相對簡單的模型咽瓷,而能夠抵抗訓(xùn)練數(shù)據(jù)中的噪聲的特性影響。我們的想法就是這可以讓我們的網(wǎng)絡(luò)對看到的現(xiàn)象進(jìn)行真實(shí)的學(xué)習(xí)舰讹,并能夠根據(jù)已經(jīng)學(xué)到的知識更好地進(jìn)行泛化茅姜。
簡單概括上述表達(dá),正則化會(huì)將學(xué)習(xí)過程中那些離群點(diǎn)看作噪聲從而減少參數(shù)數(shù)量月匣,簡化學(xué)習(xí)模型钻洒,避免過擬合奋姿。
規(guī)范化的其他技術(shù)
- L1正則化
- dropout
- 人工擴(kuò)展訓(xùn)練數(shù)據(jù)
權(quán)重初始化
當(dāng)采用標(biāo)準(zhǔn)正態(tài)分布(均值0方差1)進(jìn)行權(quán)值初始化時(shí),對于隱層神經(jīng)元的輸入有可能飽和(通過重構(gòu)代價(jià)函數(shù)可以解決輸出神經(jīng)元在錯(cuò)誤值上飽和導(dǎo)致學(xué)習(xí)下降的問題素标,但不能解決隱層的飽和)称诗。可以使用均值0方差1/srqt(n)的正態(tài)分布初始權(quán)重头遭,這樣會(huì)向下擠壓高斯分布寓免,不容易飽和。這樣的初始化不僅僅能夠帶來訓(xùn)練速度的加快计维,有時(shí)候在最終性能上也有很大的提升袜香。
self.biases = [np.random.randn(y, 1) for y in self.sizes[1:]]
self.weights = [np.random.randn(y, x)/np.sqrt(x)
for x, y in zip(self.sizes[:-1], self.sizes[1:])]
如何選擇神經(jīng)網(wǎng)絡(luò)的超參數(shù)
- 學(xué)習(xí)率
通常采用可變的學(xué)習(xí)率更加有效。在學(xué)習(xí)的前期鲫惶,權(quán)重可能非常糟糕困鸥。所以最好是使用一個(gè)較大的學(xué)習(xí)率讓權(quán)重變化得更快。越往后剑按,我們可以降低學(xué)習(xí)率疾就,這樣可以作出更加精良的調(diào)整。一種自然的觀點(diǎn)是使用提前終止的想法艺蝴。就是保持學(xué)習(xí)率為一個(gè)常量知道驗(yàn)證準(zhǔn)確度開始變差猬腰。然后按照某個(gè)量下降學(xué)習(xí)率。
- 規(guī)范化參數(shù)
我建議猜敢,開始時(shí)不包含規(guī)范化lambda=0姑荷,確定eta的值。使用確定出來的eta缩擂,我們可以使用驗(yàn)證數(shù)據(jù)來選擇好的lambda鼠冕。從嘗試lambda=1.0開始,然后根據(jù)驗(yàn)證集上的性能按照因子10增加或減少其值胯盯。一旦我已經(jīng)找到一個(gè)好的量級懈费,你可以改進(jìn)lambda的值。這里搞定后博脑,你就可以返回再重新優(yōu)化eta憎乙。
- minibatch大小