博客
关于我
机器学习——ANN(BP神经网络)
阅读量:798 次
发布时间:2023-04-15

本文共 2376 字,大约阅读时间需要 7 分钟。

反向传播算法与BP网络简介

反向传播算法(Backpropagation, BP算法)是多层感知器(MLP)训练中最常用的方法。其核心思想是通过两步迭代:前向传播反向传播,逐步优化网络参数,最终达到模型性能的最佳状态。在本文中,我们将以三层感知器(即包含一个隐藏层的网络)为例,详细介绍BP算法的实现过程。


信息前向传播

在BP网络中,前向传播是指从输入层到输出层依次计算每一层的激活值。具体来说,假设网络结构为 输入层隐藏层输出层,则传播过程如下:

  • 输入层:接收外部输入信号。
  • 隐藏层:计算基于输入信号的激活值,通常采用非线性激活函数(如Sigmoid、ReLU等)。
  • 输出层:根据隐藏层的激活值计算输出激活值,通常直接输出结果或与预期目标进行比较。
  • 这一过程为后续的误差反向传播奠定基础。


    误差反向传播

    在前向传播完成后,BP算法进入反向传播阶段,目标是通过误差反向流动来更新网络参数。具体步骤如下:

  • 计算误差:从输出层开始,计算实际输出与预期目标之间的误差。
  • 误差传播:将误差从输出层逐步传播到隐藏层和输入层。误差的传播方向与信号传播方向相反。
  • 更新参数:根据传播的误差,分别对每个层的权重和偏置参数进行调整,从而减小整体误差。
  • 这一过程需要使用链式法则(Backpropagation through Time)来计算误差梯度。


    3.1 输出层权重参数更新

    在反向传播过程中,首先更新输出层的权重和偏置参数。具体公式如下:

    • 权重更新公式:[\Delta w_{output} = -\eta \cdot \frac{\partial E}{\partial w_{output}}]

    • 偏置更新公式:[\Delta b_{output} = -\eta \cdot \frac{\partial E}{\partial b_{output}}]

    其中,$\eta$为学习率,$E$为误差函数。


    3.2 隐藏层权重参数更新

    随后,更新隐藏层的权重和偏置参数。公式如下:

    • 权重更新公式:[\Delta w_{hidden} = -\eta \cdot \frac{\partial E}{\partial w_{hidden}}]

    • 偏置更新公式:[\Delta b_{hidden} = -\eta \cdot \frac{\partial E}{\partial b_{hidden}}]


    3.3 输出层和隐藏层的偏置参数更新

    除了权重参数,偏置参数的更新规则与权重类似:

    • 输出层偏置:[\Delta b_{output} = -\eta \cdot \frac{\partial E}{\partial b_{output}}]

    • 隐藏层偏置:[\Delta b_{hidden} = -\eta \cdot \frac{\partial E}{\partial b_{hidden}}]


    3.4 BP算法四个核心公式

    BP算法的核心在于如何计算误差梯度并更新参数。主要公式包括:

  • 前向传播激活函数:[a^{(l)} = \sigma(z^{(l)})]其中,$\sigma$为激活函数,$z^{(l)}$为第$l$层的输入。

  • 反向传播误差:[\delta^{(l)} = \frac{\partial E}{\partial z^{(l)}}]

  • 权重更新规则:[\Delta w = -\eta \cdot \frac{\partial E}{\partial w}]

  • 偏置更新规则:[\Delta b = -\eta \cdot \frac{\partial E}{\partial b}]


  • 3.5 BP算法计算某个训练数据的代价函数对参数的偏导数

    在实际训练过程中,需要计算代价函数对权重和偏置的偏导数。具体来说:

    • 对于输出层:[\frac{\partial E}{\partial w_{output}} = a^{(hidden)} \cdot \delta^{(output)}][\frac{\partial E}{\partial b_{output}} = \delta^{(output)}]

    • 对于隐藏层:[\frac{\partial E}{\partial w_{hidden}} = a^{(input)} \cdot \delta^{(hidden)}][\frac{\partial E}{\partial b_{hidden}} = \delta^{(hidden)}]


    3.6 BP算法总结:用“批量梯度下降”算法更新参数

    通过上述步骤,BP算法实现了从前向传播到反向传播的完整过程,最终利用批量梯度下降算法(Batch Gradient Descent)更新网络参数,逐步优化模型性能。


    4 梯度消失问题及其解决办法

    在实际训练过程中,可能会遇到梯度消失问题。由于隐藏层的激活函数(如Sigmoid)导数在远离均值时接近零,导致权重更新梯度变小,最终可能导致参数无法有效更新。

    解决方法包括:

  • 使用正切激活函数(ReLU),其导数恒为1,避免梯度消失。
  • 在输出层使用线性激活函数,以保持梯度不衰减。

  • 5 加快 BP 网络训练速度:Rprop 算法

    为了加快BP网络的训练速度,研究者提出了Rprop算法(Rescaled_PROP)。其核心思想是对每次权重更新的梯度进行缩放,使得更新步长恒定为1。具体方法如下:

  • 初始化梯度为0。
  • 计算误差梯度。
  • 对梯度进行缩放:[g = \frac{\text{sign}(\nabla E)}{|\nabla E|} \cdot \eta]
  • 更新权重:[w \leftarrow w + g]
  • 通过这种方式,Rprop算法能够显著加快训练速度,同时保持收敛性。

    转载地址:http://wgrfk.baihongyu.com/

    你可能感兴趣的文章
    mysql 多个表关联查询查询时间长的问题
    查看>>
    mySQL 多个表求多个count
    查看>>
    mysql 多字段删除重复数据,保留最小id数据
    查看>>
    MySQL 多表联合查询:UNION 和 JOIN 分析
    查看>>
    MySQL 大数据量快速插入方法和语句优化
    查看>>
    mysql 如何给SQL添加索引
    查看>>
    mysql 字段区分大小写
    查看>>
    mysql 字段合并问题(group_concat)
    查看>>
    mysql 字段类型类型
    查看>>
    MySQL 字符串截取函数,字段截取,字符串截取
    查看>>
    MySQL 存储引擎
    查看>>
    mysql 存储过程 注入_mysql 视图 事务 存储过程 SQL注入
    查看>>
    MySQL 存储过程参数:in、out、inout
    查看>>
    mysql 存储过程每隔一段时间执行一次
    查看>>
    mysql 存在update不存在insert
    查看>>
    Mysql 学习总结(86)—— Mysql 的 JSON 数据类型正确使用姿势
    查看>>
    Mysql 学习总结(87)—— Mysql 执行计划(Explain)再总结
    查看>>
    Mysql 学习总结(88)—— Mysql 官方为什么不推荐用雪花 id 和 uuid 做 MySQL 主键
    查看>>
    Mysql 学习总结(89)—— Mysql 库表容量统计
    查看>>
    mysql 实现主从复制/主从同步
    查看>>