lstm不收敛_20道深度学习面试题,有你不知道的吗?
前言
來源于GitHub上大神整理的20到深度學習非常經典的20問,一起來看看吧!
(1)CNN權值共享問題
首先權值共享就是濾波器共享,濾波器的參數是固定的,即是用相同的濾波器去掃一遍圖像,提取一次特征特征,得到feature?map。在卷積網絡中,學好了一個濾波器,就相當于掌握了一種特征,這個濾波器在圖像中滑動,進行特征提取,然后所有進行這樣操作的區域都會被采集到這種特征,就好比上面的水平線。
(2)CNN結構特點
局部連接,權值共享,池化操作,多層次結構。
局部連接使網絡可以提取數據的局部特征
權值共享大大降低了網絡的訓練難度,一個Filter只提取一個特征,在整個圖片(或者語音/文本) 中進行卷積
池化操作與多層次結構一起,實現了數據的降維,將低層次的局部特征組合成為較高層次的特征,從而對整個圖片進行表示。
(3)什么樣的數據集不適合深度學習
數據集太小,數據樣本不足時,深度學習相對其它機器學習算法,沒有明顯優勢。
數據集沒有局部相關特性,目前深度學習表現比較好的領域主要是圖像/語音/自然語言處理等領域,這些領域的一個共性是局部相關性。圖像中像素組成物體,語音信號中音位組合成單詞,文本數據中單詞組合成句子,這些特征元素的組合一旦被打亂,表示的含義同時也被改變。對于沒有這樣的局部相關性的數據集,不適于使用深度學習算法進行處理。舉個例子:預測一個人的健康狀況,相關的參數會有年齡、職業、收入、家庭狀況等各種元素,將這些元素打亂,并不會影響相關的結果。
(4)什么造成梯度消失問題
神經網絡的訓練中,通過改變神經元的權重,使網絡的輸出值盡可能逼近標簽以降低誤差值,訓練普遍使用BP算法,核心思想是,計算出輸出與標簽間的損失函數值,然后計算其相對于每個神經元的梯度,進行權值的迭代。
梯度消失會造成權值更新緩慢,模型訓練難度增加。造成梯度消失的一個原因是,許多激活函數將輸出值擠壓在很小的區間內,在激活函數兩端較大范圍的定義域內梯度為0,造成學習停止。
(5)Overfitting怎么解決
??????首先所謂過擬合,指的是一個模型過于復雜之后,它可以很好地“記憶”每一個訓練數據中隨機噪音的部分而忘記了去“訓練”數據中的通用趨勢。過擬合具體表現在:模型在訓練數據上損失函數較小,預測準確率較高;但是在測試數據上損失函數比較大,預測準確率較低。
Parameter?Norm?Penalties(參數范數懲罰);Dataset?Augmentation?(數據集增強);Early?Stopping(提前終止);Parameter?Tying?and?Parameter?Sharing?(參數綁定與參數共享);Bagging?and?Other?Ensemble?Methods(Bagging?和其他集成方法);dropout;regularization;?batch?normalizatin。是解決Overfitting的常用手段。
(6)L1和L2區別
??????L1?范數(L1?norm)是指向量中各個元素絕對值之和,也有個美稱叫“稀疏規則算子”(Lasso?regularization)。?比如?向量?A=[1,-1,3],?那么?A?的?L1?范數為?|1|+|-1|+|3|。簡單總結一下就是:
L1?范數:?為?x?向量各個元素絕對值之和。
L2?范數:?為?x?向量各個元素平方和的?1/2?次方,L2?范數又稱?Euclidean?范數或?Frobenius?范數
Lp?范數:?為?x?向量各個元素絕對值?p?次方和的?1/p?次方.?在支持向量機學習過程中,L1?范數實際是一種對于成本函數求解最優的過程,因此,L1?范數正則化通過向成本函數中添加?L1?范數,使得學習得到的結果滿足稀疏化,從而方便人類提取特征。
L1?范數可以使權值稀疏,方便特征提取。?L2?范數可以防止過擬合,提升模型的泛化能力。
(7)TensorFlow計算圖
Tensorflow?是一個通過計算圖的形式來表述計算的編程系統,計算圖也叫數據流圖,可以把計算圖看做是一種有向圖,Tensorflow?中的每一個計算都是計算圖上的一個節點,而節點之間的邊描述了計算之間的依賴關系。
(8)BN(批歸一化)的作用
? ? ? (1).?可以使用更高的學習率。如果每層的scale不一致,實際上每層需要的學習率是不一樣的,同一層不同維度的scale往往也需要不同大小的學習率,通常需要使用最小的那個學習率才能保證損失函數有效下降,Batch?Normalization將每層、每維的scale保持一致,那么我們就可以直接使用較高的學習率進行優化。
????(2).?移除或使用較低的dropout。?dropout是常用的防止overfitting的方法,而導致overfit的位置往往在數據邊界處,如果初始化權重就已經落在數據內部,overfit現象就可以得到一定的緩解。論文中最后的模型分別使用10%、5%和0%的dropout訓練模型,與之前的40%-50%相比,可以大大提高訓練速度。
??????(3).?降低L2權重衰減系數。?還是一樣的問題,邊界處的局部最優往往有幾維的權重(斜率)較大,使用L2衰減可以緩解這一問題,現在用了Batch?Normalization,就可以把這個值降低了,論文中降低為原來的5倍。
?????(4).?取消Local?Response?Normalization層。?由于使用了一種Normalization,再使用LRN就顯得沒那么必要了。而且LRN實際上也沒那么work。
? ? ?(5).?Batch Normalization調整了數據的分布,不考慮激活函數,它讓每一層的輸出歸一化到了均值為0方差為1的分布,這保證了梯度的有效性,可以解決反向傳播過程中的梯度問題。目前大部分資料都這樣解釋,比如BN的原始論文認為的緩解了Internal?Covariate?Shift(ICS)問題。
AI項目體驗地址?https://loveai.tech
(9)什么是梯度消失和爆炸,怎么解決?
當訓練較多層數的模型時,一般會出現梯度消失問題(gradient?vanishing?problem)和梯度爆炸問題(gradient?exploding?problem)。注意在反向傳播中,當網絡模型層數較多時,梯度消失和梯度爆炸是不可避免的。
深度神經網絡中的梯度不穩定性,根本原因在于前面層上的梯度是來自于后面層上梯度的乘積。當存在過多的層次時,就出現了內在本質上的不穩定場景。前面的層比后面的層梯度變化更小,故變化更慢,故引起了梯度消失問題。前面層比后面層梯度變化更快,故引起梯度爆炸問題。
解決梯度消失和梯度爆炸問題,常用的有以下幾個方案:
預訓練模型 + 微調
梯度剪切 + 正則化
relu、leakrelu、elu等激活函數
BN批歸一化
CNN中的殘差結構
LSTM結構
(10)RNN循環神經網絡理解
循環神經網絡(recurrent?neural?network,?RNN),?主要應用在語音識別、語言模型、機器翻譯以及時序分析等問題上。在經典應用中,卷積神經網絡在不同的空間位置共享參數,循環神經網絡是在不同的時間位置共享參數,從而能夠使用有限的參數處理任意長度的序列。RNN可以看做作是同一神經網絡結構在時間序列上被復制多次的結果,這個被復制多次的結構稱為循環體,如何設計循環體的網絡結構是RNN解決實際問題的關鍵。?RNN的輸入有兩個部分,一部分為上一時刻的狀態,另一部分為當前時刻的輸入樣本。
訓練過程中模型不收斂,是否說明這個模型無效,致模型不收斂的原因有哪些?
不一定。導致模型不收斂的原因有很多種可能,常見的有以下幾種:
沒有對數據做歸一化。
沒有檢查過你的結果。這里的結果包括預處理結果和最終的訓練測試結果。
忘了做數據預處理。
忘了使用正則化。
Batch?Size設的太大。
學習率設的不對。
最后一層的激活函數用的不對。
網絡存在壞梯度。比如Relu對負值的梯度為0,反向傳播時,0梯度就是不傳播。
參數初始化錯誤。
網絡太深。隱藏層神經元數量錯誤。
更多回答,參考此鏈接。
(11)圖像處理中平滑和銳化操作是什么?
平滑處理(smoothing)也稱模糊處理(bluring),主要用于消除圖像中的噪聲部分,平滑處理常用的用途是用來減少圖像上的噪點或失真,平滑主要使用圖像濾波。在這里,我個人認為可以把圖像平滑和圖像濾波聯系起來,因為圖像平滑常用的方法就是圖像濾波器。?在OpenCV3中常用的圖像濾波器有以下幾種:
方框濾波——BoxBlur函數
均值濾波(鄰域平均濾波)——Blur函數
高斯濾波——GaussianBlur函數
中值濾波——medianBlur函數
雙邊濾波——bilateralFilter函數?圖像銳化操作是為了突出顯示圖像的邊界和其他細節,而圖像銳化實現的方法是通過各種算子和濾波器實現的——Canny算子、Sobel算子、Laplacian算子以及Scharr濾波器。
(12)VGG使用2個3*3卷積的優勢在哪里?
? ? ?(1).?減少網絡層參數。用兩個33卷積比用1個55卷積擁有更少的參數量,只有后者的2?3?35?5=0.72。但是起到的效果是一樣的,兩個33的卷積層串聯相當于一個55的卷積層,感受野的大小都是5×5,即1個像素會跟周圍5*5的像素產生關聯。
? ? ?(2).?更多的非線性變換。2個33卷積層擁有比1個55卷積層更多的非線性變換(前者可以使用兩次ReLU激活函數,而后者只有一次),使得卷積神經網絡對特征的學習能力更強。
? ? paper中給出的相關解釋:三個這樣的層具有7×7的有效感受野。那么我們獲得了什么?例如通過使用三個3×3卷積層的堆疊來替換單個7×7層。首先,我們結合了三個非線性修正層,而不是單一的,這使得決策函數更具判別性。其次,我們減少參數的數量:假設三層3×3卷積堆疊的輸入和輸出有C個通道,堆疊卷積層的參數為3(32C2)=27C2個權重;同時,單個7×7卷積層將需要72C2=49C2個參數,即參數多81%。這可以看作是對7×7卷積濾波器進行正則化,迫使它們通過3×3濾波器(在它們之間注入非線性)進行分解。
此回答可以參考TensorFlow實戰p110,網上很多回答都說的不全。
(13)Relu比Sigmoid效果好在哪里?
ReLU激活函數公式如下:
relu函數方程?ReLU?的輸出要么是?0,?要么是輸入本身。雖然方程簡單,但實際上效果更好。在網上看了很多版本的解釋,有從程序實例分析也有從數學上分析,我找了個相對比較直白的回答,如下:?(1).?ReLU函數計算簡單,可以減少很多計算量。反向傳播求誤差梯度時,涉及除法,計算量相對較大,采用ReLU激活函數,可以節省很多計算量;?(2).?避免梯度消失問題。對于深層網絡,sigmoid函數反向傳播時,很容易就會出現梯度消失問題(在sigmoid接近飽和區時,變換太緩慢,導數趨于0,這種情況會造成信息丟失),從而無法完成深層網絡的訓練。?(3).?可以緩解過擬合問題的發生。Relu會使一部分神經元的輸出為0,這樣就造成了網絡的稀疏性,并且減少了參數的相互依存關系,緩解了過擬合問題的發生。
參考鏈接
https://www.twblogs.net/a/5c2dd30fbd9eee35b21c4337/zh-cn
(14)神經網絡中權值共享的理解?
權值(權重)共享這個詞是由LeNet5模型提出來的。以CNN為例,在對一張圖偏進行卷積的過程中,使用的是同一個卷積核的參數。?比如一個3×3×1的卷積核,這個卷積核內9個的參數被整張圖共享,而不會因為圖像內位置的不同而改變卷積核內的權系數。說的再直白一些,就是用一個卷積核不改變其內權系數的情況下卷積處理整張圖片(當然CNN中每一層不會只有一個卷積核的,這樣說只是為了方便解釋而已)。
參考資料
https://blog.csdn.net/chaipp0607/article/details/73650759
對fine-tuning(微調模型的理解),為什么要修改最后幾層神經網絡權值?
使用預訓練模型的好處,在于利用訓練好的SOTA模型權重去做特征提取,可以節省我們訓練模型和調參的時間。
至于為什么只微調最后幾層神經網絡權重,是因為:?(1).?CNN中更靠近底部的層(定義模型時先添加到模型中的層)編碼的是更加通用的可復用特征,而更靠近頂部的層(最后添加到模型中的層)編碼的是更專業業化的特征。微調這些更專業化的特征更加有用,它更代表了新數據集上的有用特征。?(2).?訓練的參數越多,過擬合的風險越大。很多SOTA模型擁有超過千萬的參數,在一個不大的數據集上訓練這么多參數是有過擬合風險的,除非你的數據集像Imagenet那樣大。
(15)什么是dropout?
dropout可以防止過擬合,dropout簡單來說就是:我們在前向傳播的時候,讓某個神經元的激活值以一定的概率p停止工作,這樣可以使模型的泛化性更強,因為它不會依賴某些局部的特征。
dropout具體工作流程
以?標準神經網絡為例,正常的流程是:我們首先把輸入數據x通過網絡前向傳播,然后把誤差反向傳播一決定如何更新參數讓網絡進行學習。使用dropout之后,過程變成如下:
(1).?首先隨機(臨時)刪掉網絡中一半的隱藏神經元,輸入輸出神經元保持不變(圖3中虛線為部分臨時被刪除的神經元);?(2).?然后把輸入x通過修改后的網絡進行前向傳播計算,然后把得到的損失結果通過修改的網絡反向傳播。一小批訓練樣本執行完這個過程后,在沒有被刪除的神經元上按照隨機梯度下降法更新對應的參數(w,b);?(3).?然后重復這一過程:
恢復被刪掉的神經元(此時被刪除的神經元保持原樣沒有更新w參數,而沒有被刪除的神經元已經有所更新)
從隱藏層神經元中隨機選擇一個一半大小的子集臨時刪除掉(同時備份被刪除神經元的參數)。
對一小批訓練樣本,先前向傳播然后反向傳播損失并根據隨機梯度下降法更新參數(w,b)?(沒有被刪除的那一部分參數得到更新,刪除的神經元參數保持被刪除前的結果)。
dropout在神經網絡中的應用
(1). 在訓練模型階段
不可避免的,在訓練網絡中的每個單元都要添加一道概率流程,標準網絡和帶有dropout網絡的比較圖如下所示:
(2). 在測試模型階段
預測模型的時候,輸入是當前輸入,每個神經單元的權重參數要乘以概率p。
如何選擇dropout 的概率
input?的dropout概率推薦是0.8,?hidden?layer?推薦是0.5,?但是也可以在一定的區間上取值。(All?dropout?nets?use?p?=?0.5?for?hidden?units?and?p?=?0.8?for?input?units.)
(16)移動端深度學習框架知道哪些,用過哪些?
知名的有TensorFlow?Lite、小米MACE、騰訊的ncnn等,目前都沒有用過。
(17)如何提升網絡的泛化能力
和防止模型過擬合的方法類似,另外還有模型融合方法。
BN算法,為什么要在后面加加伽馬和貝塔,不加可以嗎?
最后的“scale?and?shift”操作則是為了讓因訓練所需而“刻意”加入的BN能夠有可能還原最初的輸入。不加也可以。
(18)激活函數的作用
激活函數實現去線性化。神經元的結構的輸出為所有輸入的加權和,這導致神經網絡是一個線性模型。如果將每一個神經元(也就是神經網絡的節點)的輸出通過一個非線性函數,那么整個神經網絡的模型也就不再是線性的了,這個非線性函數就是激活函數。?常見的激活函數有:ReLU函數、sigmoid函數、tanh函數。
(19)卷積層和池化層有什么區別
卷積層有參數,池化層沒有參數
經過卷積層節點矩陣深度會改變,池化層不會改變節點矩陣的深度,但是它可以縮小節點矩陣的大小
(20)卷積層參數數量計算方法
假設輸入層矩陣維度是96963,第一層卷積層使用尺寸為55、深度為16的過濾器(卷積核尺寸為55、卷積核數量為16),那么這層卷積層的參數個數為553*16+16=1216個。
猜您喜歡往期精選▼1.?【個人整理】faster-RCNN的訓練過程以及關鍵點總結
2.【個人整理】faster-RCNN的核心構件——RPN區域推薦網絡(二)
3.【個人整理】faster-RCNN的背景、結構以及大致實現架構(一)
4.“996工作制”是誰的如意算盤?
掃描關注
等你來撩
熱愛生活的人
終將被生活熱愛
總結
以上是生活随笔為你收集整理的lstm不收敛_20道深度学习面试题,有你不知道的吗?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最美的十大精典爱情句子
- 下一篇: .net控件FreeTextBox使用方