深度學習
1.深度學習是否無所不能?
適合掌握深度學習的任務應具備這樣一些特點:
(1)具備大量樣本數據。如果樣本數據難以獲取或者數量太少,我們認為就不適合深度學習技術解決
(2)樣本數據對場景的覆蓋度足夠完善。深度學習模型的效果完全依賴樣本數據表現,如果出現樣本數據外的情況,模型的推廣性會變差
(3)結果對可解釋性的要求不高。如果應用場景不僅要機器能夠完成某項任務,還需對完成過程有明確的可解釋性,這樣的場景就不那么適合深度學習。
2.深度學習的基本流程
(1)模型搭建
(2)數據預處理
(3)訓練模型
(4)結果可視化
(5)測試(預測)
3.常見的CNN模型有哪些?各有什么優缺點,如何選擇模型
【1】用於圖像分類問題的卷積神經網絡架構正則表達式:
輸入層-->(卷積層+ -->池化層?) + --> 全連接層+
一般不會連續使用超過三個卷積層。部分論文中發現可以通過調整卷積層步長來代替池化層的減少參數作用,有些網絡中沒有池化層。卷積神經網絡在輸出之前一般有着1-2個全連接層;每經過一次池化,卷積核的深度一般會乘以2倍(逐層遞增);卷積步長一般為1;卷積核的尺寸大小一般不超過5;池化層的步長一般為2或者3;步長一般為2或者3;
【2】模型的另一種設計模式(Inception)
將不同的卷積層通過並聯的方式結合在一起。每條之路使用不同的卷積核尺寸(原始圖像通過填充可以使得卷積后的feature map大小一致)
(1)LeNet5(1998)
lecun大神設計的第一個卷積神經網絡,結構:(7層)卷積+池化+卷積+池化+三個全連接層,第一個成功應用於數字識別問題的CNN
(2)AlexNet(2012)
Hinton跟其學生在2012提出。特點:引入了ReLU和dropout,引入數據增強、池化相互之間有覆蓋,三個卷積一個最大池化+三個全連接層
(3)ZF Net(2013)
(4)VGGNet(2014)
采用1x1和3x3的卷積核以及2x2的最大池化使得層數變得更深。常用VGGNet-16和VGGNet19
優點:(1)模型網絡簡潔:使用統一的3x3卷積核+2x2的maxpool(2)幾個小的卷積核效果比一個大的卷積核效果好原因:更多的激活函數,更多的非線性,模型提取特征更加深層;同時參數更少(3)模型變得更深,如此可以提高網絡的性能
缺點:(1)耗費更多的計算資源,更多的參數,更多的內存,因為有三個全連接層
(5)Google Net(2014 Inception v1)
這個在控制了計算量和參數量的同時,獲得了比較好的分類性能,和上面相比有幾個大的改進:
【1】去除了最后的全連接層,而是用一個全局的平均池化來取代它;
【2】引入Inception Module,這是一個4個分支結合的結構。所有的分支都用到了11的卷積,這是因為11性價比很高,可以用很少的參數達到非線性和特征變換。
【3】Inception V2第二版將所有的55變成2個33,而且提出來著名的Batch Normalization; (2015)
【4】Inception V3第三版就更變態了,把較大的二維卷積拆成了兩個較小的一維卷積,加速運算、減少過擬合,同時還更改了Inception Module的結構。(2015)
(6)ResNet(2015)
引入殘差模塊,讓模型變得更深
4.LSTM、GRU、RNN又是什么樣的模型結構
LSTM:長短時記憶網絡
RNN:遞歸神經網絡
GRU:
5.常見的數據預處理有哪些
(1)數據增強:翻轉、剪切、加噪聲、調節亮度飽和度色度等
(2)大小調整:NN的輸入節點數是固定的,需要將圖像的大小統一
(3)標准化:消除量綱的影響;加速GD算法的收斂速度;提高模型的精度(KNN)
(4)PCA算法降維:一種無監督的降維算法
(5)圖像編碼:存儲時先是壓縮編碼,用時進行解碼還原成三維矩陣(Tensorflow)
(6)處理標注框:關注需要識別的對象目標
6. 數據增強的方式有哪些?
(1)對圖像數據的翻轉、剪切、加噪聲等
(2)生成模型:GAN生成數據
(3)機器翻譯:翻譯成需要的語種數據
7.訓練模型的基本步驟
(1)初始化權值
(2)前向反饋計算loss
(3)反向傳播計算loss相對權值的梯度
(4)更新權值,梯度下降
(5)直至模型收斂
7.初始化權重的方法有哪些?(如何初始化權重)
(1)一般使用服從的高斯分布(mean=0, stddev=1)或均勻分布的隨機值作為權重的初始化參數;使用 0 作為偏置的初始化參數
(2)一些啟發式方法會根據輸入與輸出的單元數來決定初始值的范圍(均勻分布,Xiver初始化)

(3)隨機正交矩陣、截斷高斯分布(tensorflow里面很常見)
(4)使用pretrain的方法進行初始化
隨機初始化、正太分布初始化、hekaiming的初始化方式、Xiver初始化算法
注意:
(1)不能把神經網絡的參數初始化為0,因為初始化為0,每一層學習到的東西一樣(輸出值一樣),在反向傳播的時候,每層內的神經元也一樣,因為他們的梯度一樣。
(2)簡單的隨機初始化:實際上是從均值為0,方差為1的高斯分布中采樣,當層數加深時,激活函數的輸出值接近0,梯度也會接近0,由此可能產生梯度消失問題。
(3)Xiver初始化:解決隨機初始化的問題。可以有效應對tanh激活函數,但對relu函數無能為力。
基本思想:保持輸入和輸出的方差一致,這樣就避免了所有輸出值都趨向於0
(4)He 初始化:專門針對relu函數的初始化方法。很有效。現在的神經網絡常用relu激活函數,初始化方式常用He 初始化方法。(高斯分布)
基本思想:在ReLU網絡中,假定每一層有一半的神經元被激活,另一半為0,所以,要保持variance不變,只需要在Xavier的基礎上再除以2
(5)BN層的應用可以緩解對初始化的依賴
【參考】
5.前向反饋中設計到哪些操作?
(1)卷積運算(卷積層):對應元素相乘再相加
(2)池化(最大池化與平均池化)
(3)激活函數的選擇
(4)1x1卷積(降維)、BN層、dropout
(5)全連接層
6.引入激活函數的目的是啥?常見的激活函數有哪些?各有什么特點,如何選擇激活函數
目的:是為了向網絡中引入非線性,從而加強網絡的表示能力,解決線性模型無法解決的問題
注:沒有激活函數的神經網絡,每一層的輸出都是輸入的線性組合,是線性模型;不過部分層是純線性的話可以減少參數的數量
為何引入非線性可以加強網絡的表示能力?
神經網絡的萬能近似定理:只要神經網絡具有至少一個非線性隱藏層,那么只要給予網絡足夠數量的隱藏單元,它就可以以任意的精度來近似任何從一個有限維空間到另一個有限維空間的函數 (已經有數學證明)
sigmoid:取值范圍在[0,1]之間,符合概率的取值范圍,在分類問題中比較受歡迎
公式: $\sigma (x) = \frac{1}{1+exp(-x)} $ 取值在0-1之間,關於\((0, \frac{1}{2})\) 對稱
缺點:(1)會出現梯度消失(彌散)現象(2)圖像不是關於原點對稱(3)計算\(exp(-x)\) 值比較慢,耗時
優點:(1)引入非線性,加強網絡的表征能力(2)輸出值在0-1之間,符合概率的取值范圍,在分類中效果比較好
tanh:雙曲正切函數,范圍在[-1,1]之間,形狀同sigmoid
公式:\(tanh(x) = 2\sigma(x) - 1\) 關於原點對稱
缺點:(1)梯度彌散現象沒有解決
優點:(1)關於原點對稱 (2)收斂速度比sigmoid函數快
RELU:小於0時輸出0,大於0時輸出本身
公式:\(f(x) = max(0, x)\)
缺點:(1)梯度彌散問題沒有完全解決 (2)在(-)部分神經元死亡且不會復活
優點:(1)很大程度解決了梯度消失問題(2)收斂速度更快
Leaky ReLU:針對RELU函數的改進,(-)部分改變,解決神經元死亡問題
公式:\(f(x)= \begin{cases} \alpha x& \text{x<0}\\ x& \text{x>=0} \end{cases}\)
maxout:分段線性函數
公式:\(f(x) = max(w^T_1 x + b_1, w^T_2 x + b_2)\)
缺點:(1)參數比較多,本質相當於在結果的后面新加入一個層
優點:(1)解決了RELU的缺點(2)擬合能力非常強,可以擬合任意的凸函數(3)具備relu的優點
Relu跟Sigmoid函數的比較
(1)Relu可以避免梯度消失:
-
sigmoid函數在輸入取絕對值非常大的正值或負值時會出現飽和現象——在圖像上表現為變得很平,此時函數會對輸入的微小變化不敏感——從而造成梯度消失; -
ReLU的導數始終是一個常數——負半區為 0,正半區為 1——所以不會發生梯度消失現象
(2)減緩過擬合
-
ReLU在負半區的輸出為 0。一旦神經元的激活值進入負半區,那么該激活值就不會產生梯度/不會被訓練,造成了網絡的稀疏性——稀疏激活 -
這有助於減少參數的相互依賴,緩解過擬合問題的發生
(3)加速計算:
ReLU的求導不涉及浮點運算,所以速度更快
為什么 ReLU 不是全程可微/可導也能用於基於梯度的學習?
-
雖然從數學的角度看 ReLU 在 0 點不可導,因為它的左導數和右導數不相等;
-
但是在實現時通常會返回左導數或右導數的其中一個,而不是報告一個導數不存在的錯誤。從而避免了這個問題
激活函數的選擇跟初始化方式也是有關系的,激活函數的選擇很重要
7. 1x1卷積有什么作用(也叫Network in Network)
https://www.cnblogs.com/pacino12134/p/10351737.html
(1)實現跨通道的交互和信息整合(卷積都具有的特性)
對於某個卷積層,無論輸入圖像有多少個通道,輸出圖像通道數總是等於卷積核數量!
對多通道圖像做1x1卷積,其實就是將輸入圖像於每個通道乘以卷積系數后加在一起,即相當於把原圖像中本來各個獨立的通道“聯通”在了一起。
(2)降維或者升維: 通過改變卷積核的數量達成降維(升維)的目的;信息通道的壓縮
8.簡單說一下卷積的原理?
卷積層 + 池化層 + 激活函數 + 全連接層
9.什么是過擬合與欠擬合?深度學習中防止過擬合的方式有哪些
欠擬合:是指模型太簡單,不能夠學習到訓練數據集上的內在規律;具體表現為在訓練數據集上取不到足夠低的訓練誤差。
過擬合:模型的學習能力太強,在訓練數據集上可以達到很低的訓練誤差,而在測試集上的誤差卻是比較高,也就是泛化能力比較弱。
防止過擬合的策略:數據增強、dropout、BN層、正則化權重、提早停止訓練模型
10.BN層的原理是什么?在什么位置嵌入BN層
位置:一般在卷積層、全連接層的后面,激活函數前加入BN層
11.BN層的作用有哪些?
(1)防止過擬合
(2)減少初始化的影響
(3)加速網絡的訓練(緩解梯度消失,支持更大的學習率)
12.BN層在訓練、測試時分別是怎么操作的?
13. dropout的原理是什么?一般用在什么位置?為何會 work
以一定的概率隨機使網絡中的節點不工作(相當於丟棄掉),減少網絡的復雜度,防止過擬合。
理解:讓節點不工作之后,可以避免模型太依賴局部特征,指導網絡學習數據的本質共性,可以防止過擬合
dropout一般用在全連接層的后面
dropout防止過擬合的理由
(1)模型在訓練過程中取平均:優點類似集成思想:dropout通過參數共享,相當於集成了經過dropout之后的所有子網絡。集成方法能夠防止過擬合
(2)破壞了網絡層間隱含節點的固定關系,避免模型太依賴局部特征,傾向於學習更加本質的共性特征
(3)神經網絡中不同模型的獨立誤差:隨機初始化的差異、批訓練數據的隨機選擇、超參數的差異等非確定性實現往往足以使得集成中的不同成員具有部分獨立的誤差
集成學習能夠防止過擬合現象原因解析:
(1)每個模型在測試集上取得的誤差不一樣;如果模型成員的誤差是獨立的,集成將顯著提升模型的性能
(2)通過投票裁決(加權方式)可以使得一些負面影響得到消除
14.Dropout 與 Bagging 的不同
- 在 Bagging 的情況下,所有模型都是獨立的;而在 Dropout 的情況下,所有模型共享參數,其中每個模型繼承父神經網絡參數的不同子集。
- 在 Bagging 的情況下,每一個模型都會在其相應訓練集上訓練到收斂。而在 Dropout 的情況下,通常大部分模型都沒有顯式地被訓練;取而代之的是,在單個步驟中我們訓練一小部分的子網絡,參數共享會使得剩余的子網絡也能有好的參數設定。
15.BN層與dropout同時使用效果是否會更好?
dropout有些依賴神經網絡中的隨機性,因為這樣可以使得模型具有獨立的誤差,效果會好
BN層:統一數據的分布,減少模型初始化的影響;感覺有點破壞隨機性,如此看來在BN層之前用dropout不會使效果更好,反而會變差。
論文的解釋:(方差偏移)
當模型狀態由訓練到測試時,Dropout 會使具體神經元的方差產生偏移。但是,BN 在整個測試階段都會保留它在訓練過程學習並累計得到的方差。當在 BN 之前應用 Dropout 時,該方差的不一致(我們將該現象命名為「方差偏移」)造成推理中的數值不穩定性,最終將導致更多的錯誤預測
總的來說就是:方差發生偏移,導致方差不一致,造成推理中的數值不穩定,有更多的錯誤預測
https://www.sohu.com/a/218382470_465975
16.如何結合使用dropout與BN層
(1)在BN層的后面使用dropout,避免BN層對dropout的影響;dropout統一放在softmax前的最后一層上
(2)修改dropout的公式,是的她對方差不那么敏感;比如高斯dropout、均勻dropout,這個方案的效果比上面的方案效果好,更加穩定。
17.什么是正則化?常見正則化有哪些?談談L1正則與L2正則的區別
正則化是指對經驗誤差函數加上約束,正則化參數相當於引入參數的先驗分布,比如L1正則化是引入拉普拉斯先驗;從而使得在優化誤差函數的時候傾向於選擇滿足約束的梯度減少的方向,使最終的解傾向於符合先驗知識;正則化的策略主要是用來防止過擬合,減少測試誤差,增強模型的泛化能力。(本質是以偏差的增加換取方差的減少)
常見的正則化有L1正則化、L2正則化;
區別:
(1)定義
(2)先驗分布
(3)達到的效果
在神經網絡中 通常只是對權重做懲罰,對偏置不懲罰 :因為精確擬合偏置需要的數據量比擬合權重要少得多,偏置僅僅控制一個單變量,數量也比較少,這意味着我們不用懲罰也不會導致太大的方差。另外,正則化偏置有可能會導致明顯的欠擬合
18.如何選擇正則化方式
這個主要看我們正則化的附加目的。雖然都可以用於防止過擬合,但是
(1)L1正則化:傾向於產生稀疏權重,可用於特征選擇
(2)L2正則化,也叫嶺回歸,可以用於減緩變量之間的多重共線性,主要用於防止過擬合
19.L1正則化的先驗為何是拉普拉斯分布,L2為何是高斯分布,怎么理解?
https://blog.csdn.net/m0_38045485/article/details/82147817
https://blog.csdn.net/qq_32742009/article/details/81674021
20.如何降低欠擬合?
這里欠擬合主要是因為模型過於簡單,學習能力不夠強導致的。可以考慮模型復雜化,或者反着過擬合的思路
(1)增加模型的復雜度
比如加入網絡的層數或者神經元的個數;線性模型:加入高次項
(2)減小正則化項的系數
添加正則化項是為了限制模型的學習能力,減小正則化項的系數則可以放寬這個限制
沒有正則化項的模型傾向於選擇更加大的群眾,如此可以更好的擬合數據
(3)加入新的特征
比如交叉特征、多項式特征等
深度學習:因子分解機、Deep-Crossing、自編碼器
21.最大池化與平均池化的區別與聯系
相同點:
(1)都是池化方式,都可以使參數的數量變少、特征變少、降維,
(2)pooling:最大的作用是保持某種不變性(旋轉、平移、伸縮等)
我的理解:
(1)最大池化:一定區域內取最大值,這里可能忽略了這個區域的部分信息,有點相當於提取局部信息
(2)最大池化:可以減少參數誤差造成的均值偏移
(3)平均池化:一定區域內取平均值,這里充分利用了全部的信息,全部求平均,相當於全局信息特征
(4)平均池化:在水平方向求平均,可以減少水平方向上不同視角的影響;平均池化可以減小由於鄰域大小造成的方差誤差
最常用的還是最大池化
有個細節:池化的反向傳播如何操作
(1)平均池化:梯度值平均到每一個像素值
(2)最大池化:用一個變量記錄原始feature map中最大值的位置,傳播的時候傳播到那個位置即可
https://blog.csdn.net/sunflower_sara/article/details/81322048
22.反向傳播的原理是啥?簡單說一下梯度下降法
梯度下降法:梯度下降法是求解不帶約束最優化問題的常用方法;她通過一步步降低損失函數對參數的梯度來尋找局部最優值。特點是實現簡單,但不能保證達到全局最優值,收斂速度也未必是最快的
反向傳播算法:就是用於損失函數計算全部參數梯度的具體方法,其本質是利用鏈式法則對每個參數求偏導
23.權值更新方法有哪些?各有什么優缺點?如何選擇?
(1)隨機梯度下降法(batch-SGD、minibatch-SGD、SGD)
(2)帶動量的SGD算法:加快訓練,有可能跑出局部最優值
(3)Nesterov動量SGD,跟標准的區別在於梯度的計算
(4)AdaGrad
(5)RMSprop
(6)Adam
(7)基於二階梯度的優化方法:牛頓法、共軛梯度、BFGS 等的做法
24.通過什么來評判模型的優越性?
(1)泛化性能
(2)模型訓練速度
25.batchsize的選擇?minibatch是什么?
(1)一般而言:batchsize越大,結果越接近梯度下降法的結果
(2)mnibatch:訓練速度快,同時收斂結果接近GD算法的結果
26.卷積神經網絡的特點是什么?為什么要進行卷積而不是全連接
局部連接,權值共享,池化操作,多層次結構。
(1)權值共享,如此可以減少參數,大大降低了網絡的訓練難度,防止模型過擬合
(2)局部感知:卷積利用的是小的卷積核進行卷積,提取的是局部特征
(3)池化操作與多層次結構,實現了數據的降維,將低層次的局部特征組合成為較高層次的特征,從而對圖像進行表示。
27.卷積神經網絡(深度學習)為何在計算機視覺、語音識別、自然語言處理中如此work?在其他方面是否也可以?
局部相關性
目前深度學習表現比較好的領域主要是圖像/語音/自然語言處理等領域,這些領域的一個共性是局部相關性。圖像中像素組成物體,語音信號中音位組合成單詞,文本數據中單詞組合成句子,這些特征元素的組合一旦被打亂,表示的含義同時也被改變。對於沒有這樣的局部相關性的數據集,不適於使用深度學習算法進行處理。舉個例子:預測一個人的健康狀況,相關的參數會有年齡、職業、收入、家庭狀況等各種元素,將這些元素打亂,並不會影響相關的結果。
28.什么是梯度消失和爆炸?如何解決
梯度消失問題 :本質是激活函數的選擇導致的,如sigmoid函數。在函數的兩端梯度求導結果非常小(飽和區)導致后向傳播過程中由於多次使用到激活函數的導數值使得整體的乘積梯度結果變得越來越小,也就是梯度出現了消失現象。
- 神經網絡的訓練中,通過改變神經元的權重,使網絡的輸出值盡可能逼近標簽以降低誤差值,訓練普遍使用BP算法,核心思想是,計算出輸出與標簽間的損失函數值,然后計算其相對於每個神經元的梯度,進行權值的迭代。
- 梯度消失會造成權值更新緩慢,模型訓練難度增加。造成梯度消失的一個原因是,許多激活函數將輸出值擠壓在很小的區間內,在激活函數兩端較大范圍的定義域內梯度為0,造成學習停止。
梯度爆炸問題
梯度爆炸:同理,出現在激活函數處在激活區,而且權重W過大的情況下。但是梯度爆炸不如梯度消失出現的機會多
解決方法:通過選擇相對較好的激活函數;如RELU激活函數
29.VGG使用2個3*3卷積的優勢在哪里?其他的常用模型類似問題
30.神經網絡中權值共享如何理解?
CNN中的權值共享就是濾波器共享。濾波器的參數是固定的,在提取特征的時候,用濾波器滑動窗口掃描一遍圖像,提取一次特征。權值共享可以很有效地較少神經網絡的參數。
為何要如此權值共享:
(1)減少網絡的參數,防止過擬合
(2)權值共享意味着在特征圖的不同位置使用一樣的特征提取器,可以提取到與位置無關的特征模式。可以這樣做的前提假設是:圖像中一部分的統計特性與其他部分一樣
31.神經網絡中局部感知如何理解?
卷積核只是作用於feature map中的局部區域
受到的啟發:
我們對外界事物的觀察都是由局部到全局,但並不是每個像素每個像素的去認知,而是一塊區域一塊區域的去認識,通過這些區域得到局部信息,然后對這些局部信息的匯總,然后才得到整個全局的信息。
(1)圖像的像素之間也是局部的相關性較強,距離較遠的像素之間相關性較弱
(2)視覺神經元只是接收局部信息,神經元並不對全局信息響應
(3)如此可以有效減少神經網絡的參數
32.卷積層與池化層的區別?全連接層
相同點:
(1)都有卷積核,尺寸大小,步長的選擇
(2)都是針對局部區域。卷積是局部連接,池化是局部區域求值
不同點:
(1)卷積中有參數,而池化過程沒有參數
(2)池化是不跨層進行的,即需要對feature map的每個通道進行池化;而卷積跨層進行運算
全連接層:全連接方式,參數非常之多。
