赞
踩
这是笔者的第一篇博客,内容或排版上有些许不足,还请各位读者谅解。本文主要对神经网络与深度学习中的前馈神经网络进行了浅谈,内容以整合为主,是笔者通过查阅资料和拜读其他大牛的博客撰写出来的,其中有一些自己的观点和思考,供读者参考。
笔者希望能通过这一篇包括以后所写的博客能够让笔者结交到更多志同道合的朋友,毕竟思想的碰撞才能产生进步的动力,笔者诚挚的希望能够和各位朋友进行交流与讨论。
最后,有不足之处,欢迎大家在下面评论,笔者一定有则改之无则加勉,再接再厉写出更多优质的博客。
人工神经网络是指一系列受生物学和神经学启发的数学模型。这些模型主要是通过对人脑的神经元网络进行抽象,构建人工神经元,并按照一定拓扑结构来建立人工神经元之间的连接,来模拟生物神经网络。在人工智能领域,人工神经网络也常常简称为神经网络或神经模型。
神经网络最早是作为一种主要的连接主义模型。20世纪80年代后期,最流行的一种连接主义模型是分布式并行处理网络,其有 3个主要特性:
(1)信息表示是分布式的(非局部的);
(2)记忆和知识是存储在单元之间的连接上;
(3)通过逐渐改变单元之间的连接强度(即突触权重)来学习新的知识。
连接主义的神经网络有着多种多样的网络结构以及学习方法,虽然早期模型强调模型的生物可解释性,但后期更关注于对某种特定认知能力的模拟,比如物体识别、语言理解等。尤其在引入误差反向传播来改进其学习能力之后,神经网络也越来越多地应用在各种模式识别任务上。随着训练数据的增多以及(并行
前馈神经网络是人工智能领域中最早发明使用的简单神经网络类型,也是目前应用最广泛、发展较为迅速的神经网络之一,从人工智能概念诞生之初就开始被人研究,目前在学术理论和实践应用上都达到了较高水平。
生物神经元:也称神经细胞,是神经系统最基本的结构和功能单位。它分为细胞体和突体两个部分,突体又分为树突和轴突。一个生物神经元通常具有多个树突和一条轴突,树突用来接受信息,轴突用来发送信息。当神经元所获得的输入信号的积累超过某个阈值时,它就处于兴奋状态,产生电脉冲。轴突尾端有许多末梢可以给其他个神经元的树突产生连接(突触),并将电脉冲信号传递给其它神经元。
简单来说,生物神经元可以用树突来接受信息并通过轴突将信息传递给其他神经元上的树突。当然信息要在细胞体里面进行一定的加工和处理。
人工神经元:简称神经元,是构成神经网络的基本单元,其主要是模拟生物神经元的结构和特性,接受一组输入信号并产出输出。人工神经元的主要组成部分就是激活函数,它相当于生物神经元的细胞体。神经元接收到的信号经过激活函数得到活性值,再传递给下一个神经元,完成信息的传递。
假设一个神经元接收d个信号的输入 ,令向量 ,并用净输入z ∈ R表示一个神经元所获得的输入信号x的加权和:
其中 是d维的权重向量,b为偏置。
净输入z在经过一个非线性函数f(·)后,得到神经元的活性值a:a=f(z)
其中非线性函数就被称为激活函数。
激活函数的作用是对输入的信息进行非线性变换。在神经元和神经网络中,激活函数都扮演着重要的角色。
给定一组神经元,我们可以以神经元为节点来构建一个网络,称为神经网络。不同的神经网络有着不同的拓扑结构。一种比较直观的拓扑结构是前馈网络。前馈神经网络是人工智能领域最早发明使用的简单神经网络类型,也是目前应用最广、发展较为迅速的神经网络之一,从人工智能的概念诞生之初就被人研究,目前在学术理论和实践中都达到了较高的水平。
前馈神经网络作为一种简单的神经网络形式,各个神经元按照层次结构分层排列,层与层之间通过“全连接”进行连接并且层与层之间没有反馈,层内的神经元之间没有任何连接,其中第0层被称为输入层,最后一层是输出层,中间其他层称为隐藏层。整个神经网络结构无反馈,可以用一个有向无环图表示。
注意:无反馈并不意味着神经网络中的参数没有反向传播(实际上参数的学习正依赖于反向传播),而是指神经网络的拓扑结构上不存在环路或者回路。
前馈神经网络也经常被称为多层感知器,但这种叫法并不是十分合理,因为前馈神经网络其实是由多层的Logistic回归模型(连续的非线性函数)组成,而不是由多层的感知器(不连续的非线性函数)组成。
输入层:
隐藏层
输出层
符号表示:
L:表示神经网络的层数;
:表示第m层神经元的个数
:表示第l层神经元的激活函数;
:表示从l-1层到l层的权重矩阵;
:表示l-1层到l层的偏置;
:表示第l层的净输入值(净活性值);
:表示第l层的输出值(活性值)。
前馈神经网络通过下面公式进行信息传播:
这样,前馈神经网络可以通过逐层的信息传递,得到网络最后的输出 ,整个网络可以看做一个复合函数 ,将向量x作为第1层的输出 ,将第L层的输出 作为整个函数的输出:
其中W,b表示网络中所有层的连接权重和偏置。
对于一个输入特征向量X,输入层根据权重将输入信号分配给第一个隐含层,第一个隐含层根据该信号计算每个神经元的激活“强度”,并传递给下一层,经过多层传递,逐渐把信息传递给输出层,最终求得输出结果。整个过程中,信号单向向前”馈送“。
给前馈神经网络输入一个N维信号X,最终能在输出端得到一个期望值,但这个期望值跟实际值之间往往会存在误差,这并不完全符合我们的要求,所以对前馈神经网络要进行参数学习,通过更新其中的参数从而使最后的结果更贴合实际值。
前馈神经网络的参数更新主要体现在权重的更新以及偏置的更新上。本文重点讲解用梯度下降法来实现参数的迭代和学习。实际上梯度下降法也是前馈神经网络中最常用的参数学习方法之一。
实现参数学习的目的是让模型的预测值与实际值之间的差值尽可能的小。用损失函数来量化模型预测与真实标签之间的差异,计算经验风险(即在训练集上的平均损失)并使其尽量的小。梯度下降法则是实现经验风险值尽可能小的较好选择。
损失函数使用交叉熵损失函数,下面讲解梯度下降法的原理和流程。
对于样本(x,y),其交叉熵损失函数为:
有了学习准则和训练样本,网络参数就可以通过梯度下降法来进行学习,在梯度下降法的每次迭代中,第l层的参数 和 参数更新方式为:
其中的α为学习率。
从上面可以看出,梯度下降法需要计算损失函数对参数的偏导数如果通过链式法则逐一对
每个参数进行求偏导比较低效。在神经网络的训练中经常使用反向传播算法来高效地计算梯度。
反向传播算法,也称误差反向传播算法、BP算法,是用来求解误差项的绝佳选择,从输出、层开始计算一步步逆向推导出神经网络各层的误差项,从而计算目标函数对各参数的偏导进而进行迭代更新。
有关反向传播算法这一块的内容笔者在此不过多赘述,想进一步了解的读者可以参考邱锡鹏的《神经网络与深度学习》第四章内容,讲的非常详细,有兴趣的朋友可以去了解一下。
注意:反向传播算法在前馈神经网络中占有重要地位,甚至可以说是整个前馈神经网络中的核心,建议感兴趣的朋友了解一下!
我们所讨论的前馈神经网络的核心是梯度下降法,而梯度下降法的核心是BP算法,换言之,BP算法出现的问题会直接影响到整个前馈神经网络的性能。
实际上,5层以内的神经网络,我们可以用BP算法训练,5层以上的神经网络用BP算法训练就很不理想了。深度结构(涉及多个非线性处理单元层)非凸目标函数中普遍存在的局部最小是训练困难的主要来源。
BP算法存在的另一个问题是梯度消失问题。在神经网络中误差反向传播的迭代公式为:
误差从输出层反向传播时,在每一层都要乘以该层的激活函数的导数,当我们使用Sigmoid型函数,Logistic函数σ(x)或Tanh函数时,其导数为:
Sigmoid函数导数的值域小于或等于1,如图4.11所示:
由于Sigmoid型函数的饱和性,饱和区的导数更是接近于0,这样误差经过每一层传递都会不断衰减。当网络层数很深时,梯度就会不停的衰减,甚至消失,使得整个网络很难训练。这就是梯度消失问题,有时也称为梯度弥散问题。
在深层神经网络中,减轻梯度消失问题的方法有很多种,一种简单有效的方法是使用导数比较大的激活函数,比如ReLU函数。
机器学习在本质上就是找到一个好用的函数。
而人工神经网络最牛的地方就在于它能在理论上证明:一个包含足够多隐含层神经元的多层前馈神经网络,能以任意精度逼近任意预定的连续函数。
这个定理也就是下面我们要说的通用近似定理:
根据通用近似定理,神经网络在某种程度上可以作为一个“万能”函数来使用,可以用来进行复杂的特征转换,或逼近一个复杂的条件分布。即不管函数f(x)在形式上有多复杂,我们总能确保找到一个神经网络,对任何可能的输入,以任意高的精度近似输出f(x)(即使函数有多个输入和输出,即f( )),通用近似定理的结论也是成立的,换句话说,神经网络在理论上可以近似解决任何问题。
但使用通用近似定理要注意几点:
即使函数时连续的,有关神经网络能不能解决所有问题也是有争议的。深度学习新星、生成对抗网络的提出者伊恩·古德费洛就曾说过:“仅含有一层的前馈神经网络的确足以有效的表示任何函数,但这样的网络结构可能会格外庞大,进而无法正确的学习和泛化。”
事实上,通用近似定理早在1989年就被提出了,直到到2006年深度学习开始厚积薄发,这期间神经网络并没有因为这个理论而得到蓬勃发展。在一定程度上也证实了伊恩·古德费洛的结论。
所以,神经网络往深的方向发展才是正道,这也就是深度学习的重要性。
有关更多神经网络与深度学习的内容,可以参考几本资料:
《神经网络与深度学习》邱锡鹏
《神经网络与深度学习》吴岸城(内容上不如邱锡鹏那一版的深奥,但胜在入门门槛低,讲的也比较有趣,适合科普读物。)
《深度学习之美》张玉宏
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。