当前位置:   article > 正文

DeepLearning.AI第一部分第三周、 浅层神经网络(Shallow neural networks)

deeplearning.ai

3.1 一些简单的介绍

3.2神经网络的表示Neural Network Representation

下面是一张神经网络的图片,现在给此图的不同部分约定一些名字
在这里插入图片描述
3.2.1 3.2.1 3.2.1

有一个个体,属性值为: x 1 , x 2 , x 3 x_1,x_2,x_3 x1,x2,x3

  • 输入层:即   x 1 , x 2 , x 3 \ x_1,x_2,x_3  x1,x2,x3,它们被竖直地堆叠起来。
  • 隐藏层:上图的四个结点。
  • 输出层:上图的最后一层由一个结点构成
    解释隐藏层的含义:在一个神经网络 中,当你使用监督学习训练它的时候,训练集包含了输入 x x x也包含了目标输出 y y y,所以术语隐 藏层的含义是在训练集中,这些中间结点的准确值我们是不知道到的,也就是说你看不见它们在训练集中应具有的值。你能看见输入的值,你也能看见输出的值,但是隐藏层中的东西, 在训练集中你是无法看到的。所以这也解释了词语隐藏层,只是表示你无法在训练集中看到他们。

下面引入几个符号:

  • 输入层的激活值,即输入特征 a [ 0 ] a^{[0]} a[0]:
    a [ 0 ] = [ x 1 x 2 x 3 ] a^{[0]}=[x1x2x3]
    a[0]=x1x2x3
  • 隐藏层的激活值, a [ 1 ] a^{[1]} a[1]
    a [ 1 ] = [ a 1 [ 1 ] a 2 [ 1 ] a 3 [ 1 ] a 4 [ 1 ] ] a^{[1]}=[a[1]1a[1]2a[1]3a[1]4]
    a[1]=a1[1]a2[1]a3[1]a4[1]

    它是一个4维的列向量,维度就是隐藏神经元的个数
  • 输出层, y ^ \hat y y^
    y ^ = a [ 2 ] \hat y = a^{[2]} y^=a[2]
    如下图所示(图错了,到时候再改):

在这里插入图片描述 3.2.2 3.2.2 3.2.2
上图隐藏画少了一个神经元 a 4 [ 1 ] a_4^{[1]} a4[1]
最后要注意到,隐藏层以及最后的输出层是带有参数的,这里的隐藏层将拥有一个参数矩阵 W W W和一个参数向量 b b b,给它们加上上标   [ 1 ] \ ^{[1]}  [1],表示这些参数是和第一层这个隐层有关的

  • W [ 1 ] W^{[1]} W[1]是一个4*3的矩阵:

W [ 1 ] = [ w 1 [ 1 ]    w 1 [ 2 ]    w 1 [ 3 ]    w 1 [ 4 ] w 2 [ 1 ]    w 2 [ 2 ]    w 2 [ 3 ]    w 2 [ 4 ] w 3 [ 1 ]    w 3 [ 2 ]    w 3 [ 3 ]    w 3 [ 4 ] ] W^{[1]} = [w[1]1  w[2]1  w[3]1  w[4]1w[1]2  w[2]2  w[3]2  w[4]2w[1]3  w[2]3  w[3]3  w[4]3]

W[1]=w1[1]  w1[2]  w1[3]  w1[4]w2[1]  w2[2]  w2[3]  w2[4]w3[1]  w3[2]  w3[3]  w3[4]

  • b [ 1 ] b^{[1]} b[1]是一个4*1的向量:

b [ 1 ] = [ b 1 b 2 b 3 b 4 ] b^{[1]} = [b1b2b3b4]

b[1]=b1b2b3b4

类似的输出层也有其关联的参数: W [ 2 ] W^{[2]} W[2] b [ 2 ] b^{[2]} b[2]

  • W [ 2 ] W^{[2]} W[2]是4维的列向量。

  • $b^{[2]}$1*1的。

3.3计算一个神经网络的输出Computing a Neural Network’s output

上一节介绍了只有一个隐层的神经网络的结构与符号表示,现在我们来看这个神经网络是如何计算输出 y ^ \hat y y^的。
在这里插入图片描述 3.3.1 3.3.1 3.3.1
上图隐藏层画少了一个神经元,
其中, x x x表示输入特征, a a a表示每个神经元的输出, W W W表示特征的权重,上标表示神经网
络的层数(隐藏层为 1),下标表示该层的第几个神经元。这是神经网络的符号惯例,下同。

神经网络的计算

在这里插入图片描述 3.3.2 3.3.2 3.3.2
如上图所示,首先你按步骤计算出z,然后在第二步中你以 sigmoid 函数为激活函数,带入 z z z计算得出 a a a,一个神经网络只是如此做了多次重复计算。即,对于第一个神经元,
第一步计算 z 1 [ 1 ] = w 1 [ 1 ] T x   +   b 1 [ 1 ] z^{[1]}_1 = {w^{[1]}_1}^{T}x\ + \ b_1^{[1]} z1[1]=w1[1]Tx + b1[1]
第二步计算 a 1 [ 1 ] = σ ( z 1 [ 1 ] ) a^{[1]}_1 = \sigma(z_1^{[1]}) a1[1]=σ(z1[1])
同理计算所有的隐层神经元:

z 1 [ 1 ] = w 1 [ 1 ] T x   +   b 1 [ 1 ] ,    a 1 [ 1 ] = σ ( z 1 [ 1 ] ) z^{[1]}_1 = {w^{[1]}_1}^{T}x\ + \ b_1^{[1]},\ \ a_1^{[1]}=\sigma(z_1^{[1]}) z1[1]=w1[1]Tx + b1[1],  a1[1]=σ(z1[1])

z 2 [ 1 ] = w 2 [ 1 ] T x   +   b 2 [ 1 ] ,    a 2 [ 1 ] = σ ( z 2 [ 1 ] ) z^{[1]}_2 = {w^{[1]}_2}^{T}x\ + \ b_2^{[1]},\ \ a_2^{[1]}=\sigma(z_2^{[1]}) z2[1]=w2[1]Tx + b2[1],  a2[1]=σ(z2[1])

z 3 [ 1 ] = w 3 [ 1 ] T x   +   b 3 [ 1 ] ,    a 3 [ 1 ] = σ ( z 3 [ 1 ] ) z^{[1]}_3 = {w^{[1]}_3}^{T}x\ + \ b_3^{[1]},\ \ a_3^{[1]}=\sigma(z_3^{[1]}) z3[1]=w3[1]Tx + b3[1],  a3[1]=σ(z3[1])

z 4 [ 1 ] = w 4 [ 1 ] T x   +   b 4 [ 1 ] ,    a 4 [ 1 ] = σ ( z 4 [ 1 ] ) z^{[1]}_4 = {w^{[1]}_4}^{T}x\ + \ b_4^{[1]},\ \ a_4^{[1]}=\sigma(z_4^{[1]}) z4[1]=w4[1]Tx + b4[1],  a4[1]=σ(z4[1])

其向量化表示为:

  • 隐层计算:
    [ z 1 [ 1 ] z 2 [ 1 ] z 3 [ 1 ] z 4 [ 1 ] ] = [ w 1 [ 1 ]    w 1 [ 2 ]    w 1 [ 3 ] w 2 [ 1 ]    w 2 [ 2 ]    w 2 [ 3 ] w 3 [ 1 ]    w 3 [ 2 ]    w 3 [ 3 ] w 4 [ 1 ]    w 4 [ 2 ]    w 4 [ 3 ] ] ⏞ W [ 1 ] ∗ [ x 1 x 2 x 3 ] ⏞ i n p u t + [ b 1 [ 1 ] b 2 [ 1 ] b 3 [ 1 ] b 4 [ 1 ] ] ⏞ b [ 1 ] [z[1]1z[1]2z[1]3z[1]4]
    = \overbrace{[w[1]1  w[2]1  w[3]1w[1]2  w[2]2  w[3]2w[1]3  w[2]3  w[3]3w[1]4  w[2]4  w[3]4]
    }^{W^{[1]}} * \overbrace{[x1x2x3]
    }^{input} + \overbrace{[b[1]1b[1]2b[1]3b[1]4]
    }^{b^{[1]}}
    z1[1]z2[1]z3[1]z4[1]=w1[1]  w1[2]  w1[3]w2[1]  w2[2]  w2[3]w3[1]  w3[2]  w3[3]w4[1]  w4[2]  w4[3] W[1]x1x2x3 input+b1[1]b2[1]b3[1]b4[1] b[1]

a [ 1 ] = [ a 1 [ 1 ] a 2 [ 1 ] a 3 [ 1 ] a 4 [ 1 ] ] = σ ( [ z 1 [ 1 ] z 2 [ 1 ] z 3 [ 1 ] z 4 [ 1 ] ] ⏞ z [ 1 ] ) a^{[1]} = [a[1]1a[1]2a[1]3a[1]4]

= \sigma (z[1][z[1]1z[1]2z[1]3z[1]4])
a[1]=a1[1]a2[1]a3[1]a4[1]=σz1[1]z2[1]z3[1]z4[1] z[1]

  • 输出层计算(参考逻辑回归,即单个神经元的计算):
    y ^ = a [ 2 ] = σ ( z [ 2 ] ) = σ ( W [ 2 ] T a [ 1 ] + b [ 2 ] ) \hat y = a^{[2]}=\sigma(z^{[2]})= \sigma({W^{[2]}}^{T}a^{[1]}+b^{[2]}) y^=a[2]=σ(z[2])=σ(W[2]Ta[1]+b[2])

3.4多样本向量化Vectorizing across multiple examples

前面一节讲了单一训练个体的神经网络的输出值计算,下面讲多训练个体,并计算出结果。
下图是大概步骤
在这里插入图片描述 3.4.1 3.4.1 3.4.1

对于一个给定的输入特征向量 x x x,这四个等式可以计算出 y ^ \hat y y^。这是针对于单一的训练个体的。如果有m个训练个体,那么就需要重复这个过程。
用第一个训练个体 x ( 1 ) = [ x 1 ( 1 ) x 2 ( 1 ) ⋮ x n ( 1 ) ] x^{(1)}=[x(1)1x(1)2x(1)n]

x(1)=x1(1)x2(1)xn(1)来计算出预测值 y ^ \hat y y^,就是第一个训练样本上得出的结果。
然后,用 x ( 2 ) x^{(2)} x(2)来计算出预测值 y ^ ( 2 ) \hat y^{(2)} y^(2),… ,同样步骤直到用 x ( m ) x^{(m)} x(m)计算出 y ^ ( m ) \hat y^{(m)} y^(m)
用激活函数表示法,如图 3.4.1 3.4.1 3.4.1下方所示,即:
y ^ ( 1 ) = a [ 2 ] ( 1 ) \hat y^{(1)}=a^{[2](1)} y^(1)=a[2](1)

y ^ ( 2 ) = a [ 2 ] ( 2 ) \hat y^{(2)}=a^{[2](2)} y^(2)=a[2](2)

⋮ \vdots

y ^ ( m ) = a [ 2 ] ( m ) \hat y^{(m)}=a^{[2](m)} y^(m)=a[2](m)
其中 a [ 2 ] ( m ) a^{[2](m)} a[2](m)的上标 ( i ) (i) (i)表示第 ( i ) (i) (i)个训练个体, [ 2 ] [2] [2]表示神经网络的第二层,即用第m个个体训练出来的第二层的输出值。
如果用非向量化计算下面4个等式,并对 ( i ) (i) (i)循环,直到计算出所有个体的预测值:
z [ 1 ] ( i ) = W [ 1 ] ( i ) x ( i ) + b [ 1 ] ( i ) a [ 1 ] ( i ) = σ ( z [ 1 ] ( i ) ) z^{[1](i)}=W^{[1](i)}x^{(i)}+b^{[1](i)} \\ a^{[1](i)}=\sigma(z^{[1](i)}) z[1](i)=W[1](i)x(i)+b[1](i)a[1](i)=σ(z[1](i))

z [ 2 ] ( i ) = W [ 2 ] ( i ) a [ 1 ] ( i ) + b [ 2 ] ( i ) a [ 2 ] ( i ) = σ ( z [ 2 ] ( i ) ) z^{[2](i)}=W^{[2](i)}a^{[1](i)}+b^{[2](i)} \\a^{[2](i)}=\sigma(z^{[2](i)}) z[2](i)=W[2](i)a[1](i)+b[2](i)a[2](i)=σ(z[2](i))
如果用向量化表示则为:
x = [ ⋮ x ( 1 ) ⋮ ⋮   x ( 2 )   ⋮ ⋮   …   ⋮ ⋮ x ( m ) ⋮ ] x = [x(1) x(2)   x(m)]

x=x(1) x(2)   x(m)

Z [ 1 ] = [ ⋮ z [ 1 ] ( 1 ) ⋮ ⋮   z [ 1 ] ( 2 )   ⋮ ⋮   …   ⋮ ⋮   z [ 1 ] ( m ) ⋮ ] Z^{[1]} = [z[1](1) z[1](2)    z[1](m)]

Z[1]=z[1](1) z[1](2)    z[1](m)

A [ 1 ] = [ ⋮ a [ 1 ] ( 1 ) ⋮ ⋮   a [ 1 ] ( 2 )   ⋮ ⋮   …   ⋮ ⋮   a [ 1 ] ( m ) ⋮ ] A^{[1]} = [a[1](1) a[1](2)    a[1](m)]

A[1]=a[1](1) a[1](2)    a[1](m)

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 ] = σ ( z [ 2 ] ) A^{[2]}=\sigma(z^{[2]}) A[2]=σ(z[2])

3.6激活函数Activation functions

在这里插入图片描述

sigmoid激活函数

表达式:
(3.6.1) a = σ ( z ) = 1 1 + e − z a= \sigma(z)=\frac{1}{1+e^{-z}}\tag{3.6.1} a=σ(z)=1+ez1(3.6.1)

导数:
(3.6.2) σ ′ ( z ) = a ( 1 − a ) \sigma'(z)=a(1-a)\tag{3.6.2} σ(z)=a(1a)(3.6.2)

tanh函数

表达式:
(3.6.3) a = t a n h ( z ) = e z − e − z e z + e − z a=tanh(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}}\tag{3.6.3} a=tanh(z)=ez+ezezez(3.6.3)

导数:
(3.6.4) t a n h ′ ( z ) = 1 − a 2 tanh'(z)=1-a^2\tag{3.6.4} tanh(z)=1a2(3.6.4)

ReLU函数

表达式:
(3.6.5) a   = ^   g ( z ) = m a x ( 0 , z ) a\ \hat =\ g(z)= max(0,z)\tag{3.6.5} a =^ g(z)=max(0,z)(3.6.5)
导数:
(3.6.6) g ′ ( z ) = { 1 , if  z > 0  0 , if  z <0 g'(z) = {1,amp;if z> 0 0,amp;if z<0

\tag{3.6.6} g(z)=1,0,if z> 0 if z<0(3.6.6)

leaky ReLU函数

表达式:
(3.6.7) a   = ^   g ( z ) = m a x ( 0.01 z , z ) a\ \hat =\ g(z)=max(0.01z,z)\tag{3.6.7} a =^ g(z)=max(0.01z,z)(3.6.7)
导数:
(3.6.8) g ′ ( z ) = { 1 , if  z &gt; 0  0.01 , if  z &lt;0 u n d e f i n e d , if  z =0 when  z  = 0,  g ′  could be defined as 1 or 0.01, case of  z = 0  seldomly occur g&#x27;(z) = {1,amp;if z&gt; 0 0.01,amp;if z&lt;0undefined,amp;if z=0

\text{when $z$ = 0, $g&#x27;$ could be defined as 1 or 0.01, case of $z=0$ seldomly occur} \tag{3.6.8} g(z)=1,0.01,undefined,if z> 0 if z<0if z=0when z = 0, g could be defined as 1 or 0.01, case of z=0 seldomly occur(3.6.8)

3.7为什么需要非线性激活函数why need a nonlinear activation function?

如果你是用线性激活函数或者叫恒等激励函数,那么神经网络只是把输入线性组合再输出。事实上,如果你使用线性激活函数或者没有使用一个激活函数,那么无论你的神经网络有多少层,你一直在做的只是计算线性函数,那样就相当于直接去掉全部隐藏层,直接线性相加就行了,即如果你在隐藏层用线性激活函数,在输出层用 sigmoid 函数,那么这个模型的复杂度和没有任何隐藏层的标准 Logistic 回归是一样的,如果你愿意的话,可以证明一下。在这里线性隐层一点用也没有,因为这两个线性函数的组合本身就是线性函数,所以除非你引入非线性,否则你无法计算更有趣的函数,即使你的网络层数再多也不行

3.9浅层神经网络的梯度下降Gradient Descent for neural networks

单隐层神经网络会有 W [ 1 ] W^{[1]} W[1] b [ 1 ] b^{[1]} b[1] W [ 2 ] W^{[2]} W[2] b [ 2 ] b^{[2]} b[2]这些参数,还有个 n x n_x nx表示输入特征的个数, n [ 1 ] n^{[1]} n[1]表示隐藏单元个数, n [ 2 ] n^{[2]} n[2]表示输出单元个数。
矩阵 W [ 1 ] W^{[1]} W[1]的维度就是 ( n [ 1 ] , n [ 0 ] ) (n^{[1]},n^{[0]}) (n[1],n[0]), b [ 1 ] b^{[1]} b[1]就是 n [ 1 ] n^{[1]} n[1]维的列向量,可以写成 ( n [ 1 ] , 1 ) (n^{[1]},1) (n[1],1)
矩阵 W [ 2 ] W^{[2]} W[2]的维度就是 ( n [ 2 ] , n [ 1 ] ) (n^{[2]},n^{[1]}) (n[2],n[1]) b [ 2 ] b^{[2]} b[2]的维度就是 ( n [ 2 ] , 1 ) (n^{[2]},1) (n[2],1)的列向量。
代价函数Cost Function:
J ( W [ 1 ] , b [ 1 ] , W [ 2 ] , b [ 12 ] ) = 1 m ∑ i = 1 n L ( y ^ , y ) J(W^{[1]},b^{[1]}, W^{[2]} ,b^{[12]})=\frac{1}{m}\sum^n_{i=1}L(\hat y , y) J(W[1],b[1],W[2],b[12])=m1i=1nL(y^,y)
损失函数和之前的Logistic回归一样
训练参数需要做梯度下降,在训练神经网络的时候,随机初始化参数很重要,而不是初始化成全零。当你参数初始化成某些值后,每次梯度下降都会循环计算以下预测值:
y ^ ( i ) , ( i = 1 , 2 , . . . , m ) \hat{y}^{(i)},(i=1,2,...,m) y^(i),(i=1,2,...,m)
更新公式:
(3.9.1) Δ W [ 1 ] = ^ d J d W [ 1 ] , Δ b [ 1 ] = ^ d J d b [ 1 ] \Delta W^{[1]}\hat{=}\frac{dJ}{dW^{[1]}},\Delta b^{[1]}\hat =\frac{dJ}{db^{[1]}}\tag{3.9.1} ΔW[1]=^dW[1]dJ,Δb[1]=^db[1]dJ(3.9.1)

(3.9.2) Δ W [ 2 ] = ^ d J d W [ 2 ] , Δ b [ 2 ] = ^ d J d b [ 2 ] \Delta W^{[2]} \hat =\frac{dJ}{dW^{[2]}},\Delta b^{[2]} \hat =\frac{dJ}{db^{[2]}}\tag{3.9.2} ΔW[2]=^dW[2]dJ,Δb[2]=^db[2]dJ(3.9.2)

(3.9.3) W [ 1 ] : = W [ 1 ] − α Δ W [ 1 ] ,   b [ 1 ] : = b [ 1 ] − α Δ b [ 1 ] W^{[1]}:=W^{[1]}-\alpha \Delta W^{[1]},\ b^{[1]}:=b^{[1]}-\alpha \Delta b^{[1]}\tag{3.9.3} W[1]:=W[1]αΔW[1], b[1]:=b[1]αΔb[1](3.9.3)

(3.9.3) W [ 2 ] : = W [ 2 ] − α Δ W [ 2 ] ,   b [ 2 ] : = b [ 2 ] − α Δ b [ 2 ] W^{[2]}:=W^{[2]}-\alpha \Delta W^{[2]},\ b^{[2]}:=b^{[2]}-\alpha \Delta b^{[2]}\tag{3.9.3} W[2]:=W[2]αΔW[2], b[2]:=b[2]αΔb[2](3.9.3)

正向传播4个方程:
(1) z [ 1 ] = W [ 1 ] x + b [ 1 ] z^{[1]}=W^{[1]}x+b^{[1]} z[1]=W[1]x+b[1]
(2) a [ 1 ] = g ( z [ 1 ] ) a^{[1]}=g(z^{[1]}) a[1]=g(z[1])
(3) z [ 2 ] = W [ 2 ] a [ 1 ] + b [ 2 ] z^{[2]}=W^{[2]}a^{[1]}+b^{[2]} z[2]=W[2]a[1]+b[2]
(4) a [ 2 ] = g [ 2 ] ( z [ 2 ] ) a^{[2]}=g^{[2]}(z^{[2]}) a[2]=g[2](z[2])

反向传播6个方程:
(3.9.4) d z [ 1 ] = A [ 2 ] − Y ,   Y = [ y ( 1 ) , y ( 2 ) , … , y ( m ) ] dz^{[1]}=A^{[2]}-Y,\ Y=[y^{(1)},y^{(2)},\dots,y^{(m)}]\tag{3.9.4} dz[1]=A[2]Y, Y=[y(1),y(2),,y(m)](3.9.4)

(3.9.5) d W [ 2 ] = 1 m d z [ 2 ] ( A [ 1 ] ) T dW^{[2]}=\frac{1}{m}dz^{[2]}(A^{[1]})^T\tag{3.9.5} dW[2]=m1dz[2](A[1])T(3.9.5)

(3.9.6) 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) \tag{3.9.6} db[2]=m1np.sum(dz[2],axis=1,keepdims=True)(3.9.6)

(3.9.7) d z [ 1 ] = ( W [ 2 ] ) T d z [ 2 ] ⎵ ( n [ 1 ] , m ) ⋅ ( g [ 1 ] ) ′ ⏞ hidden layer’s activation function ⋅ ( z [ 1 ] ) ⎵ ( n [ 1 ] , m ) dz^{[1]}= \underbrace{(W^{[2]})^Tdz^{[2]}}_{(n^{[1]},m)} \cdot \overbrace{(g^{[1]})&#x27;}^{\text{hidden layer&#x27;s activation function} } \cdot \underbrace{(z^{[1]})}_{(n^{[1]},m)} \tag{3.9.7} dz[1]=(n[1],m) (W[2])Tdz[2](g[1]) hidden layer’s activation function(n[1],m) (z[1])(3.9.7)

(3.9.8) d W [ 1 ] = 1 m d z [ 1 ] x T dW^{[1]}=\frac{1}{m}dz^{[1]}x^T \tag{3.9.8} dW[1]=m1dz[1]xT(3.9.8)

(3.9.9) d b [ 1 ] ⎵ ( n [ 1 ] , 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 ) \underbrace{db^{[1]}}_{(n^{[1]},1 )}=\frac{1}{m}\cdot np.sum(dz^{[1]},axis=1,keepdims=True)\tag{3.9.9} (n[1],1) db[1]=m1np.sum(dz[1],axis=1,keepdims=True)(3.9.9)

上述是反向传播的步骤,且这些都是针对所有样本进行过向量化的,Y是1xm的矩阵,np.sum是python的numpy命令,axis=1表示水平相加求和,keepdims是防止python输出那些古怪的秩数组(n,),加上这个确保 d b [ i ] db^{[i]} db[i]这个向量输出的维度为(n,1)这种标准形式。
目前,我们计算的都和Logistic回归十分相似,但是当你开始计算反向传播是,你需要计算,隐藏层函数的导数,输出再使用sigmoid函数进行二元分类,因为 ( W [ 2 ] d z [ 2 ] ) (W^{[2]}dz^{[2]}) (W[2]dz[2]) ( z [ 2 ] ) (z^{[2]}) (z[2])都是 ( n [ 1 ] , m ) (n^{[1]},m) (n[1],m)矩阵

3.10直观理解神经网络反向传播Backpropagation intuition

3.11随机初始化Random Initialization

初始化不能为0,如果初始化为0,那么梯度下降将不起作用。

让我们继续探讨一下。有两个输入特征, n [ 0 ] = 2 n^{[0]}=2 n[0]=2,2 个隐藏层单元 n [ 1 ] n^{[1]} n[1]就等于 2。 因此与一个隐藏层相关的矩阵,或者说 W [ 1 ] W^{[1]} W[1]是 22 的矩阵,假设把它初始化为 0 的 22 矩阵, b [ 1 ] b^{[1]} b[1]也等于 ( 0 , 0 ) T (0,0)^{T} (0,0)T,把偏置项b初始化为 0 是合理的,但是把 W W W初始化为 0 就有问题了。 那这个问题如果按照这样初始化的话,你总是会发现 a 1 [ 1 ] a^{[1]}_1 a1[1] a 2 [ 1 ] a^{[1]}_2 a2[1]相等,这个激活单元和这个激活单元就会一样。因为两个隐含单元计算同样的函数,当你做反向传播计算时,这会导致 d z 1 [ 1 ] dz^{[1]}_1 dz1[1] d z 2 [ 2 ] dz^{[2]}_2 dz2[2]也会一样,对称这些隐含单元会初始化成一样,这样输出的权值也会一模一样,由此 W [ 2 ] W^{[2]} W[2]等于[0 0]。如果这样初始化这个神经网络,那么这两个隐含单元就会完全一样,因此他们完全对称,也就意味着计算同样的函数,并且肯定的是最终经过每次训练的迭代, 这两个隐含单元仍然是同一个函数。通过归纳法克制,如果你把权重都初始化为 0,那么由于隐含单元开始计算同一个函数,所有的隐含单元就会对输出单元有同样的影响。一次迭代后同样的表达式结果仍然是相同 的,即隐含单元仍是对称的。通过推导,两次、三次、无论多少次迭代,不管你训练网络多长时间,隐含单元仍然计算的是同样的函数。
因此,可以随机初始化 W W W,这样隐含单元就会计算不一样的神经元,不会出现symmetry breaking问题。
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/78020
推荐阅读
相关标签
  

闽ICP备14008679号