先实现单个更新,得出结果之后,再实现批量更新。
后向传播算法为:
w = w - a*de/dw;
其中,w就是那个参数,e代表误差,a是一个步长,乘以这个导数就变成了实际的一小段,减去它就是了。这个导数这么算:
de/dw = de/dy2 * dy2/dy1 * dy1/dw
其中,e = 1/2 * sum((label - output).^2); 其中,label和output都是101维的向量,它们相减后就是单个误差,平方后去掉负号再全部加起来就是单一个数字了,因此e只是1个数字,1/2是求导用的,其实不用管。de/dy2只是一个简单的二次函数求导,求出这个导函数后用y2的值带进去即可。
然后,设y2 = output,y2 = sigmoid(y1),也就是y2是y1激活来的,那么dy2/dy1就是一个激活函数的导,然后把y1的值带进去即可,因此我们需要保存y1的值,以供这个时候用。
然后,是dy1/dw,这个dy是w1x1+w2x2+…+wnxn+b,但是针对单一的wi而言,它的导数就是xi,也就是输入值,因此这回就是简单的x序列就可以了。
所以输出层的求导公式为:
w2_d = -1.