zoukankan      html  css  js  c++  java
  • 【机器学习】误差逆传播算法(反向传播算法)

            误差逆传播算法(error BackPropagation,BP)是神经网络中常用的传播算法。BP算法不仅可以应用于多层前馈神经网络,还可以应用于其他类型的神经网络,如训练递归神经网络。通常所说的“BP网络”一般是指用BP算法训练的多层前馈神经网络。

     


            给定训练集 $ D=left { (x_{1},y_{1}),(x_{2},y_{2}),..., (x_{m},y_{m}) ight },x_{i}in mathbb{R}^{d},y_{i}in mathbb{R}^{l} $ ,即输入由 $ d $ 个属性描述,输出 $ l $ 维实值向量。为便于讨论,给出有 $ d $ 个神经元、  $ l $ 个输出神经元、  $ q $ 个隐层神经元的多层前馈网络结构,其中输出层第 $ j $ 个神经元的阈值用 $  heta _{j} $ 表示,隐层第 $ h $ 个神经元的阈值用 $ gamma _{h} $ 表示。输入层第 $ i $ 个神经元与隐层第 $ h $ 个神经元之间的连接权重为 $ v_{ih} $ ,隐层第 $ h $ 个神经元与输出层第 $ j $ 个神经元之间的连接权重为 $ w_{ih} $ 。

            记隐层第 $ h $ 个神经元接收到的输入为 

    $$
    egin{align}
    alpha _{h}=sum_{i=1}^{d}v_{ih}x_{i} onumber
    end{align}
    $$

            输出层第 $ j $ 个神经元接收到的出入为

    $$
    egin{align}
    eta _{j}=sum_{h=1}^{q}w_{hj}b_{h} onumber
    end{align}
    $$

            其中 $ b_{h} $ 为隐层第 $ h $ 个神经元的输出。假设隐层和输出层的激活函数为Sigmoid函数。

            对训练集 $ (x_{k}, y_{k}) $ ,假定神经网络的输出为

    $$
    egin{align}
    hat y_{k}=left (hat y_{1}^{k}, hat y_{2}^{k}, ..., hat y_{l}^{k}  ight ) onumber
    end{align}
    $$

            即

    $$
    egin{align}
    hat y_{l}^{k}=fleft ( eta _{j}- heta _{j} ight ) 
    end{align}
    $$

           则网络在 $ (x_{k}, y_{k}) $ 上的均方误差为

    $$
    egin{align}
    E_{k}=frac{1}{2}sum_{j=1}^{l}left ( hat y_{j}^{k}-  y_{j}^{k} ight )^{2} 
    end{align}
    $$


            网络中需要更新的参数个数为 $ left ( d+l+1 ight )q+l $ 个:输入层到隐层的 $ d imes q $ 个权值、隐层到输出层的 $ q imes l $ 个权值、 $ q $ 个隐层神经元的阈值, $ l $ 个输出层神经元的阈值。BP是一个迭代学习算法,在迭代的每一轮中,采用广义的感知机学习规则对参数进行更新估计。对任意参数 $ v $ 的跟新估计为

    $$
    egin{align}
    vleftarrow v+Delta v onumber
    end{align}
    $$

            BP算法基于梯度下降策略,以目标的负梯度方向对参数进行调整,对式子(2)的 $ E_{k} $ ,给定学习率 $ eta $ ,有

    $$
    egin{align}
    Delta w_{hj}=-eta frac{partial E_{k}}{partial w_{hj}}
    end{align}
    $$

            注意到, $ w_{hj} $ 先影响到第 $ j $ 个输出层神经元的输入值 $ eta _{j} $ ,再影响到其输出值 $ hat y_{j}^{k} $ ,然后影响到 $ E_{k} $ ,有

    $$
    egin{align}
    frac{partial E_{k}}{partial w_{hj}}=frac{partial E_{k}}{partial hat y_{j}^{k}}cdot frac{partial hat y_{j}^{k}}{partial eta _{j}}cdot frac{partial eta _{j}}{partial w_{hj}}
    end{align}
    $$

            根据 $ eta _{j} $ 定义,显然有:

    $$
    egin{align}
    b_{h}= frac{partial eta _{j}}{partial w_{hj}}{partial w_{hj}}
    end{align}
    $$

            Sigmoid函数的导数为:

    $$
    egin{align}
    {f}'left ( x ight )=fleft ( x ight )left ( 1-fleft ( x ight ) ight )
    end{align}
    $$

            于是根据式子(1)和(2)有

    $$
    egin{align}
    g_{j} onumber
    &=-frac{partial E_{k}}{partial hat y_{j}^{k}}cdot frac{partial hat y_{j}^{k}}{partial eta _{j}} onumber\
    &=-left ( hat y_{j}^{k}- y_{j}^{k} ight ){f}'left ( eta _{j}- heta _{j} ight ) onumber\
    &=hat y_{j}^{k}left ( 1- hat y_{j}^{k} ight )left ( y_{j}^{k} -hat y_{j}^{k} ight )
    end{align}
    $$

            将式子 (5)、(7)带入式子(4),再带入式子(3)得到BP算法中关于 $ w_{hj} $ 的跟新公式:

    $$
    egin{align}
    Delta w_{hj}=eta g_{j}b_{h}
    end{align}
    $$

            类似地可以得到:

    $$
    egin{align}
    heta _{j}=-eta g_{j}
    end{align}
    $$

    $$
    egin{align}
    v _{ih}=-eta e_{h}x_{i}
    end{align}
    $$

    $$
    egin{align}
    gamma _{h}=-eta e_{h}
    end{align}
    $$

            其中式子(10)、(11)中的 $ e_{h} $ 为,

    $$
    egin{align}
    e_{h} onumber
    &=-frac{partial E_{k}}{partial b_{h}}cdot frac{partial b_{h}}{partial alpha _{h}} onumber\
    &=-sum_{j=1}^{l}frac{partial E_{k}}{partial eta _{j}}cdot frac{partial eta _{j}}{partial b_{h}}{f}'left ( alpha _{h}-gamma _{h} ight ) onumber\
    &=sum_{j=1}^{l}w_{hj}g_{j}{f}'left ( alpha _{h}-gamma _{h} ight ) onumber\
    &=b_{h}left ( 1- b_{h} ight )sum_{j=1}^{l}w_{hj}g_{j}
    end{align}
    $$


            对于每一个训练样本,BP算法执行的步骤为:先将输入样本提供给输入层神经元,然后逐层将信号前传,指导产生输出层的结果;然后计算出输出层的误差,再将误差逆向传播到隐层神经元,最后根据隐层神经元的误差来对连接权重和阈值(偏量)进行调整。该过程为循环进行,直到满足某一过程为止。

  • 相关阅读:
    背水一战 Windows 10 (90)
    背水一战 Windows 10 (89)
    背水一战 Windows 10 (88)
    背水一战 Windows 10 (87)
    背水一战 Windows 10 (86)
    背水一战 Windows 10 (85)
    背水一战 Windows 10 (84)
    背水一战 Windows 10 (83)
    背水一战 Windows 10 (82)
    背水一战 Windows 10 (81)
  • 原文地址:https://www.cnblogs.com/zhangchao162/p/11536289.html
Copyright © 2011-2022 走看看