為何邏輯回歸可以使用0來初始化,而神經網路不行?

前言

本文是筆者在學習吳恩達的深度學習課程時所碰到的問題。在課程中僅概述了此問題的發生原因,藉此引導出隨機初始化神經網路權重的必要性,並沒有給出嚴謹的數學推導。筆者試著把中間缺少的數學推導過程補上,並將之記錄於此。

“為何不能用0來初始化神經網路?”,這個問題的答案簡單來說,是因為這樣做的話,會造成weight symmetry的問題。也就是說網路同一層中的每個神經元都發揮一樣的功能,而這個問題在訓練過程中是會持續存在的。

那為什麼邏輯回歸模型可以用0來初始化呢?答案就在於兩者模型架構的不同——也就是有沒有隱藏層的區別。

以下我們將實際觀察兩種模型的前向及反向傳播過程,並從中找出問題發生的原因。

邏輯回歸的前向傳播

邏輯回歸模型並沒有隱藏層,輸入向量與權重向量做內積後加上偏置量得到z值。把z值丟到sigmoid激活函數中可得到激活值a,最後便可利用這個a值與label(即y)做運算得到loss。
邏輯回歸中的前向傳播
其中 a = s i g m o i d ( z ) = 1 1 + e z a = sigmoid(z) = \frac{1}{1+e^{-z}}
L ( a , y ) = ( y l o g ( a ) + ( 1 y ) l o g ( 1 a ) ) L(a,y) = -(ylog(a) + (1-y)log(1-a))

邏輯回歸的反向傳播

反向傳播是計算loss對模型中各參數的梯度(偏微分)的過程。得到梯度以後,便可以使用SGD, Momentum, AdaGrad, RMSProp, Adam等算法來學習模型的參數。

以下是邏輯回歸模型的反向傳播的計算過程:
損失函數L對a的微分為: d L d a = y a + 1 y 1 a \frac{dL}{da} = -\frac{y}{a} + \frac{1-y}{1-a}
損失函數L對z的微分為: d L d z = d L d a d a d z \frac{dL}{dz} = \frac{dL}{da}\frac{da}{dz}
其中 d L d a \frac{dL}{da} 己在上上式得到,以下計算 d a d z \frac{da}{dz} 的部份。
d a d z = ( ( 1 + e z ) 1 ) = ( 1 + e z ) 2 ( e z ) = ( 1 + e z ) 2 e z = 1 1 + e z e z 1 + e z = 1 1 + e z ( 1 1 1 + e z ) = a ( 1 a ) \frac{da}{dz}\\ = ((1+e^{-z})^{-1})'\\ = -(1+e^{-z})^{-2}*(-e^{-z}) \\ =(1+e^{-z})^{-2}*e^{-z}\\ = \frac{1}{1+e^{-z}}*\frac{e^{-z}}{1+e^{-z}}\\ =\frac{1}{1+e^{-z}}*(1-\frac{1}{1+e^{-z}})\\ =a*(1-a)
於是便可以得到
d L d z = ( y a + 1 y 1 a ) ( a ( 1 a ) ) = a y \frac{dL}{dz} = (-\frac{y}{a} + \frac{1-y}{1-a})*(a*(1-a)) = a-y
最後是損失函數對weight及bias的微分:
d L d w = d L d z d z d w = d L d z x T \frac{dL}{dw} = \frac{dL}{dz}*\frac{dz}{dw} = \frac{dL}{dz}*x^{T}
d L d b = d L d z d z d b = d L d z \frac{dL}{db} = \frac{dL}{dz}*\frac{dz}{db} = \frac{dL}{dz}

以0初始化邏輯回歸模型

如果我們以0來初始化模型權重,那麼在第一個epoch中各權重的值都會是相同的。但是在接下來的權重更新過程中,這個對稱就會被打破,原因如下。

第一次權重更新

d L d w \frac{dL}{dw} 是由 d L d z ( = a y ) \frac{dL}{dz}(=a-y) x T x^{T} 做矩陣乘法得來,而這兩個矩陣中的元素並不存在什麼規律,因此 d L d w \frac{dL}{dw} 矩陣並不在在symmetry的情況。
在權重更新的過程,即
w = w a l p h a d L d w w = w - alpha*\frac{dL}{dw} w w 中的元素也不會都是相同的值,所以weight symmetry在第一個epoch結束時便可成功打破!

神經網路的前向傳播

神經網路架構
如下圖,計算過程與邏輯回歸模型雷同,差別只在於多了一個隱藏層。
神經網路前向傳播公式

神經網路的反向傳播

此處沿用課程中的符號表示法:

  • 將samples的維度皆擺在最後一維,如X的維度為(#features, #samples)。
  • d L d X \frac{dL}{dX} 簡寫為 d X dX

d A [ 2 ] = Y A [ 2 ] + 1 Y 1 A [ 2 ] dA^{[2]} = -\frac{Y}{A^{[2]}} + \frac{1-Y}{1-A^{[2]}}
d Z [ 2 ] = A [ 2 ] Y dZ^{[2]} = A^{[2]} - Y
d W [ 2 ] = 1 m d Z [ 2 ] A [ 1 ] T dW^{[2]} = \frac{1}{m}dZ^{[2]}A^{[1]T}
d b [ 2 ] = 1 m n p . s u m ( d Z [ 2 ] , a x i s = 1 , k e e p d i m s = T r u e ) db^{[2]} = \frac{1}{m}np.sum(dZ^{[2]} ,axis=1, keepdims=True)
d A [ 1 ] = W [ 2 ] T d Z [ 2 ] = W [ 2 ] T ( A [ 2 ] Y ) dA^{[1]} = W^{[2]T}dZ^{[2]} = W^{[2]T}(A^{[2]} - Y)
d Z [ 1 ] = d A [ 1 ] σ ( Z [ 1 ] ) = W [ 2 ] T ( A [ 2 ] Y ) A [ 1 ] ( 1 A [ 1 ] ) dZ^{[1]} = dA^{[1]}*\sigma'(Z^{[1]}) = W^{[2]T}(A^{[2]} - Y) * A^{[1]} * (1-A^{[1]})
d W [ 1 ] = 1 m d Z [ 1 ] X T dW^{[1]} = \frac{1}{m}dZ^{[1]}X^{T}
d b [ 1 ] = 1 m n p . s u m ( d Z [ 1 ] , a x i s = 1 , k e e p d i m s = T r u e ) = 1 m n p . s u m ( W [ 2 ] T ( A [ 2 ] Y ) A [ 1 ] ( 1 A [ 1 ] ) , a x i s = 1 , k e e p d i m s = T r u e ) db^{[1]} = \frac{1}{m}np.sum(dZ^{[1]} ,axis=1, keepdims=True) \\ =\frac{1}{m}np.sum(W^{[2]T}(A^{[2]} - Y) * A^{[1]} * (1-A^{[1]}) ,\\axis=1, keepdims=True)

神經網路的權重更新

W [ 2 ] = W [ 2 ] α d W [ 2 ] = W [ 2 ] α 1 m ( A [ 2 ] Y ) A [ 1 ] T W^{[2]} = W^{[2]} - \alpha dW^{[2]} \\ = W^{[2]} - \alpha\frac{1}{m}(A^{[2]} - Y)A^{[1]T}

W [ 1 ] = W [ 1 ] α d W [ 1 ] = W [ 1 ] α 1 m ( W [ 2 ] T ( A [ 2 ] Y ) A [ 1 ] ( 1 A [ 1 ] ) ) X T W^{[1]} = W^{[1]} - \alpha dW^{[1]} \\ =W^{[1]} - \alpha\frac{1}{m}(W^{[2]T}(A^{[2]} - Y)*A^{[1]}*(1-A^{[1]}))X^{T}
其中 W [ 2 ] W^{[2]} 的形狀為 ( n [ 2 ] (n^{[2]} , n [ 1 ] ) n^{[1]}) , W [ 1 ] W^{[1]} 的形狀為 ( n [ 1 ] (n^{[1]} , n [ 0 ] ) n^{[0]})
A [ 2 ] A^{[2]} y y 的形狀為 ( n [ 2 ] , m ) (n^{[2]}, m) A [ 1 ] A^{[1]} 的形狀為 ( n [ 1 ] , m ) (n^{[1]},m) .
Z [ 2 ] Z^{[2]} 的形狀為 ( n [ 2 ] , m ) (n^{[2]}, m) Z [ 1 ] Z^{[1]} 的形狀為 ( n [ 1 ] , m ) (n^{[1]},m) .
X T X^{T} 的形狀為 ( n [ 0 ] , m ) (n^{[0]},m) .
注意上面二式中特別以 * 符號表示的皆為逐元素相乘,其餘乘法為純量乘法或矩陣乘法。

以0初始化神經網路

假設 m = 5 , n [ 0 ] = 3 , n [ 1 ] = 4 , n [ 2 ] = 2 m=5,n^{[0]}=3,n^{[1]}=4,n^{[2]}=2
我們將 W [ 1 ] W^{[1]} , b [ 1 ] b^{[1]} , W [ 2 ] W^{[2]} b [ 2 ] b^{[2]} 皆設為0矩陣,並且將學習率設為0.01。

因為 b [ 1 ] b^{[1]} b [ 2 ] b^{[2]} 是什麼值與weight symmetry並無直接關係,因此在下文中僅考慮 W [ 1 ] W^{[1]} W [ 2 ] W^{[2]} 的權重更新。

第一次權重更新

前向傳播

依據前向傳播的公式,可以得到:
A [ 2 ] = σ ( b [ 2 ] ) ( 0.5 ( n [ 2 ] , m ) ) A^{[2]} = \sigma(b^{[2]}) (全是0.5,形狀為(n^{[2]},m)的矩陣)
a2
,及
A [ 1 ] = σ ( b [ 1 ] ) ( 0.5 ( n [ 1 ] , m ) ) A^{[1]} = \sigma(b^{[1]}) (全是0.5,形狀為(n^{[1]},m)的矩陣)
a1

反向傳播

首先回憶 d W [ 2 ] = 1 m d Z [ 2 ] A [ 1 ] T dW^{[2]} = \frac{1}{m}dZ^{[2]}A^{[1]T}
其中 d Z [ 2 ] dZ^{[2]} 等於 A [ 2 ] Y A^{[2]}-Y ,這一項中的各元素並沒有什麼規律。
dz2
但是因為 A [ 1 ] T A^{[1]T} 中的每個元素都一樣,
a1^T
做矩陣乘法後, d W [ 2 ] dW^{[2]} 中的每個column都一樣。
dw2
而權重更新後的 W [ 2 ] W^{[2]} 中的每個column也都是一樣的。
w2(after)
再來看 W [ 1 ] W^{[1]} b [ 1 ] b^{[1]} 。因為 d W [ 1 ] dW^{[1]} d b [ 1 ] db^{[1]} 的中都有一項 W [ 2 ] W^{[2]} ,所以在矩陣乘法後它們都會變成0矩陣。因此在第一次更新中 W [ 1 ] W^{[1]} b [ 1 ] b^{[1]} 仍維持原本的值。下圖為更新後的 W [ 1 ] W^{[1]}
w1

第二次權重更新

因為 W [ 1 ] W^{[1]} b [ 1 ] b^{[1]} 在第一次更新中仍然是0矩陣,因此 A [ 1 ] A^{[1]} 仍然是一個全是0.5的矩陣。
a1
與第一次更新時的情況一樣,經過矩陣乘法得到的 d W [ 2 ] dW^{[2]} 當中的每個column都一樣。
dw2
因此第二次更新後的 W [ 2 ] W^{[2]} 也是各column都一樣。
w2(after)
再來看 W [ 1 ] W^{[1]} 的更新過程。因為前一輪的 W [ 2 ] T W^{[2]T} 中的各row都一樣,
w2^T
與不規則的 A [ 2 ] y A^{[2]}-y
dz2
做矩陣乘法後會得到一個各row都一樣的 d A [ 1 ] dA^{[1]}
da1
將這個矩陣與 A [ 1 ] ( 1 A [ 1 ] ) A^{[1]}*(1-A^{[1]})
a1(1-a1)
做逐元素相乘後的得到的 d Z [ 1 ] dZ^{[1]} 中各row仍然一樣:
dz1
d W [ 1 ] = 1 m d Z [ 1 ] X T dW^{[1]}= \frac{1}{m}dZ^{[1]}X^{T} :
dw1
因此更新後的 W [ 1 ] W^{[1]} 中的每個row都是一樣的。
w1(after)

第三次權重更新

因為 W [ 1 ] W^{[1]} 中的各row都是一樣的,所以 A [ 1 ] A^{[1]} 也是一樣。
a1
我們可以接著看出 d W [ 2 ] = 1 m d Z [ 2 ] A [ 1 ] T dW^{[2]} = \frac{1}{m}dZ^{[2]}A^{[1]T} 中的各column都是一樣的。
dw2
因此更新後的 W [ 2 ] W^{[2]} 也是各column都一樣,
w2(after)
接著來看 W [ 1 ] W^{[1]} 的更新過程:
第二次更新後的 W [ 2 ] T W^{[2]T} 中的各row都是一樣的,
w2.T
做運算後得到的 d Z [ 1 ] dZ^{[1]} 中的各row也是一樣的。
dz1
d W [ 1 ] = 1 m d Z [ 1 ] X T dW^{[1]} = \frac{1}{m}dZ^{[1]}X^{T} :
dw1
最後我們得到更新後的 W [ 1 ] W^{[1]} ,它的各row也都是一樣的:
w1(after)
因此在本次權重更新中,weight symmetry仍然未被打破。

我們可以預見,只要前一輪的 W [ 1 ] W^{[1]} 各row一樣,更新後的 W [ 2 ] W^{[2]} 的各column就會一樣;並且只要前一輪的 W [ 2 ] W^{[2]} 各column一樣,更新後的 W [ 1 ] W^{[1]} 的各row就會一樣。這個情況會不斷地輪迴,無法被打破。

結論

讓我們來看看到底是什麼原因造成了無法打破的weight symmetry。

在這之前,我們先來回顧一下為何邏輯回歸模型中不會出現這種情況。

我們發現,用來更新權重的 d L d w \frac{dL}{dw} 是由 d L d z = a y \frac{dL}{dz}=a-y x x 相乘得來,而 a y a-y x x 兩個矩陣中的每個元素都不同,因此他們相乘得到的 d L d w \frac{dL}{dw} 便不會有對稱的問題。

而在神經網路中,因為第二層的 d Z [ 2 ] = ( A [ 2 ] Y ) dZ^{[2]}=(A^{[2]} - Y) 與第零層的 X X 無法直接接觸,它們中間隔了其它具有weight symmetry特性的矩陣,所以weight symmetry無法消除,而這就是我們必須隨機初始化神經網路權重的真正原因!

注:以上實驗結果來自NN zero_initialization.py,需要的同學可以前往參看。

猜你喜欢

转载自blog.csdn.net/keineahnung2345/article/details/83690662