1侠鳄、常見的機器學(xué)習(xí)優(yōu)化器
1.1 gradient descent
1.1.1 全量梯度下降(Batch gradient descent)
每次使用全量的訓(xùn)練集樣本來更新模型參數(shù),即θ=θ?η??θJ(θ)戏售。
優(yōu)點:每次更新都會朝著正確的方向進(jìn)行儡毕,最后能夠保證收斂于極值點(凸函數(shù)收斂于全局極值點巨双,非凸函數(shù)可能會收斂于局部極值點)卡者,
缺點:在于每次學(xué)習(xí)時間過長,并且如果訓(xùn)練集很大以至于需要消耗大量的內(nèi)存从隆,并且全量梯度下降不能進(jìn)行在線模型參數(shù)更新。
1.1.2 隨機梯度下降(Stochastic gradient descent)
隨機梯度下降算法每次從訓(xùn)練集中隨機選擇一個樣本來進(jìn)行學(xué)習(xí)缭裆,即:θ=θ?η??θJ(θ;xi;yi)
優(yōu)點:隨機梯度下降算法每次只隨機選擇一個樣本來更新模型參數(shù)键闺,因此每次的學(xué)習(xí)是非常快速的澈驼,并且可以進(jìn)行在線更新辛燥。
缺點:每次更新可能并不會按照正確的方向進(jìn)行,因此可以帶來優(yōu)化波動缝其,不過從另一個方面來看挎塌,隨機梯度下降所帶來的波動有個好處就是,對于類似盆地區(qū)域(即很多局部極小值點)那么這個波動的特點可能會使得優(yōu)化的方向從當(dāng)前的局部極小值點跳到另一個更好的局部極小值點内边,這樣便可能對于非凸函數(shù)榴都,最終收斂于一個較好的局部極值點,甚至全局極值點假残。 由于波動缭贡,因此會使得迭代次數(shù)增多炉擅,即收斂速度變慢。
1.1.3 小批量梯度下降(Mini-batch gradient descent)
Mini-batch梯度下降綜合了batch梯度下降與stochastic梯度下降阳惹,在每次更新速度與更新次數(shù)中間取得一個平衡谍失,其每次更新從訓(xùn)練集中隨機選擇m,m<<n
個樣本進(jìn)行學(xué)習(xí),即:
θ=θ?η??θJ(θ;xi:i+m;yi:i+m)
優(yōu)點: 相對于隨機梯度下降莹汤,Mini-batch梯度下降降低了收斂波動性快鱼,即降低了參數(shù)更新的方差,使得更新更加穩(wěn)定纲岭。相對于全量梯度下降抹竹,其提高了每次學(xué)習(xí)的速度。并且其不用擔(dān)心內(nèi)存瓶頸從而可以利用矩陣運算進(jìn)行高效計算止潮。
1.1.4 梯度下降法的問題和挑戰(zhàn)
學(xué)習(xí)率設(shè)定:學(xué)習(xí)率的設(shè)定帶來的挑戰(zhàn)有三方面窃判。首先,選擇一個合理的學(xué)習(xí)率很難喇闸,如果學(xué)習(xí)速率過小袄琳,則會導(dǎo)致收斂速度很慢。如果學(xué)習(xí)速率過大燃乍,那么其會阻礙收斂唆樊,即在極值點附近會振蕩。其次刻蟹,學(xué)習(xí)速率調(diào)整很難逗旁,我們一般使用某種事先設(shè)定的策略或者在每次迭代中衰減一個較小的閾值。無論哪種調(diào)整方法舆瘪,都需要事先進(jìn)行固定設(shè)置片效,這邊便無法自適應(yīng)每次學(xué)習(xí)的數(shù)據(jù)集特點。最后英古,模型所有的參數(shù)每次更新都是使用相同的學(xué)習(xí)速率堤舒。如果數(shù)據(jù)特征是稀疏的或者每個特征有著不同的取值統(tǒng)計特征與空間,那么便不能在每次更新中每個參數(shù)使用相同的學(xué)習(xí)速率哺呜,那些很少出現(xiàn)的特征應(yīng)該使用一個相對較大的學(xué)習(xí)速率。
局部極小和鞍點:對于非凸目標(biāo)函數(shù)箕戳,容易陷入那些次優(yōu)的局部極值點或者鞍點中某残。
1.2 Momentum
如果在峽谷地區(qū)(某些方向較另一些方向上陡峭得多,常見于局部極值點)陵吸,SGD會在這些地方附近振蕩玻墅,從而導(dǎo)致收斂速度慢。這種情況下壮虫,動量(Momentum)便可以解決澳厢。動量在參數(shù)更新項中加上一次更新量(即動量項,相當(dāng)于指數(shù)加權(quán)平均),即:
νt=γνt?1+η ?θJ(θ)
θ=θ?νt
其作用如下圖所示:
優(yōu)點:對方向一致的參數(shù)能夠加速學(xué)習(xí)环础,對梯度改變方向的參數(shù)能夠減少其更新,因此就是momentum能夠在相關(guān)方向上加速學(xué)習(xí)剩拢,抑制振蕩线得,從而加速收斂。
缺點:比較難學(xué)習(xí)一個較好的學(xué)習(xí)率徐伐。
1.3 Adagrad
在前面介紹的算法中贯钩,每個模型參數(shù)θi使用相同的學(xué)習(xí)速率η,而Adagrad在每一個更新步驟中對于每一個模型參數(shù)θi使用不同的學(xué)習(xí)速率ηi办素。其更新方程為:
其中角雷,Gt∈Rd×d是一個對角矩陣,其中第i行的對角元素eii為過去到當(dāng)前第i個參數(shù)θi的梯度的平方和性穿,epsilon是一個平滑參數(shù)勺三,為了使得分母不為0。
進(jìn)一步需曾,將所有Gt,ii,gt,i的元素寫成向量Gt,gt,這樣便可以使用向量點乘操作:
優(yōu)點:在于它能夠為每個參數(shù)自適應(yīng)不同的學(xué)習(xí)速率吗坚,而一般的人工都是設(shè)定為0.01。
缺點:在于需要計算參數(shù)梯度序列平方和胯舷,并且學(xué)習(xí)速率趨勢是不斷衰減最終達(dá)到一個非常小的值刻蚯。
1.4 RMSprop
為了降低Adagrad中學(xué)習(xí)速率衰減過快的問題,RMSprop使用指數(shù)加權(quán)平均來代替歷史梯度的平方和:
Rmsprop的的效果如下圖所示桑嘶,對梯度較大的方向減小其學(xué)習(xí)速率炊汹,相反的,在梯度較小的方向上增加其學(xué)習(xí)速率逃顶。
優(yōu)點:RMSprop改進(jìn)了Adagrad學(xué)習(xí)速率衰減過快的問題讨便,同時其適用于處理非平穩(wěn)。
缺點:依然依賴一個全局學(xué)習(xí)率以政。
1.5 Adam
Adam 算法結(jié)合了 Momentum 和 RMSprop 梯度下降法霸褒,并且是一種極其常
用的學(xué)習(xí)算法,被證明能有效適用于不同神經(jīng)網(wǎng)絡(luò)盈蛮,適用于廣泛的結(jié)構(gòu)废菱。其計算方式如下:
上式中使用的是經(jīng)過偏差修正后的指數(shù)加權(quán)平均數(shù):
2、常見的過擬合解決方法
2.1 L1和L2正則化
L1和L2正則化來避免過擬合是大家都知道的事情抖誉,而且我們都知道L1正則化可以得到稀疏解殊轴,L2正則化可以得到平滑解,這是為什么呢袒炉?有幾種解釋吧旁理,可以參考文獻(xiàn)8(https://blog.csdn.net/f156207495/article/details/82794151) 。主要有幾個方面:
1)直觀的從圖像上觀察結(jié)論
2)通過對梯度的求解進(jìn)行解釋
3)通過L1正則和L2正則假設(shè)的參數(shù)先驗上進(jìn)行解釋我磁。
2.2 數(shù)據(jù)增強
通俗得講孽文,數(shù)據(jù)增強即需要得到更多的符合要求的數(shù)據(jù)驻襟,即和已有的數(shù)據(jù)是獨立同分布的,或者近似獨立同分布的芋哭。一般有以下方法:
1)從數(shù)據(jù)源頭采集更多數(shù)據(jù)
2)復(fù)制原有數(shù)據(jù)并加上隨機噪聲
3)重采樣
4)根據(jù)當(dāng)前數(shù)據(jù)集估計數(shù)據(jù)分布參數(shù)沉衣,使用該分布產(chǎn)生更多數(shù)據(jù)等
2.3 Early stopping
Early stopping便是一種迭代次數(shù)截斷的方法來防止過擬合的方法,即在模型對訓(xùn)練數(shù)據(jù)集迭代收斂之前停止迭代來防止過擬合楷掉。
Early stopping可以得到與L2類似的參數(shù)平滑效果厢蒜,可以通過定性和定量兩個方面進(jìn)行分析,具體參考文獻(xiàn)10:http://www.friskit.me/2017/03/27/l2-equals-to-stop-early/
2.4 dropout
dropout是指在深度學(xué)習(xí)網(wǎng)絡(luò)的訓(xùn)練過程中烹植,對于神經(jīng)網(wǎng)絡(luò)單元斑鸦,按照一定的概率將其暫時從網(wǎng)絡(luò)中丟棄。dropout為什么能防止過擬合草雕,可以通過以下幾個方面來解釋:
- 它強迫一個神經(jīng)單元巷屿,和隨機挑選出來的其他神經(jīng)單元共同工作,達(dá)到好的效果墩虹。消除減弱了神經(jīng)元節(jié)點間的聯(lián)合適應(yīng)性嘱巾,增強了泛化能力。
- 類似于bagging的集成效果
- 對于每一個dropout后的網(wǎng)絡(luò)诫钓,進(jìn)行訓(xùn)練時旬昭,相當(dāng)于做了Data Augmentation,因為菌湃,總可以找到一個樣本问拘,使得在原始的網(wǎng)絡(luò)上也能達(dá)到dropout單元后的效果。 比如惧所,對于某一層骤坐,dropout一些單元后,形成的結(jié)果是(1.5,0,2.5,0,1,2,0)下愈,其中0是被drop的單元纽绍,那么總能找到一個樣本,使得結(jié)果也是如此势似。這樣拌夏,每一次dropout其實都相當(dāng)于增加了樣本。
2.5 交叉驗證
交叉驗證的基本思想就是將原始數(shù)據(jù)(dataset)進(jìn)行分組履因,一部分做為訓(xùn)練集來訓(xùn)練模型辖佣,另一部分做為測試集來評價模型。我們常用的交叉驗證方法有簡單交叉驗證搓逾、S折交叉驗證和留一交叉驗證。
2.6 決策樹剪枝
在決策樹學(xué)習(xí)中將已生成的樹進(jìn)行簡化的過程稱為剪枝杯拐。又分為前剪枝和后剪枝霞篡,這里我們就不細(xì)細(xì)介紹了世蔗。
3、CTR預(yù)估 & 推薦系統(tǒng)
3.1 FM的原理及化簡
FM的計算公式如下:
化簡過程如下:
求導(dǎo)結(jié)果如下:
3.2 FFM的原理
在FFM中朗兵,每一維特征 xi污淋,針對其它特征的每一種field fj,都會學(xué)習(xí)一個隱向量 vi,fj余掖。因此寸爆,隱向量不僅與特征相關(guān),也與field相關(guān)盐欺。
假設(shè)樣本的 n個特征屬于f個field赁豆,那么FFM的二次項有 nf個隱向量。而在FM模型中冗美,每一維特征的隱向量只有一個魔种。FM可以看作FFM的特例,是把所有特征都?xì)w屬到一個field時的FFM模型粉洼。根據(jù)FFM的field敏感特性节预,可以導(dǎo)出其模型方程。
可以看到属韧,如果隱向量的長度為 k安拟,那么FFM的二次參數(shù)有 nfk 個,遠(yuǎn)多于FM模型的 nk個宵喂。此外糠赦,由于隱向量與field相關(guān),F(xiàn)FM二次項并不能夠化簡樊破,其預(yù)測復(fù)雜度是 O(kn2)愉棱。
FFM將問題定義為分類問題,使用的是logistic loss哲戚,同時加入了正則項(這里是分類類別為-1和1時候的log loss)
3.3 wide & deep的原理
wide & deep的結(jié)構(gòu)如下:
Wide Part
Wide Part其實是一個廣義的線性模型奔滑,使用特征包括
raw input(原始特征)和cross-product transformation(組合特征)
Deep Part
Deep Part通過學(xué)習(xí)一個低緯度的dense representation(也叫做embedding vector)對于每一個query和item,來泛化給你推薦一些字符上看起來不那么相關(guān)顺少,但是你可能也是需要的朋其。比如說:你想要炸雞,Embedding Space中脆炎,炸雞和漢堡很接近梅猿,所以也會給你推薦漢堡。
Embedding vectors被隨機初始化秒裕,并根據(jù)最終的loss來反向訓(xùn)練更新袱蚓。這些低維度的dense embedding vectors被作為第一個隱藏層的輸入。隱藏層的激活函數(shù)通常使用ReLU几蜻。
模型的訓(xùn)練
模型的最終輸出為:
通過聯(lián)合訓(xùn)練方式進(jìn)行訓(xùn)練喇潘。之前面試問到兩個部分是否可以用不同的優(yōu)化器体斩,論文中給出的是:Wide組件是用FTRL(Follow-the-regularized-leader) + L1正則化學(xué)習(xí)。Deep組件是用AdaGrad來學(xué)習(xí)颖低。
3.4 DeepFM的原理
先來看一下DeepFM的模型結(jié)構(gòu):
DeepFM包含兩部分:神經(jīng)網(wǎng)絡(luò)部分與因子分解機部分絮吵,分別負(fù)責(zé)低階特征的提取和高階特征的提取。這兩部分共享同樣的輸入忱屑。DeepFM的預(yù)測結(jié)果可以寫為:
FM部分
FM部分的詳細(xì)結(jié)構(gòu)如下:
FM的輸出公式為:
深度部分
深度部分是一個前饋神經(jīng)網(wǎng)絡(luò)蹬敲。與圖像或者語音這類輸入不同,圖像語音的輸入一般是連續(xù)而且密集的莺戒,然而用于CTR的輸入一般是及其稀疏的伴嗡。因此需要重新設(shè)計網(wǎng)絡(luò)結(jié)構(gòu)。具體實現(xiàn)中為脏毯,在第一層隱含層之前闹究,引入一個嵌入層來完成將輸入向量壓縮到低維稠密向量。
嵌入層(embedding layer)的結(jié)構(gòu)如上圖所示食店。當(dāng)前網(wǎng)絡(luò)結(jié)構(gòu)有兩個有趣的特性渣淤,1)盡管不同field的輸入長度不同,但是embedding之后向量的長度均為K吉嫩。2)在FM里得到的隱變量Vik現(xiàn)在作為了嵌入層網(wǎng)絡(luò)的權(quán)重价认。
4、Batch Normalization
4.1 為什么要做BN
我們首先來思考一個問題自娩,為什么神經(jīng)網(wǎng)絡(luò)需要對輸入做標(biāo)準(zhǔn)化處理用踩?原因在于神經(jīng)網(wǎng)絡(luò)本身就是為了學(xué)習(xí)數(shù)據(jù)的分布,如果訓(xùn)練集和測試集的分布不同忙迁,那么導(dǎo)致學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)泛化性能大大降低脐彩。同時,我們在使用mini-batch對神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練時姊扔,不同的batch的數(shù)據(jù)的分布也有可能不同惠奸,那么網(wǎng)絡(luò)就要在每次迭代都去學(xué)習(xí)適應(yīng)不同的分布,這樣將會大大降低網(wǎng)絡(luò)的訓(xùn)練速度恰梢。因此我們需要對輸入數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化處理佛南。
對于深度網(wǎng)絡(luò)的訓(xùn)練是一個復(fù)雜的過程,只要網(wǎng)絡(luò)的前面幾層發(fā)生微小的改變嵌言,那么后面幾層就會被累積放大下去嗅回。一旦網(wǎng)絡(luò)某一層的輸入數(shù)據(jù)的分布發(fā)生改變,那么這一層網(wǎng)絡(luò)就需要去適應(yīng)學(xué)習(xí)這個新的數(shù)據(jù)分布摧茴,所以如果訓(xùn)練過程中绵载,訓(xùn)練數(shù)據(jù)的分布一直在發(fā)生變化,那么將會影響網(wǎng)絡(luò)的訓(xùn)練速度。
我們知道網(wǎng)絡(luò)一旦train起來尘分,那么參數(shù)就要發(fā)生更新猜惋,除了輸入層的數(shù)據(jù)外(因為輸入層數(shù)據(jù),我們已經(jīng)人為的為每個樣本歸一化)培愁,后面網(wǎng)絡(luò)每一層的輸入數(shù)據(jù)分布是一直在發(fā)生變化的,因為在訓(xùn)練的時候缓窜,前面層訓(xùn)練參數(shù)的更新將導(dǎo)致后面層輸入數(shù)據(jù)分布的變化定续。我們把網(wǎng)絡(luò)中間層在訓(xùn)練過程中,數(shù)據(jù)分布的改變稱之為:Internal Covariate Shift禾锤。為了解決Internal Covariate Shift私股,便有了Batch Normalization的誕生。
4.2 如何做BN(訓(xùn)練和預(yù)測)
訓(xùn)練階段
訓(xùn)練階段對每一層恩掷,BN的計算過程如下:
可以看到倡鲸,在BN的計算過程中,不僅僅有標(biāo)準(zhǔn)化的操作黄娘,還有最后一步峭状,被稱為變換重構(gòu)。為什么要增加這一步呢逼争?其實如果是僅僅使用上面的歸一化公式优床,對網(wǎng)絡(luò)某一層A的輸出數(shù)據(jù)做歸一化,然后送入網(wǎng)絡(luò)下一層B誓焦,這樣是會影響到本層網(wǎng)絡(luò)A所學(xué)習(xí)到的特征的胆敞。打個比方,比如我網(wǎng)絡(luò)中間某一層學(xué)習(xí)到特征數(shù)據(jù)本身就分布在S型激活函數(shù)的兩側(cè)杂伟,你強制把它給我歸一化處理移层、標(biāo)準(zhǔn)差也限制在了1,把數(shù)據(jù)變換成分布于s函數(shù)的中間部分赫粥,這樣就相當(dāng)于我這一層網(wǎng)絡(luò)所學(xué)習(xí)到的特征分布被你搞壞了观话。于是我們增加了變換重構(gòu),保留了網(wǎng)絡(luò)所學(xué)習(xí)到的特征傅是。
預(yù)測階段
一個網(wǎng)絡(luò)一旦訓(xùn)練完了匪燕,就沒有了min-batch這個概念了。測試階段我們一般只輸入一個測試樣本喧笔,看看結(jié)果而已帽驯。因此測試樣本,前向傳導(dǎo)的時候书闸,上面的均值u尼变、標(biāo)準(zhǔn)差σ 要哪里來?其實網(wǎng)絡(luò)一旦訓(xùn)練完畢,參數(shù)都是固定的嫌术,這個時候即使是每批訓(xùn)練樣本進(jìn)入網(wǎng)絡(luò)哀澈,那么BN層計算的均值u、和標(biāo)準(zhǔn)差都是固定不變的度气。
因此在預(yù)測階段割按,對于均值來說直接計算所有訓(xùn)練batch u值的平均值;然后對于標(biāo)準(zhǔn)偏差采用訓(xùn)練階段每個batch σB的無偏估計磷籍,過程如下:
5适荣、集成學(xué)習(xí)
5.1 Bagging
Bagging即套袋法,其算法過程如下:
1院领、從原始樣本集中抽取訓(xùn)練集.每輪從原始樣本集中使用Bootstraping的方法抽取n個訓(xùn)練樣本(在訓(xùn)練集中弛矛,有些樣本可能被多次抽取到,而有些樣本可能一次都沒有被抽中).共進(jìn)行k輪抽取比然,得到k個訓(xùn)練集.(k個訓(xùn)練集相互獨立)
2丈氓、每次使用一個訓(xùn)練集得到一個模型,k個訓(xùn)練集共得到k個模型.(注:根據(jù)具體問題采用不同的分類或回歸方法强法,如決策樹万俗、神經(jīng)網(wǎng)絡(luò)等)
3、對分類問題:將上步得到的k個模型采用投票的方式得到分類結(jié)果拟烫;對回歸問題该编,計算上述模型的均值作為最后的結(jié)果.
5.2 Boosting
Boosting是一族可將弱學(xué)習(xí)器提升為強學(xué)習(xí)器的算法。關(guān)于Boosting的兩個核心問題:
1硕淑、在每一輪如何改變訓(xùn)練數(shù)據(jù)的權(quán)值或概率分布课竣?
通過提高那些在前一輪被弱分類器分錯樣例的權(quán)值,減小前一輪分對樣本的權(quán)值置媳,而誤分的樣本在后續(xù)受到更多的關(guān)注.
2于樟、通過什么方式來組合弱分類器?
通過加法模型將弱分類器進(jìn)行線性組合拇囊,比如AdaBoost通過加權(quán)多數(shù)表決的方式迂曲,即增大錯誤率小的分類器的權(quán)值,同時減小錯誤率較大的分類器的權(quán)值寥袭。而提升樹通過擬合殘差的方式逐步減小殘差路捧,將每一步生成的模型疊加得到最終模型。
5.3 Bagging和Boosting的方差-偏差分析
我們都知道传黄,Bagging主要降低的是模型的方差杰扫,而Boosting主要減小的是模型的偏差,這是為什么呢膘掰?
這里我們主要引用參考文獻(xiàn)13中的解釋:
5.4 Stacking
stacking 就是當(dāng)用初始訓(xùn)練數(shù)據(jù)學(xué)習(xí)出若干個基學(xué)習(xí)器后章姓,將這幾個學(xué)習(xí)器的預(yù)測結(jié)果作為新的訓(xùn)練集,來學(xué)習(xí)一個新的學(xué)習(xí)器。
在stacking的模型訓(xùn)練階段凡伊,二級模型的訓(xùn)練集是使用一級模型產(chǎn)生的零渐,如果直接使用一級模型對初始的訓(xùn)練集樣本進(jìn)行預(yù)測來產(chǎn)生二級模型的訓(xùn)練集,這樣會有極大的過擬合的風(fēng)險系忙,因此一般是用訓(xùn)練一級模型未使用的樣本來產(chǎn)生二級模型的訓(xùn)練集诵盼,交叉驗證方法是比較常用的方法。
Stacking的二級模型的訓(xùn)練樣本的shape應(yīng)該是訓(xùn)練集長度 * 基分類器個數(shù)银还,因此對于每個一級模型來說的拦耐,通過下面的圖示來產(chǎn)生部分該模型對應(yīng)的部分,最后進(jìn)行橫向拼接:
而對于二級模型的測試集來說见剩,由于每次交叉驗證的過程中都要進(jìn)行一次預(yù)測,假設(shè)我們是5折交叉驗證扫俺,那么對于每個一級模型來說苍苞,得到的shape是測試集行數(shù) * 交叉驗證折數(shù),此時的做法是狼纬,對axis=1方向取平均值羹呵,以得到測試集行數(shù) * 1 的測試數(shù)據(jù),最后將每個一級模型的結(jié)果進(jìn)行橫向拼接疗琉,得到二級模型的測試樣本的shape是測試集行數(shù) * 基分類器個數(shù)冈欢,可以跟訓(xùn)練集保持一致:
6、梯度消失盈简、爆炸及解決方案
想必大家對梯度消失和梯度爆炸的概念都很了解了凑耻,這里我們只談一談如何避免梯度消失和爆炸。
6.1 預(yù)訓(xùn)練加微調(diào)
該方案的基本思想是每次訓(xùn)練一層隱節(jié)點柠贤,訓(xùn)練時將上一層隱節(jié)點的輸出作為輸入香浩,而本層隱節(jié)點的輸出作為下一層隱節(jié)點的輸入,此過程就是逐層“預(yù)訓(xùn)練”(pre-training)臼勉;在預(yù)訓(xùn)練完成后邻吭,再對整個網(wǎng)絡(luò)進(jìn)行“微調(diào)”(fine-tunning)。此思想相當(dāng)于是先尋找局部最優(yōu)宴霸,然后整合起來尋找全局最優(yōu)囱晴,此方法有一定的好處,但是目前應(yīng)用的不是很多了瓢谢。
6.2 梯度裁切
梯度剪切這個方案主要是針對梯度爆炸提出的畸写,其思想是設(shè)置一個梯度剪切閾值,然后更新梯度的時候恩闻,如果梯度超過這個閾值艺糜,那么就將其強制限制在這個范圍之內(nèi)。這可以防止梯度爆炸。
6.3 正則化
正則化在一定程度上也可以避免梯度爆炸的問題破停,比較常見的是l1
正則和l2正則翅楼。
6.4 relu、leakrelu真慢、elu等激活函數(shù)
relu
relu的數(shù)學(xué)表達(dá)式為f(x) = max(0, x)毅臊,圖像如下:
我們可以很容易看出,relu函數(shù)的導(dǎo)數(shù)在正數(shù)部分是恒等于1的黑界,因此在深層網(wǎng)絡(luò)中使用relu激活函數(shù)就不會導(dǎo)致梯度消失和爆炸的問題管嬉。但由于負(fù)數(shù)部分恒為0,會導(dǎo)致一些神經(jīng)元無法激活朗鸠。
leak relu
leakrelu就是為了解決relu的0區(qū)間帶來的影響蚯撩,其數(shù)學(xué)表達(dá)為:f(x)=max(k?x,x)。其中k是leak系數(shù)烛占,一般選擇0.01或者0.02胎挎,或者通過學(xué)習(xí)而來,其圖像如下:
elu
elu激活函數(shù)也是為了解決relu的0區(qū)間帶來的影響忆家,其表達(dá)式為:
其圖像如下:
6.5 batch normalization
有關(guān)batch normalization內(nèi)容犹菇,可以參考本文的第四部分。多說一句芽卿,我們可以理解BN將輸出從飽和區(qū)拉倒了非飽和區(qū)揭芍。 尤其在使用sigmoid激活函數(shù)或者tanh激活函數(shù)時,這個作用更加明顯卸例。
6.6 殘差結(jié)構(gòu)
在一定深度下称杨,深層網(wǎng)絡(luò)的訓(xùn)練誤差大于淺層網(wǎng)絡(luò)的訓(xùn)練誤差,我們稱之為網(wǎng)絡(luò)退化問題币厕。而殘差結(jié)構(gòu)有效的解決了這個問題列另,使得深層網(wǎng)絡(luò)的訓(xùn)練效果好于淺層網(wǎng)絡(luò)。
ResNet中的殘差塊如下圖所示:
我們可以看出此時將A網(wǎng)絡(luò)的輸出誤差應(yīng)該與B網(wǎng)絡(luò)相同(暫時不考慮網(wǎng)絡(luò)中的維度大小的細(xì)節(jié))旦装,因為殘差塊的輸出為F(x) + x,如果將網(wǎng)絡(luò)中的參數(shù)置為0页衙,則F(x)=0,因此得到的輸出為0+x=x。因此使用ResNet結(jié)構(gòu)搭建的深度網(wǎng)絡(luò)至少與淺層網(wǎng)絡(luò)具有相同的擬合能力阴绢,不會出現(xiàn)之前的網(wǎng)絡(luò)退化問題店乐。
6.7 LSTM
LSTM主要解決的是循環(huán)神經(jīng)網(wǎng)絡(luò)中的梯度消失問題,傳統(tǒng)RNN中為什么會出現(xiàn)梯度消失或爆炸呻袭,以及LSTM是如何解決的眨八,參考文獻(xiàn)14 和 15.
RNN梯度消失和爆炸的原因:https://zhuanlan.zhihu.com/p/28687529
LSTM如何解決梯度消失問題:https://zhuanlan.zhihu.com/p/28749444
另外還有一個常見的問題就是,LSTM和RNN中為什么選擇tanh作為激活函數(shù)左电,而非relu廉侧∫诚欤可以參考文獻(xiàn)16。
參考文獻(xiàn)
1段誊、梯度下降優(yōu)化算法綜述:https://blog.csdn.net/heyongluoyao8/article/details/52478715
2闰蚕、各優(yōu)化算法的優(yōu)缺點整理:https://blog.csdn.net/zhouhong0284/article/details/80232412
3、詳解機器學(xué)習(xí)中的梯度消失连舍、爆炸原因及其解決方法:https://blog.csdn.net/qq_25737169/article/details/78847691
4没陡、深度學(xué)習(xí)(二十九)Batch Normalization 學(xué)習(xí)筆記:https://blog.csdn.net/hjimce/article/details/50866313
5、基礎(chǔ) | batchnorm原理及代碼詳解:https://blog.csdn.net/qq_25737169/article/details/79048516
6索赏、BN論文:https://arxiv.org/abs/1502.03167
7盼玄、ResNet學(xué)習(xí)筆記:https://zhuanlan.zhihu.com/p/32085715
8、為什么L1稀疏潜腻,L2平滑埃儿?::https://blog.csdn.net/f156207495/article/details/82794151
9、l1 相比于 l2 為什么容易獲得稀疏解融涣?:https://www.zhihu.com/question/37096933
10蝌箍、http://www.friskit.me/2017/03/27/l2-equals-to-stop-early/:http://www.friskit.me/2017/03/27/l2-equals-to-stop-early/
11、CNN中的dropout理解:https://blog.csdn.net/dod_jdi/article/details/78379781
12暴心、整理一份萬字機器學(xué)習(xí)資料!:http://www.reibang.com/p/70e04c02985c
13杂拨、bagging與boosting兩種集成模型的偏差bias以及方差variance 的理解:https://blog.csdn.net/shenxiaoming77/article/details/53894973
14专普、RNN梯度消失和爆炸的原因:https://zhuanlan.zhihu.com/p/28687529
15、LSTM如何解決梯度消失問題:https://zhuanlan.zhihu.com/p/28749444
16弹沽、RNN中為什么要采用tanh而不是ReLu作為激活函數(shù)檀夹?:https://www.zhihu.com/question/61265076
17、ResNet學(xué)習(xí)筆記:https://zhuanlan.zhihu.com/p/32085715