1. 程式人生 > >“一天搞懂深度學習”筆記

“一天搞懂深度學習”筆記

“一天搞懂深度學習”筆記

1. A brief Introduction of Deep Learning

1.1 Introduction of Deep Learning

  • Neuron
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20190109113921652.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3l1ZWd1aXpoaWxpbg==,size_16,color_FFFFFF,t_70)

權重和偏置稱為神經元的引數,區別於神經網路結構引數,如神經元個數,隱含層層數,網路連線方式等,網路結構引數是超參之一, 需要人為根據經驗設定。

  • 全連線前饋神經網路

深度意味神經網路具有多個隱含層。

神經網路結構確定了一個函式集(函式空間),特定的神經元引數確定了函式集中一個函式。

  • soft max 輸出層

softmax 輸出層將網路輸出值歸一化到[0,1), softmax 層的輸出可解釋成輸入vector 屬於不同類的概率值。

  • loss function

loss 可以衡量網路輸出和期望輸出的距離。在網路結構超參確定的情況下,我們的目標就是尋找一個使loss最小的函式,最終目標轉化為:通過訓練資料,以最小化 loss 函式為目標,尋找最佳神經元引數。

  • 網路優化演算法:尋找最佳神經元引數

基於梯度下降法的BP演算法

1.2 why deep ?

實驗證明,網路引數的增多,網路效能提升。

任何複雜函式均能由單隱含層的網路擬合出來。

網路引數的增多可以通過“廣度學習”和“深度學習”的方式實現,哪一種方式更好呢?

在程式設計中,我門通過定義子函式,實現複雜函式模組化,模組化的好處是子模組實現簡單、子模組可以共用、高層排程實現複雜功能且形式簡潔高效(main 函式形式通常是elegant的).類似的,我們說深度學習實現了模組化Modularization

假設我們有一個影象分類任務,若按照上圖方式訓練各個分類器,則因為長髮男資料較少,則 Classifier 2 的效能就較為 weak.

若我們先訓練兩個基分類器,則兩個基分類器因為有足夠資料,可以訓練得相當好。然後將它們視作module,第二層的每個分類器只需去 call 第一層的兩個共用 modules 的 output ,就可以實現每個分類器的任務。所以雖然長頭髮男生的資料依然較少,此時 Classifier 2 的效能卻比較 strong.

在 Deep learnin 中,第一層的每個神經元是最 basic 的 classifier ,第二層 將第一層的 classifier 當做 module 去實現複雜的 classifier ,以此類推。
故 deep learning 的好處是: 實現模組化後,每個模組會變得簡單,所需訓練資料較少。(這與人們津津樂談的 AI = 深度學習+人工智慧 的說法不同)

關於why deep 的直觀例項,可以參看油管上一個很好的視訊:
But what is a Neural Network? | Chapter 1, deep learning

2.Tips for Training Deep Neural Network

當我們訓練兩個分別為56層和20層的網路時,在測試集上的表現如右圖所示,我門無法根據 20-layer 的損失曲線在 56-layer 的下方 ,就得出56-layer 的網路已經過擬合了。因為觀察左圖兩者在訓練集上的損失曲線,我們發現,56 layer 的網路效能居然弱於 20-layer, 這是不合理的,因為我們只要將56- layer 的網路前20 層引數與 20-layer保持一致,則損失曲線便與20-layer identity . 所以根據在訓練集上的損失曲線表現看,我們對56-layer 的網路訓練得還不夠好,可能落入了局部最優。

所以我們得根據網路在訓練集上的表現和在測試集上的表現,對症下藥。例如drop out 就是針對網路在測試集上的表現較差使用的技術。


2.1 train set: choosing proper loss


當我們使用softmax輸出層時,我們傾向於使用交叉熵損失函式。原因是:相較平方損失函式,交叉熵損失函式的地貌更加陡峭,梯度更大,更不容易陷入區域性最優。



[圖片上傳中...(image.png-60b999-1518163976905-0)]

2.2 train set: Mini-batch


若batchsize 為1,就成為了隨機梯度下降。
但我們一般不將batchsize 設為1.從上面PPT 可以看出,在使用GPU 進行並行運算後,在相同時間內,batchsize = 1和batchsize =10,引數的更新總次數是相近的,但是batchsize = 10 時更穩定,收斂地更快。
當batchsize 過大時,則一方面超出了GPU硬體並行能力,另一方面,此時去train 網路時會經常進入鞍點或區域性極小值而無法逃離,訓練過程中止,performance 下降,所以引入隨機性是必要的,有助於逃離區域性最優和鞍點。


2.3 train set: New activation function



  • ReLU

使用ReLU的好處是:
計算快速,啟用機制與生理類似,相當於無窮多個加權sigmoid函式加權,可以防止梯度消失。


使用ReLU後,網路變成輕量的線性網路,並且這個線性網路隨著輸入input的不同而不同,相當於用多個線性網路去逼近一個複雜網路

  • Maxout
    Maxout 方法認為每個神經元的啟用函式是可以學習的

在maxout 的隱層中的一個神經元(圖中的紅色框)需要比普通網路的神經元多學習一倍引數,或者多倍(取決於在一個group 中的元素個數,一個group 中的元素個數人為指定)

上圖指出,ReLU是maxout學習到的啟用函式中的一個特例, 即在Maxout 中學習到的引數為w,b,0,0時,則此時神經元的啟用函式就等於ReLU。

學習到一個神經元的引數都非零時,則啟用函式為上圖形式。

maxout 可以學習到的啟用函式為任意的分段線性凸函式,分段數目取決於一個group中的elementshumu


與ReLU一樣,給定一個input,網路將變成一個線性網路,並且這個線性網路隨著input的不同而改變。給定一個input,我們可以對這個線性網路進行訓練,更新部分引數,再給定一個input,我們可以對產生的另一個線性網路進行訓練,更新部分引數。所以雖然max操作不好求導,但是採用maxout的網路仍然是可以train 的。

2.4 train set: Adaptive Learning Rate

  • Adagrad
  • RMSprop

與Adagrad 只有略微的不同,RMSprop對過去梯度平方和做了加權衰減。

  • Momentum


  • Adam

2.6 test set: early stopping

early stopping其實是在控制epochs的大小

2.7 test set : Regularization





在神經網路優化中,正則項技術其實與early stopping 的功能是近似重疊的。考慮網路引數初始化為接近零的值,隨著更新次數的增加,引數會越來越偏離0。所以如果引數更新次數較小,引數偏離0的程度下降,而early stopping 就是為了控制epochs 的大小。正則化技術目的也是希望引數越接近零越好。所以說兩者的功能是近似的。

2.8 test set: Dropout



dripout 有效性的解釋:






3.Variants of Neural Network

3.1 Convolutional Neural Network (CNN)

3.2 Recurrent Neural Network (RNN)

4.Next Wave

4.1Supervised Learning

4.1.1 Ultra Deep Network
4.1.2 Attention Model


4.2 Reinforcement Learning

4.3 Unsupervised Learning

4.3.1 Image: Realizing what the World Looks Like
4.3.2 Text: Understanding the Meaning of Words
4.3.3 Audio: Learning human language without supervision

參考資料

一天搞懂深度學習

      </div>
    </div>
</div>