赞
踩
BP算法是适用于多层神经网络的一种算法,它是建立在梯度下降法的基础上的。本文着重推导怎样利用梯度下降法来minimise Loss Function。
给出多层神经网络的示意图:
假设有一组数据样本
x
1
x^{1}
x1,
x
2
x^{2}
x2,… ,每一个x都有很多个特征,输入x,会得到一个输出y,每一个输出都对应一个损失函数L,将所有L加起来就是total loss。
那么每一个L该如何定义呢?这里还是采用了交叉熵,如下所示:
这里的
y
i
y^{i}
yi是真实输出,
y
^
y\hat{}
y^是y target,是人为定义的。最终Total Loss的表达式如下:
L对应了一个参数,即Network parameters θ(w1,w2…b1,b2…),那么Gradient Descent就是求出参数
θ
∗
\theta^{*}
θ∗来minimise Loss Function,即:
梯度下降的具体步骤为:
从上图可以看出,这里难点主要是求偏微分,由于L是所有损失之和,因此我们只需要对其中一个损失求偏微分,最后再求和即可。
先抽取一个简单的神经元来解释:
先理一理各个变量之间的关系:我们要求的是Total Loss对参数w的偏导,而Total Loss是一个个小的l累加得到的,因此,我们只需要求得
∂
l
∂
w
\frac{\partial l}{\partial w}
∂w∂l,而
l
=
−
y
^
l
n
y
l=-\hat{y}lny
l=−y^lny,其中
y
^
\hat{y}
y^是人为定义的,跟w没有关系,因此我们只需要知道
∂
y
∂
w
\frac{\partial y}{\partial w}
∂w∂y。l跟z有关系,根据链式求导法则,我们需要求
∂
l
∂
z
\frac{\partial l}{\partial z}
∂z∂l和
∂
z
∂
w
\frac{\partial z}{\partial w}
∂w∂z,其中
∂
z
∂
w
\frac{\partial z}{\partial w}
∂w∂z的求解较为容易,如下图所示:
求
∂
l
∂
z
\frac{\partial l}{\partial z}
∂z∂l是一个难点,因为我们并不知道后面到底有多少层,也不知道情况到底有多复杂,我们不妨先取一种最简单的情况,如下所示:
在第一张图里面,我们经过正向传播很容易求出了
∂
z
∂
w
\frac{\partial z}{\partial w}
∂w∂z,而对于
∂
l
∂
z
\frac{\partial l}{\partial z}
∂z∂l,则并不是那么好求。上图其实就是运用了反向传播的思想, 对于上图中
∂
l
∂
z
\frac{\partial l}{\partial z}
∂z∂l最后的表达式,我们可以换一种结构,如下所示:
l对两个z的偏导我们假设是已知的,并且在这里是作为输入,三角形结构可以理解为一个乘法运算电路,其放大系数为
σ
′
(
z
)
\sigma {}'(z)
σ′(z)。但是在实际情况中,l对两个z的偏导是未知的。假设神经网络最终的结构就是如上图所示,那么我们的问题已经解决了:
其中:
但是假如该神经元不是最后一层,我们又该如何呢?比如又多了一层,如下所示:
那么我们只要知道
∂
l
∂
z
a
\frac{\partial l}{\partial z_{a}}
∂za∂l和
∂
l
∂
z
b
\frac{\partial l}{\partial z_{b}}
∂zb∂l,我们同样可以算出
∂
l
∂
z
′
\frac{\partial l}{\partial z{}'}
∂z′∂l以及
∂
l
∂
z
′
′
\frac{\partial l}{\partial z{}''}
∂z′′∂l,原理跟上面类似,如下所示:
∂
l
∂
z
b
\frac{\partial l}{\partial z_{b}}
∂zb∂l同样是l先对y求导,y再对
z
b
z_{b}
zb求导。
那假设我们再加一层呢?再加两层呢?再加三层呢?。。。,情况还是一样的,还是先求l对最后一层z的导数,乘以权重相加后最后再乘上
σ
′
(
z
′
′
,
z
′
′
′
,
.
.
.
)
\sigma {}'(z{}'',z{}''',...)
σ′(z′′,z′′′,...)即可。
最后给一个实例:
它的反向传播图长这样:
我们可以很轻松的算出
∂
l
∂
z
5
\frac{\partial l}{\partial z_{5}}
∂z5∂l和
∂
l
∂
z
6
\frac{\partial l}{\partial z_{6}}
∂z6∂l,算出这两个之后,根据上面我们找到的关系式,我们也可以轻易算出
∂
l
∂
z
3
\frac{\partial l}{\partial z_{3}}
∂z3∂l和
∂
l
∂
z
4
\frac{\partial l}{\partial z_{4}}
∂z4∂l,最后再算出
∂
l
∂
z
1
\frac{\partial l}{\partial z_{1}}
∂z1∂l和
∂
l
∂
z
2
\frac{\partial l}{\partial z_{2}}
∂z2∂l。然后
∂
l
∂
z
1
\frac{\partial l}{\partial z_{1}}
∂z1∂l和
∂
l
∂
z
2
\frac{\partial l}{\partial z_{2}}
∂z2∂l再分别乘上x1和x2,就是我们最终要找的
∂
l
∂
w
1
\frac{\partial l}{\partial w_{1}}
∂w1∂l和
∂
l
∂
w
2
\frac{\partial l}{\partial w_{2}}
∂w2∂l。
我们不难发现,这种计算方式很清楚明了地体现了“反向传播”四个字。
好了,目标达成!!
通过Forward Pass我们求得 ∂ z ∂ w = a \frac{\partial z}{\partial w}=a ∂w∂z=a,然后通过Backward Pass我们求得 ∂ l ∂ z \frac{\partial l}{\partial z} ∂z∂l,二者相乘,就是 ∂ l ∂ w \frac{\partial l}{\partial w} ∂w∂l。利用上述方法求得所有参数的值之后,我们就可以用梯度下降法来更新参数,直至找到最优解。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。