我的AI進坑之路---深度學習和機器學習的一些基本概念

  此文章只是用於個人總結,方便理解,引用不少別人的內容,如果侵犯到原作者的利益,請聯繫我刪掉。如果有什麼內容不對或者漏了什麼重要內容,接受批評,會一直持續更新自己在深度學習遇到的概念問題,儘量讓自己和其他人看懂

人工智能、機器學習,深度學習的關係

深度學習有監督學習、半監督學習和非監督學習的區分

          監督學習:從給定的訓練數據集中學習出一個函數(模型參數),當新的數據到來時,可以根據這個函數預測結果。監督學習的訓練集要求包括輸入輸出,也可以說是特徵和目標。訓練集中的目標是由人標註的。監督學習就是最常見的分類(注意和聚類區分)問題,通過已有的訓練樣本(即已知數據及其對應的輸出)去訓練得到一個最優模型(這個模型屬於某個函數的集合,最優表示某個評價準則下是最佳的),再利用這個模型將所有的輸入映射爲相應的輸出,對輸出進行簡單的判斷從而實現分類的目的。也就具有了對未知數據分類的能力。監督學習的目標往往是讓計算機去學習我們已經創建好的分類系統(模型)

常見的有監督學習算法:迴歸分析和統計分類。最典型的算法是KNN和SVM。

有監督學習最常見的就是:regression&classification

    無監督學習:輸入數據沒有被標記,也沒有確定的結果。樣本數據類別未知,需要根據樣本間的相似性對樣本集進行分類(聚類,clustering)試圖使類內差距最小化,類間差距最大化。通俗點將就是實際應用中,不少情況下無法預先知道樣本的標籤,也就是說沒有訓練樣本對應的類別,因而只能從原先沒有樣本標籤的樣本集開始學習分類器設計。非監督學習目標不是告訴計算機怎麼做,而是讓它(計算機)自己去學習怎樣做事情。非監督學習有兩種思路。第一種思路是在指導Agent時不爲其指定明確分類,而是在成功時,採用某種形式的激勵制度。需要注意的是,這類訓練通常會置於決策問題的框架裏,因爲它的目標不是爲了產生一個分類系統,而是做出最大回報的決定,這種思路很好的概括了現實世界,agent可以對正確的行爲做出激勵,而對錯誤行爲做出懲罰。

無監督學習的方法分爲兩大類:

(1)    一類爲基於概率密度函數估計的直接方法:指設法找到各類別在特徵空間的分佈參數,再進行分類。

(2)    另一類是稱爲基於樣本間相似性度量的簡潔聚類方法:其原理是設法定出不同類別的核心或初始內核,然後依據樣本與核心之間的相似性度量將樣本聚集成不同的類別。

利用聚類結果,可以提取數據集中隱藏信息,對未來數據進行分類和預測。應用於數據挖掘,模式識別,圖像處理等。

  PCA和很多deep learning算法都屬於無監督學習

 半監督學習:

無監督學習只利用未標記的樣本集,而監督學習則只利用標記的樣本集進行學習。

但在很多實際問題中,只有少量的帶有標記的數據,因爲對數據進行標記的代價有時很高,比如在生物學中,對某種蛋白質的結構分析或者功能鑑定,可能會花上生物學家很多年的工作,而大量的未標記的數據卻很容易得到。

這就促使能同時利用標記樣本和未標記樣本的半監督學習技術迅速發展起來。

半監督學習算法分類:

1.      self-training(自訓練算法)

2.      generative models生成模型

3.      SVMs半監督支持向量機

4.      graph-basedmethods圖論方法

5.      multiview learing多視角算法

6.      其他方法

區別

1.      有監督學習方法必須要有訓練集與測試樣本。在訓練集中找規律,而對測試樣本使用這種規律。而非監督學習沒有訓練集,只有一組數據,在該組數據集內尋找規律。

2.      有監督學習的方法就是識別事物,識別的結果表現在給待識別數據加上了標籤。因此訓練樣本集必須由帶標籤的樣本組成。而非監督學習方法只有要分析的數據集的本身,預先沒有什麼標籤。如果發現數據集呈現某種聚集性,則可按自然的聚集性分類,但不予以某種預先分類標籤對上號爲目的。

3.      非監督學習方法在尋找數據集中的規律性,這種規律性並不一定要達到劃分數據集的目的,也就是說不一定要“分類”。

這一點是比有監督學習方法的用途要廣。譬如分析一堆數據的主分量,或分析數據集有什麼特點都可以歸於非監督學習方法的範疇。

4.      用非監督學習方法分析數據集的主分量與用K-L變換計算數據集的主分量又有區別。後者從方法上講不是學習方法。因此用K-L變換找主分量不屬於無監督學習方法,即方法上不是。而通過學習逐漸找到規律性這體現了學習方法這一點。在人工神經元網絡中尋找主分量的方法屬於無監督學習方法。

  比如我們在教孩子認知世界時,會拿出一些關於鳥、魚、飛機和輪船等的圖片告訴他(她)們這些分別是什麼,等他(她)們以後再次見到時則能準確地認出,這就叫監督學習。無監督學習,則是我們並不會告知孩子們這些圖片分別是什麼,而是由他(她)們自己認知這些圖片。他(她)們中或許有的將鳥和飛機歸爲一類,將魚和輪船歸爲一類,因爲這分別代表了天上飛的和水中游的;又或許有的能將鳥、魚、飛機、輪船等分別歸爲一類;但是,他(她)們都不知道這些分別是什麼。

對於計算機而言,這些鳥、魚、飛機和輪船等的圖片相當於數據,我們告訴孩子們這些圖片分別是什麼則相當於對這些數據打上了標籤,監督學習就是通過這些打上標籤的數據去訓練得到一個最優模型,而無監督學習則是僅僅利用這些數據而不利用標籤去訓練得到一個最優模型,最後它們再利用這個模型對未來的數據進行一個判斷輸出,達到認知能力。

不難看出,在監督學習情況下,計算機學習到的模型性能更優(泛化能力更強)。但是,在大數據時代對海量數據都打上標籤是不太現實的。例如,如今我們能輕易地收集到幾十萬或上百萬張關於鳥、魚、飛機和輪船等的圖片,但要對每一張圖片都打上標籤的代價非常高,是一項耗時耗力的工作。在大數據時代,更多的情況則是海量未帶標籤數據伴隨着少量帶標籤數據存在於人們的現實生產生活中。

半監督學習(Semi-SupervisedLearning)就是爲解決上述問題所產生的,其目的在於利用海量未帶標籤數據輔助少量帶標籤數據進行學習訓練,以增強計算機的學習能力。

何時採用哪種方法

  簡單的方法就是從定義入手,有訓練樣本則考慮採用監督學習方法;無訓練樣本,則一定不能用監督學習方法。但是,現實問題中,即使沒有訓練樣本,我們也能夠憑藉自己的雙眼,從待分類的數據中,人工標註一些樣本,並把它們作爲訓練樣本,這樣的話,可以把條件改善,用監督學習方法來做。對於不同的場景,正負樣本的分佈如果會存在偏移(可能大的偏移,可能比較小),這樣的話,監督學習的效果可能就不如用非監督學習了。

如何獲得訓練數據的標籤:https://blog.csdn.net/zongzhiyuan/article/details/48765289 

我們得到圖片的時候進行圖片預處理獲得 標籤信息(.txt)

神經網絡基礎

       1 神經元 (Neuron)

         在神經網絡的情況下,神經元接收輸入,處理它併產生輸出,而這個輸出被髮送到其他神經元用於進一步處理,或者作爲最終輸出進行輸出。神經元還分爲人工神經網絡神經元、卷積神經元,解卷積神經元。。。。等具體請看這裏

       2 權重 (Weights)

              當輸入進入神經元時,它會乘以一個權重。例如,如果一個神經元有兩個輸入,則每個輸入將具有分配給它的一個關聯權重。我們隨機初始化權重,並在模型訓練過程中更新這些權重。訓練後的神經網絡對其輸入賦予較高的權重,這是它認爲與不那麼重要的輸入相比更爲重要的輸入。爲零的權重則表示特定的特徵是微不足道的。傳統的初始化方法從高斯分佈中隨機初始化參數。甚至直接全初始化爲1或者0。這樣的方法暴力直接,但是往往效果一般。高斯初始化,給權重較小的值。這種更新方式在小網絡中很常見,然而當網絡deep的時候,會出現梯度彌散的情況 ,神經網絡權重初始化的方法

         3  偏差(Bias)和方差

              除了權重之外,另一個被應用於輸入的線性分量被稱爲偏差。它被加到權重與輸入相乘的結果中。基本上添加偏差的目的是來改變權重與輸入相乘所得結果的範圍的。添加偏差後,結果將看起來像a* W1 +偏差。這是輸入變換的最終線性分量。偏差可以理解爲訓練集的表現,方差可以理解爲驗證集的表現。訓練集的誤差大(欠擬合)則偏差高,訓練集的誤差低但驗證集誤差大(欠擬合)則方差高。詳情

           4 激活函數(Activation Function)

                   一旦將線性分量應用於輸入,將會需要應用一個非線性函數。這通過將激活函數應用於線性組合來完成。激活函數將輸入信號轉換爲輸出信號。應用激活函數後的輸出看起來像f(a * W1 + b),其中f()就是激活函數。激活函數特點:非線性、可微性、單調性、輸出值的範圍。詳情代碼

  神經網絡

      神經網絡構成了深度學習的支柱。神經網絡的目標是找到一個未知函數的近似值。它由相互聯繫的神經元形成。這些神經元具有權重和在網絡訓練期間根據錯誤來進行更新的偏差。激活函數將非線性變換置於線性組合,而這個線性組合稍後會生成輸出。激活的神經元的組合會給出輸出值。神經網絡常見的有:多層感知機、深度神經網絡DNN、卷積神經網絡CNN、循環神經網絡RNN、長短時間記憶單元LSTM。。。詳情    “神經網絡由許多相互關聯的概念化的人造神經元組成,它們之間傳遞相互數據,並且具有根據網絡”經驗“調整的相關權重。神經元具有激活閾值,如果通過其相關權重的組合和傳遞給他們的數據滿足這個閾值的話,其將被解僱;發射神經元的組合導致“學習”。

           5   輸入/輸出/隱藏層(Input / Output / Hidden Layer)

                     什麼是輸入層呢?和單級網絡一樣,該層只起到輸入信號的扇出作用.所以在計算網絡的層數時不被記入。該層負責接收來自網絡外部的信息,被記作第0層。

                     什麼是輸出層?它是網絡的最後一層,具有該網絡的最大層號,負責輸出網絡的計算結果。

                    隱藏層的定義是:除輸入層和輸出層以外的其他各層叫做隱藏層。隱藏層不直接接受外界的信號,也不直接向外界發送信號。

      講解:

              隱藏層:讓我們從一個問題開始,假如區分三張圖片(袋鼠、人,星空)哪個是人臉,也就是人臉識別,神經網絡模型應該怎麼建立呢?爲了簡單起見,輸入層的每個節點代表圖片的某個像素,個數爲像素點的個數,輸出層簡單地定義爲一個節點,標示是還是不是。

  那麼隱含層怎麼分析呢? 我們先從感性地角度認識這個人臉識別問題,試着將這個問題分解爲一些列的子問題,比如,

  • 在上方有頭髮嗎?

  • 在左上、右上各有一個眼睛嗎?

  • 在中間有鼻子嗎?

  • 在下方中間位置有嘴巴嗎?

  • 在左、右兩側有耳朵嗎?

 假如對以上這些問題的回答,都是“yes”,或者大部分都是“yes”,那麼可以判定是人臉,否則不是人臉。但是,這種判斷忽略了某些特殊情況,比如某個人沒有長頭髮,某個人的左半邊臉被花叢遮擋了等等,等處在這些環境中時,這種方法的判斷可能會有問題。詳情

6 正向傳播,反向傳播

            正向傳播就是根據輸入,經過權值、激活函數、隱藏層,最終獲得輸出;

              反向傳播就是根據輸出,經過和期望值的比較,再經過各種算法、權值,最終來修改權值使輸出和期望值的差距變到最小。

    下面來看正向傳播,是怎麼計算的。
初步理解神經網絡正向傳播和反向傳播算法的推導(一)

假設例子中期望的最終輸出是0.5
左邊是輸入,圓圈是神經元,每個神經元是一個函數,稱爲激活函數,這裏我們選用Sigmoid 函數,
初步理解神經網絡正向傳播和反向傳播算法的推導(一)
它處處可導,可用於梯度下降算法。而且y範圍在-1到+1之間,可控。圖形如下:
初步理解神經網絡正向傳播和反向傳播算法的推導(一)
另外可以看到每根線上都有個數字,那個是權重。就是神經網絡最終要不斷調整的東西。就像炒菜放鹽一樣,多了不行,少了不行,要剛剛好。最初始時候我們給個隨機0-1之間的值,假設初始值如圖所示。我們給他們設個變量標記下,第一層分別爲W1_AP=0.1, W1_BP=0.8, W1_AQ=0.4, W1_BQ=0.6; 第二層W2_PO=0.3, W2_QO=0.9

正向傳播計算方法:
每個神經元的輸入由它上一層的所有輸入分別乘以對應權值,然後將結果求和。
公式爲:(其中y表示神經元的輸出,x表示神經元的輸入,j表示當前層,i表示上一層,Wji表示ji之間的權重,)
初步理解神經網絡正向傳播和反向傳播算法的推導(一)
看到公式別害怕,其實就是個求和。
1. 首先計算第一層, P和Q神經元得到的值
P=A*W1_AP+B*W1_BP=0.35*0.1+0.9*0.8=0.755
Q=A*W1_AQ+B*W1_BQ=0.35*0.4+0.9*0.6=0.68

P和Q本身都是sigmoid函數,將0.755和0.68作爲x輸入,分別得到0.68和0.6637. 怎麼得到的?以P爲例

2. 現在計算第二層
從上一步我們知道P,Q的輸出分別爲0.68和0.6637. 同理,那麼到了O這裏,O所得到的輸入就是P,Q和權值的乘積相加。也就是:
O=P*W2_PO+Q*W2_QO=0.68*0.3+0.6637*0.9=0.80133.
因爲O也是神經元,也是個sigmoid函數,把0.80133作爲x代入,得到O的輸出,也就是這個神經網絡的最終輸出,是O(P,Q)=0.69

現在我們得到結果是0.69. 但是和期望值一比,不對啊,期望值是0.5,差值有0.19,太大了,不能接受。那怎麼辦,看來需要調整權重啊,使輸出儘可能靠近0.5,但是這怎麼調整呢?下一篇文章就來說說怎麼用反向傳播,梯度下降法來調整每一層的權重

   一 損失函數(loss function)

以目前的權重我們得到最終輸出是0.69,而期望值是0.5. 差距 太大,說明權重不太好,那麼0.69爲什麼不好,怎麼個不好法,你可能說相差0.19,太多了不好。但是如果還有個模型,他的期望值是5,得到輸出是5.2,相差0.2. 那麼我問這兩個模型哪個好點,你怎麼回答?換句話說,對於結果怎麼個不好法,我們需要需要一個機制去評估我們結果是否比較好,一般這個機制稱爲損失函數(loss function)或者錯誤函數(error function),描述結果不好的程度,公式如下:
http://images.cnblogs.com/cnblogs_com/LeftNotEasy/WindowsLiveWriter/1_1270E/image_16.png
我承認,公式就是拿出來嚇你們的。實際上就是:
假設最終輸出是O,期望值是D,那麼最終輸出的損失函數爲f=1/2(O-D)^2. 也就是1/2(0.69-0.5)^2=0.01805
因爲O的結果受權重、激活函數和原始輸入影響。而激活函數和原始輸入都是固定的,不能改變的,那麼變量就只有權重,那麼我們現在的目的是通過改變權重來使這個損失函數達到最小。如果這是個函數,那麼權重就是自變量x,損失函數就是f(x)。
另外損失函數不止這麼一個,你們可以看看這篇文章
http://blog.csdn.net/xmdxcsj/article/details/50210451

二 梯度下降及反向傳播
那麼怎麼來達到這個結果呢,因爲整個模型中,我們保證了處處可導,也就是處處連續,也就是說你現在在一座岩石山上,這是個沒有斷崖的山,也沒有樹木,雖然山勢會起伏但不陡,天很黑,你伸手不見五指,只好摸索着下山。你要下山,而方法就是,用腳往四周探探,哪裏低就往拿走,最終你會走下山的。

而我們這裏也是,每次把自變量x減少一點點,看f(x)是不是也在減少,如果在減少,下次x再減少一點點。如此循環,直到f(x)不減少或者反而增加就停下。我們就認爲損失函數不能再小了,也就是達到了最小(這裏會有個局部最優,也就是局部最小的問題,但這裏不考慮)。 而減少一點點,在數學中就是微分。

以下爲了描述方便,將每個神經元的輸入設爲X,輸出爲Y,如下(Xp代表P神經元的輸入,也就是A*W1_AP+B*W1BP;Yp代表P神經元的輸出,也就是Xp經過Sigmoid函數的輸出,Yp=1/(1+e^(-Xp)); 其他同理)。同時給損失函數f(x)一個代號E,也就是E=f(x). 期望值爲D。
初步理解神經網絡正向傳播和反向傳播算法的推導(二)
現在我們要算E對每個權重的微分,也就是要使E變小一點點,每個權重應該分別變小多少。警告:前方高能,用到公式推導。其實也不難,學下求導,求偏導就行。
現在我們以W2_PO爲例子,看看W2_PO應該取什麼新值;首先要求W2_PO的微小變化,也就是對W2_PO求微
初步理解神經網絡正向傳播和反向傳播算法的推導(二)
最左邊是根據E對W2_PO求微,然後逐步推導爲右邊的。現在對右邊的三個東西(專業名詞是什麼?)分別計算:
初步理解神經網絡正向傳播和反向傳播算法的推導(二)

初步理解神經網絡正向傳播和反向傳播算法的推導(二)
(這個Sigmoid函數求導可以參考http://tieba.baidu.com/p/3526239227

初步理解神經網絡正向傳播和反向傳播算法的推導(二)

從以上所有可得W2_PO的微分。
初步理解神經網絡正向傳播和反向傳播算法的推導(二)

再與原值相減就得到新的W2_PO值,加個星號代表新值。(這裏0.02763一般會乘以個0到1之間的係數,我例子中當取1)
初步理解神經網絡正向傳播和反向傳播算法的推導(二)

以此計算所有的新權重值,然後根據新權重值重新計算誤差,發現誤差爲0.18,比老誤差0.19小,則繼續迭代,得神經元的計算結果更加逼近目標值0.5。

文章結束
需要注意的是損失函數和激活函數都是可以變的,但一般就那麼幾個。但激活函數和損失函數變化時,求導的結果當然也有變化。不過作爲程序員的我們來說,可以開始不要那麼深入瞭解,會用就行;但最終是要了解的,慢慢來,其實也不是那麼難。

這點轉載至http://blog.sina.com.cn/s/blog_53dd83fd0102x2iq.html,如有侵權,請聯繫

       7 損失函數

                 損失函數(loss function)是用來估量你模型的預測值f(x)與真實值Y的不一致程度,它是一個非負實值函數,通常使用L(Y, f(x))來表示,損失函數越小,模型的魯棒性就越好。損失函數是經驗風險函數的核心部分,也是結構風險函數重要組成部分

                   損失函數的作用:衡量模型模型預測的好壞

                 損失函數可以很好得反映模型與實際數據差距的工具,理解損失函數能夠更好得對後續優化工具(梯度下降等)進行分析與理解。很多時候遇到複雜的問題,其實最難的一關是如何寫出損失函數。          損失函數主要有:log對數損失函數(邏輯迴歸)、平方損失函數(最小二乘法)、指數損失函數、Hinge損失函數(SVN)詳情

       8  交叉熵

                       交叉熵(cross entropy)是深度學習中常用的一個概念,一般用來求目標與預測值之間的差距。詳情

        9 梯度下降

 梯度下降法的基本思想可以類比爲一個下山的過程。假設這樣一個場景:一個人被困在山上,需要從山上下來(i.e. 找到山的最低點,也就是山谷)。但此時山上的濃霧很大,導致可視度很低。因此,下山的路徑就無法確定,他必須利用自己周圍的信息去找到下山的路徑。這個時候,他就可以利用梯度下降算法來幫助自己下山。具體來說就是,以他當前的所處的位置爲基準,尋找這個位置最陡峭的地方,然後朝着山的高度下降的地方走,同理,如果我們的目標是上山,也就是爬到山頂,那麼此時應該是朝着最陡峭的方向往上走。然後每走一段距離,都反覆採用同一個方法,最後就能成功的抵達山谷。

 

image.png

轉載至https://www.jianshu.com/p/c7e642877b0e

我們同時可以假設這座山最陡峭的地方是無法通過肉眼立馬觀察出來的,而是需要一個複雜的工具來測量,同時,這個人此時正好擁有測量出最陡峭方向的能力。所以,此人每走一段距離,都需要一段時間來測量所在位置最陡峭的方向,這是比較耗時的。那麼爲了在太陽下山之前到達山底,就要儘可能的減少測量方向的次數。這是一個兩難的選擇,如果測量的頻繁,可以保證下山的方向是絕對正確的,但又非常耗時,如果測量的過少,又有偏離軌道的風險。所以需要找到一個合適的測量方向的頻率,來確保下山的方向不錯誤,同時又不至於耗時太多!

 

                 在詳細瞭解梯度下降的算法之前,我們先看看相關的一些概念。

    1. 步長(Learning rate):步長決定了在梯度下降迭代的過程中,每一步沿梯度負方向前進的長度。用上面下山的例子,步長就是在當前這一步所在位置沿着最陡峭最易下山的位置走的那一步的長度。

    2.特徵(feature):指的是樣本中輸入部分,比如2個單特徵的樣本(x(0),y(0)),(x(1),y(1))(x(0),y(0)),(x(1),y(1)),則第一個樣本特徵爲x(0)x(0),第一個樣本輸出爲y(0)y(0)。

    3. 假設函數(hypothesis function):在監督學習中,爲了擬合輸入樣本,而使用的假設函數,記爲hθ(x)hθ(x)。比如對於單個特徵的m個樣本(x(i),y(i))(i=1,2,...m)(x(i),y(i))(i=1,2,...m),可以採用擬合函數如下: hθ(x)=θ0+θ1xhθ(x)=θ0+θ1x。

    4. 損失函數(loss function):爲了評估模型擬合的好壞,通常用損失函數來度量擬合的程度。損失函數極小化,意味着擬合程度最好,對應的模型參數即爲最優參數。在線性迴歸中,損失函數通常爲樣本輸出和假設函數的差取平方。比如對於m個樣本(xi,yi)(i=1,2,...m)(xi,yi)(i=1,2,...m),採用線性迴歸,損失函數爲:

             J(θ0,θ1)=∑i=1m(hθ(xi)−yi)2J(θ0,θ1)=∑i=1m(hθ(xi)−yi)2

     其中xixi表示第i個樣本特徵,yiyi表示第i個樣本對應的輸出,hθ(xi)hθ(xi)爲假設函數。

          梯度下降法是一個一階最優化算法,通常也稱爲最速下降法。要使用梯度下降法找到一個函數的局部極小值,必須向函數上當前點對於梯度(或者是近似梯度)的反方向的規定步長距離點進行迭代搜索。所以梯度下降法可以幫助我們求解某個函數的極小值或者最小值。對於n維問題就最優解,梯度下降法是最常用的方法之一,詳情

    10 學習率

       學習率是一個重要的超參數,它控制着我們基於損失梯度調整神經網絡權值的速度,大多數優化算法(如SGD、RMSprop、Adam)對它都有涉及。學習率越小,我們沿着損失梯度下降的速度越慢。從長遠來看,這種謹慎慢行的選擇可能還不錯,因爲可以避免錯過任何局部最優解,但它也意味着我們要花更多時間來收斂,尤其是如果我們處於曲線的至高點。

以下等式顯示了這種關係:

新權值 = 當前權值 - 學習率 × 梯度

    11 Epoch batchsize 

                  在訓練模型時,如果訓練數據過多,無法一次性將所有數據送入計算,那麼我們就會遇到epoch,batchsize,這些概念。爲了克服數據量多的問題,我們會選擇將數據分成幾個部分,即batch,進行訓練,從而使得每個批次的數據量是可以負載的。將這些batch的數據逐一送入計算訓練,更新神經網絡的權值,使得網絡收斂。

   一個epoch指代所有的數據送入網絡中完成一次前向計算及反向傳播的過程。由於一個epoch常常太大,計算機無法負荷,我們會將它分成幾個較小的batches。那麼,爲什麼我們需要多個epoch呢?我們都知道,在訓練時,將所有數據迭代訓練一次是不夠的,需要反覆多次才能擬合收斂。在實際訓練時,我們將所有數據分成幾個batch,每次送入一部分數據,梯度下降本身就是一個迭代過程,所以單個epoch更新權重是不夠的。簡單點就是epoch多少次他就重複訓練多少次

   所謂Batch就是每次送入網絡中訓練的一部分數據,而Batch Size就是每個batch中訓練樣本的數量,Batch size大小的選擇也至關重要。爲了在內存效率和內存容量之間尋求最佳平衡,batch size應該精心設置,從而最優化網絡模型的性能及速度。

     12 過擬合 欠擬合

   所謂過擬合(over-fitting)其實就是所建的機器學習模型或者是深度學習模型在訓練樣本中表現得過於優越,導致在驗證數據集以及測試數據集中表現不佳。打個比喻就是當我需要建立好一個模型之後,比如是識別一隻狗狗的模型,我需要對這個模型進行訓練。恰好,我訓練樣本中的所有訓練圖片都是二哈,那麼經過多次迭代訓練之後,模型訓練好了,並且在訓練集中表現得很好。基本上二哈身上的所有特點都涵括進去,那麼問題來了!假如我的測試樣本是一隻金毛呢?將一隻金毛的測試樣本放進這個識別狗狗的模型中,很有可能模型最後輸出的結果就是金毛不是一條狗(因爲這個模型基本上是按照二哈的特徵去打造的)。所以這樣就造成了模型過擬合,雖然在訓練集上表現得很好,但是在測試集中表現得恰好相反,在性能的角度上講就是協方差過大(variance is large),同樣在測試集上的損失函數(cost function)會表現得很大。

所謂欠擬合呢(under-fitting)?相對過擬合欠擬合還是比較容易理解。還是拿剛纔的模型來說,可能二哈被提取的特徵比較少,導致訓練出來的模型不能很好地匹配,表現得很差,甚至二哈都無法識別。

 那麼如何防止過擬合呢?一般的方法有early stopping、數據集擴增(Data augmentation)、正則化(Regularization)、Dropout等。

     13 dropout         

      首先,想象我們現在只訓練一個特定的網絡,當迭代次數增多的時候,可能出現網絡對訓練集擬合的很好(在訓練集上loss很小),但是對驗證集的擬合程度很差的情況。所以,我們有了這樣的想法:可不可以讓每次跌代隨機的去更新網絡參數(weights),引入這樣的隨機性就可以增加網絡generalize 的能力。所以就有了dropout 。    Dropout是指在模型訓練時隨機讓網絡某些隱含層節點的權重不工作,不工作的那些節點可以暫時認爲不是網絡結構的一部分,但是它的權重得保留下來(只是暫時不更新而已),因爲下次樣本輸入時它可能又得工作了 ,詳情

     卷積神經網絡(CNN)

 概念:受Hubel和Wiesel對貓視覺皮層電生理研究啓發,有人提出卷積神經網絡(CNN),Yann Lecun 最早將CNN用於手寫數字識別並一直保持了其在該問題的霸主地位。近年來卷積神經網絡在多個方向持續發力,在語音識別、人臉識別、通用物體識別、運動分析、自然語言處理甚至腦電波分析方面均有突破。

  卷積神經網絡與普通神經網絡的區別在於,卷積神經網絡包含了一個由卷積層和子採樣層構成的特徵抽取器。在卷積神經網絡的卷積層中,一個神經元只與部分鄰層神經元連接。在CNN的一個卷積層中,通常包含若干個特徵平面(featureMap),每個特徵平面由一些矩形排列的的神經元組成,同一特徵平面的神經元共享權值,這裏共享的權值就是卷積核。卷積核一般以隨機小數矩陣的形式初始化,在網絡的訓練過程中卷積核將學習得到合理的權值。共享權值(卷積核)帶來的直接好處是減少網絡各層之間的連接,同時又降低了過擬合的風險。子採樣也叫做池化(pooling),通常有均值子採樣(mean pooling)和最大值子採樣(max pooling)兩種形式。子採樣可以看作一種特殊的卷積過程。卷積和子採樣大大簡化了模型複雜度,減少了模型的參數。

 卷積神經網絡(CNN)由輸入層、卷積層、激活函數、池化層、全連接層組成,即INPUT-CONV-RELU-POOL-FC

      14卷積層(CONV)

卷積是一個漏斗去篩選數據,漏斗(卷積核)可以用各種形狀,還可以對數據運算變化。比如,用個梅花狀的漏斗篩選像素, 那出來的就是一個個完整或殘缺的梅花形狀。

          卷積層實在做特稱提取和降維,“不全連接,參數共享”的特點大大降低了網絡參數,保證了網絡的稀疏性,防止過擬合。之所以可以“參數共享”,是因爲樣本存在局部相關的特性。

         

       15池化層(pool)

      一副24*24的圖像。用5*5卷積核卷積,結果是20*20(四周各-2),經過2*2池化,變成10*10

     池化的話,舉個例子,一個班學生成績的池化,假如看教室的俯視圖,若教室裏學生座位是9*9的,那麼可以這樣池化,從左上角,每3*3區域的學生,選出一個最高分代表整個區域,以此類推,整個教室池化完剩下9個區域的最大值成績,這就是所謂的“最大值池化”,當然,還有平均值池化,不用多說。

 

        16 卷積核

                    做卷積處理的關鍵是卷積算子也就是係數矩陣的選擇,這個係數矩陣就是卷積核(Kernal)

         17全連接層

              在整個卷積神經網絡中起到“分類器”的作用。如果說卷積層、池化層和激活函數層等操作是將原始數據映射到隱層特徵空間的話,全連接層則起到將學到的“分佈式特徵表示”映射到樣本標記空間的作用。在實際使用中,全連接層可由卷積操作實現:對前層是全連接的全連接層可以轉化爲卷積核爲1x1的卷積;而前層是卷積層的全連接層可以轉化爲卷積核爲hxw的全局卷積,h和w分別爲前層卷積結果的高和寬。全連接層會把卷積輸出的二維特徵圖(featureMap)轉化成一個一維的向量

    卷積神經網絡爲什麼最後接一個全連接層:在基本的CNN網絡中,全連接層的作用是將經過多個卷積層和池化層的圖像特徵圖中的特徵進行整合,獲取圖像特徵具有的高層含義,之後用於圖像分類。在CNN網絡中,全連接層將卷積層產生的特徵圖映射成一個固定長度(一般爲輸入圖像數據集中的圖像類別數)的特徵向量。這個特徵向量包含了輸入圖像所有特徵的組合信息,雖然丟失了圖像的位置信息,但是該向量將圖像中含有最具有特點的圖像特徵保留了下來以此完成圖像分類任務。從圖像分類任務的角度來看,計算機只需要對圖像內容進行判定,計算輸入圖像具體所屬類別數值(所屬類別概率),將最有可能的類別輸出即可完成分類任務。

         18填充(Padding)

          填充是指在圖像之間添加額外的零層,以使輸出圖像的大小與輸入相同。這被稱爲相同的填充。 

            

感謝:https://www.zhihu.com/question/49376084(如何理解卷積神經網絡(CNN)中的卷積和池化?)

          https://blog.csdn.net/pangjiuzala/article/details/72630166(深度學習入門必須理解這25個概念)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章