转载

反向传播算法

反向传播算法

  • 下图是一个三层的神经网络,分别为输入层,隐含层,输出层。反向传播算法基于此图推导

    下面是一些变量的含义

    x 1 , x 2 , x 3 . . . x n x_1, x_2,x_3...x_n 分别是输入单个样本向量的各个维的值

    y 1 , y 2 , . . . . y n H y_1, y_2,....y_{nH} 分别是隐含层各个单元的输出值

    z 1 , z 2 , . . . z c z_1,z_2,...z_c 分别是输出向量各个维的值。如果是分类问题,值最大的那维,就对应相应的预测类别

    t 1 , t 2 , . . . t c t_1,t_2,...t_c 是相应输出向量各个维的真实值,也就是目标值。

    w k j w_{kj} 代表第j个隐含单元到第k个输出单元的权值

    w j i w_{ji} 代表第i个输入单元到第j个隐含单元的权值

    n e t k = j = 1 n H y j w k j + w k 0 net_k=\sum\limits_{j=1}^{n_H}y_jw_{kj}+w_{k0} 代表所有隐含层单元对一个输出单元的净激活(没有加激活函数)

  • 训练误差

    J ( w ) = 1 2 k = 1 c ( t k ? z k ) 2 = 1 2 t-z J(\textbf{w})=\frac{1}{2}\sum\limits_{k=1}^{c}(t_k-z_k)^2=\frac{1}{2}||\textbf{t-z}||

    很容易理解,这就是一个均方差,加了 1 2 \frac{1}{2} 是为了后面的计算。

  • 梯度下降参考链接

    Δ w = ? η ? J ? w Δ w p q = ? η ? J ? w p q \Delta\textbf{w}=-\eta\frac{\partial J}{\partial \textbf{w}} \\ \Delta{w_{pq}}=-\eta\frac{\partial J}{\partial {w_{pq}}} \\

    沿梯度的反方向调整参数,尽量减少训练误差。第二个公式是误差对单个权值的偏导

  • 求隐含层到输出层权值偏导 ? J / ? w k j {\partial \textbf J}/{\partial w_{kj}} (使用链式求导法则)

    ? J ? w k j = ? J ? n e t k ? n e t k ? w k j \frac{\partial\textbf{J}}{\partial w_{kj}} =\frac{\partial\textbf{J}}{\partial net_{k}}\frac{\partial{net_k}}{\partial w_{kj}}

    定义 δ k ? \delta_k? 为输出单元 k ? k? 的敏感度
    δ k = ? ? J /   ? n e t k = ? ? J ? z k ? z k ? n e t k = ( t k ? z k ) f ( n e t k ) \delta_k=-\partial\textbf{J}/\ \partial net_k \\ =-\frac{\partial\textbf{J}}{\partial z_{k}}\frac{\partial z_k}{\partial net_{k}} \\ =(t_k-z_k)f^{'}(net_k)
    ? n e t k / ? w k j = y j {\partial{net_k}}/{\partial w_{kj}}=y_j


    ? J ? w k j = η δ k y j = η ( t k ? z k ) f ( n e t k ) y j \frac{\partial\textbf{J}}{\partial w_{kj}}=\eta\delta_ky_j=\eta(t_k-z_k)f^{'}(net_k)y_j

  • 求输入层到隐含层权值偏导 ? J / ? w j i \partial \textbf J /{\partial w_{ji}}

    ? J ? w j i = ? J ? y j ? y j ? n e t j ? n e t j ? w j i ? J ? y j = ? J ? z k ? z k ? y j = ? k = 1 c ( t k ? z k ) ? z k ? y j = ? k = 1 c ( t k ? z k ) ? z k ? n e t k ? n e t k ? y j = ? k = 1 c ( t k ? z k ) f ( n e t k ) w k j \frac{\partial\textbf{J}}{\partial w_{ji}} =\frac{\partial\textbf{J}}{\partial y_{j}}\frac{\partial{y_j}}{\partial net_{j}}\frac{\partial{net_j}}{\partial w_{ji}} \\ \frac{\partial\textbf{J}}{\partial y_{j}} =\frac{\partial\textbf{J}}{\partial z_{k}}\frac{\partial{z_k}}{\partial y_{j}} \\ =-\sum\limits_{k=1}^{c}(t_k-z_k)\frac{\partial z_k}{\partial y_j} \\ =-\sum\limits_{k=1}^{c}(t_k-z_k)\frac{\partial z_k}{\partial net_k}\frac{\partial net_k}{\partial y_j} \\ =-\sum\limits_{k=1}^{c}(t_k-z_k)f^{'}(net_k)w_{kj}

    定义 δ j \delta_j 为隐单元 j j 的敏感度
    δ j = f ( n e t j ) k = 1 c w k j δ k \delta_j=f^{'}(net_j)\sum\limits_{k=1}^{c}w_{kj}\delta_k

    ? J ? w j i = η x i δ j = η [ k = 1 c w k j δ k ] f ( n e t j ) x i \frac{\partial\textbf{J}}{\partial w_{ji}}=\eta x_i \delta_j =\eta[\sum\limits_{k=1}^{c}w_{kj}\delta_k]f^{'}(net_j)x_i
    一个隐单元的敏感度是各输出单元敏感度的加权和,权重为 w k j w_{kj} ,然后与 f ( n e t j ) f^{'}(net_j) 相称乘。

正文到此结束
本文目录