反向传播
作用
反向传播的作用就是计算网络的参数
w
∗
,
b
∗
w^{*} ,b^{*}
w∗,b∗反向传播并不是和梯度下降不同的训练方法,他与梯度下降相同,但是在计算梯度向量的时候更加高效。
链式法则
对整个网络有,其损失函数为:
L
(
θ
)
=
∑
n
=
1
N
l
n
(
θ
)
L(\theta ) = \sum_{n=1}^{N}l^{n}(\theta )
L(θ)=∑n=1Nln(θ),他是所有训练数据的损失之和。
把训练数据里的任意一个样本点输入
x
n
x^{n}
xn到神经网络中,它会输出一个
y
n
y^{n}
yn,把这个输出
y
n
y^{n}
yn和样本点本身的标签target
y
n
^
\hat{y^{n}}
yn^作一个交叉熵,这个交叉熵定义了输出值,和标签之间的距离
l
n
(
θ
)
l^{n}(\theta )
ln(θ),如果交叉熵比较大,说明输出和标签之间距离较远,这个网络的参数的损失比较大,参数不好。
对所有的训练集损失进行求和,得到toal loss.这就作为损失函数。对损失函数的参数做偏微分得到:
以上图中被红色框标记的神经元为例,假设有两个输入
x
1
x_{1}
x1,
x
2
x_{2}
x2,通过这个神经元我们得到
z
=
b
+
w
1
x
1
+
w
2
x
2
z = b+w_{1}x_{1}+w_{2}x_{2}
z=b+w1x1+w2x2,然后经过**函数(activation function)从神经元中输出,作为后续的神经元的输入。
对于
∂
l
∂
w
\frac{\partial l}{\partial w}
∂w∂l的计算可以拆分为两项,
∂
l
∂
w
=
∂
z
∂
w
∂
l
∂
z
\frac{\partial l}{\partial w} = \frac{\partial z}{\partial w}\frac{\partial l}{\partial z}
∂w∂l=∂w∂z∂z∂l,将计算前面一项
∂
z
∂
w
\frac{\partial z}{\partial w}
∂w∂z这个过程称为forward pass ,计算后面一项
∂
l
∂
z
\frac{\partial l}{\partial z}
∂z∂l称为backward pass。
对于Forward pass
即为权重所对应的上一层神经元的值(
x
1
,
x
2
x_{1},x_{2}
x1,x2),有:
求
∂
l
∂
w
\frac{\partial l}{\partial w}
∂w∂l是看w前面连接的输入是什么,则微分后的
∂
z
∂
w
\frac{\partial z}{\partial w}
∂w∂z就是什么,只要计算神经网络里的每一个神经元对应的输出,就可以计算出z对w的偏微分。
1、input layer作为神经元的输入时,
w
1
w_{1}
w1前面连接的是
x
1
x_{1}
x1,所以微分是
x
1
x_{1}
x1,
w
2
w_{2}
w2前面连接的是
x
2
x_{2}
x2所以微分值就是
x
2
x_{2}
x2。
2、隐层作为神经元的输入时,那么神经元的输入就是前一个神经元的输出,于是
∂
z
∂
w
\frac{\partial z}{\partial w}
∂w∂z的值就是前一层z经过激励函数之后的输出值。
对于Backward pass
若激励函数是sigmoid函数:
如图可知,z通过激励函数得到a,令a等于
σ
(
z
)
\sigma (z)
σ(z),这个神经元的输出是
a
=
σ
(
z
)
a = \sigma (z)
a=σ(z),接下来a乘以权重
w
3
w_{3}
w3,得到
z
′
z^{'}
z′,他是下一个神经元激励函数的输入,a乘以权重
w
4
w_{4}
w4,得到
z
′
′
z^{''}
z′′,根据链式法则可知:
其中
∂
a
∂
z
=
σ
′
(
z
)
\frac{\partial a}{\partial z} = \sigma ^{'}(z)
∂z∂a=σ′(z).
对于
∂
l
∂
a
\frac{\partial l}{\partial a}
∂a∂l,可知a会影响
z
′
z^{'}
z′,
z
′
′
z^{''}
z′′,利用链式法则可知:
由于已知
z
′
=
a
w
3
+
.
.
.
.
z^{'} = aw^{3}+....
z′=aw3+....,
z
′
′
=
a
w
4
+
.
.
.
.
z^{''} = aw^{4}+....
z′′=aw4+....,可以推断出:
带入原式可知: