一.多层前馈神经网络

首先说下多层前馈神经网络,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算法的更多相关文章

  1. 从 0 开始机器学习 - 神经网络反向 BP 算法!

    最近一个月项目好忙,终于挤出时间把这篇 BP 算法基本思想写完了,公式的推导放到下一篇讲吧. 一.神经网络的代价函数 神经网络可以看做是复杂逻辑回归的组合,因此与其类似,我们训练神经网络也要定义代价函 ...

  2. 深度学习基础-基于Numpy的多层前馈神经网络(FFN)的构建和反向传播训练

    本文是深度学习入门: 基于Python的实现.神经网络与深度学习(NNDL)以及花书的读书笔记.本文将以多分类任务为例,介绍多层的前馈神经网络(Feed Forward Networks,FFN)加上 ...

  3. [DL学习笔记]从人工神经网络到卷积神经网络_1_神经网络和BP算法

    前言:这只是我的一个学习笔记,里边肯定有不少错误,还希望有大神能帮帮找找,由于是从小白的视角来看问题的,所以对于初学者或多或少会有点帮助吧. 1:人工全连接神经网络和BP算法 <1>:人工 ...

  4. 机器学习 —— 基础整理(七)前馈神经网络的BP反向传播算法步骤整理

    这里把按 [1] 推导的BP算法(Backpropagation)步骤整理一下.突然想整理这个的原因是知乎上看到了一个帅呆了的求矩阵微分的方法(也就是 [2]),不得不感叹作者的功力.[1] 中直接使 ...

  5. 神经网络中 BP 算法的原理与 Python 实现源码解析

    最近这段时间系统性的学习了 BP 算法后写下了这篇学习笔记,因为能力有限,若有明显错误,还请指正. 什么是梯度下降和链式求导法则 假设我们有一个函数 J(w),如下图所示. 梯度下降示意图 现在,我们 ...

  6. 神经网络和BP算法推导

    注意:绘画太难了,因为他们画,本文中的所有插图来自基本算法饺子机类.请勿转载 1.习模型: 事实上,基本上全部的基本机器学习模型都能够概括为下面的特征:依据某个函数,将输入计算并输出. 图形化表示为下 ...

  7. 神经网络的BP算法

    正向传播: W下脚标定义根据用户自己的习惯 反向传播算法 1.误差由本层传到上层相关联的结点,权重分配 2.上层某个结点的总误差 2.误差最小化与权重变量有关,最小梯度法. 权重因子更新 偏导数求解, ...

  8. 【神经网络】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 ...

  9. BP算法基本原理推导----《机器学习》笔记

    前言 多层网络的训练需要一种强大的学习算法,其中BP(errorBackPropagation)算法就是成功的代表,它是迄今最成功的神经网络学习算法. 今天就来探讨下BP算法的原理以及公式推导吧. 神 ...

  10. 【学习笔记】前馈神经网络(ANN)

    前言 最近跟着<神经网络与深度学习>把机器学习的内容简单回顾了一遍,并进行了一定的查缺补漏,比如SVM的一些理解,one-hot向量,softmax回归等等. 然后我将继续跟着这本书,开始 ...

随机推荐

  1. 前端开发如何更好的避免样式冲突?级联层(CSS@layer)

    作者:vivo 互联网前端团队 - Zhang Jiqi 本文主要讲述了CSS中的级联层(CSS@layer),讨论了级联以及级联层的创建.嵌套.排序和浏览器支持情况.级联层可以用于避免样式冲突,提高 ...

  2. Docker 的安装及常用命令

    CentOS Docker 安装 参看链接 Windows安装 Docker Desktop 官方下载地址: https://hub.docker.com/editions/community/doc ...

  3. 掌握Python文件操作:从基础到高阶的全方位探索

    在本篇博客中,我们将全面.深入地探讨Python中的文件操作.文件操作在Python编程中是不可或缺的一部分,它包含了打开.读取.写入和关闭文件等各种操作.我们将从基础的文件操作讲解到高级的文件处理技 ...

  4. 页面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.服务器遇到了一个内部错误 ...

  5. Git使用教程(带你玩转GitHub)

    Git使用教程(理论实体结合体系版) 下载安装: 按照这个博客来就好 Windows系统Git安装教程(详解Git安装过程) - 学为所用 - 博客园 (cnblogs.com) Git命令大全: G ...

  6. 第四章 VIVIM编辑器

    1. 是什么 ‍ VI 是 Unix 操作系统和类 Unix 操作系统中最通用的文本编辑器. ‍ VIM 编辑器是从 VI 发展出来的一个性能更强大的文本编辑器. ‍ 2. 一般模式 ‍ 以 vi/v ...

  7. 8. 自定义映射resultMap

    ‍ 在 Mybatis 中,resultType 和 resultMap 都用于定义查询结果的映射关系.它们的使用场景如下: resultType resultType 用于指定返回结果的数据类型,通 ...

  8. 使用TensorFlow进行自动化测试与部署

    目录 标题:<使用 TensorFlow 进行自动化测试与部署> 背景介绍: 随着人工智能和机器学习技术的快速发展,TensorFlow 成为了一个广泛应用的深度学习框架,被广泛用于构建神 ...

  9. 如何使用libavfilter库给输入文件input.yuv添加视频滤镜?

    一.视频滤镜初始化 本次代码实现的是给输入视频文件添加水平翻转滤镜,在视频滤镜初始化部分我们可以分为以下几步进行: 1.创建滤镜图结构 视频滤镜功能最核心的结构为滤镜图结构,即AVFilterGrap ...

  10. Educational Codeforces Round 151 (Rated for Div. 2) A-D

    A 代码 #include <bits/stdc++.h> using namespace std; using ll = long long; bool solve() { int n, ...