其他分享
首页 > 其他分享> > 深度学习深度学习(九)backpropagation

深度学习深度学习(九)backpropagation

作者:互联网

复习一下,我们之前知道,组成一个神经网络后,就要计算出他的参数W。而计算W就要弄清楚他的costfunction,因为costfunction就是衡量和计算不同W的值之间的优劣的。换句话说,我们要根据样本数据找到使得costfunction最小的W的值。这个方法我通常使用的是梯度下降,而梯度下降中最重要的参数就是找到costfunction对W的导数DW。

在未组成网络的时候我们知道,单个式子的导数比如Dw_{i} = óx{i};这里如果costfunction使用的是方差,则ó = (Ÿ-Y)*f'(h)。其中f'是activation function的导数。(Ÿ-Y)其实是方差的导数。h是实际的方程:

深度学习深度学习(六)实现梯度下降

 

那现在问题来了,如果是在一个神经网络中呢?各个层级里面的W怎么求呢?

我们先来看一个最简单的网络:

深度学习深度学习(九)backpropagation

要用梯度下降,我们就必须求得导数\frac{De}{Dw_{2}}, \frac{De}{Dw_{1}}

先求\frac{De}{Dw_{2}}

从前面讲梯度下降我们知道\frac{De}{Dw_{2}}从后面往前可以用之前的一级的求导

\frac{De}{Dw_{2}} = (Y-Ÿ)*f'(A * w_{2})A=óA;(ó=(Y-Ÿ)*f'(A * w_{2})) 

这个没有毛病,我们再来求\frac{De}{Dw_{1}}:

 我们先拆解一下:

E = 1/2(Y-Ÿ)^2;     ---这是一个没有\sum的方差公式,即单样本时(m=1),确实时这样

Ÿ = f(A * w_{2});

A=f(X*w_{1});

根据复合函数求导,我们就有:

\frac{De}{Dw_{1}} = \frac{De}{D\ddot{y}} * \frac{D\ddot{y}}{D_{A}} * \frac{D_{A}}{Dw_{1}}

拆解计算每一个导数哈:

\frac{De}{D\ddot{y}}   =    -(Y-Ÿ) 

\frac{D\ddot{y}}{D_{A}}   =   f'(A * w_{2})*w_{2}

\frac{D_{A}}{Dw_{1}} =   f'(X * w_{1})*X

 做一次合并:

\frac{De}{Dw_{1}}  =  \frac{De}{D\ddot{y}} * \frac{D\ddot{y}}{D_{A}} * \frac{D_{A}}{Dw_{1}} =  -(Y-Ÿ) * f'(A * w_{2})*w_{2} * f'(X * w_{1})*X

之前第一个式子:

\frac{De}{Dw_{2}} = (Y-Ÿ)*f'(A * w_{2})A=óA; (ó=(Y-Ÿ)*f'(A * w_{2})) 

我们让把这里的ó记为:\acute{o}_{0}

 \frac{De}{Dw_{2}} = (Y-Ÿ)*f'(A * w_{2})A=\acute{o}_{0}A;

 而

 \frac{De}{Dw_{1}}  =  \acute{o}_{0}*w_{2} * f'(X * w_{1})*X

再假设,\acute{o}_{1} = \acute{o}_{0}*f'(X*w_{1})*w_{2}

那我们就可以得出结论:\frac{De}{Dw_{1}}  = \acute{o}_{1}*X

一般地,如果上一层是\acute{o}_{n-1}\acute{o}_{n} = \acute{o}_{n-1}* f'(X*w_{n})w_{n+1} (注意:因为这个从最后一层往前走,所以ó是倒叙的,而w_{n}是正序的;其实\acute{o}_{n-1}w_{n+1}是同一层的) 

而本层w_{i}的导数就等于本层的 \acute{o}_{n}x_{i}

两层单节点的w求导就如上求出了。

当然,上述网络是一个简单的网络,即引起ΔY变化的有w有A,而在网络上A的变化,可不仅仅只影响一个节点,而是将作用在所有的下一层节点中,如下图:

深度学习深度学习(九)backpropagation

这样,在计算ΔA的时候,就不能仅仅只把对Y1的影响计算进去,因为ΔA的变化一定会被分散到Y1,Y2,所以ΔA一定是个累计值,这样,我们就得出了完整的backpropagation公式:

深度学习深度学习(九)backpropagation

 

这就是backpropagation算法,去计算每个w的导数,因为这个算法的特点是先算出最后结果即顶点的导数情况,然后再反向的向输出层每个节点计算\frac{De}{Dw_{i}}所以叫做backpropagation。

额,这里最后完整的公式推断,我没有详细推导,上述那个2层单w的backpropagation我是经过详细推导的。

有兴趣的朋友,也可以把这个完整的公式推导一下。

好了,到这里,完整的神经网络基础就已经全部完成。

 

 

标签:导数,梯度,学习,backpropagation,计算,深度,我们,costfunction
来源: https://blog.csdn.net/wwwlgy/article/details/121213051