卖萌屋算法工程师思维导图part3—深度学习篇
賣萌屋的妹子們(劃掉)作者團(tuán)整理的算法工程師思維導(dǎo)圖,求職/自我提升/查漏補(bǔ)缺神器。該手冊(cè)一共分為數(shù)據(jù)結(jié)構(gòu)與算法、數(shù)學(xué)基礎(chǔ)、統(tǒng)計(jì)機(jī)器學(xué)習(xí)和深度學(xué)習(xí)四個(gè)部分。
下面是第三部分深度學(xué)習(xí)的內(nèi)容~
公眾號(hào)后臺(tái)回復(fù)【思維導(dǎo)圖】獲取完整手冊(cè)(Xmind腦圖源文件,學(xué)習(xí)起來更方便(? ?_?)?
編碼器
DNN
反向傳播
梯度消失與爆炸
反向傳播到梯度消失爆炸
https://zhuanlan.zhihu.com/p/76772734原因:
本質(zhì)上是因?yàn)樘荻确聪騻鞑ブ械倪B乘效應(yīng)。其實(shí)梯度爆炸和梯度消失問題都是因?yàn)榫W(wǎng)絡(luò)太深,網(wǎng)絡(luò)權(quán)值更新不穩(wěn)定造成的
激活函數(shù)導(dǎo)數(shù)*權(quán)值<1,多個(gè)小于1的數(shù)連乘之后,那將會(huì)越來越小,導(dǎo)致靠近輸入層的層的權(quán)重的偏導(dǎo)幾乎為0,也就是說幾乎不更新,這就是梯度消失的根本原因。連乘下來就會(huì)導(dǎo)致梯度過大,導(dǎo)致梯度更新幅度特別大,可能會(huì)溢出,導(dǎo)致模型無法收斂。
解決方案:
梯度爆炸:正則化/截?cái)?梯度消失:
1.改變激活函數(shù):relu(tanh導(dǎo)數(shù)也小于1),但會(huì)出現(xiàn)dead relu
2.batchnorm:使權(quán)值w落在激活函數(shù)敏感的區(qū)域,梯度變化大,避免梯度消失,同時(shí)加快收斂
3.殘差結(jié)構(gòu):求導(dǎo)時(shí)總有1在
CNN
歸納偏置:locality & spatial invariance
1*1卷積核
作用:1.升維降維(in_channel -> out_channel) 2.非線性 與全連接層的區(qū)別:輸入尺寸是否可變,全連接層的輸入尺寸是固定的,卷積層的輸入尺寸是任意的
反向傳播
通過平鋪的方式轉(zhuǎn)換成全聯(lián)接層
https://zhuanlan.zhihu.com/p/81675803
avg pooling:相當(dāng)于成了w = [1/4, 1/4, 1/4, 1/4]
稀疏交互與權(quán)重共享
每個(gè)輸 出神經(jīng)元僅與前一層特定局部區(qū)域內(nèi)的沖經(jīng)元存在連接權(quán)重 在卷積神經(jīng)網(wǎng)絡(luò)中,卷積核中的 每一個(gè)元素將作用于每一次局部輸入的特定位置上 參數(shù)共享的物理意義是使得卷積層具高平移等變性。假如圖像中有一 只貓,那么無論百出現(xiàn)在圖像中的任何位置 3 我們都應(yīng)該將 '8i只別為貓 在貓的 圄片上先進(jìn)行卷積,再向右平移 l像素的輸出,與先將圄片向右平移 J像 素再進(jìn)行卷積操作的輸出結(jié)果是相等的。
池化本質(zhì):降采樣
平均池化:避免估計(jì)方差增大,對(duì)背景對(duì)保留效果好 最大池化:避免估計(jì)均值偏移,提取紋理信息
油化操作除了能顯著降低參數(shù)量外,還能夠保持對(duì)平移、伸縮、旋 轉(zhuǎn)操作的不變性。
RNN
https://zhuanlan.zhihu.com/p/34203833
歸納偏置:sequentiality & time invariance
BPTT
梯度消失與爆炸
原因:
https://zhuanlan.zhihu.com/p/76772734
DNN中各個(gè)權(quán)重的梯度是獨(dú)立的,該消失的就會(huì)消失,不會(huì)消失的就不會(huì)消失。RNN的特殊性在于,它的權(quán)重是共享的。當(dāng)距離長了,最前面的導(dǎo)數(shù)就會(huì)消失或爆炸,但當(dāng)前時(shí)刻整體的梯度并不會(huì)消失,因?yàn)樗乔蠛偷倪^程。RNN 所謂梯度消失的真正含義是,梯度被近距離梯度主導(dǎo),導(dǎo)致模型難以學(xué)到遠(yuǎn)距離的依賴關(guān)系。解決方案: LSTM長時(shí)記憶單元
LSTM
消失:通過長時(shí)記憶單元,類似殘差鏈接。但后來加了遺忘門,遺忘門介于0-1,梯度仍有可能消失 爆炸:梯度仍可能爆炸,但LSTM機(jī)制復(fù)雜,多了一層激活函數(shù)sigmoid,可以通過正則與裁剪解決https://zhuanlan.zhihu.com/p/30465140
各模塊可以使用其他激活函數(shù)嗎?
sigmoid符合門控的物理意義 tanh在-1到1之間,以0為中心,和大多數(shù)特征分布吻合,且在0處比sigmoid梯度大易收斂
一開始沒有遺忘門,也不是sigmoid,后來發(fā)現(xiàn)這樣效果好
relu的梯度是0/1,1的時(shí)候相當(dāng)于同一個(gè)矩陣W連成,仍舊會(huì)梯度消失或爆炸的問題
綜上所述,當(dāng)采用 ReLU 作為循環(huán)神經(jīng)網(wǎng)絡(luò)中隱含層的激活函數(shù)時(shí),只有當(dāng) W的取值在單位矩陣附近時(shí)才能取得比較好的效果,因此需要將 W初始化為單位矩陣。實(shí)驗(yàn)證明,初始化 W為單位矩陣并使用 ReLU 激活函數(shù)在一些應(yīng)用中取得了與長短期記憶模型相似的結(jié)果.
GRU要點(diǎn):結(jié)構(gòu)、與LSTM的異同
Transformer
結(jié)構(gòu)
QK非對(duì)稱變換
雙線性點(diǎn)積模型,引入非對(duì)稱性,更具健壯性(Attention mask對(duì)角元素值不一定是最大的,也就是說當(dāng)前位置對(duì)自身的注意力得分不一定最高)。
Scaled Dot Product
為什么是縮放點(diǎn)積,而不是點(diǎn)積模型?當(dāng)輸入信息的維度 d 比較高,點(diǎn)積模型的值通常有比較大方差,從而導(dǎo)致 softmax 函數(shù)的梯度會(huì)比較小。因此,縮放點(diǎn)積模型可以較好地解決這一問題。
相較于加性模型,點(diǎn)積模型具備哪些優(yōu)點(diǎn)?常用的Attention機(jī)制為加性模型和點(diǎn)積模型,理論上加性模型和點(diǎn)積模型的復(fù)雜度差不多,但是點(diǎn)積模型在實(shí)現(xiàn)上可以更好地利用矩陣乘積,從而計(jì)算效率更高(實(shí)際上,隨著維度d的增大,加性模型會(huì)明顯好于點(diǎn)積模型)。
Multi-head
https://zhuanlan.zhihu.com/p/76912493
多頭機(jī)制為什么有效?
1.類似于CNN中通過多通道機(jī)制進(jìn)行特征選擇;
2.Transformer中先通過切頭(spilt)再分別進(jìn)行Scaled Dot-Product Attention,可以使進(jìn)行點(diǎn)積計(jì)算的維度d不大(防止梯度消失),同時(shí)縮小attention mask矩陣。
FFN
Transformer在拋棄了 LSTM 結(jié)構(gòu)后,FFN 中的 ReLU成為了一個(gè)主要的提供非線性變換的單元。
激活函數(shù)
https://zhuanlan.zhihu.com/p/73214810
tanh
相比Sigmoid函數(shù), tanh的輸出范圍時(shí)(-1, 1),解決了Sigmoid函數(shù)的不是zero-centered輸出問題;冪運(yùn)算的問題仍然存在;tanh導(dǎo)數(shù)范圍在(0, 1)之間,相比sigmoid的(0, 0.25),梯度消失(gradient vanishing)問題會(huì)得到緩解,但仍然還會(huì)存在。
要點(diǎn): Xavier初始化、公式、導(dǎo)數(shù)
relu
相比Sigmoid和tanh,ReLU摒棄了復(fù)雜的計(jì)算,提高了運(yùn)算速度。解決了梯度消失問題,收斂速度快于Sigmoid和tanh函數(shù)
缺點(diǎn):爆炸梯度(通過梯度裁剪來解決) 如果學(xué)習(xí)率過大,會(huì)出現(xiàn)dead relu的不可逆情況 — 激活為0時(shí)不進(jìn)行學(xué)習(xí)(通過加參數(shù)的ReLu解決) 激活值的均值和方差不是0和1。(通過從激活中減去約0.5來部分解決這個(gè)問題。在fastai的視頻力有個(gè)更好的解釋)
Leaky relu:增加了參數(shù)要點(diǎn):He初始化、公式、導(dǎo)數(shù)
gelu
https://zhuanlan.zhihu.com/p/100175788
https://blog.csdn.net/liruihongbob/article/details/86510622
ReLu:缺乏隨機(jī)因素,只用0和1
https://www.cnblogs.com/shiyublog/p/11121839.html
GeLu:在激活中引入了隨機(jī)正則的思想,根據(jù)當(dāng)前input大于其余inputs的概率進(jìn)行隨機(jī)正則化,即為在mask時(shí)依賴輸入的數(shù)據(jù)分布,即x越小越有可能被mask掉,因此服從bernoulli(Φ(x))
高斯誤差線性單元:
對(duì)于每一個(gè)輸入 x,其服從于標(biāo)準(zhǔn)正態(tài)分布 N(0, 1),它會(huì)乘上一個(gè)伯努利分布 Bernoulli(Φ(x)),其中Φ(x) = P(X ≤ x)。這么選擇是因?yàn)樯窠?jīng)元的輸入趨向于正太分布,這么設(shè)定使得當(dāng)輸入x減小的時(shí)候,輸入會(huì)有一個(gè)更高的概率被dropout掉。
Gelu(x) = xΦ(x) = xP(X ≤ x)
sigmoid
激活函數(shù)計(jì)算量大(在正向傳播和反向傳播中都包含冪運(yùn)算和除法);
反向傳播求誤差梯度時(shí),求導(dǎo)涉及除法;
Sigmoid的輸出不是0均值(即zero-centered);這會(huì)導(dǎo)致后一層的神經(jīng)元將得到上一層輸出的非0均值的信號(hào)作為輸入,隨著網(wǎng)絡(luò)的加深,會(huì)改變數(shù)據(jù)的原始分布
優(yōu)點(diǎn):
激活函數(shù)計(jì)算量大(在正向傳播和反向傳播中都包含冪運(yùn)算和除法);反向傳播求誤差梯度時(shí),求導(dǎo)涉及除法;Sigmoid的輸出不是0均值(即zero-centered);這會(huì)導(dǎo)致后一層的神經(jīng)元將得到上一層輸出的非0均值的信號(hào)作為輸入,隨著網(wǎng)絡(luò)的加深,會(huì)改變數(shù)據(jù)的原始分布
softmax
sigmoid是softmax的特例:
https://blog.csdn.net/weixin_37136725/article/details/53884173
損失函數(shù)
分類
0-1 loss
hinge loss
sigmoid loss
cross entropy
求導(dǎo):
https://zhuanlan.zhihu.com/p/60042105
回歸
square loss
對(duì)異常點(diǎn)敏感
absolute loss
對(duì)異常點(diǎn)魯棒,但是y=f時(shí)不可導(dǎo)
Huber loss
優(yōu)化算法
求解析解:凸函數(shù)
迭代法
一階法:梯度下降
https://zhuanlan.zhihu.com/p/111932438
SGD:
數(shù)據(jù)要shuffle 一開始重j去采用較大的學(xué)習(xí)速率 ,當(dāng)誤差曲線進(jìn)入平臺(tái)期后,;成小學(xué)習(xí)速菜做更精細(xì)的調(diào)整。最優(yōu)的學(xué)習(xí)速 率方案也通常需要調(diào)參才能得到。
隨機(jī)梯度下降法無法收斂 1.batch size太小,震蕩 2.峽谷和鞍點(diǎn)
Adam:
指數(shù)加權(quán):
1.不用像mean一樣統(tǒng)計(jì)個(gè)數(shù)重新計(jì)算avg
2.歷史久遠(yuǎn)的權(quán)重會(huì)呈指數(shù)衰減
動(dòng)量=慣性保持:累加了之前步的速度
1.增強(qiáng)了整體方向的速度,加快收斂
2.消減了錯(cuò)誤方向的速度,減少震蕩
AdaGrad=環(huán)境感知:根據(jù)不同參數(shù)的一些經(jīng)驗(yàn)性判斷,自適應(yīng)地確定參數(shù)的學(xué)習(xí)速率,不同參數(shù)的重新步幅是不同的。
1.更新頻率低的參數(shù)可以有較大幅度的更新,更新頻率高的步幅可以減小。AdaGrad方法采用 “歷史梯度平方和”來衡量不同參數(shù)的梯度的稀疏性 3 取值越小表明越稀疏
參數(shù)中每個(gè)維度的更新速率都不一樣!!!
2.隨著時(shí)間的推移,學(xué)習(xí)率越來越小,保證了結(jié)果的最終收斂
缺點(diǎn):即使Adam有自適應(yīng)學(xué)習(xí)率,也需要調(diào)整整體學(xué)習(xí)率(warmup)
AdamW是Adam在權(quán)重上使用了L2正則化,這樣小的權(quán)重泛化性能更好。
二階法:牛頓法
在高維情況下, Hessian ~E 陣求逆的計(jì)算復(fù)雜度很大 3 而且當(dāng)目標(biāo)函數(shù)非口時(shí),二階法有可能會(huì)收 斂到鞍點(diǎn)( Saddle Point ) 。
鞍點(diǎn):一個(gè)不是局部最小值的駐點(diǎn)(一階導(dǎo)數(shù)為0的點(diǎn))稱為鞍點(diǎn)。數(shù)學(xué)含義是:目標(biāo)函數(shù)在此點(diǎn)上的梯度(一階導(dǎo)數(shù))值為 0, 但從改點(diǎn)出發(fā)的一個(gè)方向是函數(shù)的極大值點(diǎn),而在另一個(gè)方向是函數(shù)的極小值點(diǎn)。
正則化
修改數(shù)據(jù)
增加數(shù)據(jù)
label smoothing
修改結(jié)構(gòu):Normalisation
Batchnorm:
為什么對(duì)NN層中歸一化?
隨著網(wǎng)絡(luò)訓(xùn)練的進(jìn)行 , 每個(gè)隱層的參數(shù)變化使得后一層的輸入 發(fā)生變化 3 從而每-批訓(xùn)練數(shù)據(jù)的分布也隨之改變 3 致使網(wǎng)絡(luò)在每次迭 代中都需要擬合不罔的數(shù)據(jù)分布,增大訓(xùn)練的復(fù)雜度以及過擬合的風(fēng)險(xiǎn)。
為什么增加新的分布?
以Sigmoid函數(shù)為例,批量歸一化 之后數(shù)據(jù)整體處于函數(shù)的非飽和區(qū)域,只包含線性變?cè)?#xff0c;破壞了之前學(xué) 習(xí)到的特征分布 。
在CNN的應(yīng)用:
在全連接網(wǎng)絡(luò)中是對(duì)每個(gè)神經(jīng)元進(jìn)行歸一化,也就是每個(gè)神經(jīng)元都會(huì)學(xué)習(xí)一個(gè)γ和β。批量歸一化在卷積神經(jīng)網(wǎng)絡(luò)中應(yīng)用時(shí),需要注意卷積神經(jīng)網(wǎng)絡(luò)的參數(shù)共享機(jī)制 。每一個(gè)卷積核的參數(shù)在不同位置的楠經(jīng)元當(dāng)中是共享 的, 因此也應(yīng)該被一起歸一化。在卷積中,每層由多少個(gè)卷積核,就學(xué)習(xí)幾個(gè)γ和β
預(yù)測:
在預(yù)測時(shí)無法計(jì)算均值和方差,通常需要在訓(xùn)練時(shí)根據(jù)mini-batch和指數(shù)加權(quán)平均計(jì)算,直接用于預(yù)測
Layernorm
對(duì)比BatchNorm:
1.對(duì)于RNN來說,sequence的長度是不一致的,換句話說RNN的深度不是固定的,不同的time-step需要保存不同的statics特征,可能存在一個(gè)特殊sequence比其他sequence長很多,這樣training時(shí),計(jì)算很麻煩。
2.不依賴batch size:在hidden size的維度進(jìn)行l(wèi)ayernorm,跟batch和seq_len無關(guān)。beta和gamma的維度都是(hidden_size,),每個(gè)神經(jīng)元有自己的均值和方差,因?yàn)椴煌瑔卧遣煌膄eature,量綱不一樣。normalisaion通常在非線性函數(shù)之前,LN在BERT中主要起到白化的作用,增強(qiáng)模型穩(wěn)定性(如果刪除則無法收斂)。
修改結(jié)構(gòu):Dropout
本質(zhì)上是模型集成。
實(shí)現(xiàn):1.訓(xùn)練時(shí)不動(dòng),預(yù)測時(shí)乘p 2.反向傳播傳播時(shí)除p,預(yù)測不動(dòng)。
修改結(jié)構(gòu):weight decay
在更新w時(shí)減去一個(gè)常數(shù),跟L2求導(dǎo)之后的公式一致
https://bbabenko.github.io/weight-decay/Weight decay和L2正則在SGD情況下等價(jià),Adam下不等:https://zhuanlan.zhihu.com/p/40814046
權(quán)重越大懲罰應(yīng)該越大,但adam的adagrad調(diào)整使得懲罰變小
修改結(jié)構(gòu):正則項(xiàng)
L1
稀疏解的好處:1.特征選擇,減少計(jì)算 2.避免過擬合,增強(qiáng)魯棒性
解空間的解釋:加上了菱形約束,容易在尖角處碰撞出解
貝葉斯角度解釋:加了laplace分布,在0點(diǎn)的概率要更高
L2
解空間角度:加了球形約束,等高線切在圓上貝葉斯角度:加了高斯分布,在0點(diǎn)附近的概率更大且相近
訓(xùn)練技巧
early stopping
warmup
剛開始小一些,防止對(duì)前幾個(gè)batch的過擬合,之后見過了不少數(shù)據(jù),可以慢慢升高。之后參數(shù)基本上穩(wěn)定了,就小學(xué)習(xí)率精細(xì)調(diào)整。
公眾號(hào)后臺(tái)回復(fù)【思維導(dǎo)圖】獲取完整手冊(cè)(Xmind腦圖源文件,學(xué)習(xí)起來更方便(? ?_?)?
總結(jié)
以上是生活随笔為你收集整理的卖萌屋算法工程师思维导图part3—深度学习篇的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OCR完整技术栈10天掌握!教程完全开源
- 下一篇: 你确定自己不是那只猫吗