激勵函數有哪些?各有什麼特點?
爲什麼引入非線性激勵函數?
如果不用非線性激勵函數(其實相當於激勵函數是f(x)=x),每一層輸出都是上層輸入的線性函數,無論該神經網絡多少層,輸出都是輸入的線性組合,與沒有隱藏層效果一樣,即爲最原始的感知機了。
爲什麼引入ReLU?
1. 對於深層網絡,sigmoid函數反向傳播時,很容易出現梯度消失,從而無法完成深層網絡的訓練。
2. ReLU會使神經元的一部分輸入不產生作用,這樣就有了輸入神經元的稀疏效果,緩和了過擬合問題的發生。
3. 採用sigmoid等函數時,算激活函數時(指數運算),計算量大,求導涉及除法,計算量相對大,而採用ReLU激活函數,整個過程的計算量節省很多。
共享權值
如果局部感知域爲5*5,那麼每個隱藏層的神經元有一個5*5的權值,並且該隱藏層的所有神經元對應的權值都是相同的,並共享一個bias。即使用同一個參數矩陣weights和一個bias。這意味着這一個隱藏層的所有神經元都是檢測同一個特徵,只不過它們位於圖片的不同位置而已。
共享權重和bias的一大好處是它極大的減少了網絡參數數量,對於每個特徵映射,只需要5*5個權重,再加一個bias。
池化層
池化層放在卷積層的後面,池化層的目的是簡化從卷積層輸出的信息,更具體一點,一個池化層把卷積層的輸出作爲其輸入並輸出一個更緊湊的特徵映射。
常用池化操作:
Max-pooling:若池化層區域爲2×2,則選擇2×2區域裏激活值最大的值,因此可以把max-pooling看成神經網絡關心某個特徵在這個區域是否出現,但不關心特徵的精確位置。
L2-pooling:對2×2區域的每個值平方然後求和後取平方根。
Dropout的作用
dropout是一種防止模型過擬合的技術。它的基本思想是在訓練的時候隨機的dropout(丟棄)一些神經元的激活,這樣可以讓模型更魯棒,因爲它不會太依賴某些局部的特徵(因爲局部特徵有可能被丟棄)。被dropout的節點可以暫時認爲不是網絡結構的一部分,但是它的權重得保存下來(只是暫時不更新),因爲下次樣本輸入時它可能又得工作了Dropout和Pooling區別
dropout的本質是規則化,防止過擬合。訓練過程中某幾個權重參數隨機爲0,下次訓練過程中又有幾個權重參數隨機爲0,但每次訓練都能得到一樣的結果,也就是被dropout的權重參數可被其它權重參數替代,那麼多次訓練後參數比較均衡,也就起了規則化的作用。
pooling的本質是降維。
損失函數
全連接層作用
CNN的本質
CNN最成功的應用是在CV,那爲什麼NLP和Speech的很多問題也可以用CNN解出來?爲什麼AlphaGo裏也用了CNN?這幾個不相關的問題的相似性在哪裏?CNN通過什麼手段抓住了這個共性?
以上幾個不相關問題的相關性在於,都存在局部與整體的關係,由低層次的特徵經過組合,組成高層次的特徵,並且得到不同特徵之間的空間相關性。
CNN抓住此共性的手段主要有四個:局部連接/權值共享/池化操作/多層次結構。
局部連接使網絡可以提取數據的局部特徵;權值共享大大降低了網絡的訓練難度,一個Filter只提取一個特徵,在整個圖片(或者語音/文本) 中進行卷積;池化操作與多層次結構一起,實現了數據的降維,將低層次的局部特徵組合成爲較高層次的特徵,從而對整個圖片進行表示。
什麼樣的資料集不適合用深度學習?
數據集太小,數據樣本不足時,深度學習相對其它機器學習算法,沒有明顯優勢。數據集沒有局部相關特性,目前深度學習表現比較好的領域主要是圖像/語音/自然語言處理等領域,這些領域的一個共性是局部相關性。圖像中像素組成物體,語音信號中音位組合成單詞,文本數據中單詞組合成句子,這些特徵元素的組合一旦被打亂,表示的含義同時也被改變。對於沒有這樣的局部相關性的數據集,不適於使用深度學習算法進行處理。舉個例子:預測一個人的健康狀況,相關的參數會有年齡、職業、收入、家庭狀況等各種元素,將這些元素打亂,並不會影響相關的結果。