转自:https://www.zhihu.com/question/24827633/answer/91489990
1. 前向传播
对于节点 来说,
的净输入
如下:
接着对 做一个sigmoid函数得到节点
的输出:
类似的,我们能得到节点 、
、
的输出
、
、
。
2. 误差
得到结果后,整个神经网络的输出误差可以表示为:
其中 就是刚刚通过前向传播算出来的
、
;
是节点
、
的目标值。
用来衡量二者的误差。
这个 也可以认为是cost function,不过这里省略了防止overfit的regularization term(
)
展开得到
3. 后向传播
3.1. 对输出层的 ![w_5](https://www.zhihu.com/equation?tex=w_5)
通过梯度下降调整 ,需要求
,由链式法则:
,
如下图所示:
以上3个相乘得到梯度 ,之后就可以用这个梯度训练了:
很多教材比如Stanford的课程,会把中间结果 记做
,表示这个节点对最终的误差需要负多少责任。。所以有
。
3.2. 对隐藏层的 ![w_1](https://www.zhihu.com/equation?tex=w_1)
通过梯度下降调整 ,需要求
,由链式法则:
,
如下图所示:
参数 影响了
,进而影响了
,之后又影响到
、
。
求解每个部分:
,
其中
,这里
之前计算过
的计算也类似,所以得到
的链式中其他两项如下:
,
相乘得到
得到梯度后,就可以对 迭代了:
。
在前一个式子里同样可以对 进行定义,
所以整个梯度可以写成