深度學(xué)習補缺補漏篇!準算法工程師總結(jié)出的超強面經(jīng)(含答案)
極市導(dǎo)讀
作者燈會為21屆中部985研究生,七月份將入職某互聯(lián)網(wǎng)大廠cv算法工程師。在去年灰飛煙滅的算法求職季中,經(jīng)過幾十場不同公司以及不同部門的面試中積累出了CV總復(fù)習系列,此為深度學(xué)習補缺補漏篇。 >>加入極市CV技術(shù)交流群,走在計算機視覺的最前沿
一、深入理解Batch Normalization批標準化
機器學(xué)習領(lǐng)域有個很重要的假設(shè):IID獨立同分布假設(shè),就是假設(shè)訓(xùn)練數(shù)據(jù)和測試數(shù)據(jù)是滿足相同分布的,這是通過訓(xùn)練數(shù)據(jù)獲得的模型能夠在測試集獲得好的效果的一個基本保障。那BatchNorm的作用是什么呢?BatchNorm就是在深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練過程中使得每一層神經(jīng)網(wǎng)絡(luò)的輸入保持相同分布的。
BN的基本思想其實相當直觀:因為深層神經(jīng)網(wǎng)絡(luò)在做非線性變換前的激活輸入值(就是那個x=WU+B,U是輸入)隨著網(wǎng)絡(luò)深度加深或者在訓(xùn)練過程中,其分布逐漸發(fā)生偏移或者變動,之所以訓(xùn)練收斂慢,一般是整體分布逐漸往非線性函數(shù)的取值區(qū)間的上下限兩端靠近(對于Sigmoid函數(shù)來說,意味著激活輸入值WU+B是大的負值或正值),所以這導(dǎo)致反向傳播時低層神經(jīng)網(wǎng)絡(luò)的梯度消失,這是訓(xùn)練深層神經(jīng)網(wǎng)絡(luò)收斂越來越慢的本質(zhì)原因,而BN就是通過一定的規(guī)范化手段,把每層神經(jīng)網(wǎng)絡(luò)任意神經(jīng)元這個輸入值的分布強行拉回到均值為0方差為1的標準正態(tài)分布,其實就是把越來越偏的分布強制拉回比較標準的分布,這樣使得激活輸入值落在非線性函數(shù)對輸入比較敏感的區(qū)域,這樣輸入的小變化就會導(dǎo)致?lián)p失函數(shù)較大的變化,意思是這樣讓梯度變大,避免梯度消失問題產(chǎn)生,而且梯度變大意味著學(xué)習收斂速度快,能大大加快訓(xùn)練速度。
BN在訓(xùn)練的時候可以根據(jù)Mini-Batch里的若干訓(xùn)練實例進行激活數(shù)值調(diào)整,但是在推理(inference)的過程中,從所有訓(xùn)練實例中獲得的統(tǒng)計量來代替Mini-Batch里面m個訓(xùn)練實例獲得的均值和方差統(tǒng)計量。
BatchNorm為什么NB呢,關(guān)鍵還是效果好。①不僅僅極大提升了訓(xùn)練速度,收斂過程大大加快;②還能增加分類效果,一種解釋是這是類似于Dropout的一種防止過擬合的正則化表達方式,所以不用Dropout也能達到相當?shù)男Ч?;③另外調(diào)參過程也簡單多了,對于初始化要求沒那么高,而且可以使用大的學(xué)習率等。 總而言之,經(jīng)過這么簡單的變換,帶來的好處多得很,這也是為何現(xiàn)在BN這么快流行起來的原因。
二、拉格朗日乘子法和 KKT 條件
為了方便和好記,就把原來的優(yōu)化問題寫成f(x,y)+λh(x,y)的形式,然后分別對λ,x,y求偏導(dǎo),并且令偏導(dǎo)為0就行了,和之前得到的方程組是一樣的。這種方法叫拉格朗日乘數(shù)法。
-
LCQ:如果 h(x)和g(x)都是形如Ax+b的仿射函數(shù),那么極值一定滿足 KKT 條件。 -
LICQ:起作用的g(x)函數(shù)(即g(x)相當于等式約束的情況)和h(x)函數(shù)在極值點處的梯度要線性無關(guān),那么極值一定滿足 KKT 條件。 -
Slater條件:如果優(yōu)化問題是個凸優(yōu)化問題,且至少存在一個點滿足h(x)=0和g(x)=0,極值一定滿足 KKT 條件。并且滿足強對偶性質(zhì)(下面會講)。
三、L0、L1、L2范式
一般來說,監(jiān)督學(xué)習可以看做最小化下面的目標函數(shù):
其中,第一項L(yi,f(xi;w)) 衡量我們的模型(分類或者回歸)對第i個樣本的預(yù)測值f(xi;w)和真實的標簽yi之前的誤差。因為我們的模型是要擬合我們的訓(xùn)練樣本的嘛,所以我們要求這一項最小,也就是要求我們的模型盡量的擬合我們的訓(xùn)練數(shù)據(jù)。但正如上面說言,我們不僅要保證訓(xùn)練誤差最小,我們更希望我們的模型測試誤差小,所以我們需要加上第二項,也就是對參數(shù)w的規(guī)則化函數(shù)Ω(w)去約束我們的模型盡量的簡單。
正則函數(shù)部分:規(guī)則化函數(shù)Ω(w)也有很多種選擇,一般是模型復(fù)雜度的單調(diào)遞增函數(shù),模型越復(fù)雜,規(guī)則化值就越大。比如,規(guī)則化項可以是模型參數(shù)向量的范數(shù)。然而,不同的選擇對參數(shù)w的約束不同,取得的效果也不同,但我們在論文中常見的都聚集在:L0范數(shù),L1范數(shù),L2范數(shù),跡范數(shù),F(xiàn)robenius范數(shù),核范數(shù)等。
1、L0范數(shù)
L0范數(shù)是指向量中非0的元素的個數(shù)。如果用L0規(guī)則化一個參數(shù)矩陣W,就是希望W中大部分元素是零,實現(xiàn)稀疏。
L0范數(shù)的應(yīng)用:
1)特征選擇:實現(xiàn)特征的自動選擇,去除無用特征。稀疏化可以去掉這些無用特征,將特征對應(yīng)的權(quán)重置為零。
2)可解釋性(interpretability):例如判斷某種病的患病率時,最初有1000個特征,建模后參數(shù)經(jīng)過稀疏化,最終只有5個特征的參數(shù)是非零的,那么就可以說影響患病率的主要就是這5個特征。
2、L1范數(shù)
L1范數(shù)是指向量中各個元素絕對值之和。L1范數(shù)也可以實現(xiàn)稀疏,通過將無用特征對應(yīng)的參數(shù)W置為零實現(xiàn)。
L1范數(shù):
既然L0可以實現(xiàn)稀疏,為什么不用L0,而要用L1呢?個人理解一是因為L0范數(shù)很難優(yōu)化求解(NP難問題),二是L1范數(shù)是L0范數(shù)的最優(yōu)凸近似,而且它比L0范數(shù)要容易優(yōu)化求解。
3、L2范數(shù)
L2范數(shù)是指向量各元素的平方和然后求平方根。,用在回歸模型中也稱為嶺回歸(Ridge regression)。
L2范數(shù):
L2避免過擬合的原理是:讓L2范數(shù)的規(guī)則項
盡可能小,可以使得W每個元素都很小,接近于零,但是與L1不同的是,不會等于0;這樣得到的模型抗干擾能力強,參數(shù)很小時,即使樣本數(shù)據(jù)x發(fā)生很大的變化,模型預(yù)測值y的變化也會很有限。
L2范數(shù)的作用:1)學(xué)習理論的角度:從學(xué)習理論的角度來說,L2范數(shù)可以防止過擬合,提升模型的泛化能力。2)優(yōu)化計算的角度:從優(yōu)化或者數(shù)值計算的角度來說,L2范數(shù)有助于處理 condition number不好的情況下矩陣求逆很困難的問題。
四、L1 Loss& L2 Loss&smooth L1 Loss
1、L1 Loss
L1 我理解成 1 維向量的距離。
使用L1損失函數(shù)也被叫做最小化絕對誤差(Least Abosulote Error)。這 個名稱非常的形象。 就是最小化真實值yi和預(yù)測值 之間差值 的絕對值的和。
這里的 其實就是平均絕對誤差(MAE),使用L1 損失函數(shù)也就是min
公式:
導(dǎo)數(shù):
2、L2 Loss
L2 就是二維空間向量的距離。
公式:
導(dǎo)數(shù):
3、smooth L1 Loss:
公式:
導(dǎo)數(shù):
比較:
1、L1 loss 在零點不平滑,用的較少;L1loss在零點不平滑,學(xué)習慢;2、Smooth L1 Loss 改善了零點不平滑問題。
smooth L1 loss和L1 loss函數(shù)的區(qū)別在于,L1 loss在0點處導(dǎo)數(shù)不唯一,可能影響收斂。smooth L1 loss的解決辦法是在0點附近使用平方函數(shù)使得它更加平滑。
smooth L1 loss讓loss function對于離群點更加魯棒,即:相比于L2損失函數(shù),其對離群點/異常值(outlier)不敏感,梯度變化相對更小,訓(xùn)練時不容易跑飛。
Smooth L1 Loss 相比L1修改零點不平滑問題,而且在x較大的時候不像L2對異常值敏感,是一個緩慢變化的loss;
3、L2 loss:對離群點比較敏感,如果feature 是 unbounded的話,需要好好調(diào)整學(xué)習率,防止出現(xiàn)梯度爆炸的情況。
L2loss學(xué)習快,因為是平方增長,但是當預(yù)測值太大的時候,會在loss中占據(jù)主導(dǎo)位置(如真實值為1,預(yù)測多次,有一次預(yù)測值為100,其余預(yù)測為2)。
4、一般來說,L1正則會制造稀疏的特征,大部分無用特征的權(quán)重會被置為0。L2正則會讓特征的權(quán)重不過大,使得特征的權(quán)重比較平均。
python numpy實現(xiàn)
五、Sigmoid與softmax的區(qū)別
1、Sigmoid函數(shù)
sigmoid常用于二元分類,將二元輸入映射成0和1。
函數(shù):
導(dǎo)數(shù):
sigmoid函數(shù)推導(dǎo):
其實logistic函數(shù)也就是經(jīng)常說的sigmoid函數(shù),它的幾何形狀也就是一條sigmoid曲線(S型曲線)。A logistic function or logistic curve is a common “S” shape (sigmoid curve). 也就是說,sigmoid把一個值映射到0-1之間。
該函數(shù)具有如下的特性:當x趨近于負無窮時,y趨近于0;當x趨近于正無窮時,y趨近于1;當x= 0時,y=0.5.
優(yōu)點: 1.Sigmoid函數(shù)的輸出映射在(0,1)之間,單調(diào)連續(xù),輸出范圍有限,優(yōu)化穩(wěn)定,可以用作輸出層。2.求導(dǎo)容易,處處可導(dǎo),導(dǎo)數(shù)為:f′(x)=f(x)(1?f(x))
缺點: 1.由于其軟飽和性,容易產(chǎn)生梯度消失,導(dǎo)致訓(xùn)練出現(xiàn)問題。2.其輸出并不是以0為中心的。
2、Softmax函數(shù)
公式:
其中 θi和x是列向量,
可能被換成函數(shù)關(guān)于x的函數(shù) fi(x)。
參考鏈接
https://www.cnblogs.com/guoyaohua/p/8724433.html
https://www.cnblogs.com/xinchen1111/p/8804858.html
https://zhuanlan.zhihu.com/p/51912576
https://blog.csdn.net/hejunqing14/article/details/48980321/
如果覺得有用,就請分享到朋友圈吧!
公眾號后臺回復(fù)“79”獲取CVPR 2021:TransT 直播鏈接~
# 極市原創(chuàng)作者激勵計劃 #
