在吳恩達深度學習視頻以及大樹先生的博客提煉筆記基礎上添加個人理解,原大樹先生博客可查看該鏈接地址大樹先生的博客- ZJ
CSDN:http://blog.csdn.net/JUNJUN_ZHAO/article/details/79497132
3.1 Tuning process (調參處理)
- 早一代的機器學習算法中,超參數比較少的情況下,我們之前利用設置網格點的方式來調試超參數;
- 但在深度學習領域,超參數較多的情況下,不是設置規則的網格點,而是隨機選擇點進行調試。這樣做是因爲在我們處理問題的時候,是無法知道哪個超參數是更重要的,所以隨機的方式去測試超參數點的性能,更爲合理,這樣可以探究更超參數的潛在價值。
如果在某一區域找到一個效果好的點,將關注點放到點附近的小區域內繼續尋找。
3.2 Using an appropriate scale to pick hyperparameters 爲超參數選擇合適的範圍
Scale均勻隨機
在超參數選擇的時候,一些超參數是在一個範圍內進行均勻隨機取值,如隱藏層神經元結點的個數、隱藏層的層數等。但是有一些超參數的選擇做均勻隨機取值是不合適的,這裏需要按照一定的比例在不同的小範圍內進行均勻隨機取值,以學習率 的選擇爲例,在0.001,…,1範圍內進行選擇:
如上圖所示,如果在 0.001,…,1 的範圍內進行進行均勻隨機取值,則有90%的概率 選擇範圍在 0.1∼1 之間,而只有10%的概率才能選擇到0.001∼0.1之間,顯然是不合理的。
所以在選擇的時候,在不同比例範圍內進行均勻隨機取值,如0.001∼0.001、0.001∼0.01、0.01∼0.1、0.1∼1 範圍內選擇。
- 代碼實現:
r = -4 * np.random.rand() # r in [-4,0]
learning_rate = 10 ** r # 10^{r}
一般的,如果在 之間的範圍內進行按比例的選擇,則 , 。
同樣,在使用指數加權平均的時候,超參數 也需要用上面這種方向進行選擇.
3.3 Hyperparameters tuning in practice:Pandas vs.Caviar
超參數訓練的實踐:Pandas VS Caviar
在超參數調試的實際操作中,我們需要根據我們現有的計算資源來決定以什麼樣的方式去調試超參數,進而對模型進行改進。下面是不同情況下的兩種方式:
在計算資源有限的情況下,使用第一種,僅調試一個模型,每天不斷優化;
在計算資源充足的情況下,使用第二種,同時並行調試多個模型,選取其中最好的模型。
3.4 Normalizing activations in a network (歸一化網絡的激活函數 )
網絡中激活值的歸一化
在 logistic Regression 中,將輸入特徵進行歸一化,可以加速模型的訓練。那麼對於更深層次的神經網絡,我們是否可以歸一化隱藏層的輸出 或者經過激活函數前的 ,以便加速神經網絡的訓練過程?答案是肯定的。
常用的方式是將隱藏層的經過激活函數前的 進行歸一化。
Batch Norm 的實現
以神經網絡中某一隱藏層的中間值爲例:
這裏加上 ε 是爲了保證數值的穩定。
到這裏所有 z 的分量都是平均值爲 0 和方差爲 1 的分佈,但是我們不希望隱藏層的單元總是如此,也許不同的分佈會更有意義,所以我們再進行計算:
這裏 和 是可以更新學習的參數,如神經網絡的權重 一樣,兩個參數的值來確定 所屬的分佈。
3.5 Fitting Batch Norm into a neural network 將 Batch Norm 擬合進神經網絡
在神經網絡中融入Batch Norm
在深度神經網絡中應用 Batch Norm,這裏以一個簡單的神經網絡爲例,前向傳播的計算流程如下圖所示:
實現梯度下降
- for t = 1 … num
(這裏 num 爲 Mini Batch 的數量):
- 在每一個 上進行前向傳播(forward prop)的計算:
- 在每個隱藏層都用 Batch Norm 將 替換爲
使用反向傳播(Back prop)計算各個參數的梯度:
- 更新參數:
- 更新參數:
同樣與 Mini-batch 梯度下降法相同,Batch Norm 同樣適用於 momentum、RMSprop、Adam 的梯度下降法來進行參數更新。
這裏沒有寫出偏置參數 是因爲 ,而 Batch Norm 要做的就是將 歸一化,結果成爲均值爲 0,標準差爲 1 的分佈,再由 和 進行重新的分佈縮放,那就是意味着,無論 值爲多少,在這個過程中都會被減去,不會再起作用。所以如果在神經網絡中應用 Batch Norm 的話,就直接將偏置參數 去掉,或者將其置零。
3.6 Why does batch Norm work? (Batch Norm 爲什麼奏效?)
Batch Norm 起作用的原因
First Reason
首先 Batch Norm 可以加速神經網絡訓練的原因和輸入層的輸入特徵進行歸一化,從而改變 Cost function 的形狀,使得每一次梯度下降都可以更快的接近函數的最小值點,從而加速模型訓練過程的原理是有相同的道理。
只是 Batch Norm 不是單純的將輸入的特徵進行歸一化,而是將各個隱藏層的激活函數的激活值進行的歸一化,並調整到另外的分佈。
Second Reason
Batch Norm 可以加速神經網絡訓練的另外一個原因是它可以使權重比網絡更滯後或者更深層。
下面是一個判別是否是貓的分類問題,假設第一訓練樣本的集合中的貓均是黑貓,而第二個訓練樣本集合中的貓是各種顏色的貓。如果我們將第二個訓練樣本直接輸入到用第一個訓練樣本集合訓練出的模型進行分類判別,那麼我們在很大程度上是無法保證能夠得到很好的判別結果。
這是因爲第一個訓練集合中均是黑貓,而第二個訓練集合中各色貓均有,雖然都是貓,但是很大程度上樣本的分佈情況是不同的,所以我們無法保證模型可以僅僅通過黑色貓的樣本就可以完美的找到完整的決策邊界。第二個樣本集合相當於第一個樣本的分佈的改變,稱爲:Covariate shift。如下圖所示:
那麼存在Covariate shift的問題如何應用在神經網絡中? 就是利用Batch Norm來實現。如下面的網絡結構:
網絡的目的是通過不斷的訓練,最後輸出一個更加接近於真實值的 。現在以第 2 個隱藏層爲輸入來看:
對於後面的神經網絡,是以第二層隱層的輸出值 作爲輸入特徵的,通過前向傳播得到最終的 ,但是因爲我們的網絡還有前面兩層,由於訓練過程,參數 , 是不斷變化的,那麼也就是說對於後面的網絡, 的值也是處於不斷變化之中,所以就有了 Covariate shift 的問題。
那麼如果對 使用了 Batch Norm,那麼即使其值不斷的變化,但是其均值和方差卻會保持。那麼 Batch Norm 的作用便是其限制了前層的參數更新導致對後面網絡數值分佈程度的影響,使得輸入後層的數值變得更加穩定。另一個角度就是可以看作,Batch Norm 削弱了前層參數與後層參數之間的聯繫,使得網絡的每層都可以自己進行學習,相對其他層有一定的獨立性,這會有助於加速整個網絡的學習。
Batch Norm 正則化效果
Batch Norm還有輕微的正則化效果。
這是因爲在使用 Mini-batch 梯度下降的時候,每次計算均值和偏差都是在一個 Mini-batch 上進行計算,而不是在整個數據樣集上。這樣就在均值和偏差上帶來一些比較小的噪聲。那麼用均值和偏差計算得到的 也將會加入一定的噪聲。
所以和 Dropout 相似,其在每個隱藏層的激活值上加入了一些噪聲,(這裏因爲 Dropout 以一定的概率給神經元乘上 0 或者 1)。所以和 Dropout 相似,Batch Norm 也有輕微的正則化效果。
這裏引入一個小的細節就是,如果使用 Batch Norm ,那麼使用大的 Mini-batch 如 256,相比使用小的 Mini-batch 如 64,會引入跟少的噪聲,那麼就會減少正則化的效果。
3.7 Batch norm at test time (測試時的 Batch Norm)
在測試數據上使用 Batch Norm
訓練過程中,(流程: 訓練 train ,開發 Dev,測試 test )我們是在每個 mini-batch 使用 Batch Norm,來計算所需要的均值 和方差 。但是在測試的時候,我們需要對每一個測試樣本進行預測,無法計算均值和方差。
此時,我們需要單獨進行估算均值 和方差 。通常的方法就是在我們訓練的過程中,對於訓練集的 mini-batch ,使用指數加權平均,當訓練結束的時候,得到指數加權平均後的均值 和方差 ,而這些值直接用於 Batch Norm 公式的計算,用以對測試樣本進行預測。
3.8 Softmax regression ( Softmax 迴歸)
在多分類問題中,有一種 logistic regression的一般形式,叫做 Softmax regression。Softmax 迴歸可以將多分類任務的輸出轉換爲各個類別可能的概率,從而將最大的概率值所對應的類別作爲輸入樣本的輸出類別。
計算公式
下圖是Softmax的公式以及一個簡單的例子:
可以看出 Softmax 通過向量 計算出總和爲 1 的四個概率。
在沒有隱藏隱藏層的時候,直接對 Softmax 層輸入樣本的特點,則在不同數量的類別下,Sotfmax 層的作用:
3.9 Trying a Softmax classifier (訓練一個 Softmax 分類器 )
理解 Sotfmax
爲什麼叫做Softmax?我們以前面的例子爲例,由 到 的計算過程如下:
通常我們判定模型的輸出類別,是將輸出的最大值對應的類別判定爲該模型的類別,也就是說最大值爲的位置1,其餘位置爲0,這也就是所謂的“hardmax”。而Sotfmax將模型判定的類別由原來的最大數字5,變爲了一個最大的概率0.842,這相對於“hardmax”而言,輸出更加“soft”而沒有那麼“hard”。
Sotfmax迴歸 將 logistic迴歸 從二分類問題推廣到了多分類問題上。
Softmax 的Loss function
在使用Sotfmax層時,對應的目標值 y 以及訓練結束前某次的輸出的概率值 分別爲:
Sotfmax 使用的 Loss function爲:
在訓練過程中,我們的目標是最小化Loss function,由目標值我們可以知道, ,所以代入 中,有:
所以爲了最小化Loss function,我們的目標就變成了使得 的概率儘可能的大。
也就是說,這裏的損失函數的作用就是找到你訓練集中的真實的類別,然後使得該類別相應的概率儘可能地高,這其實是最大似然估計的一種形式。
對應的Cost function如下:
Softmax 的梯度下降
在Softmax層的梯度計算公式爲:
3.10 Deep Learning frameworks (深度學習框架)
選擇框架的標準:
- 一個重要標準就是便於編程,這既包括神經網絡的開發,和迭代 。還包括爲產品進行配置,爲了成千上百萬 甚至上億用戶的實際使用,取決於你想要做什麼。
- 第二個重要標準是運行速度,特別是訓練大數據集時,一些框架能讓你更高效地運行和訓練神經網絡,還有一個標準人們不常提到 ,但我覺得很重要。
- 框架是否真的開放 ,否相信這個框架能長時間保持開源。
3.11 TensorFlow
參考文獻:
[1]. 大樹先生.吳恩達 Coursera深度學習課程 DeepLearning.ai 提煉筆記(2-3)– 超參數調試 和 Batch Norm
PS: 歡迎掃碼關注公衆號:「SelfImprovementLab」!專注「深度學習」,「機器學習」,「人工智能」。以及 「早起」,「閱讀」,「運動」,「英語 」「其他」不定期建羣 打卡互助活動。