DeepLearning.ai筆記:(2-3)-- 超參數調試

DeepLearning.ai筆記:(2-3)-- 超參數調試

來自專欄 Fangzh的進擊之路

首發於個人博客:

Fangzh的個人博客 | 人工智慧拯救世界?

fangzh.top

歡迎來訪

這周主要講了這些超參數調試的方法以及batch norm,還有softmax多分類函數的使用。

調試處理

之前提到的超參數有:

  • alpha
  • hidden units
  • minibatch size
  • eta (Momentum)
  • layers
  • learning rate decay
  • eta_1,eta_2,epsilon

在調參中,常用的方式是在網格中取不同的點,然後計算這些點中的最佳值,

但是左邊是均勻的選點,這樣有可能導致在某一個參數上變化很小,浪費計算時間,所以應該更推薦右邊的選點方法,即隨機選點。

而後,當隨機選點選到幾個結果比較好的點時,逐步縮小範圍,進行更精細的選取。

超參數的合適範圍

當然,隨機採樣並不是在軸上均勻的採樣。

比如說 alpha = 0.001  -1 ,這樣子,那麼在 0.1-1 的部分佔了90%的概率,顯然是不合理的,所以應該將區間對數化,轉化成 [0.001,0.01],[0.01,0.1],[0.1,1] 的區間,這樣更為合理。思路是: 10^{-3} = 0.001 ,所以取值從 [10^{-3},10^{0}] ,我們只要將指數隨機就可以了。

r = -3*np.random.rand() # rand()表示在 [0,1]隨機取樣,再乘以係數,就可以得到[-3,0]a = 10**r

同理, eta = 0.9 ,.....,0.999

通過 1-eta = 0.1,....,0.001 ,所以 1-eta = 10^{r},eta = 1-10^{r}

歸一化網路的激活函數

我們之前是將輸入的數據X歸一化,可以加速訓練,其實在神經網路中,也可以同樣歸一化,一般是對 z^{[l]} 歸一化。

這個方法叫做 batch norm

公式是:

加上 epsilon 是為了不至於除以0

而一般標準化後還會加上兩個參數,來表示新的方差 gamma 和均值 eta

gammaeta 也是參數,和 w,b 一樣,可以在學習中進行更新。

將batch norm 放入神經網路

可以看到,

先求的 z^{[1]} ,再進行batch norm,加上參數 eta^{[1]},gamma^{[1]} ,得到 {	ilde{z}}^{[1]} ,再根據activation function得到 a^{[1]}

batch norm同樣適用於Momentum、RMSprop 、Adam的梯度下降法來進行更新。

Batch Norm為什麼有用?

如果我們的圖片中訓練的都是黑貓,這個時候給你一些橘貓的圖片,那麼大概率是訓練不好的。因為相當於樣本集合的分布改變了,batch norm就可以解決這個問題。

如果這個時候要計算第三層,那麼很顯然計算結果是依賴第二層的數據的。但是如果我們對第二層的數據進行了歸一化,那麼就可以將第二層的均值和方差都限制在同一分布,而且這兩個參數是自動學習的。也就是歸一化後的數據可以減弱前層參數的作用與後層參數的作用之間的聯繫,它使得網路每層都可以自己學習。

還有就是batch norm在某種程度上有正則化的效果,因為歸一化會使各個層之間的依賴性降低,而且歸一化有帶來一定的雜訊,有點像dropout。

測試集的batch norm

batch norm是在訓練集上得到的,那麼怎麼把它應用在測試集呢?

這個時候可以直接從訓練集中拿到 musigma^{2}

使用指數加權平均,在每一步中保留 musigma^{2} ,就可以得到訓練後的 musigma^{2}

softmax

之前說的都是二分類問題,如何解決多分類問題呢?

可以用softmax演算法來解決。

前面的步驟都一樣,而到了最後一層output layer,你想要分為多少類,就用多少個神經元。

這個時候,最後一層的activation function就變成了:

a^{[l]}_i 就表示了每一個分類的概率。

計算例子如圖:

而它的損失函數用的也是cross-entropy:

最終得到一個關於Y的矩陣:

其實是可以證明,當分類為2時,softmax就是logistic regression

推薦閱讀:

TAG:筆記 | 神經網路 | 機器學習 |