本文参考了很多张军老师《计算智能》的第二章知识。

本文来源:https://blog.csdn.net/qq_44186838/article/details/109181453

神经网络

本文面向神经网络小白,大佬阔以退出了哈哈。

1.1.1 基本原理

神经网络(Neural Network,NN)一般也称为人工神经网络(Artificial Neural Network,ANN)。

在这里插入图片描述
上述图中的轴突树突细胞体等,看了难免会回忆当初高中。

这里就不赘述相关生物知识了,放张生物神经元与人工神经元关系对照表以及人工神经元结构及功能示意图。
在这里插入图片描述
从图中我们也大致可以看出人工神经元是如何模仿生物的神经元进行工作的。

在这里插入图片描述

1.1.2 研究进展

这就没啥好说的了,反正大家应该也都知道现在神经网络和深度学习有多么火了哈哈。

1.2 神经网络的典型结构

按网络的结构区分
前向网络
反馈网络

按学习方式区分
监督(有教师)学习网络
无监督(无教师)学习网络

按网络的性能区分
连续型和离散型网络
随机型和确定型网络

按突触性质区分
一阶线性关联网络
高阶非线性关联网络

按对生物神经系统的层次模拟区分
神经元层次模型
组合式模型
网络层次模型
神经系统层次模型
智能型模型

1.2.1 单层感知器网络

单层感知器是最早使用的,也是最简单的神经网络结构,由一个或多个线性阈值单元组成。
在这里插入图片描述
由于这种网络结构相对简单,因此能力也非常的有限,一般比较少用。

1.2.2 前馈型网络

前馈型网络的信号由输入层到输出层单向传输。

每层的神经元仅与其前一层的神经元相连,仅接受前一层传输来的信息。

是一种非常广泛使用的神经网络模型,因为它本身的结构也不太复杂,学习和调整方案也比较容易操作,而且由于采用了多层的网络结构,其求解问题的能力也得到明显的加强,基本上可以满足使用要求。
在这里插入图片描述

1.2.3 前馈内层互联网络

这种网络结构从外部看还是一个前馈型的网络,但是内部有一些节点在层内互连。
在这里插入图片描述

1.2.4 反馈型网络

在这里插入图片描述
这种网络结构在输入输出之间还建立了另外一种关系,就是网络的输出层存在一个反馈回路到输入层作为输入层的一个输入,而网络本身还是前馈型的。

这种神经网络的输入层不仅接受外界的输入信号,同时接受网络自身的输出信号。输出反馈信号可以是原始输出信号,也可以是经过转化的输出信号;可以是本时刻的输出信号,也可以是经过一定延迟的输出信号。

此种网络经常用于系统控制、实时信号处理等需要根据系统当前状态进行调节的场合。

1.2.5 全互联网络

在这里插入图片描述
全互联网络是网络中所有的神经元之间有相互间的连接。

HopfiledBoltgmann网络都是这种类型。

1.3 神经网络的学习算法

在这里插入图片描述
讲实话,这里面有不少学习规则是我自始至终没有听说过的。所以学习一下新知识也未尝不可。

1.3.1 学习方法

说到这,就让我想到我另外一篇博客:https://blog.csdn.net/qq_44186838/article/details/107748555
这篇介绍的可要详细多了。

那这里我们简单提一下:

Supervised learning 监督学习
是有特征(feature)和标签(label)的,即便是没有标签的,机器也是可以通过特征和标签之间的关系,判断出标签。

Unsupervised learning 无监督学习
只有特征,没有标签。

Semi-Supervised learning 半监督学习
使用的数据,一部分是标记过的,而大部分是没有标记的。和监督学习相比较,半监督学习的成本较低,但是又能达到较高的准确度。

Reinforcement learning 强化学习
强化学习也是使用未标记的数据,但是可以通过一些方法知道你是离正确答案越来越近还是越来越远(奖惩函数)。

1.3.2 学习规则

Hebb学习规则
简单理解就是,如果处理单元从另一个处理单元接受到一个输入,并且如果两个单元都处于高度活动状态,这时两单元间的连接权重就要被加强。
Hebb学习规则是一种没有指导的学习方法,它只根据神经元连接间的激活水平改变权重,因此此这种方法又称为相关学习或并联学习。

Delta( δ \delta δ)学习规则
Delta规则是最常用的学习规则,其要点是改变单元间的连接权重来减小系统实际输出与应有的输出间的误差。
这个规则也叫Widrow-Hoff学习规则,首先在Adaline模型中应用,也可称为最小均方差规则。

BP网络的学习算法称为BP算法,是在Delta规则基础上发展起来的,可在多层网络上有效地学习。

梯度下降学习规则
梯度下降学习规则的要点为在学习过程中,保持误差曲线的梯度下降。
误差曲线可能会出现局部的最小值,在网络学习时,应尽可能摆脱误差的局部最小值,而达到真正的误差最小值 。
目前我们接触到的很多降低损失函数值的算法利用的就是梯度下降的学习规则。而梯度下降具体也有很多种类别,感兴趣的可以自行去了解哦。

Kohonen学习规则
该规则是由Teuvo Kohonen在研究生物系统学习的基础上提出的,只用于没有指导下训练的网络。

后向传播学习规则
后向传播(Back Propagation,BP)学习,是应用非常广泛的神经网络学习规则。

概率式学习规则
从统计力学、分子热力学和概率论中关于系统稳态能量的标准出发,进行神经网络学习的方式称概率式学习。
误差曲线可能会出现局部的最小值,在网络学习时,应尽可能摆脱误差的局部最小值,而达到真正的误差最小值 。

竞争式学习规则
竞争式学习属于无监督学习方式。这种学习方式是利用不同层间的神经元发生兴奋性联接以及同一层内距离很近的神经元间发生同样的兴奋性联接,而距离较远的神经无产生抑制性联接。
竞争式学习规则的本质在于神经网络中高层次的神经元对低层次神经元的输入模式进行竞争识别。

1.4 BP神经网络

在这里插入图片描述

1.4.1 基本思想

BP神经网络也称:后向传播学习的前馈型神经网络(Back Propagation Feed-forward Neural Network,BPFNN/BPNN),是一种应用最为广泛的神经网络。

在BPNN中,后向传播是一种学习算法,体现为BPNN的训练过程,该过程是需要教师指导的;前馈型网络是一种结构,体现为BPNN的网络构架。

反向传播算法通过迭代处理的方式,不断地调整连接神经元的网络权重,使得最终输出结果和预期结果的误差最小。

BPNN是一种典型的神经网络,广泛应用于各种分类系统,它也包括了训练和使用两个阶段。由于训练阶段是BPNN能够投入使用的基础和前提,而使用阶段本身是一个非常简单的过程,也就是给出输入,BPNN会根据已经训练好的参数进行运算,得到输出结果。

1.4.2 算法流程

在这里插入图片描述
其实这个本质上与感知机的原理是有相似之处的。

(1)先是初始化网络权重,即参数的值。通常取值范围是-1.0~1.0。

(2)然后向前传播,计算每一层的输出(k层的输出即为k+1层的输入)。

(3)然后反向误差传播,什么意思呢?就是通过与预期输出的比较得到每个输出单元的误差,且得到的误差需要从后往前传播,前面一层的误差可以通过和它连接的后面的一层所有单元的误差计算所得,从后往前依次得到每一层每一个神经元的误差。

(4)然后进行网络权重与神经元偏置的调整。
在这里插入图片描述
在这里插入图片描述
其中l为学习率,通常取0-1之间的常数。

可能有些同学不太了解学习率,这里我简单讲一下。

其实学习率可以看做你每次要利用多少个误差点(即真实值与预测值不同的数据),学习率越低,损失函数的变化速度就越慢,容易过拟合。虽然使用低学习率可以确保我们不会错过任何局部极小值,但也意味着我们将花费更长的时间来进行收敛,特别是在被困在局部最优点的时候。而学习率过高容易发生梯度爆炸,loss振动幅度较大,模型难以收敛。
一个经验规则是将学习率设置为迭代次数t的倒数,也就是1/t。

(5)判断结束
当输出误差我们能够接受或者迭代达到我们规定的阈值时,选取下一个样本,继续重复(2)-(5)的工作,否则,迭代次数加1,然后转到(2)利用当前样本继续训练。

1.5 进化神经网络

对于某一具体问题,人工神经网络的设计是极其复杂的工作,至今仍没有系统的规律可以遵循。

目前,一般凭设计者主观经验与反复实验挑选ANN 设计所需的工具。

这样不仅使得设计工作的效率很低,而且还不能保证设计出的网络结构和权重等参数是最优的,从而造成资源的大量浪费和网络的性能低下。

这样就导致了我们成为了“无情的调参机器人”。

而进化神经网络,就可以帮助我们解决这样的问题。

使用进化算法去优化神经网络,通过进化算法和人工神经网络的结合使得神经网络能够在进化的过程中自适应地调整其连接权重、网络结构、学习规则等这些在使用神经网络的时候难以确定的参数,从而形成了进化神经网络(Evolutionary Neural Networks,ENN/EANN)。

进化算法和神经网络的结合给神经网络指明了新的发展方向,对突破神经网络结构复杂、参数难调等问题起到了重大的作用。

1.6 神经网络的应用

无处不在。。。

结束语

由于博主能力有限,博文中提及的信息,也难免会有疏漏之处。希望发现疏漏的朋友能热心指出其中的错误,以便下次修改时能以一个更完美更严谨的样子,呈现在大家面前。同时如果有更好的方法也请不吝赐教。

如果有什么相关的问题,也可以关注评论留下自己的问题,我会尽量及时发送!

然后如果这些内容对你有所帮助的话,阔以点赞关注哦!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐