Deep learning
Neural Network
每一層都可以使用不同的,sigmoid、ReLU、leaky ReLU、softmax、tanh。
function set(hypothesis set)
可以設置一個全為的特徵(),然後將併到權重裡()。矩陣的數,決定他的輸出的數,假設一個函數集合(function set),可以由這個函數集合(function set)裡面其中一個function生成。
Loss function
Gradient Desent
Feedforward
預設所有的初始值,計算出所有。
從first layer出發可以一路求出所有。
Backpropagation
計算對所有參數的偏微分,亦即所有參數的Gradient,運用微積分的連鎖律(Chain Rule)求解,從last layer可以一路回推所有參數的偏微分,注意這裡C是下標(i),表示。
- 連鎖律(Chain Rule)
,是的變數,是的變數,則。
-
Three layer(字體太小可以在latex上按右鍵開啟新分頁)
four layer(字體太小可以在latex上按右鍵開啟新分頁)
- Backpropagation
由於連鎖律的關係,所以從可以一路求回,使用不同的activation function求的微分也不同。
過擬合問題
- underfitting、overfitting
- high Bias即所謂的Underfitting,因為參數過少連Training set都會有頗大的預測誤差。
- low Bias high Variance即所謂的Overfitting,因為參數過多導致過度符合Training set的資料特性,使得其無法預測較為普遍的資料集。
-
ReLU
使用ReLU可以降低overfitting的情形,ReLU運算較為快速訓練時間較短,ReLU沒有梯度消失的問題。
ReLU只要輸入<0就不響應,等於神經元沒有繳活,作用類似dropout。
ReLU是訓練時訓練所有神經元,但訓練完後死了一部份的神經元,而Dropout是訓練時每次使用不同部份神經元。
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值。
Maxout
Maxout可以自動學習成任何分段線性凸函數的activation function,feature乘上weight後的值我們將他分組(多少組可以自己決定),然後取最大值。
梯度消失、爆炸問題
梯度消失(gradient vanishing)
當我們使用sigmoid activation在多層的DNN上會有梯度消失問題,我們在做Backpropagation,計算loss對w的梯度時,越向後傳播,梯度變得越來越小,這就意味著在網絡的前面一些層的神經元,會比後面的訓練的要慢很多,甚至不會變化。
前面我們看到的Grad如下圖,每個y與a都是一個sigmoid function,我們不斷對它們求導然後相乘,而sigmoid的導數輸出介於0~0.25之間,多次相乘後必然會接近於零,導致前面的權重更新很慢。
梯度爆炸
梯度爆炸是指activation function derivative大於1的情況,會使梯度不斷成長。
解決或舒緩方法
使用不同的activation function
-
可以使用其他activation function,如ReLU、tanh,或每層使用不同的activation function。
初始化權重(w)調整
- 初始化權重不能設為均一值(例如all zero),會導致每一層輸出的結果都為對稱的,當很多神經元存在相同值就沒有存在的意義了,例如100個神經元都為相同值,代表只使用一個神經元就能表現出一樣的情況,不管更新幾次所有權重都為相同值。
- 初始化權重值不能偏離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=
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。
實作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种神经网络激活函数可视化