這周主要講的是超參數的調試、Batch Norm以及多分類。
Hyperparameter Tuning
Tuning Process
一般來說,最重要的就是那個Learning_rate,也就是 。第二重要的一般是動量參數 以及Hidden Units的數量,還有mini-batch的大小。第三是層數以及learning_rate decay,最後是adam的參數,但是一般都是默認值0.9,0.999以及10e-8。
第二是調參時儘量不要用正交的Grid的方式進行參數搜索,因爲一開始其實並不知道那個參數比較重要,所以儘可能的隨機採集。多一些數據,瞭解一下每個參數在分佈在哪兒對模型比較優。
第三是先粗調再精調。可能隨機搜索出來的幾個比較好,那就在這個範圍找。
Parameter scale
scale 有幾種:
- 層數(2~4),單元個數(50~100),均勻採樣
- ,0.0001~1,對數採樣
- ,0.9~0.999,可以用 ,然後對數採樣。
另外要注意的是,以 舉例,0.9000和0.9005可能差別不大,但是對於0.999和0.9995差別就很大了,因爲第一個是 ,第二個是 ,所以相對變化很重要。
調參模式:熊貓和魚子醬
- 數據是會時不時發生變化的,隨着數據的變化,模型參數應該與時俱進,時不時重新更新一下數據。
- 調參模式,如果硬件條件有限,可以拿一個模型精細的慢慢調,這個就類似於熊貓每次只生1、2個孩子,然後仔細照看;還有一種是魚子模式,魚每次生上億個卵,看哪個能成。這兩種模式可以根據環境條件具體情況具體來做。
Batch Normalization
什麼是Batch Norm?
Batch Norm是給每一層都加上輸入歸一化,如下圖所示:
首先對輸入計算均值和方差,然後做歸一化,然後給分配上一個縮放和偏移,這個縮放和偏移是“學習”得來的。
Batch Norm的位置在上圖所示的位置,也就是Z和A之間。
Mini-Batch的Batch Norm以及test time的處理
當使用Mini-Batch的時候,使用指數衰減平均對當前的Mini-Batch的均值和方差。然後最後test的時候,就用最後一個均值和方差就行了。
爲什麼Batch Norm好用?
- Batch Norm最大的作用是降低Covariate Shift的影響。簡要的說就是輸入特徵發生變化了:對每一層來說,在學習過程中,由於前一層的參數總是發生變化,那麼對於後一層,Feature Vector總是發生變化,那麼學習起來就會更困難。如果我們對每一層做一個均值方差歸一化,那麼至少每一層的Feature Vector的均值和方差是比較穩定的,這樣就減小了Covariate Shift的影響。
- Regularization的作用。Batch Norm還有一些輕微的正則化的作用。這是由於加上了縮放和偏移,導致給Z加上了一些噪聲,類似於drop out,所以有輕微的正則化作用。
多分類
SoftMax Activation Function
SoftMax就是對輸出的Z中每一個元素做exp(),然後計算exp()後的每一個元素的權重。
Loss Function
如下圖所示: