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

Deep learning

Neural Network

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

[監督式]Deep learning(深度學習)_第1张图片

[監督式]Deep learning(深度學習)_第2张图片

[監督式]Deep learning(深度學習)_第3张图片

[監督式]Deep learning(深度學習)_第4张图片

function set(hypothesis set)

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

[監督式]Deep learning(深度學習)_第5张图片
[監督式]Deep learning(深度學習)_第6张图片
[監督式]Deep learning(深度學習)_第7张图片

Loss function

[監督式]Deep learning(深度學習)_第8张图片

[監督式]Deep learning(深度學習)_第9张图片

Gradient Desent

[監督式]Deep learning(深度學習)_第10张图片

Feedforward

預設所有的初始值,計算出所有。
從first layer出發可以一路求出所有。

[監督式]Deep learning(深度學習)_第11张图片

Backpropagation

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

  • 連鎖律(Chain Rule)
    ,是的變數,是的變數,則。
  1. Three 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 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) \frac{\partial a_1 }{\partial z_{a1}} \frac{\partial z_{a1} }{\partial w_1}

    [監督式]Deep learning(深度學習)_第12张图片

  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}

[監督式]Deep learning(深度學習)_第13张图片
  • Backpropagation
    由於連鎖律的關係,所以從可以一路求回,使用不同的activation function求的微分也不同。
    [監督式]Deep learning(深度學習)_第14张图片
    [監督式]Deep learning(深度學習)_第15张图片

過擬合問題

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


    [監督式]Deep learning(深度學習)_第18张图片

    [監督式]Deep learning(深度學習)_第19张图片
  • Weight decay
    regularization能使函數降低複雜度,避免overfitting。
    regularization(Lasso回歸):

    regularization(Ridge回歸、脊回歸、嶺回歸):

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


    [監督式]Deep learning(深度學習)_第20张图片

    [監督式]Deep learning(深度學習)_第21张图片
    [監督式]Deep learning(深度學習)_第22张图片
  • Maxout
    Maxout可以自動學習成任何分段線性凸函數的activation function,feature乘上weight後的值我們將他分組(多少組可以自己決定),然後取最大值。

[監督式]Deep learning(深度學習)_第23张图片

[監督式]Deep learning(深度學習)_第24张图片
Maxout模仿ReLU

[監督式]Deep learning(深度學習)_第25张图片

梯度消失、爆炸問題

梯度消失(gradient vanishing)

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

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

[監督式]Deep learning(深度學習)_第26张图片

梯度爆炸

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

解決或舒緩方法

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


    [監督式]Deep learning(深度學習)_第27张图片
    tanh與derivative

    [監督式]Deep learning(深度學習)_第28张图片
    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前一層神經元(NN)的數量,為W下一層神經元(NN)的數量,通常用於sigmoid function作為activation function的情形。
  • CNN為 kernel_w* kernel_h* in_channel,(kernel_w* kernel_h* out_channel)
  • 若使用uniform則是將low=,high=
    [監督式]Deep learning(深度學習)_第29张图片
He initialization

He initialization的作法是將Xavier根號內再除以2,的標準差設為,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可以預設為1,beta預設為0。

[監督式]Deep learning(深度學習)_第30张图片
[監督式]Deep learning(深度學習)_第31张图片

實作trick

  • 實作trick

    为什么sigmoid和softmax需要和cross entropy一起计算
    softmax函数计算时候为什么要减去一个最大值?
    有效防止softmax計算時上溢出(overflow)和下溢出(underflow)的方法

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

參考李宏毅老師ML課程

你可能感兴趣的:([監督式]Deep learning(深度學習))