1. 程式人生 > >深度學習筆記——理論與推導之DNN(三)

深度學習筆記——理論與推導之DNN(三)

DNN

目錄

  • 激勵函式(ReLU以及ReLU的變形,梯度消失問題)
  • 成本函式
  • 資料處理
  • 優化
  • 一般化

激勵函式:

Rectified Linear Unit(ReLU)

這裡寫圖片描述

  • 選擇Relu的原因:
    • 計算速度快
    • 生物原因
    • 類似於具有不同偏差的無限個sigmoid
    • 可以解決梯度消失問題
  • sigmoid的問題(梯度消失問題):
    sigmoid function的微分函式是藍色的線,我們可以發現,藍線上的所有值都處於(0,1)之間,而最大值出現在x = 0的位置,值為1/4。這會導致在backward pass中,因為每通過一個layer,Error signal就要乘以一個scalar(這個scalar就是sigmoid function的導數),導致Error signal會不斷被減弱,最終會導致Gradient越來越小。這會導致在neural network中越靠近input的gradient都比較小,這時,如果你選用的是一個constant learning rate,你就會發現靠近input的weight就會都比較小,也就會導致靠近input的weight值的變化會很小,也就是它learn的速度會比較慢。
    這裡寫圖片描述

    這裡寫圖片描述
    這裡寫圖片描述
  • 那麼ReLU是如何解決梯度消失的問題呢?
    這是由於ReLU的導數非0即1,因此不會削弱Error signal的值。
    這裡寫圖片描述
    這裡寫圖片描述
    這裡寫圖片描述
    • 這裡需要考慮一個問題:
      所有連線到偏導為0的weight都不會更新:
    • 可能的解決方法:
      1. softplus function
      2. initialize with large bias
    • 然而這個問題不會照常太大影響,因為要對多個x進行訓練,所以基本上他的weight都會被訓練到。
  • ReLU的變形:
    • Parametric ReLU:
      這裡寫圖片描述
    • Maxout ReLU:
      所有的ReLU變形都是特殊的Maxout案例
      這裡寫圖片描述
      左邊是一般的ReLU,綠色的線是藍線通過ReLU以後的變化;右邊是Maxout ReLU,只要找到適當的引數,Maxout也可以做出和一般ReLU一樣的事情。
      這裡寫圖片描述

      由於w和b的值是根據data所learn出來的,所以Maxout可以也是一個可以被learn出來的activation function
      這裡寫圖片描述
      如何去training maxout呢?
      沒用到的z可以直接去掉,所以train的其實就是一個thin和linear的network
      這裡寫圖片描述

成本函式:

  1. 直接輸出cost function可能存在一個問題:
    雖然上面的y的cost function的值可能更小,但就我們對nerual network的理解,應該是下面的y更準確,因為值越大代表越重要。
    這裡寫圖片描述
  2. 解決方法:softmax,將softmax layer作為output layer。
    softmax就是將所有的輸出值的和變為1。
    這裡寫圖片描述

    如果我們用softmax layer作為output,那我們應該使用怎麼樣的cost function呢?
    • 什麼樣的cost function是算是好的呢?output和pred相差很大時,我們的cost function需要得到較大的Error Signal,這樣在fixed learning rate時我們就能快速的學習。
    • 什麼樣的cost function可以搭配softmax function呢?
      這裡不要考慮除了r的其他維,因為我們這時候使用的是softmax,如果r維為1,或者r維儘量大,那麼其他維度就會變小。
      這裡寫圖片描述
    • 接下來我們來看一下cost entropy的error signal(因為我們需要cost function越大時,error signal也要越大)
      如果yr和1的差距越大,那麼error signal就會越大,反之越小,這樣的話就滿足了我們的要求。
      i=r的時候:
      這裡寫圖片描述
      下面計算i≠r的時候
      這裡寫圖片描述

資料處理:

優化

  • Vanilla Graident Descent(就是之前的Gradient Descent)
    • 如何判斷learning rate是否過大(過小):
      • 當cost不減小,並且上下波動時,表示learning rate過大。
      • 當cost遞減速度比較慢時,表示learning rate過小
      • 當cost第一次下降就很多時,可能表示learning rate適當。
    • 如何確定learning rate:
      • 一個比較簡單的方法:在每次輸出中,減少learning rate的值
        • 在開始的時候我們需要比較大的learning rtae
        • 在靠近結尾的時候,我們會減小learning rate的值。
        • 例如:這裡寫圖片描述
      • Adagrad:將每個引數的學習率除以為它前一個偏導數的平均平方根。
        這裡寫圖片描述
        下面是Adagrad的步驟:
        這裡寫圖片描述
        這裡寫圖片描述
      • 什麼是最好的步伐呢(即learning rate)?
        • 難道Larger gradient,larger steps一定是對的嗎?
          這裡寫圖片描述
          如上圖所示,如果從x0要到達最低點-b/2a,那麼他的最好的步伐應該是|x0+b/2a|也就是|2ax0+b|/2a,2ax0+b其實就是曲線在x0的一階導數,表面上看larger gradient確實和larger steps成正比,然而我們忽略了2a,這個2a其實就是曲線在x0的二階導數,因此最好的步伐應該是|一階導數|/|二階導數|。
        • 如果是多個引數呢?如下:
          這裡寫圖片描述
      • 然而你如果算二次微分的速度很慢的話,這樣計算learning rate就沒有意義。因為如果你的learning rate設定很小,那麼理論上說是可以達到一個比較好的結果的。這時候Adagrad就起到作用了,因為雖然這裡Adagrad只做了一次微分,但是它的分母對二次微分做了估算。
    • 遇到local minima 和saddle point 怎麼辦?
      • Momentum(動量):
        動量其實就是模擬物理中小球下滑的過程,即Momentum不僅僅基於gradient,還基於上一次的movement(即上次下滑的gradient),如下:
        這裡寫圖片描述
        這裡寫圖片描述
        Momentum的流程:
        這裡寫圖片描述

一般化

  • 萬靈丹:
    • 增加更多的training data
    • 產生更多的training data,如旋轉等
  • Early Stop(早點停下不迭代到指定的次數,不容易做到)
  • Weight Decay:
    我們在選引數的時候,我們都是根據training-set和cost function來決定,但其實我們更喜歡的是接近0的引數,因為如下情況:
    這裡寫圖片描述
    因此,我們在做learning的時候,我們想要找的不僅僅是一組可以minimizing original cost的parameter,跟是希望parameter趨近於0,如下,定義一個cost function
    這裡寫圖片描述
    接下來我們對新的cost function做偏微分
    這裡寫圖片描述
    這也就是wt+1會小於wt
  • Dropout:
    • 在神經網路中,大規模的神經網路有兩個缺點:費時和容易過擬合。而dropout的程式可以很好的解決過擬合問題,每次做完dropout,相當於從原始的網路中找到一個更瘦的網路。
    • dropout就是在每次迭代中,丟棄p%的神經元。
    • 要注意的是如果在training中dropout=0.5,wij = 1,那麼在Test中wij應該等於wij = 1*(1-0.5) = 0.5
      因為這個時候的testing中的z這個時候就是training中z的兩倍,因此weights就需要乘以(1-dropout)%
      這裡寫圖片描述
    • 為什麼dropout的效果更好呢?
      可以將其理解為訓練不同的網路後,對不同網路進行整合,雖然從直觀上看dropout是整合(ensemble)在分類效能上的一個近似,然而實際中,dropout畢竟還是在一個神經網路上進行的,只訓練出了一套模型引數,那麼為什麼dropout有效呢?因為dropout強迫一個神經單元,和隨機挑選出來的其他神經單元共同工作,達到好的效果。消減了神經元節點之間的聯合適應性,增強了泛化能力。如下:
      這裡寫圖片描述
      使用一個data訓練一個網路,在這個網路中還有引數共享的部分,如果有一共有M個神經元,那麼就能構建出2^M個可能的網路。
      這裡寫圖片描述
    • 對於dropout的一些可行性建議:
      • 更大的網路:如果你需要n個神經元,那麼對於dropout = p%的網路來說,你的網路就需要n/(1-p)個神經元。
      • 更長的訓練時間:
      • 更高得到learning rate:
      • 更大的momentum:

總結

這裡寫圖片描述