赞
踩
又称反向传导算法,英文: back propagation。
我们了解,前向传导,可以根据W,b来计算出隐层、输出层的各个神经元的值以及对应的激活值,最终得到输出。如果输出和我们的目标存在误差,这个误差可以用成本函数表示(loss function),那么我们就需要反向的把这个误差分配到前面的各个传导的过程中,也就是W和B上;我们需要知道每个神经元带来了多少误差,这个影响程度我们用“残差”的概念来表示。
有了残差和目标函数,我们可以对参数W和B随机梯度下降法来求解,即:求导后表示为残差的某种共识。最后W的更新,与:残差、当前神经元的激活函数求导、输入值;由这三部分来共同决定参数的更新。如此反复迭代直到收敛。 从而求出W和B。
这个算法的核心则是:残差的求解;因为激活函数是事先定义的,输入值也是前向算法中已经计算好的。那么问题则归结为误差反向传导的时候,如何分配因子。
利用例子理解神经网络。
说明:
目标:通过fp和bp算法,训练w和b,使得输入和输出匹配,拟合已有的数据。
神经元
each neuron is composed of two units. First unit adds products of weights coefficients and input signals. The second unit realise nonlinear function, called neuron activation function. Signal e is adder output signal, and y = f(e) is output signal of nonlinear element. Signal y is also output signal of neuron.
误差从哪里来,就用梯度转向那里去;为了找到源头,则要一步步的从后往前传递,所以才有了:反向传播;链式求导这两个概念。
针对我们的传播,大体上就是两个核心步骤:线性组合的求导;以及激活函数的求导。如此根据关联一步步相乘,这也是链式求导的内涵。见下图:
针对我们的神经网络:
我们依照误差先输出节点求导、再激活函数求导、然后线性组合求导的原则可知:
有了梯度,则用负梯度更新变量则可以保证目标函数下降最快。
现在对w1求偏导;同理可以利用链式法则:
求导分三块,中间部分的求导是直接的,激活函数; 最后一部分求导也是线性求导,直接的。
第一部分则比较复杂一些,因为
那么我们就按照h1到最后的这条路径,一个个求导过来,并按照有多少路径累加,如果h1发出了3个神经元,则就需要反向三个梯度的累加。
正向的时候 w1->net(h1)->out(h1)->net(o1,o2,xxx)->out(o1,o2,xxx)->Etotal
反向求导的时候只要有关系,就必须求导相乘。
从上面的示例中,我们大体了解了整个过程,那么我们再用公式推导一番。注意下面的公式将按照顺序直接给出,减少,防止思路中断。
从当前点传播过去的点都要反传回来,同时要对当前线性组合后的值求导,公式是激活函数。
至此,梯度和残差的关系结束。
http://ufldl.stanford.edu/wiki/index.php/%E5%8F%8D%E5%90%91%E4%BC%A0%E5%AF%BC%E7%AE%97%E6%B3%95
http://blog.csdn.net/zhaomengszu/article/details/77834845
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。