神经网络 测试集loss不下降_【NLP高频面试题】神经网络及其优化
什么樣的數據不適合用神經網絡學習?
數據集太小,因為神經網絡有效的關鍵就是大量的數據,有大量的參數需要訓練,少量的數據不能充分訓練參數。
數據集沒有局部相關性。目前深度學習應用的領域主要是圖像、語音、自然語言處理,這些領域的共性就是局部相關性。例如:圖像中的像素組成物體,語音中的音位組成單詞,文本數據中的單詞組成句子,而深度學習的本質就是學習局部低層次的特征,然后組合低層次的特征成高層次的特征,得到不同特征之間的空間相關性。
什么是過擬合,什么是欠擬合?
過擬合:模型把數據學習的太徹底,以至于把噪聲數據的特征也學習到了,這樣就會導致在后期測試的時候不能夠很好地識別數據,即不能正確的分類,模型泛化能力太差。
欠擬合:模型沒有很好地捕捉到數據特征,不能夠很好地擬合數據。
神經網絡中的激活函數:對比ReLU與Sigmoid、Tanh的優缺點?
優點:
從計算的角度上,Sigmoid和Tanh激活函數均需要計算指數,復雜度高,而ReLU只需要一個閾值即可得到激活值;
ReLU的非飽和性可以有效地解決梯度消失的問題,提供相對寬的激活邊界。
?ReLU的單側抑制提供了網絡的稀疏表達能力,和人腦的機制類似。
缺點:
ReLU和Sigmoid一樣,它們的輸出是非零中心化的,給后一層的神經網絡引入偏置偏移, 會影響梯度下降的效率。
ReLU有哪些變種?
Leaky ReLU、ELU以及softplus函數。
卷積神經網絡相比于前饋神經網絡,由哪些部分構成?各部分作用分別是什么?
如果用全連接前饋網絡來處理圖像時,會存在以下兩個問題:
參數太多;
很難提取局部不變特征。
卷積神經網絡一般是由卷積層、池化層和全連接層交叉堆疊而成的前饋神經網絡,使用反向傳播算法進行訓練。
卷積層的作用:局部連接,權重共享;
池化層(pooling layer),也叫子采樣層(subsampling layer)的作用:進行特征選擇,降低特征數量,并從而減少參數數量。
在深度學習中,網絡層數增多會伴隨哪些問題,怎么解決?
計算資源的消耗(GPU)
模型容易過擬合(Dropout,正則化)
梯度消失/梯度爆炸問題的產生(批歸一化BN、梯度裁剪、網絡結構變更):BN層能對各層的輸出做歸一化,這樣梯度在反向層層傳遞后仍能保持分布穩定,不會出現過小或過大的情況。
degradation退化問題:在神經網絡可以收斂的前提下,隨著網絡深度增加,隨著網絡層數的增多,訓練集loss逐漸下降,然后趨于飽和,這時候再增加網絡深度的話,訓練集loss反而會增大。注意這并不是過擬合,因為在過擬合中訓練loss是一直減小的。(ResNet的初衷,是讓網絡擁有恒等映射的能力,即能夠在加深網絡的時候,至少能保證深層網絡的表現至少和淺層網絡持平。如何做到恒等映射呢?事實上,神經網絡很難擬合潛在的恒等映射函數H(x) = x,但如果把網絡設計為H(x) = F(x) + x,即直接把恒等映射作為網絡的一部分,就可以把問題轉化為學習一個殘差函數F(x) = H(x) - x, 而只要F(x) = 0,就構成了一個恒等映射。?)
循環神經網絡RNN中梯度消失與爆炸的原因是怎樣的?
梯度消失:RNN梯度消失是因為激活函數tanh函數的倒數在0到1之間,反向傳播時更新參數時,當參數W初始化為小于1的數,則多個(tanh函數’ * W)相乘,將導致求得的偏導極小(小于1的數連乘),從而導致遠距離的項對于梯度的貢獻很小,導致遠距離的信息無法學習到。
梯度爆炸:當參數初始化為足夠大,使得tanh函數的倒數乘以W大于1,則將導致偏導極大(大于1的數連乘),從而導致梯度爆炸。
循環神經網絡RNN怎么解決長期依賴問題?
RNN中的長期依賴問題,也就是梯度消失或梯度爆炸可以采取如下方法解決:
RNN梯度爆炸的解決方法:梯度截斷
RNN梯度消失的解決方法;殘差結構、門控機制(LSTM、GRU)
為了RNN中的長期依賴問題,一種非常好的解決方案是引入門控Hochreiter and Schmidhuber 來控制信息的累積速度,包括有選擇地加入新的信息,并有選擇地遺忘之前累積的信息。這一類網絡可以稱為基于門控的循環神經網絡(Gated RNN)。
什么是偏差,什么是方差?
偏差(bias):
度量了學習算法的期望預測與真實結果的偏離程度,即刻畫了算法本身的擬合能力,偏差越大,表明越偏離真實值。
方差(variance):
度量了同樣大小訓練集的變動所導致的學習性能的變化,即刻畫了數據擾動所造成的影響,也就可以理解為衡量模型的穩定性(魯棒性,泛化能力)。
粗略地說,偏差指的是算法在大型訓練集上的錯誤率;方差指的是算法在測試集上的表現低于訓練集的程度。
減小(可避免)偏差的方法有哪些?
加大模型規模(例如神經元/層的數量)
根據誤差分析結果修改輸入特征
減少或者去除正則化(L2 正則化,L1 正則化,dropout)
修改模型架構(比如神經網絡架構)
減小方差的方法有哪些?
添加更多的訓練數據
加入正則化(L2 正則化,L1 正則化,dropout)
加入提前終止(Early stopping,例如根據開發集誤差提前終止梯度下降)
通過特征選擇減少輸入特征的數量和種類
減小模型規模(比如神經元/層的數量)
測試集上是否需要使用dropout?
不可以使用!dropout只能用于訓練集。dropout是訓練過程中應用的一種正則化技術。
使用全批量梯度下降法時,是否有必要打亂訓練數據?
沒有必要。因為每個epoch的梯度計算都會使用整個訓練數據,所以打亂順序也沒有任何影響。
當使用小批量梯度下降時,為什么打亂數據很重要??
如果不打亂數據的順序,那么假設我們訓練一個神經網絡分類器,且只有兩個類別:A和B,假如各個epoch中的所有小批量都是完全相同的類別,這會導致收斂速度變慢,從而導致神經網絡對數據的順序產生傾向性。
神經網絡怎樣進行參數初始化?
Gaussian 分布初始化
Xavier均勻分布初始化
神經網絡參數初始化為0、過大、過小會怎樣?
參數為0:在第一遍前向計算時,所有的隱層神經元的激活值都相同。這樣會導致深層神經元沒有區分性。這種現象也稱為對稱權重現象。
參數過小:參數過小還會使得Sigmoid型激活函數丟失非線性的能力,這樣多層神經網絡的優勢也就不存在了。
參數過大:會導致輸入狀態過大。對于Sigmoid 型激活函數來說,激活值變得飽和,從而導致梯度接近于0。
神經網絡優化方法有哪些?(學習率衰減+梯度方向優化)
調整學習率,使得優化更穩定
調整梯度方向,優化訓練速度
簡要解釋Adam優化器的概念?
兩個基本點:
每個參數進行個性化更新,可加快收斂速度;
動量可避免卡在鞍點上。
什么是神經網絡中的內部協變量偏移(Internal Covariate Shift)?
在深層神經網絡中,中間某一層的輸入是上一層的神經層的輸出。因此,上一層的神經層的參數變化會導致其輸入的分布發生較大的差異。在使用隨機梯度下降來訓練網絡時,每次參數更新都會導致網絡中間每一層的輸入的分布發生改變。越深的層,其輸入的分布會改變得越明顯,那么其參數需要重新學習,這種現象叫做內部協變量偏移。
協變量偏移:協變量是一個統計學概念,是可能影響預測結果的統計變量。在機器學習中,協變量可以看作是輸入。一般的機器學習算法都要求輸入在訓練集和測試集上的分布是相似的。如果不滿足這個要求,這些學習算法在測試集的表現會比較差。?
批量歸一化(Batch Normalization,BN)主要原理是什么?
通過一定的規范化手段,把每層神經網絡任意神經元這個輸入值的分布強行拉回到均值為0方差為1的標準正態分布,其實就是把越來越偏的分布強制拉回比較標準的分布,這樣使得激活輸入值落在非線性函數對輸入比較敏感的區域,這樣輸入的小變化就會導致損失函數較大的變化,意思是這樣讓梯度變大,避免梯度消失問題產生,而且梯度變大意味著學習收斂速度快,能大大加快訓練速度。
然而,如果都通過BN,那么不就跟把非線性函數替換成線性函數效果相同了?
針對此問題,BN為了保證非線性的獲得,對變換后的滿足均值為0方差為1的x又進行了scale加上shift操作,y=scale*x+shift,即每個神經元增加了兩個參數scale和shift參數,這兩個參數通過訓練學到,意思是通過scale和shift把這個值從標準正態分布左移或者右移一點并長胖一點或者變瘦一點,每個實例挪動的程度不一樣,這樣等價于非線性函數的值從正中心周圍的線性區往非線性區動了動。
核心思想:找到一個線性和非線性的較好平衡點,既能享受非線性的較強表達能力的好處,又避免太靠非線性區兩頭使得網絡收斂速度太慢。
流程:
批量歸一化(Batch Normalization,BN)的主要作用是什么?主要原理是什么?
BN 是一種正則化方法(減少泛化誤差),主要作用有:
加速網絡的訓練(緩解梯度消失,支持更大的學習率)
防止過擬合:BN 可以看作在各層之間加入了一個新的計算層,對數據分布進行額外的約束,從而增強模型的泛化能力
降低了參數初始化的要求
BN 在推理階段(inference)是怎么做的?
BN在訓練的時候可以根據Mini-Batch里的若干訓練實例進行激活數值調整,但是在推理(inference)的過程中,很明顯輸入就只有一個實例,看不到Mini-Batch其它實例,那么這時候怎么對輸入做BN呢?
很明顯,一個實例是沒法算實例集合求出的均值和方差的。因此,可以用從所有訓練實例中獲得的統計量來代替Mini-Batch里面m個訓練實例獲得的均值和方差統計量,在推理的時候直接用全局統計量即可。
Batch normalization存在什么缺點?
對batchsize的大小比較敏感,由于每次計算均值和方差是在一個batch上,所以如果batchsize太小,則計算的均值、方差不足以代表整個數據分布;?
BN實際使用時需要計算并且保存某一層神經網絡batch的均值和方差等統計信息,對于對一個固定深度的前向神經網絡(DNN,CNN)使用BN,很方便;但對于RNN來說,sequence的長度是不一致的,換句話說RNN的深度不是固定的,不同的time-step需要保存不同的statics特征,可能存在一個特殊sequence比其他sequence長很多,這樣training時,計算很麻煩。
什么是Layer normalization?
BN與LN的區別在于:
LN中同層神經元輸入擁有相同的均值和方差,不同的輸入樣本有不同的均值和方差;
BN中則針對不同神經元輸入計算均值和方差,同一個batch中的輸入擁有相同的均值和方差。
神經網絡正則化的方法有哪些?
L1 和L2 正則化:L1 和L2 正則化是機器學習中最常用的正 則化方法,通過約束參數的L1 和L2 范數來減小模型在訓練數據集上的過擬合現象Batch Normalization。
提前停止: 當驗證集上的錯誤率不再下降,就停止迭代。
Dropout:集成學習的解釋:每做一次丟棄,相當于從原始的網絡中采樣得到一個子網絡。每次迭代都相當于訓練一個不同的子網絡,這些子網絡都共享原始網絡的參數。那么,最終的網絡可以近似看作是集成了指數級個不同網絡的組合模型。當在循環神經網絡上應用丟棄法,不能直接對每個時刻的隱狀態進行隨機丟棄,這樣會損害循環網絡在時間維度上記憶能力。一種簡單的方法是對非時間維度的連接(即非循環連接)進行隨機丟失.
數據增強:增加數據量,提高模型魯棒性,避免過擬合。目前,數據增強還主要應用在圖像數據上,在文本等其它類型的數據還沒有太好的方法。
標簽平滑:在輸出標簽中添加噪聲來避免模型過擬合。在分類任務中,我們通常對類別標簽的編碼使用one-hot的形式。在深度學習中,通常在全連接層的最后一層,加入一個softmax來計算輸入數據屬于每個類別的概率,并把概率最高的作為這個類別的輸入,然后使用交叉熵作為損失函數。這會導致模型對正確分類的情況獎勵最大,錯誤分類懲罰最大。如果訓練數據能覆蓋所有情況,或者是完全正確,那么這種方式沒有問題。但事實上這不可能,所以這種方式可能會帶來泛化能力差的問題,即過擬合。
解釋GAN的概念?
GAN(Generative Adversarial Network)即生成對抗網絡,通常由兩個神經網絡D和G組成,其中D指的是判別器(Discriminator),而G指生成網絡(Generative Network)。模型的目標是創建數據,例如創建與真實圖像并無二樣的圖像。假設我們想要創建一只貓的對抗示例。神經網絡G負責生成圖像,而神經網絡D則負責判斷圖像是否是貓。G的目標是“愚弄”D——將G的輸出始終分類為貓。
總結
以上是生活随笔為你收集整理的神经网络 测试集loss不下降_【NLP高频面试题】神经网络及其优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 魔兽世界瑟银矿哪里多/瑟银矿哪里采
- 下一篇: 程序员的数学全三册密码_阿波罗50年前成