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