神经网络与深度学习笔记正向传播与反向传播
Posted 沧夜2021
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了神经网络与深度学习笔记正向传播与反向传播相关的知识,希望对你有一定的参考价值。
正向传播
正向传播计算的是神经网络的输出
如上图,就是一次类似的正向传播的过程,正向传播计算最后的输出值。
将 J ( a , b , c ) = 3 ( a + b ∗ c ) J(a,b,c) = 3(a + b * c) J(a,b,c)=3(a+b∗c)这一个式子用 u u u, v v v 来代替:
u = b ∗ c u = b * c u=b∗c
v = a + u v = a + u v=a+u
j = 3 ∗ v j = 3 * v j=3∗v
最后求出 j j j的值
反向传播
反向传播计算神经网络的梯度以及微分
如上图是一个类似的反向传播的过程。
对图中右侧的输出
j
=
3
∗
v
j = 3 * v
j=3∗v 我们有
d
j
d
v
=
3
\\frac{dj}{dv} = 3
dvdj=3
接着我们从右往左继续计算
v
=
a
+
u
v = a + u
v=a+u
对于
v
=
a
+
u
v = a + u
v=a+u 有
d
j
d
a
=
d
j
d
v
∗
d
v
d
a
=
3
\\frac{dj}{da} = \\frac{dj}{dv} * \\frac{dv}{da} = 3
dadj=dvdj∗dadv=3
以及
d
j
d
u
=
d
j
d
v
∗
d
v
d
u
=
3
\\frac{dj}{du} = \\frac{dj}{dv} * \\frac{dv}{du} = 3
dudj=dvdj∗dudv=3
最后到达
u
=
b
∗
c
u = b * c
u=b∗c
d
j
d
b
=
d
j
d
v
∗
d
v
d
u
∗
d
u
d
b
=
3
c
d
j
d
c
=
d
j
d
v
∗
d
v
d
u
∗
d
u
d
c
=
3
b
\\frac{dj}{db} = \\frac{dj}{dv} * \\frac{dv}{du} * \\frac{du}{db} = 3c \\\\ \\frac{dj}{dc} = \\frac{dj}{dv} * \\frac{dv}{du} * \\frac{du}{dc} = 3b
dbdj=dvdj∗dudv∗dbdu=3cdcdj=dvdj∗dudv∗dcdu=3b
最后就得出了
d
j
d
a
,
d
j
d
b
,
d
j
d
c
\\frac{dj}{da},\\frac{dj}{db},\\frac{dj}{dc}
dadj,dbdj,dcdj的值
实际上这就是我们高等数学中的链式法则。通过求出上述三个的导数来计算梯度,进行梯度下降来更新 w w w 与 b b b 等参数
矢量计算
在计算神经网络的时候,我们尽量使用矢量来计算参数。因为numpy
的计算速度一般是比使用for
循环快的。
如上图,我们的输入变量有 x 1 , w 1 , x 2 , w 2 , b x_1,w_1,x_2,w_2,b x1,w1,x2,w2,b 。如果使用普通的方法计算就显得十分繁琐
我们应该积极使用矢量化来简化计算速度
对于 z z z 有 z = w T x + b z = w^{T}x + b z=wTx+b
其中我们知道:
w
=
[
⋮
⋮
⋮
⋮
]
}
n
x
x
=
[
⋮
⋮
⋮
⋮
]
}
n
x
\\mathbf{w}= \\left. \\begin{bmatrix} \\vdots \\\\ \\vdots \\\\ \\vdots \\\\ \\vdots \\\\ \\end{bmatrix}\\right\\}_{n_x} \\mathbf{x}= \\left. \\begin{bmatrix} \\vdots \\\\ \\vdots \\\\ \\vdots \\\\ \\vdots \\\\ \\end{bmatrix}\\right\\}_{n_x}
w=⎣⎢⎢⎢⎢⎢⎢⎡⋮⋮⋮⋮⎦⎥⎥⎥⎥⎥⎥⎤⎭⎪⎪⎪⎪⎪⎪⎬⎪⎪⎪⎪⎪⎪⎫nxx=⎣⎢⎢⎢⎢⎢⎢⎡⋮⋮⋮⋮⎦⎥⎥⎥⎥⎥⎥深度学习基础之正向传播与反向传播