【西瓜书】神经网络-BP算法(反向传播算法)

embedded/2024/11/28 14:33:23/

系列文章目录

【西瓜书】神经网络-MP神经元、感知机和多层网络icon-default.png?t=O83Ahttps://blog.csdn.net/jiangshuiy/article/details/144070587


目录

系列文章目录

误差逆传播算法(BP算法、反向传播算法)

累积误差逆传播算法

BP训练

最小值与极小值


误差逆传播算法(BP算法、反向传播算法)

  • 误差逆传播(error BackPropagation,简称BP)算法,也叫反向传播算法,是解决多层网络的杰出代表。
  • 值得指出的是,BP算法不仅可用于多层前馈神经网络,还可以用于其他类型的神经网络
来自西瓜书-P102
  • 约定记号:
  • BP算法是一个迭代学习算法。在迭代的每一轮中采用广义的感知机学习规则对参数进行更新估计,任意参数v的更新估计算式为:v\gets v+\Delta v
  • BP算法基于梯度下降(gradient descent)策略,以目标的负梯度方向对参数进行调整。对误差E_k,给定学习率η,有\Delta w_{hj} = -\eta\frac{\partial E_k}{\partial w_{hj}}
    • 根据“链式法则”,有\frac{\partial E_k}{\partial w_{hj}} = \frac{\partial E_k}{\partial \hat{y_{j}}^k}\cdot \frac{\partial \hat{y_{j}}^k}{\partial \beta_j}\cdot \frac{​{\partial \beta_j}}{\partial w_{hj}}
    • 根据定义(见图):\frac{​{\partial \beta_j}}{\partial w_{hj}}=b_h
    • Sigmoid函数的性质:f'(x)=f(x)(1-f(x)
    • 因此:g_j=-\frac{\partial E_k}{\partial \hat{y_{j}}^k}\cdot \frac{\partial \hat{y_{j}}^k}{\partial \beta_j} =-(\hat y_j^k-y_j^k)f'(\beta_j-\theta_j)=\hat y_j^k(1-\hat y_j^k)(y_j^k-\hat y_j^k)
    • 可得:\Delta w_{hj} = \eta g_jb_h
  • 类似可得:\Delta \theta_{j} = \eta g_j
  • \Delta v_{ih} = \eta e_h x_i
  • \Delta \gamma_{h} = \eta e_h
  • 其中,e_h=-\frac{\partial E_k}{\partial b_h}\cdot \frac{\partial b_h}{\partial \alpha_h} =-\sum_{j=1}^l\frac{\partial E_k}{\partial \beta_j}\cdot \frac{\partial \beta_j}{\partial b_h}f'(\alpha_h - \gamma _h)\\=\sum_{j=1}^lw_{hj}g_jf'(\alpha_h - \gamma_h) = b_h(1-b_h)\sum_{j=1}^lw_{hj}g_j

  • 学习率 η∈(0, 1) 控制着算法每一轮迭代中的更新步长,若太大则容易震荡,太小则收敛速度又会过慢。
  • BP算法的目标是要最小化训练集D上的累计误差:E=\frac{1}{m}\sum_{k=1}^mE_k
  • “标准BP算法”每次仅针对一个训练样例更新连接权和阈值。

累积误差逆传播算法

  • 如果推导出基于累积误差最小化的更新规则,就是累积误差逆传播(accumulated error backpropagation)算法。两种算法都很常用。

BP训练

  • 读取训练集一遍,称为进行了“一轮”(one round,也叫 one epoch)学习。
  • 标准BP算法和累积BP算法的区别类似于随机梯度下降与标准梯度下降之间的区别。
  • 如何设置隐藏神经元的个数,是个未决问题。实际应用中通常用“试错法”(trial-by-error)调整。
  • 由于其强大的表示能力,BP神经网络经常遭遇过拟合,其训练误差持续降低,但测试误差却可能上升。有两种策略常用来缓解BP网络的过拟合:
    • 第1种:“早停”(early stop),将数据分成训练集和验证集,训练集用来计算梯度、更新连接权和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。
    • 第2种:“正则化”(regularization),基本思想是在误差目标函数中增加一个用于描述网络复杂度的部分。例如连接权与阈值的平方和。增加连接权与阈值平方和这一项后,训练过程将会偏好比较小的连接权和阈值,使网络输出更加“光滑”,从而对过拟合有所缓解。
  • 神经网络的训练过程可看作一个参数寻优过程,即在参数空间中寻找一组最优参数,使得E最小。

最小值与极小值

  • 两种最优:“局部极小”(local minimum)和“全局最小”(global minimum)。直观的看,
    • 局部极小点,是参数空间中的某个点,其邻域点的误差函数值均不小于该点的函数值;
    • 全局最小解,则是指参数空间中所有点的误差函数值均不小于该点的误差函数值。
    • 全局最小一定是局部极小,反之则不成立。
  • 在参数寻优过程中,希望找到全局最小。
  • 基于梯度的搜索是使用最为广泛的参数寻优方法。
    • 从某些初始解出发,迭代寻找最优参数值。
    • 每次迭代中,先计算误差函数在当前的梯度,然后根据梯度确定搜索方向。例如由于负梯度方向是函数值下降最快的方向,因此梯度下降法就是沿着负梯度方向搜索最优解。若误差函数在当前点的梯度为0,则已达到局部极小,更新量降为0,这意味着参数的迭代更新将因此停止。
  • 如果有多个极小值,就称参数寻优陷入局部极小。
  • 现实任务中常使用以下策略来跳出局部极小:
    • 以多种不同参数值初始化多个神经网络,按标准方法训练后,取其中误差最小的解作为最终参数。这相当于从多个不同的初始点开始搜索。
    • 使用“模拟退火”(simulated annealing)技术。模拟退火在每一步都有一定概率接受比当前解更差的结果,从而有助于“跳出”局部极小。但是也会造成跳出全局最小。
    • 使用梯随机梯度下降(stochastic gradient descent,简称SGD),随机梯度下降法在计算梯度时加入了随机因素,因此即便陷入局部极小点,计算出来的梯度仍然可能不为零,这就有机会跳出。
    • 遗传算法(genetic algorithms)也常用来训练神经网络,以更好的逼近全局最小。
    • 上述跳出局部极小的技术大多是启发式,理论上常缺乏保障。

http://www.ppmy.cn/embedded/141203.html

相关文章

java获取docker镜像构建日志

在Java中获取Docker镜像的构建日志,你可以使用Docker Engine API。以下是一个使用OkHttp库的示例代码,用于获取构建日志: import okhttp3.*; import java.io.IOException; public class DockerLogsFetcher { private static final St…

如何分析Windows防火墙日志

Windows防火墙,也被称为Windows Defender Firewall,是一种内置的安全功能,可以主动监控和分析运行Windows操作系统的计算机上通过Windows防火墙的网络流量,主要目的是作为计算机和互联网或其他网络之间的屏障,使管理员…

2024算法基础公选课练习七(BFS1)

一、前言 还是偏基础的bfs&#xff0c;但是有几个题不是很好写 二、题目总览 三、具体题目 3.1 问题 A: 数据结构-队列-奇怪的电梯 我的代码 可以看成求一维平面的bfs最短路 #include <bits/stdc.h> using i64 long long; using pii std::pair<int,int>; co…

网络安全审计机制与实现技术

目录 网络安全审计机制与实现技术网络安全审计机制与实现技术网络审计数据安全分析技术审计日志报表网络审计数据存储技术审计日志存储网络审计数据保护技术 网络安全审计机制与实现技术 技术分类&#xff1a;基于主机的审计机制、基于网络通信的审计机制、基于应用的审计机制…

利用Python爬虫获取商品评论:技术与实践

在当今这个信息爆炸的时代&#xff0c;互联网上充斥着海量的数据。对于电商平台来说&#xff0c;用户评论是了解消费者喜好、优化产品策略的重要依据。Python作为一种强大的编程语言&#xff0c;其丰富的库支持使得爬虫技术成为获取这些数据的有效手段。本文将详细介绍如何使用…

StarRocks-join优化

1、背景 有两个大表&#xff0c;都是6kw级别上下的&#xff0c;通过SR然后包装了一个接口对外提供查询&#xff0c;当前的问题是&#xff0c;这样大的join查询会导致BE直接宕机。并且这个sql很有代表性&#xff0c;我截图如下&#xff1a; 这个表是个单分区&#xff0c;所以直接…

【Zookeeper】四,Zookeeper节点类型、通知、仲裁、会话

文章目录 Zookeeper的架构znode的版本Zookeeper的节点类型层级树状结构znode的不同类型 Zookeeper监视与通知通知的类型 Zookeeper的仲裁Zk的会话会话的生命周期 Zookeeper的架构 Zookeeper的服务器端运行两种模式&#xff1a;独立模式&#xff08;standalone&#xff09;和仲…

Kadb中的ecpg编程

Kadb中的ecpg编程 测试程序&#xff1a; #include "stdio.h" #include "stdlib.h" #include "string.h" // 相当于高级程序语言的全局变量定义 EXEC SQL BEGIN DECLARE SECTION; // 主变量声明开始 const char* target1 "postgres192.168…