当前位置: 首页 > news >正文

神经网络-BackPropagation算法

一.多层向前神经网络

BackPropagation算法是应用在多层向前神经网络训练.

1.多层向前神经网络由以下部分组成:

输入层(input layer), 隐藏层 (hidden layers), 输入层 (output layers)

每层由单元(units)组成

输入层(input layer):是由训练集的实例特征向量传入,经过连接结点的权重(weight)传入下一层

隐藏层:个数可以是任意的,输入层有一层,输出层有一层

输出层:一层中加权的求和,然后根据非线性方程转化输出

 

2.神经网络结构设计

(1)使用神经网络训练数据之前,必须确定神经网络的层数,以及每层单元的个数

(2)特征向量在被传入输入层时通常被先标准化(normalize)到0和1之间 (为了加速学习过程)

(3)离散型变量可以被编码成每一个输入单元对应一个特征值可能赋的值(类似one-hot)

 比如:特征值A可能取三个值(a0, a1, a2), 可以使用3个输入单元来代表A。 如果A=a0, 那么代表a0的单元值就取1, 其他取0;如果A=a1, 那么代表a1de单元值就取1,其他取0,以此类推

(4)神经网络即可以用来做分类(classification)问题,也可以解决回归(regression)问题

对于分类问题,如果是2类,可以用一个输出单元表示(0和1分别代表2类), 如果多余2类,每一个类别用一个输出单元表示, 所以输入层的单元数量通常等于类别的数量

 

二.误差反向传播(Error Back Propagation, BP)算法

1.BP算法的基本思想是,学习过程由信号的正向传播与误差的反向传播两个过程组成。

2."正向传播" 求损失, "反向传播" 回传误差

3.对比经过神经网络后输入层预测值(predicted value)与真实值(target value)之间, 反方向(从输出层=>隐藏层=>输入层)来以最小化误差(error)来更新每个连接的权重(weight)

4.算法过程:

输入:

(1)D:数据集,

(2)学习率(learning rate)

(3)一个多层前向神经网络结构

输出:

一个训练好的神经网络(每层的权重w值及偏移量b值)

 

a.初始化权重(weights)和偏向(bias):

随机初始化w在-1到1之间,或者-0.5到0.5之间,每个单元有一个偏向b

b.对于每一个训练实例X,执行以下两个步骤("正向传播" 求损失, "反向传播" 回传误差):

(1)由输入层向前传送(两小步):

  • 每一个单元oj都是由前一层的每个单元oi乘以权重w加偏移量b求和得到数值

 

 

  • 再经过激活函数得到当前单元的值oj

 

(2)根据误差(error)反向传送(两小步,类似梯度更新)

  • 计算误差:

对于输出层:(oj为预测值,Tj真实值)

对于隐藏层:(前一层)

 

  • 更新权重w和偏向 

权重更新:(l为学习率)

偏向更新:

c.终止条件:

(1)权重的更新低于某个阈值

(2)预测的错误率低于某个阈值

(3)达到预设一定的循环次数

 

5.BP算法举例

如下图神经网络结构

1.初始化权重w及偏移theta(选取一部分样本)

 

2.正向计算每个单元的值

 

3.对输出层和隐藏层求误差

 

4.更新每层的权重及偏移b

 上面步骤演示了一次正向和反向更新,下一轮再来一批样本训练一轮,直到样本用完或上面三个终止条件达到,就完成训练得到了每层的权重w和偏移量b.

 

转载于:https://www.cnblogs.com/xmeo/p/7133230.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • java分页代码
  • java过滤http危险字符
  • iOS开发 - 网络数据安全加密(MD5)
  • flex定时处理
  • 数据结构:队列Queue的实现与代码分析
  • 【bzoj2333】 SCOI2011—棘手的操作
  • java各数据类型之间的转换
  • Android笔记(三):View一些值得注意的地方
  • java常用正则表达式
  • Ubuntu 检测到系统出现问题 弹窗 嘿嘿
  • 日期年月日正则表达式
  • 最近一周的日期选择设置
  • hibernate增加,删除,修改,查找操作
  • javaWEB总结(17):cookie概述
  • flex获得当前player版本信息
  • (三)从jvm层面了解线程的启动和停止
  • [译] React v16.8: 含有Hooks的版本
  • 【剑指offer】让抽象问题具体化
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • C++类中的特殊成员函数
  • Codepen 每日精选(2018-3-25)
  • js对象的深浅拷贝
  • leetcode378. Kth Smallest Element in a Sorted Matrix
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • Vue UI框架库开发介绍
  • webpack+react项目初体验——记录我的webpack环境配置
  • 物联网链路协议
  • 移动端解决方案学习记录
  • MyCAT水平分库
  • 数据库巡检项
  • 选择阿里云数据库HBase版十大理由
  • ​Base64转换成图片,android studio build乱码,找不到okio.ByteString接腾讯人脸识别
  • ​Python 3 新特性:类型注解
  • ​水经微图Web1.5.0版即将上线
  • #include<初见C语言之指针(5)>
  • #Spring-boot高级
  • $ git push -u origin master 推送到远程库出错
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (pycharm)安装python库函数Matplotlib步骤
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (八)Flink Join 连接
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)springboot 基于HTML5的个人网页的网站设计与实现 毕业设计 031623
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (附源码)基于ssm的模具配件账单管理系统 毕业设计 081848
  • (每日持续更新)jdk api之FileFilter基础、应用、实战
  • (强烈推荐)移动端音视频从零到上手(下)
  • (图)IntelliTrace Tools 跟踪云端程序
  • (图文详解)小程序AppID申请以及在Hbuilderx中运行
  • (一)基于IDEA的JAVA基础1
  • (一)认识微服务
  • (原創) 物件導向與老子思想 (OO)
  • ***利用Ms05002溢出找“肉鸡