深度學習——超參數調試[7]

目錄算法

  • 超參數調整
  • 幾個超參數範圍選擇的方法
  • 超參數的實踐:pandas VS canviar
  • 正則化激活函數
  • softmax迴歸

1、超參數調整網絡

  • 重要性

從高到低:學習率$\alpha$——>$\beta$(0.9)、hidden units、minibatch size——>layers、學習率衰減——>$\beta_{1}$(0.9)、$\beta_{2}$(0.99)、$\epsilon$($10^{-8}$)app

  • 如何調整參數

不要用grid來設置選擇,由於不一樣參數的重要性不一樣框架

  Hyperparameter2
Hyperparameter1 x x x x
x x x x
x x x x
x x x x

參數的選擇範圍能夠先肯定一個大的,再縮小ide

2、爲超參數選擇合適的範圍函數

  • uniform選擇(均勻)

如每層的節點數或網絡層數。但並非適用於全部超參數學習

  • scale的方法:好比選擇學習率

若是在[0.0001,1]之間均勻選擇,那麼其實90%的數據是來自於[0.1,1],10%是來自[0.0001,0.1]。爲何這個不合理?(沒有找到合理的解釋,是否是經驗呢?)測試

更合理的方法應該是把[0.0001,1]轉換成[-4,0] (10-4 = 0.0001),而後在[-4,0]間取樣,這樣在[0.0001,0.001]和[0.1,1]間取到的數的機率更平均spa

更通常地,取對數,把區間寫成[a,b]3d

  • approximate scale:如指數權重均值超參數的調整

爲何直接取[0.9,0.999]是均勻分佈很差:當$\beta$越接近1時,它很小的變化會對$\frac{1}{1-\beta}$結果形成更大的影響

$\beta$ 0.9 0.999 0.9000 0.9005 0.999 0.9995
  10 1000        
$1-\beta$ 0.1 0.001        
$\frac{1}{1-\beta}$     10 10.05 1000 2000

調整方法:把對$\beta$的選擇,變成對$1-\beta$的考慮,而後再進行approximate scale,轉換成對次方的取值[-3, -1]

3、超參數的實踐:pandas VS canviar

  • pandas( babysitting one model)

一次就關注一個model,而後頻繁地進行修改;系統比較複雜時選這個

  • canviar(training many models in parrel)

一次能夠並行調試多個model;有比較多的計算資源時選這個

4、正則化激活函數

  • 正則化激活函數:對隱藏層的輸入進行正則化(而不止是第一個輸入層)

實現方式:batch歸一化算法(這裏默認對z值而不是對a)。計算出znorm後,再求一個式子(有兩個參數$\eta$、$\beta$),最後是用$\tilde{z}$來計算,而$\tilde{z}$的均值和方差能夠經過兩個參數來控制

給定一層的中間結果$z^{(1)}, z^{(2)}..., z^{(m)}$

$\mu = \frac{1}{m}\sum_{i}z^{(i)}$

$\sigma = \frac{1}{m}\sum_{i}(z_{i}-\mu)^2$

$z^{(i)}_{norm}=\frac{z^{(i)}-\mu}{\sqrt{\sigma^2+\epsilon}}$

$\tilde{z}^{(i)}=\eta z^{(i)}_{norm}+\beta$

if $\eta = \sqrt{\sigma^2+\epsilon}$

   and $\beta = \mu$

then $\tilde{z}^{(i)}=z^{(i)}$

  • 在nn中使用batch-norm 通常框架中會把這個實現好,如tf,只要一個函數便可

  • 在mini-batch中使用bn,不考慮$b^{[l]}$

由於後面會對$z$值求平均再減去均值,這樣$b^{[l]}$不管是什麼值,最後都不會對結果有影響,所以這裏能夠再也不考慮$b^{[l]}$這個參數,也就是$z^{[l]}=w^{[l]}a^{[l-1}]$。在反向求導中也不須要考慮$db^{[l]}$

  • 爲何bn會有用
    • 歸一化:與輸入歸一化的做用一致,能夠加速學習
    • 就某一層來講,它的上一層對它的輸入會發生變化,可是經過歸一化,可使得這個變化被限制在必定的範圍(均值、方差)內,使得層與層之間能夠稍微獨立一點

例:對黑貓進行訓練獲得一個映射關係。若是把這個函數運用到對有色貓的識別,也就是輸入值的分佈發生了改變。那其實應該從新進行訓練(covariance shift問題)

對於一個深層網絡,若是考慮第$l$層,當前面的參數發生變化時,$l$層的輸入也就相應變化。經過batch normalize可讓$l$層看到/處理的數據分佈變得更穩定,減小了前面參數對後面層的影響。

    • 反作用:正則化。每個mini-batch是經過相應batch的均值/方差進行縮放,由此對該batch的$z$產生一些噪聲,與dropout相似,從而對激活函數產生噪聲,而有了正則化的效果(避免過擬合,由於後面不會過度依賴前面的參數)
  • 在測試集上使用bn

訓練時,bn是須要在整個mini-batch上執行,但測試時可能不能一次同時執行整個mini-batch(樣本數量比較大),所以須要另外的方法進行估算

方法:指數權重平均值

5、softmax迴歸

相對於邏輯迴歸,softmax把輸入分紅$k$類,通常$k>2$

以下,把輸入圖片分紅4類

  • softmax激活函數:和前面不一樣的是,它的輸入和輸出都是向量,前面只是實數;對輸出結果歸一化,輸出的機率之和爲1

$a=softmax(z)=\begin{bmatrix}\frac{e^{z_1}}{\sum_{j=1}^ke^{z_j}}\\\vdots  \\ \frac{e^{z_k}}{\sum_{j=1}^ke^{z_j}}\end{bmatrix}$

例:

$z=\begin{bmatrix}5\\ 2\\ -1\\3 \end{bmatrix}$    $t=e^{z_i}=\begin{bmatrix}e^5\\ e^2\\ e^{-1}\\e^3 \end{bmatrix}=\begin{bmatrix}148.4\\ 7.4\\ 0.4\\20.1 \end{bmatrix}$    $\sum_{j=1}^4t_j=176.3$    $a=\frac{t}{176.3}=\begin{bmatrix}0.842\\ 0.042\\ 0.002\\0.114 \end{bmatrix}$

  • hardmax

相對於hard max,它是把最可能的結果標記爲1,其它爲0。而softmax是經過幾率大小來體現

  • softmax的前向傳播和反向求導過程

相關參數

$w=\begin{bmatrix}w_{11} & ... & w_{1m}\\  \vdots &  &\vdots  \\  w_{k1}& ... &w_{km} \end{bmatrix}$   $x=\begin{bmatrix}x_1\\\vdots  \\ x_m\end{bmatrix}$   $b=\begin{bmatrix}b_1\\\vdots  \\ b_k\end{bmatrix}$

前向傳播

$z=wx+b=\begin{bmatrix}\sum_{i=1}^m w_{1i}x_i + b_1\\\vdots  \\ \sum_{i=1}^m w_{ki}x_i + b_k\end{bmatrix}=\begin{bmatrix}z_1\\\vdots  \\ z_k\end{bmatrix}$

$a=softmax(z)=\begin{bmatrix}\frac{e^{z_1}}{\sum_{j=1}^ke^{z_j}}\\\vdots  \\ \frac{e^{z_k}}{\sum_{j=1}^ke^{z_j}}\end{bmatrix}=\begin{bmatrix}a_1\\\vdots  \\ a_k\end{bmatrix}$

定義loss函數

$L(y, \widehat{y})=-\sum_{j=1}^ky_ilog\widehat{y_i}$,其中$\widehat{y}=a$

反向傳播求導

$da_j=\frac{dL}{a_j}=-\frac{y_j}{a_j}$

接下來要計算:$dz_i=\frac{dL}{z_i}$

開始時老是用$dz_i=\frac{dL}{z_i}=\frac{dL}{a_i}\cdot \frac{a_i}{z_i}$

這個實際上是不對的,由於不只$a_i$計算中用到$z_i$,在$a_j$($j\neq i$)計算中也用到了,因此求導時要把全部$a$考慮進來,能夠分紅兩種狀況

$i = i$, $\frac{da_i}{dz_i}=\frac{e^{z_i}\sum_{j=1}^ke^{z_j}-(e^{z_i})^2}{(\sum_{j=1}^ke^{z_j})^2}=a_i-a_i^2$

$i \neq j$, $\frac{da_j}{dz_i}=-\frac{e^{z_i}e^{z_j}}{(\sum_{j=1}^ke^{z_j})^2}=-a_ia_j$

由上面兩種狀況合併可得:

$dz_i=\frac{dL}{da_i}\cdot\frac{da_i}{dz_i}+\sum_{j\neq i}\frac{dL}{da_j}\cdot \frac{da_j}{dz_i}\\=\frac{-y_i}{a_i}(a_i-a_i^2)+\sum_{j\neq i}\frac{y_j}{a_j} a_ia_j\\=-y_i+a_iy_i+a_i\sum_{j\neq i}y_j\\=-y_i+ai\sum_{j=1}^ky_j\\=a_i-y_i$

最後一步計算中,$y_j$求和爲1,是由於一個輸入只屬於一種分類,也就是隻有一個$y_i$取值爲1,其它則爲0

相關文章
相關標籤/搜索