梯度提升在神经网络训练中的过程
:
实际,BackPropagation是一种比较有效率计算的Gradient Descent方法
记住BackPropagation中的链式法则Chain Rule如下:
以上,即多元复合函数的求导公式,如下:
如下,在Neuron Network的training中,
yn 与 yn^的距离,即(偏差)距离值定义为Cn。
累加所有的Neuron的(偏差)距离值,得到整个Network的total loass损失值L(θ)。
用该累加公式对w求导。该公式意义在与,求L(θ)对w的偏微分,可以转换为求每个Neuron对w的求导的累加和。
如下,以第一个Neuron为例,则x1,x2位原始输入向量,进行计算。
由计算损失函数对w的偏导,基于链式法则,改为求函数模型对w的偏导*损失函数对激活函数模型的偏导
如下,第一步,计算φ(z)/φ(w),规律就是wi前接的input是xi,则其偏微分为xi。
举例如下,计算z,然后使用activation function(这里用的sigmoid function),计算得到输出0.98。
第一步,计算φ(C)/φ(z),C是在计算得到z,再经过activation function得到yn^,最后还要经过loss function,得到了C的值。因此,φ(C)/φ(z)很复杂。
假设a = σ(z), σ为sigmoid函数,然后a再与w3/w4得到z'/z'',以及后续的a',a''
ruxia因为a结合w3,w4分别影响后续的z'和z'',基于链式法则,假设后一层只有两个neuron,也可以有1000个,下面式子更长。
然后,求φ(z')/φ(a)也很简单了,跟前面的φ(z)/φ(w)类似,偏微分就是前面的wi,其余部分φ(C)/φ(z')假设已经算出(后面考虑)。
即可得到下式:
反过来,从右往左看,假设有一个新的neuron,且不在原先的Network中,所做的工作跟上面中等式中括号中一样,再直接乘以在forward pass中得到的已知的φ(z')。样子如下,其input是φ(C)/φ(z'),φ(C)/φ(z''),得到的结果就是φ(C)/φ(z),z是固定的值,则φ(z)是常数。形成了backward pass
如下:假设能算φ(z'),φ(z''),则问题就都能解决了,假设已经处于最后一层neuron,输出为y1,y2...可加入y1,y2,并利用链式法则,基于假设的C误差函数,求出φ(C)/φ(z'),φ(C)/φ(z''),进而求出φ(C)/φ(z)。如果只有两层,那按下面方法,就可以求出w1,w2了。
然而,如下,假设第一层后没有输出层,接的是下一个隐层,一样原理。
换一个方向,从y1,y2输出层开始,反向算,运算量跟forword pass是一样的,只是用了很多链式法则。
如下,想要计算z1对C的偏微分,则算z3、z4根C的偏微分,想知道z3的偏微分,需要知道z5,z6对C的偏微分。
反之,就都算出来了。如果先算z5,z6对C的偏微分,再算z3、z4的偏微分,往前算。
那么,怎么先算z5,z6呢?利用假设一个反向的Neuron network,层层计算,做backward pass如下:
总结:
先做一个forward pass,知道activation function的output,就是φ(z)/φ(w)=a,在backward pass中,求φ(C)/φ(z),相乘,得到φ(C)/φ(w)