神经网络预览
- 画出如下所示的两层神经网络
- 用中括号上标 [ i ] {[i]} [i]表示神经网络的第几层,用括号上标 ( i ) {(i)} (i)表示第 i i i个训练样本。在网络中也拥有计算图中的backward和forward机制,backward就是求偏导计算出 W [ i ] W^{[i]} W[i]和 b [ i ] b^{[i]} b[i]的值。
双层神经网络
-
如下是一个双层神经网络:
-
包括输出层、隐藏层(hidden layer)、输出层
-
其中,隐藏层有参数 W [ 1 ] [ 4 , 3 ] W^{[1]} [4,3] W[1][4,3]和 b [ 1 ] [ 4 , 1 ] b^{[1]}[4,1] b[1][4,1]。其中, [ 4 , 3 ] [4,3] [4,3]是因为有隐藏层有4个神经元,有3个输入值 x x x,即,每一个隐藏层的神经元有参数 w [ 1 ] [ 1 , 3 ] w^{[1]}[1,3] w[1][1,3]和 b [ 1 ] [ 1 , 1 ] b^{[1]}[1,1] b[1][1,1]。
i n p u t = ( x 1 x 2 x 3 ) , W n = ( w 1 w 2 w 3 ) , n ∈ ( 1 , 2 , 3 , 4 ) input = \left ( \begin{matrix} x_1 \\ x_2 \\ x_3 \end{matrix} \right ), W_n = \left ( \begin{matrix} w_1 & w_2 & w_3 \\ \end{matrix} \right ), n \in (1,2,3,4) input= x1x2x3 ,Wn=(w1w2w3),n∈(1,2,3,4) -
输出层有参数 W [ 2 ] [ 1 , 4 ] W^{[2]}[1,4] W[2][1,4]和 b [ 2 ] [ 1 , 1 ] b^{[2]}[1,1] b[2][1,1],同理,输出层只有一个神经元,但有四个输入值。
双层神经网络的计算
-
对如下双层神经网络列出算式:
-
其中每一个 w n [ 1 ] w_n^{[1]} wn[1]都是一个 [ 1 , 3 ] [1,3] [1,3]向量
w 1 [ 1 ] = ( w 1 w 2 w 3 ) , x = ( x 1 x 2 x 3 ) , b = b 1 w_1^{[1]} = \left ( \begin{matrix} w_1 \\ w_2 \\ w_3 \end{matrix} \right ), x = \left ( \begin{matrix} x_1 \\ x_2 \\ x_3 \end{matrix} \right ), b = b_1 w1[1]= w1w2w3 ,x= x1x2x3 ,b=b1
z 1 [ 1 ] = w 1 [ 1 ] T x + b = ( w 1 × x 1 + b w 2 × x 2 + b w 3 × x 3 + b ) z_1^{[1]} = w_1^{[1]T}x+b= \left ( \begin{matrix} w_1\times x_1+b & w_2\times x_2 + b & w_3\times x_3+b \end{matrix} \right ) z1[1]=w1[1]Tx+b=(w1×x1+bw2×x2+bw3×x3+b) -
如果将四个神经元组合在一起, z [ 1 ] z^{[1]} z[1]就是一个 [ 4 , 3 ] [4,3] [4,3]的矩阵
z [ 1 ] = ( w 1 [ 1 ] × x 1 + b [ 1 ] w 2 [ 1 ] × x 2 + b [ 1 ] w 3 [ 1 ] × x 3 + b [ 1 ] w 1 [ 2 ] × x 1 + b [ 2 ] w 2 [ 2 ] × x 2 + b [ 2 ] w 3 [ 2 ] × x 3 + b [ 2 ] w 1 [ 3 ] × x 1 + b [ 3 ] w 2 [ 3 ] × x 2 + b [ 3 ] w 3 [ 3 ] × x 3 + b [ 3 ] w 1 [ 4 ] × x 1 + b [ 4 ] w 2 [ 4 ] × x 2 + b [ 4 ] w 3 [ 4 ] × x 3 + b [ 4 ] ) z^{[1]} = \left ( \begin{matrix} w_1^{[1]}\times x_1+b^{[1]} & w_2^{[1]}\times x_2 + b^{[1]} & w_3^{[1]}\times x_3+b^{[1]} \\ w_1^{[2]}\times x_1+b^{[2]} & w_2^{[2]}\times x_2 + b^{[2]} & w_3^{[2]}\times x_3+b^{[2]} \\ w_1^{[3]}\times x_1+b^{[3]} & w_2^{[3]}\times x_2 + b^{[3]} & w_3^{[3]}\times x_3+b^{[3]} \\ w_1^{[4]}\times x_1+b^{[4]} & w_2^{[4]}\times x_2 + b^{[4]} & w_3^{[4]}\times x_3+b^{[4]} \end{matrix} \right ) z[1]= w1[1]×x1+b[1]w1[2]×x1+b[2]w1[3]×x1+b[3]w1[4]×x1+b[4]w2[1]×x2+b[1]w2[2]×x2+b[2]w2[3]×x2+b[3]w2[4]×x2+b[4]w3[1]×x3+b[1]w3[2]×x3+b[2]w3[3]×x3+b[3]w3[4]×x3+b[4]
向量化
-
有下列代码实现:
-
向量化去掉for循环
-
前面已经定义了向量化的参数:
w [ 1 ] = ( w 1 w 2 w 3 ) , x = ( x 1 x 2 x 3 ) , b = b 1 w^{[1]} = \left ( \begin{matrix} w_1 \\ w_2 \\ w_3 \end{matrix} \right ), x = \left ( \begin{matrix} x_1 \\ x_2 \\ x_3 \end{matrix} \right ), b = b_1 w[1]= w1w2w3 ,x= x1x2x3 ,b=b1
z 1 [ 1 ] = w 1 [ 1 ] T x + b = ( w 1 × x 1 + b w 2 × x 2 + b w 3 × x 3 + b w 4 × x 3 + b ) z_1^{[1]} = w_1^{[1]T}x+b= \left ( \begin{matrix} w_1\times x_1+b & w_2\times x_2 + b & w_3\times x_3+b &w_4\times x_3+b \end{matrix} \right ) z1[1]=w1[1]Tx+b=(w1×x1+bw2×x2+bw3×x3+bw4×x3+b)
z [ 1 ] = ( w 1 [ 1 ] × x 1 + b [ 1 ] w 2 [ 1 ] × x 2 + b [ 1 ] w 3 [ 1 ] × x 3 + b [ 1 ] w 1 [ 2 ] × x 1 + b [ 2 ] w 2 [ 2 ] × x 2 + b [ 2 ] w 3 [ 2 ] × x 3 + b [ 2 ] w 1 [ 3 ] × x 1 + b [ 3 ] w 2 [ 3 ] × x 2 + b [ 3 ] w 3 [ 3 ] × x 3 + b [ 3 ] w 1 [ 4 ] × x 1 + b [ 4 ] w 2 [ 4 ] × x 2 + b [ 4 ] w 3 [ 4 ] × x 3 + b [ 4 ] ) z^{[1]} = \left ( \begin{matrix} w_1^{[1]}\times x_1+b^{[1]} & w_2^{[1]}\times x_2 + b^{[1]} & w_3^{[1]}\times x_3+b^{[1]} \\ w_1^{[2]}\times x_1+b^{[2]} & w_2^{[2]}\times x_2 + b^{[2]} & w_3^{[2]}\times x_3+b^{[2]} \\ w_1^{[3]}\times x_1+b^{[3]} & w_2^{[3]}\times x_2 + b^{[3]} & w_3^{[3]}\times x_3+b^{[3]} \\ w_1^{[4]}\times x_1+b^{[4]} & w_2^{[4]}\times x_2 + b^{[4]} & w_3^{[4]}\times x_3+b^{[4]} \end{matrix} \right ) z[1]= w1[1]×x1+b[1]w1[2]×x1+b[2]w1[3]×x1+b[3]w1[4]×x1+b[4]w2[1]×x2+b[1]w2[2]×x2+b[2]w2[3]×x2+b[3]w2[4]×x2+b[4]w3[1]×x3+b[1]w3[2]×x3+b[2]w3[3]×x3+b[3]w3[4]×x3+b[4] -
同样将 a a a向量化:
a [ 1 ] = { σ ( z 1 [ 1 ] ) σ ( z 2 [ 1 ] ) σ ( z 3 [ 1 ] ) σ ( z 4 [ 1 ] ) } a^{[1]}=\begin{matrix}\{\sigma(z_1^{{[1]}}) & \sigma(z_2^{{[1]}}) & \sigma(z_3^{{[1]}})&\sigma(z_4^{{[1]}})\}\end{matrix} a[1]={σ(z1[1])σ(z2[1])σ(z3[1])σ(z4[1])} -
第一层(隐藏层)的可以简化为:
z [ 1 ] = w [ 1 ] T x + b z^{[1]} = w^{[1]T}x+b z[1]=w[1]Tx+b
a [ 1 ] = σ ( z [ 1 ] ) a^{[1]} = \sigma(z^{[1]}) a[1]=σ(z[1]) -
同理,向量化第二层(输出层)的参数并简化计算:
w [ 2 ] = ( w 1 w 2 w 3 w 4 ) w^{[2]} = \begin{matrix} (w_1 & w_2 & w_3 & w_4) \end{matrix} w[2]=(w1w2w3w4)
z
[
2
]
=
w
[
2
]
×
a
[
1
]
+
b
z^{[2]} = w^{[2]}\times a^{[1]} + b
z[2]=w[2]×a[1]+b
a
[
2
]
=
σ
(
z
[
2
]
)
a^{[2]} = \sigma(z^{[2]})
a[2]=σ(z[2])
激活函数
- 在前面的例子中,都隐藏层和输出层中都是用了 s i g m o i d sigmoid sigmoid函数,但实践中, s i g m o i d sigmoid sigmoid通常只用于二分分类的输出层
- 其他常见的激活函数:
-
t
a
n
h
tanh
tanh函数:
t a n h = e z − e − z e z + e − z tanh = \frac{e^{z}-e^{-z}}{e^{z}+e^{-z}} tanh=ez+e−zez−e−z
我们在隐藏层中通常用此函数代替
s
i
g
m
o
i
d
sigmoid
sigmoid,但
t
a
n
h
tanh
tanh同样存在缺点,当
z
z
z值过大和过小时,
t
a
n
h
tanh
tanh的导数会接近0,这会拖慢梯度下降的速度。所以比
t
a
n
h
tanh
tanh更常用的是
R
e
L
u
ReLu
ReLu函数。
2.
R
e
L
u
ReLu
ReLu函数:
R
e
L
u
=
m
a
x
(
0
,
z
)
ReLu = max(0, z)
ReLu=max(0,z)
修正线性单元(rectified linear unit)是一个很简洁的函数,在把负值换成0,正值并不变。如果你不知道用什么函数,那你可以用这个函数。
3.
l
e
a
k
l
y
R
e
L
u
leakly ReLu
leaklyReLu函数:
l
e
a
k
l
y
R
e
L
u
=
m
a
x
(
0.01
×
z
,
z
)
leakly ReLu = max(0.01\times z, z)
leaklyReLu=max(0.01×z,z)
这是ReLu的修改版,去掉了负值为0的情况。
激活函数的作用
- 简单的说,在某些场景中可以不使用激活函数,或者使用线性的激活函数(即输出值等于输入值,不对输入值进行改变)。但在绝大多数场景中,我们需要激活函数(准确的说是非线性激活函数)使计算出的数据更加多样(原话说的是‘interesting’)。
sigmoid、tanh、ReLu求导
-
sigmoid
σ = 1 1 + e − z \sigma = \frac{1}{1+e^{-z}} σ=1+e−z1
d σ d z = 1 ( 1 + e − z ) 2 × e − z = 1 1 + e − z ( 1 − 1 1 + e − z ) \frac{d\sigma}{dz} = \frac{1}{(1+e^{-z})^2}\times e^{-z} = \frac{1}{1+e^{-z}}(1-\frac{1}{1+e^{-z}}) dzdσ=(1+e−z)21×e−z=1+e−z1(1−1+e−z1)
d σ d z = σ × ( 1 − σ ) \frac{d\sigma}{dz} = \sigma\times(1-\sigma) dzdσ=σ×(1−σ) -
tanh
t a n h = e z − e − z e z + e − z tanh = \frac{e^{z}-e^{-z}}{e^{z}+e^{-z}} tanh=ez+e−zez−e−z
d d z t a n h = ( e z + e − z ) × ( e z + e − z ) − ( e z − e − z ) × ( e z − e − z ) ( e z + e − z ) 2 \frac{d}{dz}tanh=\frac{(e^z + e^{-z}) \times (e^z+e^{-z}) - (e^z-e^{-z})\times(e^z-e^{-z})} {(e^z+e^{-z})^2} dzdtanh=(ez+e−z)2(ez+e−z)×(ez+e−z)−(ez−e−z)×(ez−e−z)
d d z t a n h = 1 − ( t a n h ( z ) ) 2 \frac{d}{dz}tanh = 1 - (tanh(z))^2 dzdtanh=1−(tanh(z))2
-
ReLu
R e L u = m a x ( 0 , z ) = { 0 , z < 0 z , z > 0 ReLu = max(0,z) = \begin{cases} 0, & \text{z < 0} \\ z, & \text{z > 0} \end{cases} ReLu=max(0,z)={0,z,z < 0z > 0
d d z R e L u = { 0 , z < 0 1 , z > 0 \frac{d}{dz}ReLu = \begin{cases} 0, &\text{z < 0} \\ 1, & \text{z > 0} \end{cases} dzdReLu={0,1,z < 0z > 0 -
ReLu
R e L u = m a x ( 0.01 × z , z ) = { 0.01 × z , z < 0 z , z > 0 ReLu = max(0.01\times z,z) = \begin{cases} 0.01\times z, & \text{z < 0} \\ z, & \text{z > 0} \end{cases} ReLu=max(0.01×z,z)={0.01×z,z,z < 0z > 0
d d z R e L u = { 0.01 , z < 0 1 , z > 0 \frac{d}{dz}ReLu = \begin{cases} 0.01, &\text{z < 0} \\ 1, & \text{z > 0} \end{cases} dzdReLu={0.01,1,z < 0z > 0
神经网络的梯度下降
- 假设网络有如下参数:
w [ 1 ] , b [ 1 ] , w [ 2 ] , b [ 2 ] w^{[1]}, b^{[1]},w^{[2]}, b^{[2]} w[1],b[1],w[2],b[2] - 有输入值如下所示:(分别对应输入层、隐藏层、输出层)
n x = n [ 0 ] , n [ 1 ] , n [ 2 ] = 1 n_x=n^{[0]},n^{[1]},n^{[2]}=1 nx=n[0],n[1],n[2]=1 - 有成本函数如下:
J ( w [ 1 ] , b [ 1 ] , w [ 2 ] , b [ 2 ] ) = 1 m ∑ i = 1 n L ( y ^ , y ) J(w^{[1]}, b^{[1]}, w^{[2]},b^{[2]}) = \frac{1}{m}\sum_{i=1}^{n}L(\hat y, y) J(w[1],b[1],w[2],b[2])=m1i=1∑nL(y^,y) - 重复以下梯度下降过程:
- 计算损失函数:(预测值-真实值)
- 计算参数的偏导: d w [ 1 ] = d J d w [ 1 ] , d b [ 1 ] = d J d b [ 1 ] dw^{[1]}=\frac{dJ}{dw^{[1]}}, db^{[1]}=\frac{dJ}{db^{[1]}} dw[1]=dw[1]dJ,db[1]=db[1]dJ
- 更新参数: w [ 1 ] : = w [ 1 ] − α d w [ 1 ] , b [ 1 ] : = b [ 1 ] − α d b [ 1 ] w^{[1]}:=w^{[1]}-\alpha dw^{[1]},b^{[1]}:=b^{[1]}-\alpha db^{[1]} w[1]:=w[1]−αdw[1],b[1]:=b[1]−αdb[1]…
前向传播
z
[
1
]
=
w
[
1
]
x
+
b
[
1
]
z^{[1]} = w^{[1]}x+b^{[1]}
z[1]=w[1]x+b[1]
A
[
1
]
=
g
[
1
]
(
z
[
1
]
)
A^{[1]} = g^{[1]}(z^{[1]})
A[1]=g[1](z[1])
z
[
2
]
=
w
[
2
]
A
[
1
]
+
b
[
2
]
z^{[2]} = w^{[2]}A^{[1]}+b^{[2]}
z[2]=w[2]A[1]+b[2]
A
[
2
]
=
g
[
2
]
(
z
[
2
]
)
=
σ
(
z
[
2
]
)
A^{[2]} = g^{[2]}(z^{[2]}) = \sigma(z^{[2]})
A[2]=g[2](z[2])=σ(z[2])
- 在前向传播后并不是立刻进行反向传播的,要先计算损失函数的损失值,之后通过损失函数进行反向传播:
J ( W , b ) = L ( a , Y ) = − y log a − ( 1 − y ) l o g ( 1 − a ) J(W,b) = L(a, Y)= -y\log a-(1-y)log(1-a) J(W,b)=L(a,Y)=−yloga−(1−y)log(1−a)
其中 Y = Y= Y=整个数据集的所有真实值
反向传播
-
反向传播即根据计算图,求出a,z,w,b的偏导
-
计算 a a a的偏导:
d a = d d a L ( a , y ) = − y a + 1 − y 1 − a da = \frac{d}{da}L(a,y)=-\frac{y}{a}+\frac{1-y}{1-a} da=dadL(a,y)=−ay+1−a1−y -
计算 z z z的偏导:
d z = d d z L ( a , y ) = d L ( a , y ) d a d a d z = d a × σ ( z ) ′ = d a × a × ( 1 − a ) dz = \frac{d}{dz}L(a,y)=\frac{dL(a,y)}{da}\frac{da}{dz}=da\times\sigma(z)'=da\times a\times(1-a) dz=dzdL(a,y)=dadL(a,y)dzda=da×σ(z)′=da×a×(1−a)
d z = ( − y a + 1 − y 1 − a ) × a × ( 1 − a ) dz = (-\frac{y}{a}+\frac{1-y}{1-a})\times a\times(1-a) dz=(−ay+1−a1−y)×a×(1−a)
d z = − y × ( 1 − a ) + a × ( 1 − y ) = a y − y + a − a y dz = -y\times(1-a)+a\times(1-y)=ay-y+a-ay dz=−y×(1−a)+a×(1−y)=ay−y+a−ay
d z = a − y dz = a-y dz=a−y -
计算 d w dw dw的偏导:
d w = d L ( a , y ) d w = d L ( a , y ) d z × d z d w = ( a − y ) × x dw = \frac{dL(a,y)}{dw}=\frac{dL(a,y)}{dz}\times\frac{dz}{dw}=(a-y)\times x dw=dwdL(a,y)=dzdL(a,y)×dwdz=(a−y)×x -
计算 d b db db的偏导:
d b = d L ( a , y ) d b = d L ( a , y ) d z × d z d b = ( a − y ) × 1 db = \frac{dL(a,y)}{db}=\frac{dL(a,y)}{dz}\times\frac{dz}{db}=(a-y)\times 1 db=dbdL(a,y)=dzdL(a,y)×dbdz=(a−y)×1 -
以上计算图是只有一层的情况,现在多增加一层:
-
计算 d a [ 2 ] da^{[2]} da[2]:
d a [ 2 ] = d L ( a [ 2 ] , y ) d a [ 2 ] = − y a [ 2 ] + 1 − y 1 − a [ 2 ] da^{[2]}=\frac{dL(a^{[2]}, y)}{da^{[2]}} = -\frac{y}{a^{[2]}}+\frac{1-y}{1-a^{[2]}} da[2]=da[2]dL(a[2],y)=−a[2]y+1−a[2]1−y -
计算 d z [ 2 ] dz^{[2]} dz[2]:
d z [ 2 ] = d L ( a [ 2 ] , y ) d a [ 2 ] × d a [ 2 ] d z [ 2 ] = d a [ 2 ] × σ ( z [ 2 ] ) ′ dz^{[2]}=\frac{dL(a^{[2]},y)}{da^{[2]}}\times\frac{da^{[2]}}{dz^{[2]}}=da^{[2]}\times\sigma(z^{[2]})' dz[2]=da[2]dL(a[2],y)×dz[2]da[2]=da[2]×σ(z[2])′ -
计算 d w [ 2 ] dw^{[2]} dw[2]:
d w [ 2 ] = d J ( a [ 2 ] , y ) d z [ 2 ] × d z [ 2 ] d w [ 2 ] = d z [ 2 ] × x [ 2 ] = d z [ 2 ] × a [ 1 ] dw^{[2]}=\frac{dJ(a^{[2]},y)}{dz^{[2]}}\times\frac{dz^{[2]}}{dw^{[2]}}=dz^{[2]}\times x^{[2]}=dz^{[2]}\times a^{[1]} dw[2]=dz[2]dJ(a[2],y)×dw[2]dz[2]=dz[2]×x[2]=dz[2]×a[1] -
计算 d b [ 2 ] db^{[2]} db[2]:
d b [ 2 ] = d J ( a [ 2 ] , y ) d z [ 2 ] × d z [ 2 ] d b [ 2 ] = d z [ 2 ] db^{[2]}=\frac{dJ(a^{[2]},y)}{dz^{[2]}}\times\frac{dz^{[2]}}{db^{[2]}}=dz^{[2]} db[2]=dz[2]dJ(a[2],y)×db[2]dz[2]=dz[2] -
计算 d a [ 1 ] da^{[1]} da[1]:
d a [ 1 ] = d J ( a [ 2 ] , y ) d z [ 2 ] × d z [ 2 ] d a [ 1 ] = d z [ 2 ] × d ( w [ 2 ] × a [ 1 ] + b [ 2 ] ) d a [ 1 ] = d z [ 2 ] × w [ 2 ] da^{[1]}=\frac{dJ(a^{[2]},y)}{dz^{[2]}}\times\frac{dz^{[2]}}{da^{[1]}}=dz^{[2]}\times\frac{d(w^{[2]}\times a^{[1]}+b^{[2]})}{da^{[1]}} = dz^{[2]}\times w^{[2]} da[1]=dz[2]dJ(a[2],y)×da[1]dz[2]=dz[2]×da[1]d(w[2]×a[1]+b[2])=dz[2]×w[2] -
计算 d z [ 1 ] dz^{[1]} dz[1]:
( d z [ 2 ] dz^{[2]} dz[2]和 d z [ 1 ] dz^{[1]} dz[1]都是由损失函数 L ( a [ 2 ] , y ) L(a^{[2]},y) L(a[2],y)进行推导的)
d z [ 1 ] = d L ( a [ 2 ] , y ) d z [ 1 ] = d L ( a [ 2 ] , y ) d z [ 2 ] d z [ 2 ] d a [ 1 ] d a [ 1 ] d z [ 1 ] = d z [ 2 ] × w [ 2 ] × σ ( z [ 1 ] ) ′ dz^{[1]}=\frac{dL(a^{[2]},y)}{dz^{[1]}}=\frac{dL(a^{[2]},y)}{dz^{[2]}}\frac{dz^{[2]}}{da^{[1]}}\frac{da^{[1]}}{dz^{[1]}}=dz^{[2]}\times w^{[2]}\times\sigma(z^{[1]})' dz[1]=dz[1]dL(a[2],y)=dz[2]dL(a[2],y)da[1]dz[2]dz[1]da[1]=dz[2]×w[2]×σ(z[1])′ -
计算 d w [ 1 ] dw^{[1]} dw[1]:
d w [ 1 ] = d a [ 1 ] d z [ 1 ] × d z [ 1 ] d w [ 1 ] = d z [ 1 ] × x dw^{[1]}=\frac{da^{[1]}}{dz^{[1]}}\times\frac{dz^{[1]}}{dw^{[1]}}=dz^{[1]}\times x dw[1]=dz[1]da[1]×dw[1]dz[1]=dz[1]×x -
计算 d b [ 1 ] db^{[1]} db[1]:
d b [ 1 ] = d a [ 1 ] d z [ 1 ] × d z [ 1 ] d b [ 1 ] = d z [ 1 ] × 1 = d z [ 1 ] db^{[1]}=\frac{da^{[1]}}{dz^{[1]}}\times\frac{dz^{[1]}}{db^{[1]}}=dz^{[1]}\times 1 = dz^{[1]} db[1]=dz[1]da[1]×db[1]dz[1]=dz[1]×1=dz[1]
反向传播的向量化
-
将多个 d z [ 2 ] dz^{[2]} dz[2]、 a [ 2 ] a^{[2]} a[2]以及真实值 y y y叠加在一起:
d Z [ 2 ] = ( z [ 1 ] . . . z [ n ] ) dZ^{[2]}=\begin{matrix}( z^{[1]}&...&z^{[n]})\end{matrix} dZ[2]=(z[1]...z[n])
d A [ 2 ] = ( a [ 1 ] . . . a [ n ] ) dA^{[2]}=\begin{matrix}( a^{[1]}&...&a^{[n]})\end{matrix} dA[2]=(a[1]...a[n])
Y = ( y [ 1 ] . . . y [ n ] ) Y=\begin{matrix}( y^{[1]}&...&y^{[n]})\end{matrix} Y=(y[1]...y[n])
于是有了向量化的 d z [ 2 ] dz^{[2]} dz[2]:
d Z [ 2 ] = A [ 2 ] − Y dZ^{[2]} = A^{[2]}-Y dZ[2]=A[2]−Y -
向量化 d w dw dw:
d W [ 2 ] = 1 m d Z [ 2 ] A [ 1 ] dW^{[2]}=\frac{1}{m}dZ^{[2]}A^{[1]} dW[2]=m1dZ[2]A[1]
因为采用的是批次梯度下降(把整个训练集全都遍历过一次后才更新一次 W W W),所以每次更新使用的 d W [ 2 ] dW^{[2]} dW[2]采取所有训练样本的平均值 -
向量化 d b [ 2 ] db^{[2]} db[2]
d B [ 2 ] = 1 m ∑ i = 1 m b i [ 2 ] = 1 m ∑ i = 1 m Z i [ 2 ] dB^{[2]}=\frac{1}{m}\sum_{i=1}^{m}b^{[2]}_i=\frac{1}{m}\sum_{i=1}^{m}Z^{[2]}_i dB[2]=m1i=1∑mbi[2]=m1i=1∑mZi[2] -
向量化 d Z [ 1 ] dZ^{[1]} dZ[1]
d Z [ 1 ] = W [ 2 ] × d Z [ 2 ] × σ ( Z [ 1 ] ) ′ dZ^{[1]}=W^{[2]}\times dZ^{[2]}\times \sigma(Z^{[1]})' dZ[1]=W[2]×dZ[2]×σ(Z[1])′ -
向量化 d w [ 1 ] dw^{[1]} dw[1]和 d b [ 1 ] db^{[1]} db[1]
d W [ 1 ] = 1 m d Z [ 1 ] X dW^{[1]}=\frac{1}{m}dZ^{[1]}X dW[1]=m1dZ[1]X
d b [ 1 ] = 1 m ∑ i = 1 m d Z i [ 1 ] db^{[1]}=\frac{1}{m}\sum_{i=1}^{m}dZ^{[1]}_i db[1]=m1i=1∑mdZi[1]
随机初始化
- 如果参数的初值设为0,那隐藏层的多个隐藏单元计算出的数据全都是一样的,参数更新也会相同,这会使多个隐藏单元的设计变得无用,拖慢梯度下降的速度。
- 通常会将参数初始化为一个很小的值,例如:
w=np.random.randn((2,2))*0.01
- 如果使用的是
t
a
n
h
tanh
tanh函数,如果将参数设置的非常大,会使输出值落在
t
a
n
h
tanh
tanh的最右边或者最左边,也就是
t
a
n
h
tanh
tanh变化非常平缓的部分,这并不利于后续计算。在单层网络中,0.01是一个很合适的值,但网络不同,这个数值也要相应的调整。