手推BP算法-面试前抢救一下

写在最前

网上关于BP算法的解释浩如烟海,我没必要多写一篇充数,不过面试之前总想快速的复习一下,奈何没有成文的资料。本文旨在提取出纯净的推导过程,不过多解释,为了有基础的朋友们面试前快速过一下。

抽象出问题

《手推BP算法-面试前抢救一下》

给定训练集《手推BP算法-面试前抢救一下》 以单隐层前馈网络为例,如上图所示:

介绍一下出现的参数:

  • 《手推BP算法-面试前抢救一下》 输入层神经元的数
  • 《手推BP算法-面试前抢救一下》 输出层神经元的个数
  • 《手推BP算法-面试前抢救一下》 隐层神经元个数
  • 《手推BP算法-面试前抢救一下》 输出层第《手推BP算法-面试前抢救一下》个神经元的阈值
  • 《手推BP算法-面试前抢救一下》 隐层第《手推BP算法-面试前抢救一下》个神经元的阈值
  • 《手推BP算法-面试前抢救一下》输入层第《手推BP算法-面试前抢救一下》个神经元和隐层第《手推BP算法-面试前抢救一下》个神经元的连接权值
  • 《手推BP算法-面试前抢救一下》 隐层第《手推BP算法-面试前抢救一下》个神经元和输出层第《手推BP算法-面试前抢救一下》个神经元的连接权值
  • 《手推BP算法-面试前抢救一下》 隐层第《手推BP算法-面试前抢救一下》个神经元的输出
  • 《手推BP算法-面试前抢救一下》 隐层第《手推BP算法-面试前抢救一下》个神经元的输入
  • 《手推BP算法-面试前抢救一下》 输出层第《手推BP算法-面试前抢救一下》个神经元的输入

介绍一下主要优化的内容

《手推BP算法-面试前抢救一下》

单个神经元的最简单神经网络模型如上图所示,也称作“M-P神经元模型”。该模型可以视为神经网络的最小单位。我们着重注意这个阈值《手推BP算法-面试前抢救一下》, 神经元输出《手推BP算法-面试前抢救一下》,模型输出的是分类结果,所以这个《手推BP算法-面试前抢救一下》也直接影响分类结果。神经网络的训练就是连接权值的更新,所以这个连接权值的训练不用多解释。阈值本身也可以被作为一个值为-1的哑结点的权值。所以我们BP算法种训练的主要内容便是神经元的连接权值和神经元的阈值。

BP算法训练过程

  1. 明确损失函数和参数调整策略

对样本《手推BP算法-面试前抢救一下》,假定神经网络的输出为《手推BP算法-面试前抢救一下》,即

《手推BP算法-面试前抢救一下》

网络在样本《手推BP算法-面试前抢救一下》 上的均方误差

《手推BP算法-面试前抢救一下》

调整策略为梯度下降:

《手推BP算法-面试前抢救一下》

  1. 计算输出层阈值《手推BP算法-面试前抢救一下》的梯度《手推BP算法-面试前抢救一下》

《手推BP算法-面试前抢救一下》直接影响《手推BP算法-面试前抢救一下》, 《手推BP算法-面试前抢救一下》直接影响《手推BP算法-面试前抢救一下》, 利用链式法则:

《手推BP算法-面试前抢救一下》

由之前公式可接着计算得出:

《手推BP算法-面试前抢救一下》

由于激活函数为sigmoid函数,导数可以用乘积来表示,有:

《手推BP算法-面试前抢救一下》

所以有

《手推BP算法-面试前抢救一下》

  1. 计算隐层到输出层连接权值《手推BP算法-面试前抢救一下》的梯度《手推BP算法-面试前抢救一下》

《手推BP算法-面试前抢救一下》直接影响《手推BP算法-面试前抢救一下》,《手推BP算法-面试前抢救一下》 直接影响《手推BP算法-面试前抢救一下》《手推BP算法-面试前抢救一下》直接影响《手推BP算法-面试前抢救一下》,利用链式法则,所以有:

《手推BP算法-面试前抢救一下》

由于激活函数为sigmoid函数

《手推BP算法-面试前抢救一下》

《手推BP算法-面试前抢救一下》定义可知:

《手推BP算法-面试前抢救一下》

综合求出:

《手推BP算法-面试前抢救一下》

  1. 计算隐层阈值《手推BP算法-面试前抢救一下》的梯度《手推BP算法-面试前抢救一下》

《手推BP算法-面试前抢救一下》影响到《手推BP算法-面试前抢救一下》, 《手推BP算法-面试前抢救一下》直接影响 《手推BP算法-面试前抢救一下》,则有:

《手推BP算法-面试前抢救一下》
《手推BP算法-面试前抢救一下》
《手推BP算法-面试前抢救一下》
《手推BP算法-面试前抢救一下》

  1. 总结最终结果

引申一下,在多层前向网络中,将隐层阈值梯度表述为m层的阈值梯度《手推BP算法-面试前抢救一下》,隐层神经元输出表述为m层神经元的输出《手推BP算法-面试前抢救一下》,隐层与输出层的连接权值表述为m+1层的权值《手推BP算法-面试前抢救一下》,将输出层阈值梯度表述为m+1层的阈值梯度《手推BP算法-面试前抢救一下》。则隐层阈值梯度可以表示为:

《手推BP算法-面试前抢救一下》

可知,在阈值调整过程中,当前层的阈值梯度取决于下一层的阈值梯度,这就是BP算法的精髓,同理:

《手推BP算法-面试前抢救一下》

可知,当前层的连接权值梯度,取决于当前层神经元阈值梯度和上层神经元输出

BP算法的优缺点

优点

  1. 能够自适应、自主学习。这是BP算法的根本以及其优势所在,BP算法根据预设的参数更新规则,不断地调整神经网络中的参数,以达到最符合期望的输出。
  2. 拥有较强的非线性映射能力。
  3. 严谨的推导过程。误差的反向传播过程,采用的是已经非常成熟的链式法测,其推导过程严谨且科学。
  4. 较强的泛化能力,即在BP算法训练结束之后,BP算法可以利用从原来知识中学到的知识解决新的问题。

缺点:

  1. 由于BP神经网络中的参数众多,每次都需要更新数量较多的阈值和权值,故会导致收敛速度过慢。
  2. 网络中隐含层节点个数尚无明确的公式,传统方法需要不断地设置隐含层节点数进行试凑,根据网络误差结果确定最终隐含层节点个数。
  3. 从数学角度看,BP算法是一种速度较快的梯度下降算法,很容易陷入局部最小值的问题。当出现局部极小时,从表面上看,误差符合要求,但这时所得到的解并不一定是问题的真正解。所以BP算法是不完备的。
    原文作者:算法小白
    原文地址: https://juejin.im/post/5c13b00d518825314143675c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞