7.3.1 从单层到多层神经网络
明斯基教授曾表示,单层神经网络无法解决异或问题,但是当增加一个计
算层以后,两层神经网络不仅可以解决异或问题,而且具有非常好的非线性分
类效果。只是两层神经网络的计算量过于庞大,没有一个较好的解法。
直到1986年,戴维·鲁梅尔哈特(Rumelhar)教授与杰弗里·欣顿
(Geo??rey Hinton)教授等人提出了误差逆传播(Back Propagation,BP)
算法,彻?解决了两层神经网络计算量问题,从而带动了业界研究多层神经网
络的热潮。由于神经网络在解决复杂问题时,提供了一种相对简单的方法,因
此近年来越来越受到人们的关注。目前,神经网络已经广泛应用于人工智能、
自动控制、机器人、统计学等领域。
什么是多层神经网络?如图7-9所示,通常多层神经网络具有三层或三层
以上的结构,每一层都由若干个神经元组成,它的?、右层之间的各个神经元
实现全连接,即?层的每一个神经元与右层的每个神经元都连接,而同一层中
上?各神经元之间无连接。为了方便应用,我们把神经网络划分为三个层次。
(1)输入层:在输入阶段,将来自外部的信息提供给网络的部分,统称
为“输入层”。输入层对于输入的元素不做任何处理,所有的输入节点都不执
行计算,只负责将信息传递至隐藏层。
(2)隐藏层:隐藏层的节点与外界没有直接联系,就像一个黑盒,因此
得名“隐藏层”。隐藏层的神经元负责执行运算并将信息从输入节点传输到输
出节点。神经网络只有一个输入层和输出层,但是可以拥有多个隐藏层。
(3)输出层:输出节点统称为“输出层”,负责计算并将信息从网络输
出到外部。在正常情况?,一个多层神经网络的计算流程是从数据进入输入层
开始,输入层将其传递到第一层隐藏层,然后经过第一层神经元运算(乘上权
值,加上偏置,激活函数运算一次),得到输出,再把第一层的输出作为第二
层的输入,重复进行运算,得到第二层的输出,直到所有隐藏层计算完?,最
后数据被输出至输出层运算,得到输出结果。
如图 7-10 所示,这个过程也称为神经网络的正向传播过程。也就是说,
从输入层到隐藏层、从隐藏层到输出层,将网络从头到尾运算一遍,计算每个
节点对其?一层节点的影响。从这个过程也可以看出,对于多层神经网络,我
们的首要任务是求出各个神经元的权值和偏置参数值,使得输出结果达到我
们的要求 。
7.3.2 巧用BP算法解决计算问题
如果我们用正向传播的思路去求各个神经元的权值和偏置参数值,面对的
是庞大的计算量,好在BP算法帮我们解决了这个问题。
BP算法主要包含两个过程:第一步是正向传播,即输入信号从输入层经隐
藏层,传至输出层。如果最后的输出结果与预期不相符,则需要启动第二步。
将误差从输出层反向传至输入层,并通过梯度?降算法来调节连接权值与偏置
值,修正各层单元的权值,直到误差减小到可接受程度。此过程的关键点在于
利用输出后的误差来估计输出层前一层的误差,再用这层误差来估计更前一层
误差,通过这种方式获取各层误差。这里的误差估计可以理解为某种偏导数,
根据这种偏导数来调整各层的连接权值,再用调整后的连接权值重新计算输出
误差。这种信号正向传播与误差反向传播的权值调整过程周而复始地进行,
直到网络输出的误差减小到我们可接受的程度,或模型进 行到预先设定的学
习次数为止 。
这个过程其实很容易理解。就像在职场里领导交给我们一份工作,做完
后,需要自?而上逐层汇报,根据领导心里的预期与实际的效果不断修改,直
到领导满意为止。领导层级到最??的执行层级之间可能横跨了几个管理层
级,于是需要从上至?逆向一个层级一个层级地?达命令修改,直到最初的执
行者改正后再逐层提交。
如图7-11所示,BP算法的主要执行步骤为:
(1)初始化参数。根据问题计算规模手工为神经网络设置层数,并且为
每个神经元赋予随机的初始参数。
(2)输入训练样本,计算各层输出,并且计算最后输出结果与实际结果
的误差。
(3)从输出层反向逆推,计算各隐藏层的误差。
(4)根据数据,使用梯度?降法等学习方法调整各层的权值与参数。
(5)检查网络总误差是否达到精度要求。
在机器学习领域有一种说法,即“神经网络是一种万能算法”。可能很多
读者都会好奇,多层神经网络为什么被称为万能算法呢?原因在于神经网络强
大的表达能力。理论上,三层神经网络可以无限?近任意连续函数。接着又有
读者会问,既然增加一层隐藏层神经网络就已经能够取得这么好的效果,为什
么还要设置这么多的隐藏层?因为如此简单的结构,在实际使用时难以面对复
杂问题。通过长期的实践发现,越深层的神经网络结构越灵活,表达效果越
好,特别是对于卷积神经网络(Convolutional Neural Network,CNN),后
面章节我们再展开?述。
综上,多层神经网络有如?优点。
(1)非线性映射能力:BP神经网络实现了一个从输入到输出的映射功
能,从数学上可证明三层的神经网络就能够以任意精度?近任何非线性连续函
数。因此其特别适合于求解内部机制复杂的问题,也就是说BP神经网络具有较
强的非线性映射能力。
为了让读者更好地理解神经网络的特点,我们用一张图说明随着网络层数
的增加以及激活函数的调整,神经网络分类能力的提升。从图 7-12 中可以看
出,随着层数的增加,其非线性分界拟合能力不断增强。
(2)自学习和自适应能力:BP神经网络能够通过学习自动提取输出数据
间的“合理规则”,并将学习内容记?于网络的权值中。这说明 BP 神经网络
具有高度自学习与自适应的能力。
(3)泛化能力:所谓泛化能力是指在设计分类器时,既要考虑网络在保
证对所需分类对象进行正确分类的情况?,还要关心网络在经过训练后,能否
对未见过的数据或有噪声污染的数据进行正确的分类。BP神经网络具有将学习
成果应用于新数据的能力。
(4)容错能力:BP神经网络在部分神经元受到破坏后,对全局的训练结
果不会造成很大的影响。也就是说即使系统受到局部损伤它还是可以正常工作
的,BP神经网络具有一定的容错能力。
但同时,多层神经网络也不是万能的。随着应用范围的逐步扩大,BP神经
网络也暴露出了越来越多的缺点和不足,主要有以?两个方面。
(1)黑盒性:BP神经网络最为人广知的缺点就是黑盒子性质。由于隐藏
层复杂的神经元网络,我们不知道网络是如何运行的,以及为什么会产生这样
的输出。当我们输入一张鼠标的图片到模型中时,模型识别出这是一个键盘,
我们很难解释模型为什么会有这样的判断。
神经网络不像贝叶斯或决策树算法,具有很强的解释性。在很多场景下,
模型的可解释性是非常重要的 。例如券商在分析某支股票?一年的趋势时,
若模型只给出“上涨”“?跌”的结果,则难以帮助券商做出决策;银行给某
个客户提供贷款额度时,也只能靠模型得出的结论说服客户。
(2)在实际项目里使用神经网络的成本较高:成本主要体现在两方面,
一方面是耗费人力。与传统的机器学习算法相比,神经网络通常需要更多的训
练数据,至少需要数千甚至数百万个标记样本。面对如此庞大的数据,人为提
取原始数据的特征作为输入是一件很困难的事情。
原因在于人为提取特征是一个很难把握尺度的事情,必须在挑选出不相关
的变量的同时保留有效信息。如果挑选的特征精度太高,神经网络会把同一个
人戴着帽子和不戴帽子的两张照片识别为两个人;如果挑选的特征精度太低,
又会导致将双胞胎兄弟的照片识别为同一个人,前者是对不相关变量过于敏
感,后者则是无法提取有实际意?的特征。
另一方面是耗费计算资源。神经网络的计算速度普遍较慢,所需的计算能
力在很大程度上取决于数据的大小以及网络的深度、复杂程度。相比具有1000
棵子树的随机森林算法,隐藏层只有1层的神经网络的运算速度要快得多。但
是如果一个神经网络有50层隐藏层,它与仅有10棵子树的随机森林相比,运算
速度要慢很多。还有一个更严重的问题,神经网络的隐藏层数越多,越容易产
生梯度?降现象,即增加了层数但模型的精度?没有太大的变化,也就是说即
使耗费了大量的运算资源,但计算精度依旧没有太大变化。
讲到这里,相信大多数产品经理对神经网络已经有了新的认识。其实多层
神经网络在结构上并不复杂,三层结构能够模拟各种非线性函数,并将每个神
经元的计算能力发挥到极致,因此它能够适用于广泛的应用场景。如上所述,
虽然训练神经网络的过程更多的还是根据训练效果进行参数调整,但是神经网
络对于数据的质量要求相当高。人为挑选的特征越准确,越能够帮助模型做出
正确的判断。因此产品经理需要理解神经网络的工作原理,并且在具体项目中
运用自身的业务经验,和工程师一起使神经网络发挥出最大威力。
除了BP神经网络,后人在此基础上研究出了很多改良版的神经网络。因篇
幅所限,在此我们只介绍最常用的RBF神经网络。