浅谈人工神经网络与BP算法

原创
人工智能 深度学习 算法
如今,深度学习技术,也叫机器学习技术日益火热,运用深度学习技术的领域也愈来愈广泛,这些领域包括图像识别、语音识别、自然语言处理以及游戏、机器人之类的。并且随着深度学习技术的完善与成熟,以后用到深度学习技术的方面还会更加广泛。

[[338555]]

【51CTO.com原创稿件】

1 导读

如今,深度学习技术,也叫机器学习技术日益火热,运用深度学习技术的领域也愈来愈广泛,这些领域包括图像识别、语音识别、自然语言处理以及游戏、机器人之类的。并且随着深度学习技术的完善与成熟,以后用到深度学习技术的方面还会更加广泛。对于这一块的学习,不仅需要具备一定的软件知识,还得了解一些硬件的技术知识与理论方法。由于本人是电子信息专业,在大学期间接触了一过一些机器学习的知识,并且在毕业后顺利进入一家世界500强的互联网公司从事人工智能研发中心工作,接触了有关深度学习技术的软件平台与开发工具。因此,对于这一领域知识还是比较熟悉并且能掌握的。在这一篇文稿中,我会对深度学习这一方面进行基本的阐述,并且在此基础上进行拓展,以至于在后面可以完成一个深度学习技术的平台实践。类似之前文稿中所说的推荐系统的实现一样,深度学习技术完全可以作为推荐系统的“计算引擎”,来进一步提高推荐效果。因此,学习深度学习技术知识对从事软、硬件行业发展尤为重要。

2 深度学习技术现状

在之前的从事人工智能研发工作中,虽然明白有关深度学习的技术的日益火热程度,但是也深深感受到这一方面的不易,因为目前在这一领域,我国仍旧没有取得突破性的进展,我们也称这一阶段为人工智能或者机器学习的“瓶颈期”。对于人工智能领域的可解释性、普及程度、无监督学习等方面进步并不明显。尽管目前这一领域发展仍旧处在“瓶颈期”,也就所谓的“雷声大,雨点小”的状况,但对于这一领域的研究,任何一个国家都不应该懈怠,只要渡过“瓶颈期”,那么人工智能这一领域将会实现质的飞越,也就会冲出瓶口,一泻千里。当然,作为软件开发行业的我,也期待这一天的到来,即使需要投入很多科研人员的心血与时间。

3 深度学习与神经网络

3.1 深度学习

深度学习,也叫机器学习,它是通过实现一个能够进行自我学习的智能机器来替代人类完成一些复杂而繁琐的工作,也叫人工智能。这个机器的学习模型也是仿照人的行为来模拟进行,也就是在生活中,我们对于需要解决的新问题,我们都会通过依靠自己的历史行为经验来对问题进行整理归纳,从而发现这类问题的规律,最后运用这些规律来完成对未来的预测功能。同样地,对于人工智能机器,它对于需要处理的新的数据(新的问题),依靠的也是自己的“经验”,即记录的历史数据,来构建模型(类似人寻找规律),继而通过模型(规律)来预测未知的属性或问题。这些过程完全就依赖机器本身的自我学习能力,模型遇到的新数据越多,历史数据就越丰富,学习能力就越强,也是一个良性的正反馈过程。如下图所示:

3.2 神经网络

说到深度学习类似人的学习,就不得不提到神经网络这个词汇。我们都知道,人的学习能力主要依赖的是人的大脑,而大脑中用来传输信息的也就是神经网络了。所以在深度学习中,也是模仿运用人脑的神经网络运作机制,形成相对于的深度学习神经网络。类比人脑神经网络的神经元,在深度学习中,神经网络模型的构建也是依赖各个“神经元”。如下图所示就是一个模拟的“神经元”:

在该“神经元”中,输入分别为X1、X2、X3和截距b为+1;输出为函数 ,为w为每个输入量的权重,激活函数为f(x),所以 。在这一类的“神经元”中,常用的激活函数有sigmoid(逻辑回归函数)和tanh(双曲正切函数),如下所示:

     

3.3 感知器

在神经网络中最简单的神经单元也叫感知器,因为只有当激活函数的返回值为两个固定值时,就可以称此时的神经网络为感知器,返回值可能为以下两种情况:

因此感知器的返回值只有两种情况,也只能解决二类线性可分的问题,适用于模式分类的应用场景。

3.4 线性神经网络

除了最简单的神经网络——感知器以外,线性神经网络也是一种简单的神经网络,它可以包含多个神经元。对应的激活函数是一个线性函数,并且可以返回多个值。最常用的激活函数就是上面两个函数:sigmoid函数和tanh函数。线性神经网络也只适合运用于线性可分类的问题,但是运用的分类效果要比感知器好,并且可以进行多种条件分类,不受限于二元分类情况。

3.5 浅层神经网络

在线性神经网络中添加少量的隐层就可以更进一步,叫做浅层神经网络,也叫作传统神经网络。一般浅层神经网络只会有1到2个隐层。浅层神经网络如下图所示:(layerL1为输入层,layerL2为隐层)

3.6 深度神经网络

对应浅层神经网络中的少量隐层,那么肯定就有对应多量隐层的深度神经网络(DNN),对于深度神经网络也就是深度学习的基础,或者说深度学习技术也就是基于深度神经网络而来,是神经网络的一个发展。深度神经网络如下图所示:

那么对于隐层来说,增加隐层得到的最终输出效果会比线性神经网络要更准确,更符合要求。但是,隐层越多,得到的效果就越好吗?有个成语就可以说明这一点,那就是过犹不及。任何事物,一旦不加以控制,超出了它所容忍的限度的话,那可能就远远落后于之前的状况了。隐层也是一样,少量地增加隐层的确可以得到更好的输出效果。但是不加限制的增加的话,那么对于最终的效果并不会产生太大的变化,无疑是画蛇添足。这种情况也叫作神经网络的过拟合化。

4 一个问题——过拟合化?

4.1 隐层越多越好?

从理论上讲,一个神经元可以将数据集进行二分化,当隐层的神经元个数足够多的话,有隐层的神经网络可以逼近任何连续函数。尽管在网络工程效果中,多隐层的神经网络要比单隐层的神经网络的效果好,可对于一些分类的数据集问题来讲,三层的神经网络效果也的确优于两层的神经网络,可是将隐层层次不断增加到5层以上,对于最终的效果也就不会产生太大的变化,而且还使得神经网络变得过于复杂。提升隐层的层数,也就提升了神经元的个数,使得神经网络就更为复杂,即使这种网络的处理能力和空间表达能力更强,但是对于某些简单的数据集问题,例如分类问题就显得大材小用了,从而有可能导致过拟合的问题。神经网络模型虽然在预测集上表现出一个较好的数据结果,而对于视频/图片识别等问题,神经网络就不太适合,这也是神经网络模型的一个局限性。

4.2 过拟合问题解决方案

那么对于神经网络过拟合问题,该怎么去解决呢?目前解决神经网络过拟合的方法主要有以下三种:

(1)交叉验证:主要讲数据集分为训练集、验证集和测试集三个部分。其中把训练集作为子集训练出神经网络模型,通过验证集对这个模型的预测效果进行性能和指标评估,符合预测效果后,才用最终的测试集作为输入,得到最终预测效果;

(2)剪枝:就是对于每一次训练完子集的epoch结束后,将计算的指标accuracy跟上一次的进行比较,如果accuracy不再变化时,那么就停止训练;

(3)正则化:就是在目标函数上加上一个参数 ,使目标函数变成含有 参数的函数,最后用参数 来惩罚那些权重很大的向量,其中参数 就叫正则系数,过程就叫做正则化处理。因此当 =0时,表示并没有采用正则化处理来预防过拟合化。

5 反向传播算法

目前对于激活函数已经具备了,隐层也知道采取相应的方法对过拟合化问题进行处理了,那么还有什么需要去计算的呢?我们知道看输出效果好坏都是看数据有没有符合预测数据得到的,那么其中就会有误差出现,所以就需要计算出预测的误差,通过误差来确定另外一个对于任何一个神经网络,都不应该忽略一个关键性的参数,那就是权重W,这对于神经网络的处理尤为关键。并且对于每一层网络,对于与各层的输出数据效果都可以知道每一层网络所带来的数据损失。因此对于数据损失和神经网络层的权重的求解,最常用的一种方法就是FP(正向传播)和BP(反向传播)算法了,通过正向传播求损失,反向传播来回传误差,根据误差值来修改每一层网络的权重,从而继续迭代直到得到最小误差,也就是最优的效果。

当知道误差计算后,就要使误差越来越小,这里就可以用先前提到的推荐算法里面的随机梯度下降的方式来不断调整权重W参数,从而得到最小误差值,此时得到的权重W也就是所要的权重参数。至于具体的BP(反向传播)算法求解权重W的过程,我会在进行Python深入之后,再继续使用Python软件来模拟演示这个过程,并且给出模拟的输出效果散点图。在这里就不进行赘述了。

6.总结

 

在这一篇文稿中,主要介绍了深度学习和神经网络知识,对于这一块问题,后续还有更深入的内容,其中在神经网络这块还有更为晦涩难懂的卷积神经网络和循环神经网络。而这些内容,我会放到下一篇文稿中进行阐述,来一步步深入学习技术领域。

【51CTO原创稿件,合作站点转载请注明原文作者和出处为51CTO.com】

责任编辑:华轩 来源: 51CTO
相关推荐

2017-05-31 13:23:41

神经网络深度学习

2018-07-03 16:10:04

神经网络生物神经网络人工神经网络

2017-11-30 18:05:18

2017-07-06 17:03:45

BP算法Python神经网络

2015-09-11 09:27:21

神经网络发明

2020-09-09 10:20:48

GraphSAGE神经网络人工智能

2021-10-29 09:55:20

人工神经网络

2021-09-24 12:00:40

人工智能AI神经网络

2017-09-10 07:07:32

神经网络数据集可视化

2020-12-21 08:00:00

人工智能深度学习神经网络

2024-10-17 13:05:35

神经网络算法机器学习深度学习

2024-09-12 08:28:32

2024-06-28 08:15:02

2017-04-06 18:34:16

人工智能

2018-11-28 15:39:21

人工神经嵌入式SDK

2021-08-25 13:13:58

神经网络AI算法

2023-07-19 08:55:00

神经网络推荐系统

2024-07-10 11:09:35

2024-06-11 08:19:34

2019-05-07 19:12:28

机器学习神经网络Python
点赞
收藏

51CTO技术栈公众号