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

2018-12-19  本文已影响0人  RJ阿杰

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

  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}

過擬合問題

  1. high Bias即所謂的Underfitting,因為參數過少連Training set都會有頗大的預測誤差。
  2. low Bias high Variance即所謂的Overfitting,因為參數過多導致過度符合Training set的資料特性,使得其無法預測較為普遍的資料集。
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
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課程

上一篇 下一篇

猜你喜欢

热点阅读