美文网首页
[監督式]Deep learning(深度學習)

[監督式]Deep learning(深度學習)

作者: RJ阿杰 | 来源:发表于2018-12-19 21:00 被阅读0次

    Deep learning

    Neural Network

    每一層Neural Network都可以使用不同的activation function,sigmoid、ReLU、leaky ReLU、softmax、tanh。

    function set(hypothesis set)

    可以設置一個全為1的特徵(x_0),然後將b併到權重裡(w_0)。矩陣wrow數,決定他的輸出的row數,假設一個函數集合(function set),\hat{y}可以由這個函數集合(function set)裡面其中一個function生成。

    Loss function

    Gradient Desent

    Feedforward

    預設所有w、b的初始值,計算出所有z值、a值、C值
    從first layer出發可以一路求出所有z值、a值、C值

    Backpropagation

    計算L對所有參數(w,b)的偏微分,亦即所有參數的Gradient,運用微積分的連鎖律(Chain Rule)求解,從last layer可以一路回推所有參數(w,b)的偏微分,注意這裡C是下標(i),表示\hat{y_i}lny_i

    • 連鎖律(Chain Rule)
      \frac{\partial C }{\partial w}wa的變數,aC的變數,則\frac{\partial C }{\partial w}=\frac{\partial C }{\partial a} \frac{\partial a }{\partial w}
    1. Three layer(字體太小可以在latex上按右鍵開啟新分頁)
      C = ( y_1 - \hat{y_1} ) + ( y_2 - \hat{y_2} )
      \frac{\partial C }{\partial w_1}=\frac{\partial C }{\partial z_{a1}} \frac{\partial z_{a1} }{\partial w_1} = \frac{\partial C }{\partial a_1} \frac{\partial a_1 }{\partial z_{a1}} \frac{\partial z_{a1} }{\partial w_1} = \left( \frac{\partial C }{\partial z_{y_1}} \frac{\partial z_{y_1} }{\partial a_1 } + \frac{\partial C }{\partial z_{y_2}} \frac{\partial z_{y_2} }{\partial a_1} \right) \frac{\partial a_1 }{\partial z_{a1}} \frac{\partial z_{a1} }{\partial w_1}
      = \left( \frac{\partial C }{\partial C_1}\frac{\partial C_1 }{\partial y_1} \frac{\partial y_1 }{\partial z_{y_1}} \frac{\partial z_{y_1} }{\partial a_1 } + \frac{\partial C }{\partial C_2} \frac{\partial C_2 }{\partial y_2} \frac{\partial y_2 }{\partial z_{y_2}} \frac{\partial z_{y_2} }{\partial a_1} \right) \left( \frac{\partial a_1 }{\partial z_{a1}} \frac{\partial z_{a1} }{\partial w_1} \right)

    2. four layer(字體太小可以在latex上按右鍵開啟新分頁)
      \frac{\partial C }{\partial w_1}=\frac{\partial C }{\partial z_{a1}} \frac{\partial z_{a1} }{\partial w_1} = \frac{\partial C }{\partial a_1} \frac{\partial a_1 }{\partial z_{a1}} \frac{\partial z_{a1} }{\partial w_1} = \left( \frac{\partial C }{\partial z_{y_1}} \frac{\partial z_{y_1} }{\partial a_1 } + \frac{\partial C }{\partial z_{y_2}} \frac{\partial z_{y_2} }{\partial a_1} \right) \frac{\partial a_1 }{\partial z_{a1}} \frac{\partial z_{a1} }{\partial w_1}
      = \left( \frac{\partial C }{\partial a_3} \frac{\partial a_3 }{\partial z_{a_3}} \frac{\partial z_{a_3} }{\partial a_1 } + \frac{\partial C }{\partial a_4} \frac{\partial a_4 }{\partial z_{a_4}} \frac{\partial z_{a_4} }{\partial a_1} \right) \frac{\partial a_1 }{\partial z_{a1}} \frac{\partial z_{a1} }{\partial w_1}
      \LARGE = \left( \left( \frac{\partial C }{\partial C_1}\frac{\partial C_1 }{\partial y_1} \frac{\partial y_1 }{\partial z_{y_1}} \frac{\partial z_{y_1} }{\partial a_3} + \frac{\partial C }{\partial C_2}\frac{\partial C_2 }{\partial y_2} \frac{\partial y_2 }{\partial z_{y_2}} \frac{\partial z_{y_2} }{\partial a_3}\right) \frac{\partial a_3 }{\partial z_{a_3}} \frac{\partial z_{a_3} }{\partial a_1 } + \left(\frac{\partial C }{\partial C_1} \frac{\partial C_1 }{\partial y_1} \frac{\partial y_1 }{\partial z_{y_1}} \frac{\partial z_{y_1} }{\partial a_4} + \frac{\partial C }{\partial C_2}\frac{\partial C_2 }{\partial y_2} \frac{\partial y_2 }{\partial z_{y_2}} \frac{\partial z_{y_2} }{\partial a_4}\right) \frac{\partial a_4 }{\partial z_{a_4}} \frac{\partial z_{a_4} }{\partial a_1} \right) \frac{\partial a_1 }{\partial z_{a1}} \frac{\partial z_{a1} }{\partial w_1}

    • Backpropagation
      由於連鎖律的關係,所以從y_1可以一路求回,使用不同的activation function求的微分也不同。

    過擬合問題

    • underfitting、overfitting
    1. high Bias即所謂的Underfitting,因為參數過少連Training set都會有頗大的預測誤差。
    2. low Bias high Variance即所謂的Overfitting,因為參數過多導致過度符合Training set的資料特性,使得其無法預測較為普遍的資料集。
    • ReLU
      使用ReLU可以降低overfitting的情形,ReLU運算較為快速訓練時間較短,ReLU沒有梯度消失的問題。
      ReLU只要輸入<0就不響應,等於神經元沒有繳活,作用類似dropout。
      ReLU是訓練時訓練所有神經元,但訓練完後死了一部份的神經元,而Dropout是訓練時每次使用不同部份神經元。


    • Weight decay
      regularization能使函數降低複雜度,避免overfitting。
      L1 regularization(Lasso回歸):
      \lambda \Sigma w_i^2 + Loss\,Function
      L2 regularization(Ridge回歸、脊回歸、嶺回歸):
      \lambda \Sigma |w_i| + Loss\,Function

    • Dropout
      Dropout是用於深度學習中控制overfitting(過擬合)的一種方法,Dropout是在學習過程中一邊隨機消除神經元一邊學習的手法,每一次更新參數之前,所有神經元(包含input)都有p%的機率被丟棄,所以每次訓練都只會剩下1-p%的神經元。
      ReLU是訓練時訓練所有神經元,但訓練完後死了一部份的神經元,而Dropout是訓練時每次使用不同部份神經元,所以因為訓練時只使用1-p%的神經元,而訓練出來的模型適用所有weight預測,所以在預測(predict、test)時會比原本的y值大(1/1-p%)倍,因而預測時所有weight要乘上1-p%(訓練時使用(保留)的神經元比例),才是訓練出來模型正常預測的y值。


    • Maxout
      Maxout可以自動學習成任何分段線性凸函數的activation function,feature乘上weight後的值我們將他分組(多少組可以自己決定),然後取最大值。

    Maxout模仿ReLU

    梯度消失、爆炸問題

    梯度消失(gradient vanishing)

    當我們使用sigmoid activation在多層的DNN上會有梯度消失問題,我們在做Backpropagation,計算loss對w的梯度時,越向後傳播,梯度變得越來越小,這就意味著在網絡的前面一些層的神經元,會比後面的訓練的要慢很多,甚至不會變化。

    前面我們看到w_1的Grad如下圖,每個y與a都是一個sigmoid function,我們不斷對它們求導然後相乘,而sigmoid的導數輸出介於0~0.25之間,多次相乘後必然會接近於零,導致前面的權重更新很慢。

    梯度爆炸

    梯度爆炸是指activation function derivative大於1的情況,會使梯度不斷成長。

    解決或舒緩方法

    使用不同的activation function
    1. 可以使用其他activation function,如ReLU、tanh,或每層使用不同的activation function。


      tanh與derivative ReLU與derivative
    初始化權重(w)調整

    为什么神经网络参数不能全部初始化为全0

    1. 初始化權重不能設為均一值(例如all zero),會導致每一層輸出的結果都為對稱的,當很多神經元存在相同值就沒有存在的意義了,例如100個神經元都為相同值,代表只使用一個神經元就能表現出一樣的情況,不管更新幾次所有權重都為相同值。
    2. 初始化權重值不能偏離0太遠,會造成sigmoid輸出都為0或1的情況,會造成梯度消失,但若都太趨近於零會造成對稱的問題。

    隨機初始化(random initialization)權重:
    初始化權重可以考慮設為正態分怖(高斯分布)平均值為零,標準差為0~1之間的值,調整標準差進行訓練使loss越低越好,意思標準差為一個超參數(hyperparameters)(手動需要調整的參數)。

    Xavier initialization
    • Xavier initialization 的作法是使用normal初始化,將W的標準差設為\sqrt{ \frac{2} {N_{in}+N_{out}}}N_{in}為W前一層神經元(NN)的數量,N_{out}為W下一層神經元(NN)的數量,通常用於sigmoid function作為activation function的情形。
    • CNN為N_{in} kernel_w* kernel_h* in_channel,N_{out}(kernel_w* kernel_h* out_channel)
    • 若使用uniform則是將low={-} \sqrt{ \frac{6} {N_{in}+N_{out}}},high=\sqrt{ \frac{6} {N_{in}+N_{out}}}
    He initialization

    He initialization的作法是將Xavier根號內再除以2,W的標準差設為\sqrt{ \frac{4} {N_{in}+N_{out}}},N為W前一層神經元(NN)的數量,通常用於ReLU function作為activation function的情形。

    Batch normalization

    Batch Normalization
    Batch normalization論文
    Understanding the backward pass through Batch Normalization Layer
    Batch Normalization原理与实战
    Batch normalization是2015年提出的手法,能增加學習率、不會過度依賴預設權重、可以降低sigmoid梯度消失以及ReLU導致太多神經元為0的問題,Batch normalization layer可以放在activation function的input或output,通常放置在input,但有時候放在後面效果更好。
    可以參考這篇
    註:\gamma,\beta是一個可學的參數,每個初始gamma可以預設為1,beta預設為0。

    實作trick

    推薦閱讀:
    一步步教你理解反向传播方法(這篇loss function是使用MSE方便說明原理)
    Artificial Neural Networks Explained
    Activation Functions: Neural Networks
    Batch normalization in Neural Networks
    26种神经网络激活函数可视化

    參考李宏毅老師ML課程

    相关文章

      网友评论

          本文标题:[監督式]Deep learning(深度學習)

          本文链接:https://www.haomeiwen.com/subject/fmyskqtx.html