pytorch:反向传播算法

首先介绍链式法则

pytorch:反向传播算法_第1张图片

 从前面的学习中,我们学习到多层输出感知机的梯度计算公式为\frac{\partial E}{\partial w_{ik}}= \left ( o_{k}- t_{k}\right )o_{k}\left ( 1-o_{k} \right )o_{J}^{j}

在这里,我们通过\delta _{K}^{K}代替\left ( o_{k}-t_{k} \right )o_{k}\left ( 1-o_{k} \right )作为一种方式,即此时原公式变为\frac{\partial E}{\partial w_{ij}}=\delta _{K}^{K}o_{K}^{K}

其中\delta _{K}^K{}中包含k个变量,即\delta _{0}^{K},\delta _{1}^{K}...\delta _{K}^{K}

对于再多一层的模型,反向求梯度即为

 其中o_{k}即为x_{k}经过线性激活函数变换得到的,也就是经过了sigmod函数,所以o_{k}=\sigma \left ( x_{k} \right )

同样的\frac{\partial o_{j}}{\partial w_{ij}}也是同样的道理。

然后\frac{\partial x_{j}}{\partial w_{ij}}=o_{I}o_{I}是第一层的输入)

然后按上面描述的过程,将最终公式变为\frac{\partial E}{\partial w_{ij}}=o_{I}o_{j}\left ( 1-o_{j} \right )\sum_{k\euro K}^{}\delta _{k}w_{jk}

然后我们把o_{I}后面的公式\delta _{j}^{J}我们把这叫做从当前节点开始(也就是j层的节点开始)到最终输出层节点的信息。

通过上述这种迭代过程,我们可以推出,对于任意一层我们可以有

\frac{\partial E}{\partial w_{ni}}=o_{n}\delta _{n-1}

其中o_{n}是这一层的输出,\delta _{n-1}是上一层的信息。

 

你可能感兴趣的:(pytorch,算法,人工智能)