干货整理!深度学习相关的面试考点
dropout的原理
- 可以把dropout看成是 一種ensemble方法,每次做完dropout相當于從原網絡中找到一個更瘦的網絡
- 強迫神經元和其他隨機挑選出來的神經元共同工作,減弱了神經元節點間的聯合適應性,增強泛化能力
- 使用dropout得到更多的局部簇,同等數據下,簇變多了,因而區分性變大,稀疏性也更大
維數災難
- 高維空間訓練得到的分類器相當于低維空間的一個復雜非線性分類器,這類分類器容易產生過擬合
- 如果一直增加維度,原有的數據樣本會越來越稀疏,要避免過擬合就需要不斷增加樣本
- 數據的稀疏性使得數據的分布在空間上是不同的,在高維空間的中心比邊緣區域具有更大的稀疏性(舉例,正方體和內切圓到超立方體和超球面,隨著維度趨于無窮,超球面體積趨向于0而超立方體體積永遠是1)
偽標簽技術
- 將test數據集中的數據加入到train數據集中,其對應的標簽為基于原有數據集訓練好的模型預測得到的
- 偽標簽技術在一定程度上起到一種正則化的作用。如果訓練開始就直接使用該技術,則網絡可能會有過擬合風險,但是如果經過幾輪訓練迭代后(只是用原有訓練集數據)將訓練集和未打標簽的數據一起進行訓練,則會提升網絡的泛化能力
- 操作過程中一般每個batch中的1/4到1/3的數據為偽標簽數據
為什么SSD對小目標檢測效果不好
- 小目標對應的anchor比較少,其對應的feature map上的pixel難以得到訓練,這也是為什么SSD在augmentation之后精確度上漲(因為crop之后小目標就變為大目標)
- 要檢測小目標需要足夠大的feature map來提供精確特征,同時也需要足夠的語義信息來與背景作區分
Xception,ResNext和ShuffleNet
- ResNext中,作者提到cardinality的概念,表示對通道進行分組
- Xception中,卷積對每一個通道進行單獨計算,也就是cardinality等于通道數,如果有N維通道輸出,那么Cardinality就等于N(depth-wise separable convolution)
- group convolution的優點:卷積操作把所有的通道信息考慮在內,可能是一種信息浪費,卷積參數有限,產生的結構難免會有一定相關性,有可能造成過擬合(類似于全連接層)
- ShuffleNet就對group conv后的通道進行交換,得到更加均勻融合后的通道
繪制ROC的標準和快速方法以及ROC對比PR曲線的優勢
- 標準方法:橫坐標為FPR, 縱坐標為TPR, 設置一個區分正負預測結果的閾值并進行動態調整,從最高得分(實際上是正無窮)開始逐漸下降,描出每個閾值對應的點最后連接
- 快速方法:根據樣本標簽統計出正負樣本數,將坐標軸根據樣本數進行單位分割,根據模型預測結果將樣本進行排序后,從高到低遍歷樣本,每遇到一個正樣本就沿縱軸方向繪制一個單位長度的曲線,反之則沿橫軸,直到遍歷完成
- PR曲線的橫坐標是Recall,縱坐標是Precision,相對于PR曲線來說,當正負樣本發生劇烈變化時,ROC曲線的形狀能夠基本保持不變,而PR曲線的形狀會發生劇烈改變
核函數
- 核函數并不是一種映射,它只是用來計算映射到高維空間后數據內積的一種方法
- 在低維空間中線性不可分的數據集在高維空間中存在線性可分的超平面(這點可以和維數災難中高維空間形成的分類器相當于低維空間中一個非常復雜的非線性分類器產生過擬合聯系起來),但在特征空間中仍要計算內積,因此在原計算式子中代入的不再是x而是φ(x)。計算核函數K時不需要知道具體φ(x)的定義和計算過程。核函數定義為(滿足一定條件)
K(x1, x2) = φ(x1)'φ(x2)
L0、L1和L2范數
- L0范數:很難優化求解(NP難問題)
- L1范數:是L0的最優凸近似(L1是L0的最緊的凸放松),且具有特征自動選擇和使得模型更具解釋性的優點
- L2范數:使得權重接近于0但是不等于0,有利于處理條件數不好情況下矩陣求逆問題(條件數用來衡量病態問題的可信度,也就是當輸入發生微小變化的時候,輸出會發生多大變化,即系統對微小變動的敏感度,條件數小的就是well-conditioned的,大的就是ill-conditioned的),對于線性回歸來說,如果加上L2規則項,原有對XTX(轉置)求逆就變為可能,而目標函數收斂速率的上界實際上是和矩陣XTX的條件數有關,XTX的 condition number 越小,上界就越小,也就是收斂速度會越快;另外從優化的角度來看,加入規則項實際上是將目標函數變成λ強凸,這樣可以保證函數在任意一點都存在一個非常漂亮的二次函數下界,從而能通過梯度更快找到近似解。總結就是:L2范數不但可以防止過擬合,還可以讓我們的優化求解變得穩定和快速。
逆卷積(或者叫轉置卷積)的實質:
- 一般的卷積運算可以看成是一個其中非零元素為權重的稀疏矩陣C與輸入的圖像進行矩陣相乘,反向傳播時的運算實質為C的轉置與loss對輸出y的導數矩陣的矩陣相乘
- 逆卷積的運算過程與卷積正好相反,是正向傳播時做成C的轉置,反向傳播時左成C
空洞卷積及其優點
- pooling操作雖然能增大感受野,但是會丟失一些信息。空洞卷積在卷積核中插入權重為0的值,因此每次卷積中會skip掉一些像素點
- 空洞卷積增大了卷積輸出每個點的感受野,并且不像pooling會丟失信息,在圖像需要全局信息或者需要較長sequence依賴的語音序列問題上有著較廣泛的應用
Fast RCNN中位置損失為何使用Smooth L1
- 表達式為:
- 作者這樣設置的目的是想讓loss對于離群點更加魯棒,相比于L2損失函數,其對離群點、異常值(outlier)不敏感,可控制梯度的量級使訓練時不容易跑飛
Batch Normalization
- 使用BN的原因是網絡訓練中每一層不斷改變的參數會導致后續每一層輸入的分布發生變化,而學習的過程又要使每一層去適應輸入的分布,因此不得不降低網絡的學習率,并且要小心得初始化(internal covariant shift)
- 如果僅通過歸一化方法使得數據具有零均值和單位方差,則會降低層的表達能力(如使用Sigmoid函數時,只使用線性區域)
- BN的具體過程(注意第三個公式中分母要加上epsilon)
- 注意點:在測試過程中使用的均值和方差已經不是某一個batch的了,而是針對整個數據集而言。因此,在訓練過程中除了正常的前向傳播和反向求導之外,我們還要記錄每一個Batch的均值和方差,以便訓練完成之后按照下式計算整體的均值和方差
- 另一個注意點:在arxiv六月份的preprint論文中,有一篇叫做“How Does Batch Normalization Help Optimization?”的文章,里面提到BN起作用的真正原因和改變輸入的分布從而產生穩定性幾乎沒有什么關系,真正的原因是BN使對應優化問題的landscape變得更加平穩,這就保證了更加predictive的梯度以及可以使用更加大的學習率從而使網絡更快收斂,而且不止BN可以產生這種影響,許多正則化技巧都有這種類似影響
Dual Path Network
- ResNet結構通過跨層參數共享和保留中間特征的方式,有效較低特征冗余度,重復利用已有特征,但難以利用高層信息再發掘低層特征
- DenseNet每一層都重新在之前所有層的輸出中重新提取有用信息,可以有效利用高層信息再次發掘底層新特征,但存在特征冗余
- DPN網絡可以理解為在ResNeXt的基礎上引入了DenseNet的核心內容,使得模型對特征的利用更加充分
超參數搜索方法
- 網格搜索:在所有候選的參數選擇中,通過循環遍歷,嘗試每一種可能性,表現最好的參數就是最終的結果
- 貝葉斯優化:貝葉斯優化其實就是在函數方程不知的情況下根據已有的采樣點預估函數最大值的一個算法。該算法假設函數符合高斯過程(GP)
- 隨機搜索:已經發現,簡單地對參數設置進行固定次數的隨機搜索,比在窮舉搜索中的高維空間更有效。這是因為事實證明,一些超參數不通過特征變換的方式把低維空間轉換到高維空間,而在低維空間不可分的數據,到高維空間中線性可分的幾率會高一些。具體方法:核函數,如:高斯核,多項式核等等。
- 基于梯度:計算相對于超參數的梯度,然后使用梯度下降優化超參數。
LR如何解決低維不可分問題
- 通過特征變換的方式把低維空間轉換到高維空間,而在低維空間不可分的數據,到高維空間中線性可分的幾率會高一些。具體方法:核函數,如:高斯核,多項式核等等
Boosting和Bagging
- Boosting主要思想是將一族弱學習器提升為強學習器的方法,具體原理為:先從初始訓練集訓練出一個基學習器,再根據基學習器的表現對訓練樣本分布進行調整,來訓練下一個基學習器,如此重復進行直至學習器數目達到了事先要求,最終進行學習器的加權結合
- Bagging是并行式集成學習方法最著名的代表,具體做法是對樣本進行有放回的采樣,然后基于每個采樣訓練集得到一個基學習器,再將它們進行組合。在預測時,對于分類任務通常使用簡單投票法,對回歸任務使用簡單平均法
梯度下降和牛頓法的區別
- 梯度下降公式如下
- 牛頓法公式如下,其中H為海塞矩陣,其實就是目標函數對參數θ的二階導數。只適用于Hessian矩陣是正定的情況
- 牛頓法:二階優化,收斂速度較快,需要更新一個二階矩陣(計算代價大),對初始值有一定要要求,在非凸優化過程中容易陷入鞍點。
- 梯度下降法:一階優化,收斂速度較慢,容易逃離鞍點,優化過程中需要進行步長調整
DenseNet的要點
- 由于前后層之間的Identity function,有效解決了梯度消失問題,并且強化了特征的重用和傳播
- 相比ResNet輸出通過相加的方式結合從而阻礙信息的傳播,DN通過串聯方式結合
- 串聯要求特征圖大小一致,故把pooling操作放在transition layer中
- 為防止靠后的串聯層輸入通道過多,引入bottleneck layer,即1x1卷積。文中把引入bottleneck layer的網絡成為DenseNet-B
- 在transition layer中進一步壓縮通道個數的網絡成為DN-C(輸入m個通道,則輸出θm個通道,0<θ≤1)。同時包含bottleneck layer的和壓縮過程的網絡稱為DN-BC
常見激活函數特點
- sigmoid:輸入值很大時對應的函數值接近1或0,處于函數的飽和區,導致梯度幾乎為0,造成梯度消失問題
- Relu:解決梯度消失問題,但是會出現dying relu現象,即訓練過程中,有些神經元實際上已經"死亡“而不再輸出任何數值
- Leaky Relu:f = max(αx, x),解決dying relu問題,α的取值較大時比較小時的效果更好。它有一個衍生函數,parametric Leaky Relu,在該函數中α是需要去學習的
- ELU:避免dying神經元,并且處處連續,從而加速SGD,但是計算比較復雜
- 激活函數的選擇順序:ELU>Leaky Relu及其變體>Relu>tanh>sigmoid
Softmax交叉熵損失
使用交叉熵損失的原因是它求導結果簡單,易于計算,最后結果中Softmax損失函數對應于每一項概率的偏導即為通過Softmax計算出的概率向量中對應真正結果的那一維減1。比如通過若干層計算,最后得到某個訓練樣本對應的分類得分為[1, 5, 3],那么通過Softmax計算得到概率分別為[0.015, 0.886, 0.117],假設樣本正確的分類為第二類,則對應每項的偏導為[0.015, 0.886-1, 0.117],根據這個向量就可以進行反向傳播了
mean pooling和max pooling的反向傳播
主要原則是需要保證傳遞的loss(或者梯度)總和不變。
mean pooling的前向傳播就是把一個patch中的值求取平均來做pooling,那么反向傳播的過程也就是把某個元素的梯度等分為n份分配給前一層,這樣就保證池化前后的梯度(殘差)之和保持不變
max pooling的前向傳播是把patch中最大的值傳遞給后一層,而其他像素的值直接被舍棄掉。那么反向傳播也就是把梯度直接傳給前一層某一個像素,而其他像素不接受梯度,也就是為0。max pooling操作和mean pooling操作不同點在于需要記錄下池化操作時到底哪個像素的值是最大,也就是max id,這個變量就是記錄最大值所在位置的,因為在反向傳播中要用到
如何理解卷積、池化等、全連接層等操作
- 卷積的作用:捕獲圖像相鄰像素的依賴性;起到類似濾波器的作用,得到不同形態的feature map
- 激活函數的作用:引入非線性因素,
- 池化的作用:減少特征維度大小,使特征更加可控;減少參數個數,從而控制過擬合程度;增加網絡對略微變換后的圖像的魯棒性;達到一種尺度不變性,即無論物體在圖像中哪個方位均可以被檢測到
1x1大小的卷積核的作用
- 通過控制卷積核個數實現升維或者降維,從而減少模型參數
- 對不同特征進行歸一化操作
- 用于不同channel上特征的融合
以下網址是一些我覺得非常贊的文章,以目標檢測為主
1.關于Faster RCNN一篇非常精彩的博文解說,來自troy labs團隊:
- tryolabs.com/blog/2018/
2.關于one-shot目標檢測原理一篇非常精彩的綜述博文(不過文章真的很長很長...................)
- machinethink.net/blog/o
3.關于目標檢測的幾篇博文(來自Medium一位我很喜歡的大叔,名字叫
Jonathan Hui,目測應該是華人,目前有1.6k的followers)
- Region based類型:medium.com/@jonathan_hu
- one-shot類型:medium.com/@jonathan_hu
- YOLO各個版本:medium.com/@jonathan_hu
4.關于YOLO的一份PPT,解說非常生動形象(不過是針對v1老版本的)
總結
以上是生活随笔為你收集整理的干货整理!深度学习相关的面试考点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全网最全数据分析师干货-python篇
- 下一篇: 机器学习面试中常考的知识点,附代码实现(