DeepLearning.AI第一部分第三周、 浅层神经网络(Shallow neural networks)
文章目录
- 3.1 一些简单的介绍
- 3.2神经网络的表示Neural Network Representation
- 3.3计算一个神经网络的输出Computing a Neural Network's output
- 神经网络的计算
- 其向量化表示为:
- 3.4多样本向量化Vectorizing across multiple examples
- 3.6激活函数Activation functions
- sigmoid激活函数
- tanh函数
- ReLU函数
- leaky ReLU函数
- 3.7为什么需要非线性激活函数why need a nonlinear activation function?
- 3.9浅层神经网络的梯度下降Gradient Descent for neural networks
- 3.10直观理解神经网络反向传播Backpropagation intuition
- 3.11随机初始化Random Initialization
3.1 一些简单的介绍
3.2神经网络的表示Neural Network Representation
下面是一张神经网络的图片,现在给此图的不同部分约定一些名字
图3.2.13.2.13.2.1
有一个个体,属性值为:x1,x2,x3x_1,x_2,x_3x1,x2,x3,
- 输入层:即x1,x2,x3\ x_1,x_2,x_3 x1,x2,x3,它们被竖直地堆叠起来。
- 隐藏层:上图的四个结点。
- 输出层:上图的最后一层由一个结点构成
解释隐藏层的含义:在一个神经网络 中,当你使用监督学习训练它的时候,训练集包含了输入xxx也包含了目标输出yyy,所以术语隐 藏层的含义是在训练集中,这些中间结点的准确值我们是不知道到的,也就是说你看不见它们在训练集中应具有的值。你能看见输入的值,你也能看见输出的值,但是隐藏层中的东西, 在训练集中你是无法看到的。所以这也解释了词语隐藏层,只是表示你无法在训练集中看到他们。
下面引入几个符号:
- 输入层的激活值,即输入特征a[0]a^{[0]}a[0]:
a[0]=[x1x2x3]a^{[0]}=\begin{bmatrix} x^1\\x^2\\x^3 \end{bmatrix}a[0]=⎣⎡x1x2x3⎦⎤ - 隐藏层的激活值,a[1]a^{[1]}a[1]:
a[1]=[a1[1]a2[1]a3[1]a4[1]]a^{[1]}=\begin{bmatrix} a^{[1]}_1\\a^{[1]}_2\\a^{[1]}_3 \\a^{[1]}_4\end{bmatrix}a[1]=⎣⎢⎢⎢⎡a1[1]a2[1]a3[1]a4[1]⎦⎥⎥⎥⎤
它是一个4维的列向量,维度就是隐藏神经元的个数 - 输出层,y^\hat yy^:
y^=a[2]\hat y = a^{[2]}y^=a[2]
如下图所示(图错了,到时候再改):
图3.2.23.2.23.2.2
上图隐藏画少了一个神经元a4[1]a_4^{[1]}a4[1]。
最后要注意到,隐藏层以及最后的输出层是带有参数的,这里的隐藏层将拥有一个参数矩阵WWW和一个参数向量bbb,给它们加上上标[1]\ ^{[1]} [1],表示这些参数是和第一层这个隐层有关的
- W[1]W^{[1]}W[1]是一个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]]W^{[1]} = \begin{bmatrix} 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 ]} \end{bmatrix}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]=[b1b2b3b4]b^{[1]} = \begin{bmatrix} b_1 \\ b_2\\ b_3\\ b_4 \end{bmatrix}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 yy^的。
图3.3.13.3.13.3.1图
上图隐藏层画少了一个神经元,
其中,xxx表示输入特征,aaa表示每个神经元的输出,WWW表示特征的权重,上标表示神经网
络的层数(隐藏层为 1),下标表示该层的第几个神经元。这是神经网络的符号惯例,下同。
神经网络的计算
图3.3.23.3.23.3.2
如上图所示,首先你按步骤计算出z,然后在第二步中你以 sigmoid 函数为激活函数,带入zzz计算得出aaa,一个神经网络只是如此做了多次重复计算。即,对于第一个神经元,
第一步计算z1[1]=w1[1]Tx+b1[1]z^{[1]}_1 = {w^{[1]}_1}^{T}x\ + \ b_1^{[1]}z1[1]=w1[1]Tx + b1[1],
第二步计算a1[1]=σ(z1[1])a^{[1]}_1 = \sigma(z_1^{[1]})a1[1]=σ(z1[1])
同理计算所有的隐层神经元:
z1[1]=w1[1]Tx+b1[1],a1[1]=σ(z1[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])
z2[1]=w2[1]Tx+b2[1],a2[1]=σ(z2[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])
z3[1]=w3[1]Tx+b3[1],a3[1]=σ(z3[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])
z4[1]=w4[1]Tx+b4[1],a4[1]=σ(z4[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])
其向量化表示为:
- 隐层计算:
[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]\begin{bmatrix}z^{[1]}_1 \\ \\ z^{[1]}_2\\ \\ z^{[1]}_3\\ \\z^{[1]}_4 \end{bmatrix}= \overbrace{\begin{bmatrix} 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 ]} \end{bmatrix}}^{W^{[1]}} * \overbrace{\begin{bmatrix}x_1 \\ \\ x_2\\ \\ x_3\\ \end{bmatrix}}^{input} + \overbrace{\begin{bmatrix}b^{[1]}_1 \\ \\ b^{[1]}_2\\ \\ b^{[1]}_3\\ \\b^{[1]}_4 \end{bmatrix}}^{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]=[a1[1]a2[1]a3[1]a4[1]]=σ([z1[1]z2[1]z3[1]z4[1]]⏞z[1])a^{[1]} = \begin{bmatrix} a^{[1]}_1 \\ \\ a^{[1]}_2\\ \\ a^{[1]}_3\\ \\a^{[1]}_4 \end{bmatrix} = \sigma \begin{pmatrix}\overbrace{\begin{bmatrix}z^{[1]}_1 \\ \\ z^{[1]}_2\\ \\ z^{[1]}_3\\ \\z^{[1]}_4 \end{bmatrix}}^{z^{[1]}} \end{pmatrix}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]Ta[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.13.4.13.4.1
对于一个给定的输入特征向量xxx,这四个等式可以计算出y^\hat yy^。这是针对于单一的训练个体的。如果有m个训练个体,那么就需要重复这个过程。
用第一个训练个体x(1)=[x1(1)x2(1)⋮xn(1)]x^{(1)}=\begin{bmatrix}x_1^{(1)}\\ x_2^{(1)}\\\vdots\\x_n^{(1)} \end{bmatrix}x(1)=⎣⎢⎢⎢⎢⎡x1(1)x2(1)⋮xn(1)⎦⎥⎥⎥⎥⎤来计算出预测值y^\hat yy^,就是第一个训练样本上得出的结果。
然后,用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.13.4.13.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 = \begin{bmatrix} \begin{matrix}\vdots\\x^{(1)} \\ \vdots\end{matrix} \begin{matrix}\vdots\\\ x^{(2)}\ \\ \vdots\end{matrix} \begin{matrix}\vdots\\\ \dots\ \\ \vdots\end{matrix} \begin{matrix}\vdots\\x^{(m)} \\ \vdots\end{matrix} \end{bmatrix}x=⎣⎢⎢⎡⋮x(1)⋮⋮ x(2) ⋮⋮ … ⋮⋮x(m)⋮⎦⎥⎥⎤
Z[1]=[⋮z[1](1)⋮⋮z[1](2)⋮⋮…⋮⋮z[1](m)⋮]Z^{[1]} = \begin{bmatrix} \begin{matrix}\vdots\\z^{[1](1)} \\ \vdots\end{matrix} \begin{matrix}\vdots\\\ z^{[1](2)}\ \\ \vdots\end{matrix} \begin{matrix}\vdots\\\ \dots\ \\ \vdots\end{matrix} \begin{matrix}\vdots\\\ z^{[1](m)} \\ \vdots\end{matrix} \end{bmatrix}Z[1]=⎣⎢⎢⎡⋮z[1](1)⋮⋮ z[1](2) ⋮⋮ … ⋮⋮ z[1](m)⋮⎦⎥⎥⎤
A[1]=[⋮a[1](1)⋮⋮a[1](2)⋮⋮…⋮⋮a[1](m)⋮]A^{[1]} = \begin{bmatrix} \begin{matrix}\vdots\\a^{[1](1)} \\ \vdots\end{matrix} \begin{matrix}\vdots\\\ a^{[1](2)}\ \\ \vdots\end{matrix} \begin{matrix}\vdots\\\ \dots\ \\ \vdots\end{matrix} \begin{matrix}\vdots\\\ a^{[1](m)} \\ \vdots\end{matrix} \end{bmatrix}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)=11+e−za= \sigma(z)=\frac{1}{1+e^{-z}}\tag{3.6.1}a=σ(z)=1+e−z1(3.6.1)
导数:
(3.6.2)σ′(z)=a(1−a)\sigma'(z)=a(1-a)\tag{3.6.2}σ′(z)=a(1−a)(3.6.2)
tanh函数
表达式:
(3.6.3)a=tanh(z)=ez−e−zez+e−za=tanh(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}}\tag{3.6.3}a=tanh(z)=ez+e−zez−e−z(3.6.3)
导数:
(3.6.4)tanh′(z)=1−a2tanh'(z)=1-a^2\tag{3.6.4}tanh′(z)=1−a2(3.6.4)
ReLU函数
表达式:
(3.6.5)a=^g(z)=max(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<0g'(z) = \begin{cases} 1, & \text{if $z$> 0 }\\[2ex] 0, & \text{if $z$<0} \end{cases} \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)=max(0.01z,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> 0 0.01,if z<0undefined,if z=0when z= 0, g′could be defined as 1 or 0.01, case of z=0seldomly occurg'(z) = \begin{cases} 1, & \text{if $z$> 0 }\\[2ex] 0.01, & \text{if $z$<0}\\[2ex] undefined,&\text{if $z$=0} \end{cases} \text{when $z$ = 0, $g'$ 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]这些参数,还有个nxn_xnx表示输入特征的个数,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])=1m∑i=1nL(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])=m1∑i=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]=^dJdW[1],Δb[1]=^dJdb[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]=^dJdW[2],Δb[2]=^dJdb[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)dz[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)dW[2]=1mdz[2](A[1])TdW^{[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)db[2]=1mnp.sum(dz[2],axis=1,keepdims=True)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)dz[1]=(W[2])Tdz[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]})'}^{\text{hidden layer'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)dW[1]=1mdz[1]xTdW^{[1]}=\frac{1}{m}dz^{[1]}x^T \tag{3.9.8}dW[1]=m1dz[1]xT(3.9.8)
(3.9.9)db[1]⎵(n[1],1)=1m⋅np.sum(dz[1],axis=1,keepdims=True)\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]=m1⋅np.sum(dz[1],axis=1,keepdims=True)(3.9.9)
上述是反向传播的步骤,且这些都是针对所有样本进行过向量化的,Y是1xm的矩阵,np.sum是python的numpy命令,axis=1表示水平相加求和,keepdims是防止python输出那些古怪的秩数组(n,),加上这个确保db[i]db^{[i]}db[i]这个向量输出的维度为(n,1)这种标准形式。
目前,我们计算的都和Logistic回归十分相似,但是当你开始计算反向传播是,你需要计算,隐藏层函数的导数,输出再使用sigmoid函数进行二元分类,因为(W[2]dz[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]=2n^{[0]}=2n[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 是合理的,但是把WWW初始化为 0 就有问题了。 那这个问题如果按照这样初始化的话,你总是会发现a1[1]a^{[1]}_1a1[1]和a2[1]a^{[1]}_2a2[1]相等,这个激活单元和这个激活单元就会一样。因为两个隐含单元计算同样的函数,当你做反向传播计算时,这会导致dz1[1]dz^{[1]}_1dz1[1]和dz2[2]dz^{[2]}_2dz2[2]也会一样,对称这些隐含单元会初始化成一样,这样输出的权值也会一模一样,由此W[2]W^{[2]}W[2]等于[0 0]。如果这样初始化这个神经网络,那么这两个隐含单元就会完全一样,因此他们完全对称,也就意味着计算同样的函数,并且肯定的是最终经过每次训练的迭代, 这两个隐含单元仍然是同一个函数。通过归纳法克制,如果你把权重都初始化为 0,那么由于隐含单元开始计算同一个函数,所有的隐含单元就会对输出单元有同样的影响。一次迭代后同样的表达式结果仍然是相同 的,即隐含单元仍是对称的。通过推导,两次、三次、无论多少次迭代,不管你训练网络多长时间,隐含单元仍然计算的是同样的函数。
因此,可以随机初始化WWW,这样隐含单元就会计算不一样的神经元,不会出现symmetry breaking问题。
DeepLearning.AI第一部分第三周、 浅层神经网络(Shallow neural networks)相关推荐
- 温州大学《深度学习》课程课件(三、浅层神经网络)
这学期我上的另一门课是本科生的<深度学习>,主要用的是吴恩达老师的<深度学习>视频课的内容. 使用教材:吴恩达<深度学习>课程笔记 课外参考书:<深度学习&g ...
- DeepLearning.AI第一部分第四周:深层神经网络
文章目录 4.1深层神经网络(Deep L-layer neural network) 4.2前向传播和反向传播(Forward and backward propagation) 4.3举例说明前向 ...
- 第三周:浅层神经网络
1. 神经网络综述 首先,我们从整体结构上来大致看一下神经网络模型. 前面的课程中,我们已经使用计算图的方式介绍了逻辑回归梯度下降算法的正向传播和反向传播两个过程.如下图所示.神经网络的结构与逻辑回归 ...
- 《DeepLearning.ai》第十课:卷积神经网络(Convolutional Neural Networks)
第十课:卷积神经网络(Convolutional Neural Networks) 1.1 计算机视觉(Computer vision) 通常如果处理大图用传统的神经网络需要特别大的输入,因此需要大量 ...
- 1.3)深度学习笔记------浅层神经网络
目录 1)Neural Network Overview 2)Neural Network Representation 3)Computing a Neural Network's Output(重 ...
- Coursera吴恩达《神经网络与深度学习》课程笔记(4)-- 浅层神经网络
红色石头的个人网站:redstonewill.com 上节课我们主要介绍了向量化.矩阵计算的方法和python编程的相关技巧.并以逻辑回归为例,将其算法流程包括梯度下降转换为向量化的形式,从而大大提高 ...
- 深度学习笔记(4) 浅层神经网络
深度学习笔记(4) 浅层神经网络 1. 神经网络概述 2. 激活函数 3. 激活函数的导数 4. 神经网络的梯度下降 5. 随机初始化 1. 神经网络概述 神经网络看起来是如下: 有输入特征x1.x2 ...
- 吴恩达深度学习笔记 3.1~3.11 浅层神经网络
第二章总结了二分分类与逻辑回归,第三章关于浅层神经网络 神经网络的结构与逻辑回归类似,只是神经网络的层数比逻辑回归多了一层,多出的中间一层叫隐藏层,那么,神经网络的计算就相当于多进行一次逻辑回归的计算 ...
- 深度学习入门笔记(六):浅层神经网络
专栏--深度学习入门笔记 声明 1)该文章整理自网上的大牛和机器学习专家无私奉献的资料,具体引用的资料请看参考文献. 2)本文仅供学术交流,非商用.所以每一部分具体的参考资料并没有详细对应.如果某部分 ...
最新文章
- 自己封装的一个java图片验证码
- 模型评估——ROC、KS
- go语言中没有隐藏的this指针
- 【转】线段树题目 汇总 讲解(by not only success)
- oracle 触发器更新视图,关于UPDATE触发器的详细介绍
- 6.旋转数组的最小数字
- 如何解读springboot 中约定大于配置、JPA是什么、咋用
- B2B供应链管理平台主流技术架构方案
- 二十一世纪计算|洪小文:帮助机器和人类共同学习
- Tomcat内存占有99%及java.lang.OutOfMemoryError(内存溢出)问题
- rm: cannot remove `xxx’: Operation not permitted的解决方法
- WeGeek Talk | 美团外卖
- axios (get,post,put,delete),常用配置,全局配置,axios.create(config)配置一个新的axios
- 抖音新号怎么快速涨粉(8种抖音运营吸粉技巧)
- 为什么说DAO是未来的公司形式
- java aes 中文_java实现AES加密(解决中文解密后乱码问题,解决传输字符串后解密报错的问题)...
- 沪上首座“区块链生态谷”揭开面纱!
- 没有可用的软件包 mongodb,但是它被其它的软件包引用了。这可能意味着这个缺失的软件包可能已被废弃,或者只能在其他发布源中找到E: 软件包 mongodb 没有可安装候选
- VS2008编译 找不到 regex头文件
- 新手带项目那些事儿(0.15-1.07)
热门文章
- jQuery实现获取选中复选框的值
- php数据库根据相似度排序,php数组字段相似度排序
- Git在公司内部的使用规范
- 企业 MySQL 优化实施方案
- linux的as编译文件,Ubuntu Linux14 64位下在Android studio下用gradle编译Andrid项
- oracle update 数据库恢复,ORACLE update 操作内部原理
- latex textbf没有用_LaTeX排版软件札记 Win10 LyX+TeXLive
- 彩色笔记 android,彩色笔记V4.1.0-彩色笔记下载 - Iefans
- mybatis plus generator配置
- boost 递归锁_c++/boost互斥量与锁