Normalizing activations in a network
在機器學(xué)習(xí)中很多算法都是通過添加變量來獲取某種“靈活性”或者更廣闊的"適應(yīng)范圍"淆院,并且使得有機會通過"學(xué)習(xí)"來獲得最合適的參數(shù)料按。
例如在"Normalizing activations in a network"中提到的,我們先把z(i)進行normalizing,這時z(i)norm就會變?yōu)橄鄬ΚM小的一個范圍內(nèi)的數(shù)值纺非,但是實際情況可能確實是一個比較大的范圍派草,那么怎么辦呢?通過加權(quán)重變量可以讓它重新?lián)碛凶兓秶枞罚@跟原先的z是不同的目溉,原先的z過來后就不變了明肮,它可能是個很大的值,也可能是很小的值停做,但是對于加了權(quán)重變量的z(i)norm而言晤愧,它是變化的,是可以學(xué)習(xí)的蛉腌。
batch norm
- 如上圖最右側(cè)的坐標(biāo)圖官份,當(dāng)normalizing之后,znorm會被限制在一個較小的范圍內(nèi)烙丛,這導(dǎo)致了sigmoid退化成了接近線性函數(shù)舅巷。
- 為避免上述情況,則需要加γ和β河咽,γ和β使得z<~</up>可以擁有更寬闊的范圍钠右,而且γ和β是通過training而調(diào)整的。
Fitting Batch Norm into a neural network
針對一個完整的神經(jīng)網(wǎng)絡(luò)忘蟹,batch norm如下運用
adding batch norm to a network
- 可以看出在所有神經(jīng)元的計算過程中飒房,在z[l] 和 a[l]之間進行了batch norm計算
- 最終梯度下降的過程中,同樣也會計算dβ和dγ媚值,(可以簡單地認(rèn)為又加了一層神經(jīng)網(wǎng)絡(luò)狠毯,但是計算方式不同)
- 實際項目中可以通過框架的函數(shù)來實現(xiàn)batch norm,如圖中所示運用了TensorFlow的庫函數(shù)可以直接一行代碼實現(xiàn)batch norm
working with mini-batches
- 當(dāng)我們使用mini-batches的時候褥芒,均值??和??是當(dāng)前batch的??和??嚼松,所以每個batch可能不一樣
- 另外,由于計算均值??的時候锰扶,常數(shù)項會相減献酗,所以常數(shù)項b可以忽略掉
綜合起來,如下圖所示:
implementing gradient decent
- 在梯度下降的過程中坷牛,我們?nèi)匀豢梢赃\用momentum或者adam算法來加速梯度下降
Why does Batch Norm work
首先Andrew講了一個概念叫"Covariate shift", 即當(dāng)訓(xùn)練集變化的時候罕偎,通常我們都需要重新訓(xùn)練我們的模型,如下圖所示
covariate shift
而在深度學(xué)習(xí)的過程中京闰,每個隱層對于下一層來說就相當(dāng)于輸入層锨亏,而這個隱層的輸出卻會不斷改變,如下圖所示:
hidden layer changes
- 由于w, b的不斷變化忙干,導(dǎo)致hidden layer的a也不斷變化器予,這就產(chǎn)生了"covariate shift"問題,所以模型訓(xùn)練就不穩(wěn)定捐迫。
- 而batch-norm將a輸出變?yōu)橄鄬Ψ€(wěn)定的范圍乾翔,從而導(dǎo)致給下一層的輸出變得穩(wěn)定,這樣就可以解決"covariate shift"問題
- batch-norm相當(dāng)于給每一層進行了解耦合,使得每層的訓(xùn)練不會相互影響
另外反浓,Andrew還提到了batch-nom還有輕微的正則化效果萌丈。
Batch Norm at test time
batch norm at test time
通過在batch-mini的計算過程中同時計算??和??的指數(shù)加權(quán)平均值,可以得到一個??和??的平均數(shù)雷则,然后用這個平均數(shù)作為test時的??和??即可