多层前馈神经网络及BP算法
一.多层前馈神经网络
首先说下多层前馈神经网络,BP算法,BP神经网络之间的关系。多层前馈[multilayer feed-forward]神经网络由一个输入层、一个或多个隐藏层和一个输出层组成,后向传播(BP)算法在多层前馈神经网络上面进行学习,采用BP算法的(多层)前馈神经网络被称为BP神经网络。给出一个多层前馈神经网络的拓扑结构,如下所示:
神经网络的拓扑结构包括:输入层的单元数、隐藏层数(如果多于一层)、每个隐藏层的单元数和输出层的单元数。神经网络可以用于分类(预测给定元组的类标号)和数值预测(预测连续值输出)等。
二.后向传播(BP)算法详解
1.初始值权重
神经网络的权重被初始化为小随机数,每个神经元都有一个相关联的偏置,同样也被初始化为小随机数。
2.前向传播输入
以单个神经网络单元为例,如下所示:
给定隐藏层或输出层的单元,到单元的净输入,如下所示:
其中,是由上一层的单元到单元的连接的权重;是上一层的单元的输出;是单元的偏置。需要说明的是偏置充当阀值,用来改变单元的活性。
给定单元的净输入,单元的输出,如下所示:
3.后向传播误差
(1)对于输出层单元,误差用下式计算:
其中,是单元的实际输出,而是给定训练元组的已知目标值。需要说明的是,是逻辑斯缔函数的导数。
(2)对于隐藏层单元,它的误差用下式计算:
其中,是由下一较高层中单元到单元的连接权重,而是单元的误差。
(3)权重更新,如下所示:
其中,是权重的改变量,变量是学习率,通常取0.0和1.0之间的常数值。
(4)偏置更新,如下所示:
其中,是的改变量。
(5)权重和偏置更新
如果每处理一个样本就更新权重和偏置,称为实例更新(case update);如果处理完训练集中的所有元组之后再更新权重和偏置,称为周期更新(epoch update)。理论上,反向传播算法的数据推导使用周期更新,但是在实践中,实例更新通常产生更加准确的结果。
说明:误差反向传播的过程就是将误差分摊给各层所有单元,从而获得各层单元的误差信号,进而修正各单元的权值,即权值调整的过程。
4.终止条件
如果满足条件之一,就可以停止训练,如下所示:
(1)前一周期所有的都太小,小于某个指定的阀值。
(2)前一周期误分类的元组百分比小于某个阀值。
(3)超过预先指定的周期数。
实践中,权重收敛可能需要数十万个周期。神经网络的训练有很多的经验和技巧,比如可以使用一种称为模拟退火的技术,使神经网络确保收敛到全局最优。
三.用BP训练多层前馈神经网络
举个例子具体说明使用BP算法训练多层前馈神经网络的每个细节,如下所示:
设置学习率为0.9,第一个训练元组为,其类标号为1。神经网络的初始权重和偏置值如表1所示:
根据给定的元组,计算每个神经元的净输入和输出,如表2所示:
每个神经元的误差值如表3所示:
说明:从误差的计算过程来理解反向(BP)传播算法也许更加直观和容易。
权重和偏置的更新如表4所示:
说明:将该神经网络模型训练好后,就可以得到权重和偏执参数,进而做二分类。
四.用Python实现BP神经网络[3]
神经网络拓扑结构,如下所示:
解析:
1.第33和35行:l1和l2分别表示第1层和第2层神经元的输出。(第0层表示元组输入)
2.第37行:l2_error与相对应。
3.第40行:l2_delta与输出层误差相对应。
4.第42行:l1_error与相对应。
5.第43行:l1_delta与隐藏层误差相对应。
6.第45行:l1.T.dot(l2_delta)与相对应,而syn1与相对应。
7.第46行:l0.T.dot(l1_delta)与相对应,而syn0与相对应。
说明:一边代码,一边方程,做到代码与方程的映射。这是一个基础的三层BP神经网络,但是麻雀虽小五脏俱全。主要的不足有几点:没有考虑偏置;没有考虑学习率;没有考虑正则化;使用的是周期更新,而不是实例更新(一个样本)和批量更新(m个样本)。但是,足以理解前馈神经网络和BP算法的工作原理。神经网络和BP算法的详细数学推导参考[5]。
参考文献:
[1]数据挖掘:概念与技术[第三版]
[2]使用Python构造神经网络:http://www.ibm.com/developerworks/cn/linux/l-neurnet/
[3]一个11行Python代码实现的神经网络:http://python.jobbole.com/82758/
[4]用BP人工神经网络识别手写数字:http://blog.csdn.net/gzlaiyonghao/article/details/7109898
[5]反向传导算法:http://ufldl.stanford.edu/wiki/index.php/%E5%8F%8D%E5%90%91%E4%BC%A0%E5%AF%BC%E7%AE%97%E6%B3%95
多层前馈神经网络及BP算法的更多相关文章
- 从 0 开始机器学习 - 神经网络反向 BP 算法!
最近一个月项目好忙,终于挤出时间把这篇 BP 算法基本思想写完了,公式的推导放到下一篇讲吧. 一.神经网络的代价函数 神经网络可以看做是复杂逻辑回归的组合,因此与其类似,我们训练神经网络也要定义代价函 ...
- 深度学习基础-基于Numpy的多层前馈神经网络(FFN)的构建和反向传播训练
本文是深度学习入门: 基于Python的实现.神经网络与深度学习(NNDL)以及花书的读书笔记.本文将以多分类任务为例,介绍多层的前馈神经网络(Feed Forward Networks,FFN)加上 ...
- [DL学习笔记]从人工神经网络到卷积神经网络_1_神经网络和BP算法
前言:这只是我的一个学习笔记,里边肯定有不少错误,还希望有大神能帮帮找找,由于是从小白的视角来看问题的,所以对于初学者或多或少会有点帮助吧. 1:人工全连接神经网络和BP算法 <1>:人工 ...
- 机器学习 —— 基础整理(七)前馈神经网络的BP反向传播算法步骤整理
这里把按 [1] 推导的BP算法(Backpropagation)步骤整理一下.突然想整理这个的原因是知乎上看到了一个帅呆了的求矩阵微分的方法(也就是 [2]),不得不感叹作者的功力.[1] 中直接使 ...
- 神经网络中 BP 算法的原理与 Python 实现源码解析
最近这段时间系统性的学习了 BP 算法后写下了这篇学习笔记,因为能力有限,若有明显错误,还请指正. 什么是梯度下降和链式求导法则 假设我们有一个函数 J(w),如下图所示. 梯度下降示意图 现在,我们 ...
- 神经网络和BP算法推导
注意:绘画太难了,因为他们画,本文中的所有插图来自基本算法饺子机类.请勿转载 1.习模型: 事实上,基本上全部的基本机器学习模型都能够概括为下面的特征:依据某个函数,将输入计算并输出. 图形化表示为下 ...
- 神经网络的BP算法
正向传播: W下脚标定义根据用户自己的习惯 反向传播算法 1.误差由本层传到上层相关联的结点,权重分配 2.上层某个结点的总误差 2.误差最小化与权重变量有关,最小梯度法. 权重因子更新 偏导数求解, ...
- 【神经网络】BP算法解决XOR异或问题MATLAB版
第一种 %% %用神经网络解决异或问题 clear clc close ms=4;%设置4个样本 a=[0 0;0 1;1 0;1 1];%设置输入向量 y=[0,1,1,0];%设置输出向量 n=2 ...
- BP算法基本原理推导----《机器学习》笔记
前言 多层网络的训练需要一种强大的学习算法,其中BP(errorBackPropagation)算法就是成功的代表,它是迄今最成功的神经网络学习算法. 今天就来探讨下BP算法的原理以及公式推导吧. 神 ...
- 【学习笔记】前馈神经网络(ANN)
前言 最近跟着<神经网络与深度学习>把机器学习的内容简单回顾了一遍,并进行了一定的查缺补漏,比如SVM的一些理解,one-hot向量,softmax回归等等. 然后我将继续跟着这本书,开始 ...
随机推荐
- Springboot 开启异步任务Async,邮件发送任务,定时任务
异步任务 1.主启动类开启异步注解 2.service目录下开启异步任务注解 @Service public class AsyncService { @Async//异步任务注解的标志 public ...
- 如何基于G6进行双树流转绘制?
1. 背景 业务背景:CRM系统随着各业务条线对线索精细化分配的诉求逐渐增加,各个条线的流向规则会越来越复杂,各个条线甚至整个CRM的线索流转规则急需一种树形的可视化的图来表达. 技术背景:在开发之前 ...
- Kubernetes(k8s)一次性任务:Job
目录 一.系统环境 二.前言 三.Kubernetes Job简介 四.创建一次性任务job 4.1 创建一个简单任务的job 4.2 创建需要执行多次的job任务 五.测试job失败重试次数 六.j ...
- JavaWeb编程面试题——Spring Framework
引言 面试题==知识点,这里所记录的面试题并不针对于面试者,而是将这些面试题作为技能知识点来看待.不以刷题进大厂为目的,而是以学习为目的.这里的知识点会持续更新,目录也会随时进行调整. 关注公众号:编 ...
- SpringBoot开发简单接口流程
SpringBoot开发接口 初始化 新建项目 (1)使用 IDEA 的过程,新建Project,左侧选 Spring Initializr,点Next (2)选 8 版本,点Next (3)左侧选择 ...
- @Target元注解的使用
@Target注解标记另外的注解用于限制此注解可以应用哪种Java元素类型.先看Java SE 8中@Target是如何声明的: package java.lang.annotation; publi ...
- 用CSS实现带动画效果的单选框
预览一下效果:http://39.105.101.122/myhtml/CSS/singlebox2/singleRadio.html 布局结构为: 1 <div class="rad ...
- 页面status:500,报错 server encountered an internal error that prevented it from fulfilling this request.
The server encountered an internal error that prevented it from fulfilling this request.服务器遇到了一个内部错误 ...
- Codeforces Round #771 (Div. 2) A-E
A 代码 #include <bits/stdc++.h> using namespace std; using ll = long long; int p[507]; bool solv ...
- LaTeX 的学习笔记
摘自我的洛谷博客 该文章被打开的次数(包括洛谷平台): \(\LaTeX\) 中所有命令都以\开头,后面可以跟一个花括号,代表参数. \documentclass{} 指定了文章类型,有 articl ...