机器人之机器学习——神经网络
小标 2018-10-17 来源 : 阅读 1990 评论 0

摘要:本文主要向大家介绍了机器人之机器学习——神经网络,通过具体的内容向大家展现,希望对大家学习机器人有所帮助。

本文主要向大家介绍了机器人之机器学习——神经网络,通过具体的内容向大家展现,希望对大家学习机器人有所帮助。


写在前面:本菜鸡开始学习机器学习相关内容,学姐安排了神经网络部分内容的学习,于是本文主要以周志华老师的《机器学习》一书为基础,学习神经网络相关知识。写了一晚上没保存,结果浏览器崩了,又不知道为什么突然就被发表??本文内容主要引自周志华老师的《机器学习》一书,感觉自己就是抄了一遍????

一、神经元模型

       神经网络(neural networks)的研究很早就已经出现,如今的神经网络已经是一个相当大的学科领域,也有许多定义,在周志华老师的《机器学习》一书中采用的定义为:“神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应”。


图源来自://blog.csdn.net/cyh_24/article/details/50593400

       神经网络中最基本的成分是神经元(neural)模型,即上述定义中的“简单单元”。在生物网络中,每个神经元与其他神经元相连,当它“兴奋”(神经元的电位超过一定“阈值”(threshold))时,就会向相连的神经元发送化学物质,从而改变这些神经元内的电位。上图为生物神经元与神经元模型的对比,是不是很相似?图源自:《机器学习》——周志华        上图为“M-P神经网络”神经元模型“,在上图中,神经元收到来自n个其他神经元传递过来的输入信号,输入信号通过带权重的连接       目前常用典型的的激活函数有阶跃函数,Sigmoid函数。


        那么问题来了,为什么要加入激活函数?       因为如果不加入激活函数,或者使用恒等函数作为激活函数,那最终得到的函数一定是线性的函数,也就是说只能解决简单的线性可分问题,它的局限性是非常明显的。现实是我们有许多的非线性的问题,如果不引入激活函数,我们连简单的异或逻辑都无法实现。引入激活函数就是往模型中加入了非线性的影响因子,使它具有一定解决非线性问题的能力。具体推导这里就不再描述。       想要了解详细的了解为什么需要激活函数可以参考这个:https://zhuanlan.zhihu.com/p/25279356       想要了解更多关于激活函数可以参考这个://blog.csdn.net/cyh_24/article/details/50593400       接着,问题又来了,为什么引入激活函数后,通过增加隐层神经元,神经网络一定可以逼近任意复杂的连续函数?         关于为什么神经网络可以模拟任意复杂的函数可以参考这个:https://www.cnblogs.com/yeluzi/p/7491619.html
              把许多上面提到的神经元按照一定的层次结构连接起来,就得到了神经网络。

二、感知机与多层网络

       感知机(Perceptron)由两层神经元组成,输入层接收外界输入信号后传递给输出层。


图源自:《机器学习》——周志华

       注意感知机只有输出层是M-P神经元亦称“阈值逻辑单元”(threshold logic unite),输入层神经元只是将数据通过带权值的连接传送给输出层。感知机能够容易的实现逻辑与、或、非运算。假设输出层采用的激活函数为阶跃函数。于是有:

“与”逻辑,仅当两个输入均为1时输出为1:

“或”逻辑,当有一个输入为1时,输出为1:


“非”逻辑,输入为0时输出1,输入为1时输出0:


       了解了感知机后,接下来就是该怎么计算各个参数了,也就是算法如何“学习”。一般会给定训练集,权重和阈值可以通过学习得到,阈值可以看做一个固定输入为-1.0,我觉得也可以是1.0的“哑结点”,给它一个权重,这样就可以同权重一般对阈值进行学习了。感知机的学习规则很简单:


       然而,感知机只有输出层神经元存在激活函数,也即只有一层功能神经元(functional neural),它只能解决线性可分的问题(存在一个线性超平面能够将他们分开),但它并不能解决非线性可分问题,即使再简单的非线性可分问题也不能解决。

       要解决非线性可分问题,则需要采用多层功能神经元(感知机只有输出层一层)。每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接,这样的神经网络结构称为“多层前馈神经网络”


图源自:《机器学习》——周志华

       输入层神经元仅接收外界输入,输入层与输出层之间存在若干层,统称为“隐层”,除了输入层意外的神经元都具备对信号进行处理的能力,也即都为功能神经元。仅有一层隐层的神经网络被称为“单隐层网络”,只要包含隐层就可以称之为多层网络,神经网络的学习过程,就是根据训练数据集来不断调整神经元之间的“连接权”以及每个功能神经元的阈值。 

三、误差逆传播算法

       多层网络的学习能力比单层的感知机强多了,要训练多层网络的话,靠之前感知机的学习规则显然是不够的,于是需要找一个效果比之前学习规则好的算法。误差逆传播(error BackPropagation 简称BP)算法就是一个杰出的算法,而且BP算法不仅可以用于多层前馈神经网络,还可以用于其他类型的神经网络,但通常“BP网络”指的是用BP算法训练的多层前馈神经网络。

        对于BP算法,其主要思想为,给定训练集D={(x1,y1),(x2,y2),...,(xm,ym)},对于输入x由d个属性描述,输出y为l维的向量,为便于讨论,一下给出了一个适合这个的网络,拥有d个输入神经元,l个输出神经元,q 个隐层神经元的多层前馈网络结构,其中输出层第 j 个神经元的阀值用θj 表示,隐层第 h 个神经元的阔值用 γh 表示。输入层第 i 个神经元与隐居第h 个神经元之间的连接权为vih,记隐层第 h 个神经元与输出层第 j 个神经元之间的连接权为 ωhj。隐层第h个神经元收到的输入为:

输出层第 j 个神经元接收到的输入为:


其中 bh 为隐层第 h 个神经元的输出。假设隐层和输出层都是用sigmoid函数作为激活函数。


图源自:《机器学习》——周志华

设sigmoid函数为f(x),对于训练样例(xk,yk),假设神经网络输出为:

也即:


我们可以计算出网络在训练样例上的均方误差为:


       对于上面整个网络来说,存在(d+l+1)q+l个参数待确定,输入层到隐层,输入层每一个神经元到隐层每一个神经元之间都存在一个权值,故输入层到隐层之间参数个数为d*q个,同理隐层到输出层之间参数个数为l*q个,而隐层自身,由于每一个神经元都需要一个阈值,故还有q个参数同理对于输出层,也存在l个参数,所以整理一下总共有:(d+l+1)q+l个参数。

       说了半天还是没说如何学习得到这些参数呢?可根据广义的感知机学习规则对参数进行更新估计,对任意参数v的更新估计公式为:v=v+Δv。

下面给一个例子:


那现在有了误差的计算公式,基于误差计算公式得到了参数更新的公式,那么,该开始说BP算法的工作流程了:每个训练样例, BP 算法执行以 F操作:先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;然后计算输出层的误差(第 4-5 行) ,再将误差逆向传播至隐层神经元(第 6 行) ,最后根据隐层神经元的误差来别连接权和|词值进行调整(第 7 行).该法代过程循环进行,直到达到某些停止条件为止。例如训练误差己达到一个很小的值。


图源自:《机器学习》——周志华

注意,BP算法的目标是要最小化训练集上的积累误差:


       而我们上面介绍的更新规则是基于单个训练例推导得到的,如果类似推导出基于积累误差最小化的更新规则,就可以得到积累误差传播算法,积累BP算法和标准BP算法都很常用。标准BP算法每次更新只针对单个样例,参数更新频繁,而对不同的样例进行更新的效果可能出现“抵消”现象。因此相比于积累BP,达到相同积累误差的极小点,可能往往需要更多的迭代次数。对于积累BP算法,只在读完整个训练集一遍后才对参数进行更新,但是可能在积累误差下降到一定程度后,下降会非常缓慢,因为每次都得遍历一遍整个训练集,这时标准BP会更快获得较好的解。(梯度下降算法和批梯度下降算法,随机梯度下降算法也称增量梯度下降算法)。

       如何取η的值以及如何设置隐层神经元个数?η为控制梯度下降的步长,不能太长也不能太短,那怎么办?先放一放,看看怎么设置神经元个数,在周志华老师的《机器学习》一书中提到了用“试错法”进行调整,(嗯,我感觉意思就是瞎猜,哦不,是有经验的猜。)那η的取值是不是也可以考虑一下“试错法”。

       由于神经网络太强大了,能以任意精度逼近任意复杂的连续函数,那就经常会遭遇过拟合,其训练误差降低,但是测试误差却上升。有两种策略来缓解BP的过拟合:一是“早停”,将数据分成训练集和验证集,训练集用来计算梯度,更新参数。验证集用于估计误差,若训练集误差降低但是验证集误差升高则停止训练。而是“正则化”其基本思想是在误差目标函数中增加一个用于描述网络复杂度的部分。(有待进一步学习....)


其中λ通过交叉验证法来估计,关于交叉验证法:https://www.cnblogs.com/sddai/p/5696834.html

四、其他常见神经网络

1.RBF网络

       RBF(Radial Basis Function径向基函数网络),是单隐层前馈神经网络,它使用径向基函数作为激活函数,输出层是对隐层神经元的线性组合。


其中q为隐层神经元个数,ci和wi分别为第i个隐层神经元所对应的中心和权重。采用两个步骤来训练RBF网络:首先确定中心,可通过随机采样、聚类等方式,其次利用BP确定其他参数。

       RBF网络对神经元和训练方式都做了限定: RBF神经网络的隐节点采用输入模式与中心向量的距离(如欧式距离)作为函数的自变量,用高斯函数作为神经元的激活函数。首先可通过非监督式的聚类算法等算法确定中心。 再通过监督式训练,BP 训练方式对其他参数进行训练。

2.ART网络

       该网络由比较层、识别层、识别阈值和重置模块构成.其中 ,比较层负责接收输入样本,并将其传递给识别层神经元。识别层每个神经元对应 一个模式类,神经元数目可在训练过程中动态增长以增加新的模式类。ART(Adaptive Resonance Theory,自适应谐振理论)网络为竞争学习类型的网络。

       在接收到比较层的输入信号后识别层神经元之间相互竞争以产生获胜神经元.竞争的最简单方式是计算输入向量与每个识别层神经元所对应的模式类的代表向量之间的距离,距离最小者胜.获胜神经元将向其他识别层神经元发送信号,抑制其激活。若输向量与获胜神经元所对应的代表向量之间的相似度大于识别阈值,则当前输入样本将被归为该代表向量所属类别,同时,网络连接权将会更新,使得以后在接收到相似输入样本时该模式类会计算出更大的相似度, 从而使该获胜神经元有更大可能获胜;若相似度不大于识别阈值,则重置模块将在识别层增设一个新的神经元,其代表向量就设置为当前输入向量。

       ART是以认知和行为模式为基础的一种无教师、矢量聚类和竞争学习的算法。在数学上ART为非线性微分方程的形式;在网络结构上,ART是全反馈结构,且各层节点具有不同性质,ART网络分为三种类型:ART-1,ART-2,ART-3


图片引自:《神经网络理论与MATLAB7实现》

3.SOM网络

       SOM(Self-Organizing  Map ,自组织映射)网络是一种竞争学习型的无监督神经网络,它能将高维输入数据映射到低维空间(通常为二维) ,同时保持输入数据在高维空间的拓扑结构,即将高维空间中相似的样本点映射到网络输出层中的邻近神经元。

       SOM网络中的输出层以矩阵方式排列在二维空间中,每个神经元都拥有一个权向量,网络接收输入向量后,将会确定输出层获胜神经元,它决定了该输入向量在低维空间中的位置。SOM 的训练目标就是为每个输出层神经元找到合适的权向量,以达到保持拓扑结构的目的。

       

图源自:《机器学习》——周志华


4.级联相关网络

       一般的神经网络模型通常是假设网络结构是事先固定的,训练只是为了找到合适的连接权,阈值等参数。与此不同的是,结构自适应网络将网络结构也当做学习的目标。级联相关(Cascade-Correlation)网络与ART网络一样都是结构自适应网络。

       

图源自:《机器学习》——周志华

级联相关网络的两个主要成分是:“级联”和“相关”。级联是建立层次连接的层级结构,初始状态为上图,只有输入层和输出层,通过训练,加入新的隐层神经元。新的隐层神经元加入时,输入端连接权值是冻结固定的??相关是指通过最大化新神经元的输出与网络误差之间的相关性(correlation)来训练相关参数。也就是说级联相关网络学习规则不同于BP网络基于梯度下降,而是基于新神经元的输出与网络误差之间的相关性。

5.Elman网络

       与前馈网络不同,递归神经网络(recurrent neural networks)允许网络中出现环形结构,从而可让一些神经元的输出反馈回来作为输入信号。这样的结构与信息反馈过程,使得网络在 t 时刻的输出状态不仅与 t 时刻的输入有关,还与 t 一 1 时刻的网络状态有关,从而能处理与时间有关的动态变化。

        Elman网络为一种递归神经网络,结构与多层前馈网络相似,但是隐层神经元的输出反馈回来与下一时刻输入层神经元提供的信号一起,作为隐层神经元在下一时刻的输入。通常采用sigmoid激活函数,训练规则通过推广的BP算法。


图源自:《机器学习》——周志华


6.Boltzmann机(将模拟退火算法与神经网络结合)

        神经网络中有一类模型是为网络状态定义一个"能量" (energy) ,能量最小化时网络达到理想状态,而网络的训练就是在最小化这个能量函数。Boltzmann机就是这样一种基于能量模型的网络。神经元分为两层:显层与隐层。显层用于表示数据的输入和输出,隐层理解为数据的内在表达,Boltzmann机中神经元都是布尔型的。令向量s∈{0,1}ⁿn个神经元的状态,wij表示神经元i与j之间的连接权,θi表示神经元i的阈值,状态向量s所对应的能量定义为:
        若网络神经元以任意不依赖输入值的顺序进行更新,则网络最终将达到Boltzmann分布,此时状态向量s出现的概率仅由其能量与所有可能状态向量的能量确定:

       训练过程就是每个训练样本视为一个状态向量,使其出现概率尽可能的大,在上述公式中可以看出来,能量越低,分子越大,也就意味着概率越大。


图源自:《机器学习》——周志华

        标准Boltzmann机时全连接的,复杂度很高,难以解决实际问题,于是常常采用首先得Boltzmann机简称RBM。

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标人工智能智能机器人频道!


本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved