深度學習相關問題總結

2021-09-28 12:26:32 字數 2445 閱讀 5425

過擬合相關問題是最基礎、最重要的一類問題,面試經常會碰到。

什麼是過擬合?

模型對於所提供的資料進行一致性假設而使得模型變得過度複雜稱為過擬合。

個人理解:模型過度擬合訓練資料而導致在測試資料上泛化能力弱的現象。

過擬合的危害?

輸出的泛化能力弱。 --> 致命危害

如何降低過擬合?

1)最本質的方法是增加資料集:模型在盡可能多的資料集上進行訓練,可以更好的修正自己。實際中的操作方法是:對資料集隨機新增雜訊。這樣訓練集在重複多輪中也不會使用完全一樣的資料。交叉驗證、pca特徵提取本質上也是增加資料集。

2)採用合適的模型:過於簡單或過於複雜的模型都容易帶來過擬合問題。對於模型設計,公認的乙個深度學習規律是「deeper is better」,但同時容易帶來過擬合問題,並且耗費大量計算資源。所以模型的設計需要合理的取捨。

3)使用dropout:dropout指模型在訓練過程中每次按給定的機率關閉或者忽略某些層的節點。使得模型在使用相同的資料進行訓練時相當於從不同的模型中隨機選擇乙個進行訓練。

4)權重衰減(weight-decay):又稱正則化,具體做法是將權值的大小加入到損失函式中。神經網路的計算核心是反向傳播,即增大的誤差項會對每個神經元的發生影響。而正則化的加入通過對權重值在一定範圍內的修正,使其不要偏離乙個均值太大從而減少過擬合產生。(本人實際沒有使用過此方法)

5)early stopping:實際操作是人為設定乙個範圍,當連續10次準確率在此範圍波動時就停止迴圈。很簡單自然的方法。

6)可變化的學習率:根據模型計算出的準確率進行調整。實際操作是在人為設定的準確率範圍內,達到10次範圍內的波動後,依次將學習率減半,直到最終的學習率降為原始的1/1024時就停止模型的訓練。

個人理解:第5條和第6條的原理,隨著訓練時間的延長,部分神經元已經達到擬合狀態,對其繼續訓練會使得這些已經飽和的神經元繼續增長從而使得模型過擬合。

7)使用batch normalization:即資料在經過卷積層後,進入激勵函式前對其進行一次batch normalization,分批對輸入的資料求取均值和方差之後重新對資料進行歸一化計算。

為什麼使用梯度下降來優化神經網路引數?

深度網路由許多線性層和非線性層堆疊而來,整個深度網路可以視為是乙個復合的非線性多元函式。我們最終目的是希望這個非線性函式很好的完成輸入到輸出之間的對映,即找到讓損失函式取得最小值。所以問題就變成尋找函式最小值,在數學上,很自然的就會想到使用梯度下降來解決。

什麼是梯度消失?產生的原因是什麼?

梯度是乙個向量,函式在該點處沿著該方向變化最快,變化率最大。很容易理解梯度消失即找不到這樣乙個向量了。

對於傳統神經網路,sigmod是常用的激勵函式,sigmoid導數的取值範圍在0~0.25之間,而我們初始化的網路權值|w|通常都小於1,因此,當層數增多時,小於0的值不斷相乘,最後就導致梯度消失的情況出現。

什麼是梯度**?產生的原因是什麼?

梯度**就是由於初始化權值過大,網路層之間的梯度(值大於 1.0)重複相乘導致的指數級增長。

梯度下降和梯度**的解決辦法有哪些?

梯度消失和梯度**本質上是一樣的,都是因為網路層數太深而引發的梯度反向傳播中的連乘效應。

1)換用relu、leakyrelu、elu等啟用函式:

relu:讓啟用函式的導數為1

leakyrelu:包含了relu的幾乎所有有點,同時解決了relu中0區間帶來的影響

elu:和leakyrelu一樣,都是為了解決0區間問題,相對於來,elu計算更耗時一些。

(激勵函式相關可參考深度學習常用啟用函式)

2)batch normalization:

bn本質上是解決傳播過程中的梯度問題

3)resnet殘差結構

4)lstm結構:

lstm不太容易發生梯度消失,主要原因在於lstm內部複雜的「門(gates)」

5)預訓練加finetunning

現在實際操作基本都是直接拿imagenet的預訓練模型直接進行finetunning。

也可稱為『遷移學習』。

6)梯度剪下、正則

這個方案主要是針對梯度**提出的,其思想是設定乙個剪下閾值,如果更新梯度時,梯度超過了這個閾值,那麼就將其強制限制在這個範圍內。這樣可以防止梯度**。

另一種防止梯度**的手段是採用權重正則化,正則化主要是通過對網路權重做正則來限制過擬合,但是根據正則項在損失函式中的形式可以看出,如果發生梯度**,那麼權值的範數就會變的非常大,反過來,通過限制正則化項的大小,也可以在一定程度上限制梯度**的發生。

深度學習相關問題彙總

記錄一下學習過程中的問題,防止遺忘 1.訓練集,驗證集和測試集的區別 train,dev,test。訓練集用以訓練模型獲得引數,驗證集用以防止模型對訓練集過擬合,二者是在訓練過程中可以看到的資料集,而測試集理論上我們是不能看到的,用以檢驗模型效果。2.卷積神經網路中,卷積層為了提取特徵值,可以縮小長...

深度學習學習總結

北京大學人工智慧實踐 tensorflow2.0 學習1 6章 複習1 4章 第4章需要寫乙個部落格 寫4,5,6章 吳恩達深度學習第四步 卷積神經網路 學習1 2周 複習1 2周 殘差網路和inception網路不太懂,目前用不到 三四周是目標定位,人臉識別,神經風格轉換目前用不到 油管最新最熱t...

深度學習總結1

1 開發環境 anaconda spyder 坑 使用時spyder路徑要設定為工作資料夾路徑,否則一下庫找不到。python語句空格視覺化設定 tools perferences editor下開啟show blank space 2 環境安裝pip install mxnet 如果使用jupyt...