bp神经网络训练_数据分析模型6——神经网络基础(人工智能的底层模型)

bd9772d193621be98c29c59615b6964a.png

未经许可请勿转载

更多数据分析内容参看这里

今天我们来学习人工智能的底层模型——神经网络(NEURAL NETWORKS),现在比较热门的一个模型是深度学习,深度学习的基础也是神经网络,要学好深度学习,神经网络不了解基本是不可能的。

一、神经网络概述

首先我们来看一下生物的神经构造,因为神经网络就是从生物的神经构造得到的灵感。在生物的神经构造中,下图中圆形的是细胞本体(细胞核),神经网络中称之为神经元,人具有

个神经元。神经元根神经元之间是通过轴突来沟通的,在靠近细胞本体的地方比较粗,末端比较细,称之为树状突。树状突和树状突会碰触在一起称之为突触,神经网络中称为神经键。细胞核就是通过神经键来互相沟通协调决策的,人有
个神经键,因为不是每个神经元之间都有连接的。

a344629406b82f2d31fdb2e13c2db313.png

数学家在看过生物的神经构造后,就想通过数学模型来模仿。下图是一个非常有名的神经网络,一般人们谈到神经网络指的就是它,全称是Backpropagation(BP) Neural Networks,翻译过来就是倒传递神经网络,也有的人称之为多层感知机(Multi-Layer Perceptrons)。在BP神经网络中,神经元被分为三个层次,有输入层,隐藏层以及输出层。输入层的神经元负责接收外来的输入和刺激,它是用于数据收集用。输出层又称决策层,它的每个神经元在做一个决策,如果有五个决策就需要五个输出层神经元。中间的隐藏层神经元负责增加计算能力,当问题比较复杂时,需要隐藏层的辅助使得问题解决比较顺利,当然隐藏层的神经元不能过多,否则会造成记忆效应,即会把所有训练数据的输入和结果记录下来,以致于输入训练集中的一笔数据进入时它的答案会十分正确(类似背书),但是遇到没有见过的数据时就表现很差,也就是存在overfitting(过度拟合)问题。

cd74b2262f50c107fbca19772cd76853.png

在上图中,输入层会跟隐藏层的所有神经元做连接,连接的部分就称之为神经键。隐藏层会跟输出层的所有神经元做连接,但是跨层之间是不会连接的,这就是BP神经网络的一个构造。如此前所述,这边展示的是一层的隐藏层,但是隐藏层也可以多层,虽然隐藏层不能过多避免出现记忆效应,但是隐藏层也不能过少甚至没有,否则计算能力不足,预测结果也会不如预期。

984fdbe7d7d93443ba0a7e5020afd7c4.png

上图是一个多层隐藏层,隐藏层的节点个数不必一样多,也不需要同输入层一样多。输入层会跟第一层隐藏层的神经元做一个完全连接,第一层隐藏层跟第二层隐藏层的神经元做一个完全连接,第二层隐藏层会跟输出层的神经元完全连接,这边输出层只有一个节点,代表其只要做一个决策。

二、不同形式的神经网络

当然神经网络的构造还有可以其它形式,比如下面是一个两层的神经网络,只有一个输出节点,且没有隐藏层,这种神经网络用来处理比较简单的单个决策问题。

7c9b07e08e243a8197ba3866952d9609.png

再来看一个带有隐藏层的三层神经网络,它可以处理比较复杂的一个决策问题。

ee3cba4f70ffcdc564508ffb1df4f487.png

下面是输出层有多个节点的三层神经网络,可以处理复杂的n个决策问题。我们需要根据要处理的问题复杂程度考虑是否要有隐藏层,并根据要决策的问题个数来决定输出层的构造。

fb359468f9e951d3359db9558a8ad625.png

三、神经网络实例

我们来看一个杂志喜好预测的实例。

a122855101b8e078b868312df6731afd.png

因为这家公司同时发行五种杂志,所以一次要做五个决策(是否对我们的汽车、房屋、运动、音乐、漫画杂志),所以输出层的决策节点有五个。我们使用年龄,是否拥有房屋,是否拥有汽车,和所住区域四个输入字段来判断。

需要指出的是,神经网络中只允许数值型的输入数据,类似KNN。在本例子中,年龄(age)被离散化成三段(<30, 30-50,>50),不再是数值型,因此需要进行摊平处理(转换为哑变量)才能输入。实际上神经网络中只能输入0到1之间的数据,而不能输入一万这样的数,也必须像KNN一样做极值正规化。

本例中,选择了四个神经元作为隐藏层的个数,前面提到隐藏层的神经元不能过多,那到底要多少神经元个数呢?那就需要根据处理事务的复杂度来决定,在实际中有个不成文的做法,

,即使用输入层的神经元个数乘以输出层的神经元个数,然后开根号,这代表了所处理问题的复杂度。以此为基础去调整隐藏层的神经元个数,在效能相同的情况下,神经元个数越少越好。在本例中,
,我们就以6个神经元为基础,通常往下调整,6,5,4各跑一下结果,在结果差不多的情况下尽可能选择少的神经元。

最终该神经网络输出就是对于各种杂志喜好的概率,Feedforword指的是数据从左往右运行。但是在训练神经网络时,顺序是相反的,backforward,这也是BP神经网络名称的由来。

我们再来看另一个手写数字识别的例子。

9dcfc30467f879ba57510109a98c6a20.png

要做手写数字的识别,首先我们需要对一张数字影像进行切割,按照单个的数字区分开来。分割完成之后,再对每个数字做辨识,此处我们假设单张数字照片是28*28的点阵,每一个点如果对应的黑色字迹就标位1,否则就为0。

为了解决识别数字这个问题,我们构造一个三层的BP神经网络,输入节点有784个(28*28),输出节点就是0,1,2,3,4,5,6,7,8,9这十个数字的概率,而隐藏层的个数,就是根据

去做调整,最终将其定在15,此时数字的识别率已经达到90%以上,为了避免过拟合的问题,15是一个比较合适的数字。

b4c870b87233f51bed99ebf3a6991991.png

四、BP神经网络的训练

要训练一个BP神经网络,我们首先需要构建一个网络,这涉及到两件事,一是输入数据的表示方式(数值型数据是做极值正规化Minmax normalization,还是离散化后摊平处理),这会影响输入层节点个数,当然输入属性的个数也会影响。二是要考虑做一个决策,两个决策还是多个决策,这会影响输出节点的个数,以及问题的复杂度,如果问题复杂还必须要有隐藏层。输入和输出层必须要有,你唯一可以选择的就是隐藏层要不要有,要有几层,以及隐藏层上的节点个数。就层数而言,深度学习就是具有多层隐藏层的神经网络,所以它可以处理比较复杂的类似下围棋这样的问题。

在网络建立后,就要用训练数据去训练网络。如果是一个分类问题,我们的目标就是获得一组所谓的权重,即神经键上面的值,使得训练集中案例进入神经网络后都能做正确的分类。网络训练好后,就可以去解释结果。

假设我们的训练已经完成,就会生成以下的神经网络。当具备特定特征的一个人进入网络时,就会生成其喜欢各种杂志的概率,从结果中我们可以看出这个人对汽车杂志和漫画是有兴趣的,因此可以向其推销这两种杂志。

b7dfd8606e5b7edfde4a63857cdc3de2.png

但是这个神经网络是怎么训练出来的?我们仍未解决。要给出这个神经网络,我们就需要知道神经元的具体构造。对于输入层来说,神经元是没有构造的,它只做数据的转发,但是隐藏层和输出层是有结构的。有一个好消息是,隐藏层和输出层的每一个神经元的构造都是一样的。

554875e9d78d41435d62e6127d125927.png

上图就是单个神经元的构造,左侧的X1,X2,Xn是该神经元前一次传递过来的数值,我们会对每一个Xi乘以一个权重,加总后作为上一层传递过来的信息总和。比如要决定是否要去看一部电影,我们会去咨询别人的意见,小张可能给出来一个很高的分数,但是考虑到他的意见经常和我相左,我可能会乘以一个负的权重,小李给出了一个一般的分数,他的意见和我经常一致,因此我会乘以一个高的权重,我们可能还要考虑天气的因素才能决定是否要去看。在方框内部,有一个Bias(偏见),这个指的其实是我自己对于这部电影的意见。因此是否要去看电影的信息总量

。最后在输出是否要看电影时,我们还需要通过一个激发函数(Activation Function)把NET值压制在0-1之间。

下图中的Sigmoid function就是激发函数,Sigmoid函数又叫Logistic函数,它在机器学习领域有极其重要的地位,函数的基本性质:定义域:(−∞,+∞)(−∞,+∞),值域:(−1,1)(−1,1),函数在定义域内为连续和光滑函数,处处可导,导数为:f′(x)=f(x)(1−f(x))。Sigmoid函数之所以叫Sigmoid,是因为函数的图像很想一个字母S。这个函数是一个很有意思的函数,从图像上我们可以观察到一些直观的特性:函数的取值在0-1之间,且在0.5处为中心对称,并且越靠近x=0的取值斜率越大。也就是说当我们的信息输入为0的时候,输出的概率是0.5,当信息输入>0时,输出的概率在0-1之间,当信息输入<0时i,输出的概率在0-0.5之间。

39740dff65d5de33ee72fc7c57f572c1.png

我们具体来计算一个例子。下图中时一个BP神经网络,对于X=(1,0,1)需要预测其概率,真实的数据标签是1。在初始状况下,会随机生成各个神经键的权重(在-1到1之间),如下表所示,也会随机生成各个神经元的偏见。

22e7307efa9d78057963906bd03ced74.png

2a243e1f7dcc2daf883f131ac33b5caa.png

通过计算,我们得出X输入的输出为0.474,这与实际情况1不符。这就告诉我们,由于一开始神经网络的权重值和偏见值都是随机产生的,因此其结果也是无法预测的。所以我们的目标就是,能否生成一组权重值和偏见值,使得收入(1,0,1)的时候输出结果非常接近1。

06008dcdb41b3a08e34d98d522d34978.png

在杂志喜好预测例子中,也涉及逆向权重及偏移值的修正,因为初始跑出来结果和实际不符。要修正权重值,必然要解决怎么计算误差这个问题。误差= 期望输出 - 实际输出=

,这边使用的是平方误差,可做微分,对后面权重的调整是有帮助的。

我们希望得到一组最佳的权重值和偏移值,去最小化误差。那对于上面的误差函数,要取到极值,就是要对这个函数偏微分,根据偏微分的结果取到最佳的权重值和偏移值。

0bb1802069786ef9d2dedf7b6ce81dd9.png

对于上图中的神经网络,要使得最终输出节点的误差最小,我们根据偏微分可以得出权重和偏差值调整的公式,此处我们略过的微分的部分。要调整权重值和θ值,我们要计算6号、4号和5号的节点误差,如下表所示(这部分公式就是微分的结果)。基本上同一层的误差公式时一样的,不同层会不相同,从下表的公式可以看出6号的误差会影响4号和5号,4号和5号的误差会影响1号、2号和3号,这就是BP神经网络被称为倒传递网络的原因。

30b271764c0ca90d67d44378c291d3a5.png

接下来,我们利用4,5,6这三个节点的节点误差来调整权重值和θ值,下表中

的权重调整公式就是4的输出乘以6的误差,新的值就是原来的权重加上调整值,下边(0.9)指的是学习速率(Learning rate)。

3dbc482cdcfeb5dc9483c1756281438c.png

根据上面重新生成一组权重值和θ值,我们把101那笔数据重新喂入,但是不会立刻就到1,而是会到0.5多,所以修正一次后还要修正第二次以及第三次等,这就是神经网络学习的过程。在解释一下learning rate的概念,假设-0.3是初始的权重,-0.25是最佳权重,在第一次调整时系统觉得太大可能会调到-0.2,第二次调整时觉得太小可能又会调回-0.3,如此循环始终无法达到最佳的-0.25, 所以我们设置一个限制虽然可以调整-0.1,但每次只允许调整其中的(0.9)比例,当然这个比例可以调整,比如设成0.1,每次进行微调处理。Learning rate设的大,很快就会收敛,但是error降不下来,Learning rate设的小,训练的回合数就比较多,运行效率慢。

如果误差函数比较复杂,神经网络中就有区域最佳的概念,如果初始权重在左侧,权重值就会收敛到左侧的最低点,效果就一般。如果初始权重在右侧,权重值就会收敛到右侧的最低点,这时候误差就比较低。所以在神经网络中,起始的权重值也比较重要,在实际中,我们会用不同的随机种子设置多次不同的起始权重,找一次误差比较低的那一次,当做我们神经网络的初始结果。

93197a1187c0a1c358e16a0f16ecf152.png

总结一下,初始权重和θ值, learning rate ,隐藏层的神经元个数都是可以调整的。

b2375c2cd808a19fdc720b85e49ec832.png
关注我的公众号:nxiaoyou

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/306339.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

四种最令人讨厌的编程语言:Java、Javascript、C++和Perl

喜欢就关注我们吧&#xff01;TIOBE 12 月榜单已于日前公布&#xff0c;在最新的排行榜中&#xff0c;C 语言仍高居榜首&#xff0c;其次分别是 Java、Python 和 C。在编程语言这一领域中&#xff0c;许多编程语言都会随着时间的推移而经历人气的激增&#xff0c;以及历史迭代之…

微软用的工具,统一财务三大表及高级分析通用模板

虽然罗叔并非财务专业&#xff0c;但大概了解一些财务常识。例如财务报表的三大报表以及一些常见分析等。本月《BI真经》视频课程即将就绪&#xff0c;后续罗叔将和大家开展更多的业务研究。我们知道&#xff0c;PowerBI 在绘制某些报告时候很难&#xff0c;初学者根本无法实现…

文件 单片机_如何查看你写的单片机程序有多大?

单片机我们都用过&#xff0c;我们知道单片机的FLASH有4K的&#xff0c;有8K的&#xff0c;单片机程序我们也写过&#xff0c;但是我们写好的程序有多大&#xff0c;你知道吗&#xff1f;程序写好并编译后生成hex文件&#xff0c;这个hex文件就是要下载到单片机里的文件&#x…

css less 不要作用到子对象_使用Less实现网站主题切换

v-easy-components change theme很多初学前端的开发同学一定有一种想法&#xff0c;就是如何更改网站的主题。前年&#xff08;2018&#xff09;&#xff0c;我也陷入了思考&#xff0c;如何切换网站主题呢&#xff1f;当时不知道less&#xff0c;只想到一种办法&#xff0c;就…

展望2021,Java、Go、.NET,谁主沉浮?

伴随着年底.NET社区活动&#xff0c;近日跟几位微软MVP大佬聊天请益&#xff0c;收获颇丰。程序员都有个话题避不开&#xff0c;就是各编程语言的优劣&#xff0c;大佬们的见识既有意思也有深度&#xff0c;这里为大家整理一下&#xff0c;其中Java、Golang和.NET是讨论焦点。J…

labuladong 的算法小抄_关于算法笔试的几个套路,一点就透

以下文章来源于labuladong &#xff0c;作者labuladong我知道各位是被标题吸引进来的&#xff0c;那就不废话&#xff0c;先说几个算法笔试的硬核套路&#xff0c;再说说语言选择和做题复习的策略。避实就虚大家也知道&#xff0c;大部分笔试题目都需要你自己来处理输入数据&am…

TVP两周年:携手同行,让未来可见

TVP两周年2018年12月15日&#xff0c;在北京的腾讯云社区开发者大会上&#xff0c;作为腾讯云构建开发者生态的重要战略&#xff0c;TVP计划正式发布。2020年12月15日&#xff0c;不知不觉&#xff0c;腾讯云TVP已经走过了两度春秋。从0到1的探索&#xff0c;1到10的成长&#…

加密封装 怎么把_不要再封装各种Util工具类了,这个神级框架值得拥有!

Hutool 谐音 “糊涂”&#xff0c;寓意追求 “万事都作糊涂观&#xff0c;无所谓失&#xff0c;无所谓得” 的境界。Hutool 是一个 Java 工具包&#xff0c;也只是一个工具包&#xff0c;它帮助我们简化每一行代码&#xff0c;减少每一个方法&#xff0c;让 Java 语言也可以 “…

Oh my God, Swagger API文档竟然可以这样写?

最好的总会在不经意间出现。“作为后端程序员&#xff0c;免不了与前端同事对接API&#xff0c; 一个书写良好的API设计文档可有效提高与前端对接的效率。为避免联调时来回撕逼&#xff0c;今天我们聊一聊正确编写Swaager API文档的姿势。基础Swagger用法在ConfigureServices配…

vue 前端设置允许跨域_web 前端的一些小问题

关于vue使用axios post发送json数据跨域请求403的解决方法&#xff1a;1. 问题vue开发的时候&#xff0c;使用axios跨域发送请求&#xff0c;同时post发送的数据格式是json格式&#xff0c;发送出去的时候发现控制台报错403&#xff0c;返回的信息提示是跨域的问题&#xff0c;…

如何在 Windows 10 上安装 WSL 2

翻译自 Joey Sneddon 2020年10月30日的文章《How to Install WSL 2 on Windows 10》 [1]如果您想在最新的 Windows 版本中尝试经过改进的 Windows 子系统 Linux 2 (即 WSL 2) [2]&#xff0c;要怎么做呢&#xff1f;我们在本文中介绍了安装它所需要做的所有事情。WSL 2 是微软早…

lnmp无法远程连接mysql_MySQL(一):设置root 可以远程连接MySQL

在mysql在远程主机或虚拟机上时&#xff0c;远程连接mysql数据库一般都使用GUI工具&#xff0c;比如Mac下的Sequel Pro&#xff1b;win和linux下的Sqlyog&#xff1b; 还有大名鼎鼎的Navicat。有人也许会说命令行多好&#xff0c;对着黑黑的屏幕噼里啪啦的一顿敲&#xff0c;屏…

云付认证已通过可以支付吗_海科融通丨刷新支付日常问题【附交易操作步奏】...

01常见问题汇总QPIN秘钥检验出错A&#xff1a;认证时不要频繁点击&#xff0c;点完后等一等系统反应&#xff0c;可联系客服处理。Q报错99&#xff0c;该小商户已入网A&#xff1a;提供商户编号给服务经理处理。Q终端屏幕无法签字A&#xff1a;待机界面&#xff0c;输入#0#&…

邀请函|WorkShop报名通道开启,来就送礼!

作为互联网行业的年度盛会今年除延续以往的开幕与论坛技术分享外还增设了Work Shop 体验课程&#xff01;参加此次工作坊不仅能近距离和大佬进行互动体验项目开发的快感还能领取大会纪念卫衣、书籍等惊喜好礼是不是很期待&#xff1f;&#xff08;数量有限先到场先得&#xff0…

对象数组参数_【JavaScript 教程】标准库—Array 对象

作者 | 阮一峰1、构造函数Array是 JavaScript 的原生对象&#xff0c;同时也是一个构造函数&#xff0c;可以用它生成新的数组。var arr new Array(2);arr.length // 2arr // [ empty x 2 ]上面代码中&#xff0c;Array构造函数的参数2&#xff0c;表示生成一个两个成员的数组…

机器学习之无监督学习——聚类

机器学习之无监督学习——聚类无监督学习一、基于划分的聚类方法1、基于划分的方法 简介A、概念B、分组C、分组与样本 对应关系D、硬聚类 与 软聚类二、基于层次的聚类方法1、基于层次的聚类方法 概念 :2、基于层次的聚类方法 :A、聚合层次聚类 ( 叶子节点到根节点 )聚合层次聚…

2020 . NET大会日程公布!行程亮点全曝光

|倒计时5天文末有福利答应我看到最后|2020年12月19日由.NET众多社区联合组织主办的2020年中国.NET开发者大会将于苏州盛大开幕时间&#xff1a;2020/12/19-12/20主题&#xff1a;开源、共享、创新地点&#xff1a;苏州人工智能产业园▽本次大会以“开源、共享、创新”为主题&am…

橡皮擦_日本推出改邪归正橡皮擦,看得我头顶一凉

▲▲▲点击查看▲▲▲日本&#xff0c;可以说是文具控的天堂。各种不按套路出牌&#xff0c;又十分合理有趣的文具&#xff0c;真是太多太多。就比如这块「改邪归正橡皮擦」&#xff1a;这么看&#xff0c;你可能看不出到底怎么个改邪归正法&#xff0c;但其实它的创作灵感来自…

三菱四节传送带控制梯形图_一文讲透FX5U PLC程序控制指令及步进梯形图编程

三菱PLC在80年代进入中国市场&#xff0c;已有30多年历史。由于三菱PLC编程易学&#xff0c;功能强大&#xff0c;深受中国用户喜爱。随着时间推移&#xff0c;市场上已经淘汰掉二代产品&#xff0c;关系图如下&#xff1a;说明90年代老型号2000年代老型号低端小型机FX0SFX1S中…

在 ASP.NET Core 中使用多种方式给 Action 传参

ASP.NET Core 是一个跨平台&#xff0c;开源的&#xff0c;轻量级&#xff0c;高性能 并且 高度模块化的web框架。在 ASP.NET Core MVC 中有很多种方式可以给 Action 方法传递参数&#xff0c;比如说&#xff1a;url方式&#xff0c;querystring方式&#xff0c;request header…