1. 程式人生 > >深度學習 14. 深度學習調參,CNN引數調參,各個引數理解和說明以及調整的要領。underfitting和overfitting的理解,過擬合的解釋。

深度學習 14. 深度學習調參,CNN引數調參,各個引數理解和說明以及調整的要領。underfitting和overfitting的理解,過擬合的解釋。

本文為原創文章轉載必須註明本文出處以及附上 本文地址超連結以及 博主部落格地址http://blog.csdn.NET/qq_20259459  和 作者郵箱[email protected] )。

(如果喜歡本文,歡迎大家關注我的部落格或者動手點個贊,有需要可以郵件聯絡我)

因為最近一直比較忙所以就有一段時間沒有更新了。
終於今天開始著手寫這篇關於引數的文章了,可以說我自己其實也在一直進行著各種調參而且有了一段時間了。作為自己的見解和相應的相關知識理論將會在這篇文章裡為大家寫出來,以做參考和學習資料。

我們在學習使用深度學習的過程中最最重要的就是調參,而調參的能力是需要長期積累才能形成的,因為每一種資料庫和每一種網路結構都需要不同的引數以達到最佳效果。而尋找這個最佳的引數的過程就叫做調參。

正文:

一. 引數是指那些?

引數其實是個比較泛化的稱呼,因為它不僅僅包括一些數字的調整,它也包括了相關的網路結構的調整和一些函式的調整。下面列舉一下各種引數:

1. 資料處理(或預處理)相關引數:
enrich data(豐富資料庫),
feature normalization and scaling(資料泛化處理),
batch normalization(BN處理),
2. 訓練過程與訓練相關的引數:
momentum term(訓練動量),
number of epoch,
learning rate(學習率),
objective function(衰減函式),
weight initialization(權值初始化),
regularization(正則化相關方法),
3. 網路相關引數:
number of layers,
number of nodes,
number of filters,
classifier(分類器的選擇),

二. 調參的目的以及會出現的問題

首先我們調參有兩個直接的目的:1. 當網路出現訓練錯誤的時候,我們自然需要調整引數。 2. 可以訓練但是需要提高整個網路的訓練準確度。
關於訓練可能會出現的問題彙總:

1. 可能沒法進行有效地訓練,整個網路是錯誤的,完全不收斂(以下圖片全部來源於我的實驗,請勿盜用):


2. 部分收斂


3. 全部收斂但是結果不好:


三. 問題分析理解

在深度學習領域我上面的三個例子可以說是比較全面的概括了問題的種類:完全不收斂,部分收斂,全部收斂但是誤差大。
下面我們先進行問題分析,然後我再介紹如何具體調參:

1. 完全不收斂:

這種問題的出現可以判定兩種原因:1,錯誤的input data,網路無法學習。 2,錯誤的網路,網路無法學習. 

2. 部分收斂:

這種問題的出現是有多種多樣的原因的,但是我們可以總結為:1,underfitting。 2, overfitting
underfittingoverfitting在深度學習中是兩個最最常見的現象,他們的本質是網路分類器的複雜度導致的。
一個過簡單的分類器面對一個複雜的資料就會出現underfitting,舉個例子:比如一個2類分類器他是無法實現XOR的問題的。
一個過複雜的分類器面對一個簡單的資料就會出現overfitting

說的更容易理解一點:
1.underfitting就是網路的分類太簡單了沒辦法去分類,因為沒辦法分類就是沒辦法學到正確的知識。
2.overfitting就是網路的分類太複雜了以至於它可以學習資料中的每一個資訊甚至是錯誤的資訊他都可以學習。

如果我們放在實際運用中我們可以這樣理解:
1.我們有兩個資料A和B,是兩個人的臉的不同環境下10張照片。A我們拿來進行訓練,B則是用來測試,我們希望網路可以從A學習人臉的特徵從而認識什麼是人臉,然後再去判斷B是不是人臉。
2.如果我們使用會導致underfitting的分類器時,這個網路在學習A的時候將根本學不到任何東西,我們本來希望它可以知道A是人臉,但是它卻認為這是個汽車(把A分去不正確的label,錯誤的分類)。
3.而當我們使用會導致overfitting的分類器時,這個網路在學習A的時候不僅可以知道A是人臉,還認為只有A才是人臉,所以當它去判別B的時候它會認為B不是人臉(過度的學習了過於精確的資訊導致無法判別其它資料)。

下面我們再用圖來解釋說明一下這兩個問題:


以及用表格表示一下他們的訓練結果:


3. 全部收斂:

這是個好的開始,接下來我們要做的就是微調一些引數。

四. 針對問題來調參

我在許多其他人的文章看過別人的調參方法的分享和心得,其中有許多人提出使用暴力調參和微調配合使用。這裡我不是很同意這種觀點,因為所謂的暴力調參就是無規律性的盲目的調整,同時調整多個引數,以尋找一個相對能收斂的結果,再進行微調。這種做法是一種拼運氣的做法,運氣好的話這個網路的深度和重要的引數是可以被你找到,運氣不好的好你可能要花更多的時間去尋找什麼是好的結果。而且最終即使有好的結果你自己本身也是不能確認是不是最好的結果。
所以再次我建議我們在調參的時候切忌心浮氣躁,為了好的實驗結果,我們必須一步一步的結果分析,解決問題。

下面我們談談如和調參:
現有的可調引數我已經在(一)中寫出了,而這些引數其實有一些是現在大家預設選擇的,比如啟用函式我們現在基本上都是採用Relu,而momentum一般我們會選擇0.9-0.95之間,weight decay我們一般會選擇0.005, filter的個數為奇數,而dropout現在也是標配的存在。這些都是近年來論文中通用的數值,也是公認出好結果的搭配。所以這些引數我們就沒有必要太多的調整。下面是我們需要注意和調整的引數。

1. 完全不收斂:

請檢測自己的資料是否存在可以學習的資訊,這個資料集中的數值是否泛化(防止過大或過小的數值破壞學習)。
如果是網路的錯誤,則希望調整網路,包括:網路深度,非線性程度,分類器的種類等等。

2. 部分收斂:

underfitting: 
增加網路的複雜度(深度),
降低learning rate,
優化資料集,
增加網路的非線性度(ReLu),
採用batch normalization,
overfitting: 
豐富資料,
增加網路的稀疏度,
降低網路的複雜度(深度),
L1 regularization,
L2 regulariztion,
新增Dropout,
Early stopping,
適當降低Learning rate,
適當減少epoch的次數,

3. 全部收斂:

調整方法就是保持其他引數不變,只調整一個引數。這裡需要調整的引數會有:
learning rate,
minibatch size,
epoch,
filter size,
number of filter,(這裡參見我前面兩篇部落格的相關filter的說明)

五. 大的思路和現在的發展

其實我們知道現在有許多的成功的網路,比如VGGNet和GoogleNet,這兩個就是很劃時代的成功。我們也由此可以發現網路設計或者說網路調參的主方向其實只有兩種:1. 更深層的網路, 2. 更加的複雜的結構。
我們可以參見下面圖片以比較幾個成功網路的獨特之處:

1. AlexNet(深度學習劃時代的成功設計):


2. VGGNet(用小的filter得到更好的非線性和降低網路的權值以及實現了更深的構造):


3. GoogleNet(新的結構的提出受啟發於NiN,網路中的網路同時實現了更深和更非線性):



5. 比較分析:


這裡我們可以看出,不管你怎麼調整網路,調整引數,你的目的只有一個就是讓網路變得更加深層,更加非線性。

至此已經全部介紹完了有關結果分析和引數調整的相關知識和心得,最後我還是希望告訴每一個正在奮力調參的朋友們,調參是個辛苦和乏味的過程,一次次的失敗只是為了更加好的結果。不要氣餒不要放棄,堅持每一次都分析,調參的過程必須是有規律的,切忌不可亂調,這種既得利益的取巧行為是非常不好的習慣。

我們只看到了VGGNet和GoogleNet這種作品的成就,卻沒有看到背後的付出。同樣我們必須保持著創新精神和紮實的理論基礎。這些才是成功的不二法則。

後面我會不定期更新一些其他實用的知識和心得,謝謝大家長期以來的支援。

本文為原創文章轉載必須註明本文出處以及附上 本文地址超連結以及 博主部落格地址http://blog.csdn.NET/qq_20259459  和 作者郵箱[email protected] )。

(如果喜歡本文,歡迎大家關注我的部落格或者動手點個贊,有需要可以郵件聯絡我)

相關推薦

深度學習 14. 深度學習調CNN引數調各個引數理解說明以及調整要領underfittingoverfitting理解解釋

本文為原創文章轉載必須註明本文出處以及附上 本文地址超連結以及 博主部落格地址:http://blog.csdn.NET/qq_20259459  和 作者郵箱( [email prot

深度學習常見策略總結(優化器選擇防止策略)

1. 優化器的選擇  關於深度學習各種優化器的介紹和對比在網上有很多圖文並茂的講解,比如我上一篇博文轉載的文章:深度學習——優化器演算法Optimizer詳解(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)。有需要的

深度學習框架tensorflow學習與應用6(防止dropoutkeep_prob =tf.placeholder(tf.float32))

import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # In[3]: # 載入資料集 mnist = input_data.read_data_sets("MNIST_data",

深度學習---與欠

一、認識過擬合與欠擬合 經典圖示,其中: 圖1:欠擬合表示:模型不能在訓練集上獲得足夠低的訓練誤差,即:沒有學習到; 圖3:過擬合表示:模型的訓練誤差與測試誤差之間差距較大,即:在訓練集上表現好,在測試集和新資料上表現一般,過學習。 二、解決過擬合的方法 深度學習中常見於解

深度學習之減少的可能性

原文地址:一隻鳥的天空,http://blog.csdn.net/heyongluoyao8/article/details/49429629 防止過擬合的處理方法 過擬合   我們都知道,在進行資料探勘或者機器學習模型建立的時候,因為在統計學習中,假設資料滿足獨立同分布

深度學習Trick——用權重約束減輕深層網絡|附(Keras)實現代碼

觀測 介紹 機器 所有 tor 範圍 anti -i int 在深度學習中,批量歸一化(batch normalization)以及對損失函數加一些正則項這兩類方法,一般可以提升模型的性能。這兩類方法基本上都屬於權重約束,用於減少深度學習神經網絡模型對訓練數據

深度學習——問題

表現: 策略: d. 噪聲 overfitting 表現: 訓練集好測試集不好 策略: (1) 資料增多 (2) 模型簡化 (3) 正則化/regularization(以訓練效能為代價) 1. 正則化措施 a. 權值衰減(wei

深度學習(偏差/方差 - 欠/適度/)網路分析技巧

github部落格傳送門 部落格園傳送門 我們稱左邊的為圖一,中間的為圖二,右邊的為圖三 從圖上我們可以看到有兩個資料分佈 , 我們需要將他們進行分類開. 圖一: 處於欠擬合(訓練時間不夠或者網路結構較小的時候產生的) 我們也稱之為高偏差 . 檢測方法: 計算出訓練

深度學習防止的方法

過擬合即在訓練誤差很小,而泛化誤差很大,因為模型可能過於的複雜,使其”記住”了訓練樣本,然而其泛化誤差卻很高,在傳統的機器學習方法中有很大防止過擬合的方法,同樣這些方法很多也適合用於深度學習中,同時深度

吳恩達深度學習筆記(31)-為什麼正則化可以防止

為什麼正則化有利於預防過擬合呢?(Why regularization reduces overfitting?) 為什麼正則化有利於預防過擬合呢?為什麼它可以減少方差問題?我們通過兩個例子來直觀體會一下。 左圖是高偏差,右圖是高方差,中間是Just Right,這幾張圖我們在前面

機器學習深度學習模型的處理方法

過擬合標準定義:給定一個假設空間H,一個假設  h  屬於H,如果存在其他的假設  h’  屬於H,使得在訓練樣例上  h  的錯誤率比  h’  小,但在整個例項分佈上  h’  比  h  的錯誤率小,則假設  h  過度擬合訓練資料。 —-《Machine Learni

[DeeplearningAI筆記]改善深層神經網路1.1_1.3深度學習實用層面_偏差/方差/欠//訓練集/驗證集/測試集

覺得有用的話,歡迎一起討論相互學習~Follow Me 1.1 訓練/開發/測試集 對於一個數據集而言,可以將一個數據集分為三個部分,一部分作為訓練集,一部分作為簡單交叉驗證集(dev)有時候也成為驗證集,最後一部分作為測試集(test).接下來我們開始

深度學習】在Dog Breed Identification中使用Inception-V4遇到的問題解決進展

在Plant Seedlings Classification中自己根據谷歌的paper用keras搭建了Inception-V4,但在Plant比賽中因為資料集較簡單,沒有出現過擬合問題,模型成功收斂。但在Dog比賽

機器學習/深度學習入門:問題

關於神經網路中過擬合的問題小記。 在訓練的時候你的模型是否會出現訓練時速度很慢?或者預測結果與訓練結果相差過大的現象?那我們可能就需要處理一下過擬合的問題了。 當你的模型過於複雜時,比如說輸入引數過多,你的模型就會出現過擬合問題,該模型雖然會在訓練集上表現出較好的預測結果

深度學習與防止的方法

1.什麼是過擬合? 過擬合(overfitting)是指在模型引數擬合過程中的問題,由於訓練資料包含抽樣誤差,訓練時,複雜的模型將抽樣誤差也考慮在內,將抽樣誤差也進行了很好的擬合。 具體表現就是最終模型在訓練集上效果好;在測試集上效果差。模型泛化能力弱。 2.過擬合產

深度學習中解決的方法

1.    正則化(regularization)正則化是指修改學習演算法,使其降低泛化誤差而非訓練誤差。1)     L2正則化,也稱權重衰減(weight decay),正則項為加入正則化後,總的目標函式為:求其偏導:梯度下降更新權重:所以,加入權重衰減後會引起學習規則的

自己動手實現深度學習框架-3 自動分批訓練, 緩解

程式碼倉庫: https://github.com/brandonlyg/cute-dl 目標 為Session類增加自動分批訓練模型的功能, 使框架更好用。 新增緩解過擬合的演算法: L2正則化, 隨機丟棄。 實現自動分批訓練 設計方案 增加Dataset類負責管理資料集, 自動對資料分批。 在Ses

Pytorch_第八篇_深度學習 (DeepLearning) 基礎 [4]---欠與正則化

# 深度學習 (DeepLearning) 基礎 [4]---欠擬合、過擬合與正則化 --- ## Introduce 在上一篇[“深度學習 (DeepLearning) 基礎 [3]---梯度下降法”](https://www.cnblogs.com/wangqinze/p/13438609.html)中我

深度學習中“”的產生原因解決方法

過擬合定義:模型在訓練集上的表現很好,但在測試集和新資料上的表現很差。 訓練集上的表現 測試集上的表現 結論 不好 不好 欠擬合 好 不好 過擬合 好 好 適度擬合 原因 訓練資料集太小,過擬合出現的原因: 模型複雜度過

深度學習、欠問題及解決方案

  在進行資料探勘或者機器學習模型建立的時候,因為在統計學習中,假設資料滿足獨立同分布(i.i.d,independently and identically distributed),即當前已產生的資料可以對未來的資料進行推測與模擬,因此都是使用歷史資料建立模型,即使用已經產生的資料去訓練,然後使用該模型去