非常详细的讲解让你深刻理解神经网络NN(neural network)

本文详细介绍了人工神经网络(ANN)的基础,包括神经元模型、激活函数的选择、感知机及其局限性,以及多层前馈神经网络和反向传播算法。深度学习的兴起源于多层神经网络的能力增强,尤其是解决非线性问题的能力。通过预训练和微调,深度学习在图像识别等领域取得了显著成果,成为现代人工智能的核心技术之一。
摘要由CSDN通过智能技术生成

作者:RayChiu_Labloy
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处


目录

什么是神经网络NN、人工神经网络ANN

神经元(神经网络的基本单元)

概念详解 

神经元的数学模型:

神经元到神经网络 

其他常用的激活函数:

常见的激活函数 

如何选择激活函数 

谈一下sigmoid和softmax 

区分不同神经网络的三个要素:

感知机

定义 

参数训练 

与或非问题和线性分类器以及异或和非线性分类器

线性可分情况 

线性不可分情况

多层前馈神经网络 

定义: 

单层和多层网络之间的问题 

单节点输出和多节点输出

多层网络的误差逆传播算法BP(BackPropagation)

多层网络的理解 

推导 

 标准BP算法和累计误差逆传播(accumulated error backpropagation)算法

 两种策略来缓解BP网络的过拟合:

        1.早停(early stopping)

        2.正则化(regularization)

 全局最小和局部最小

训练两个阶段

前向传播

后向传播

神经网络到深度学习的发展历史


什么是神经网络NN、人工神经网络ANN

        人工神经网络(artificial neural network,ANN),简称神经网络(neural network,NN),是一种模仿生物神经网络的结构和功能的数学模型或计算模型神经网络由大量的人工神经元联结进行计算。大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自适应系统。现代神经网络是一种非线性统计性数据建模工具,常用来对输入和输出间复杂的关系进行建模,或用来探索数据的模式。

神经元(神经网络的基本单元)

概念详解 

        1943年,McCulloch 和 Pitts 将生物神经网络的神经元结构与功能抽象为一个简单模型,这就是一直沿用至今的“M-P神经元模型”。结构如下图所示:

        其中图中 w或表示权重, 和Z是相乘求和的线性变换,和f函数是非线性变换的激活函数。

        在神经元模型中,神经元接收到来自 n 个其他神经元传输过来的输入信号{x1,x2...,xn},这些输入信号通过带权重的连接(connection)进行传递,神经元接收到的总输入值(就是图中的和Z)将与神经网络的阈值进行比较,然后通过“激活函数”(activation function)处理以产生神经元的输出。

          激活函数理想的是阶跃函数,它将输入值映射为0和1输出,“1”对应神经元兴奋,“0”则是抑制。但是这种阶跃结构具有不连续、不光滑等缺点,因此实际生产常用sigmoid作为激活函数,将输入值压缩至(0,1)区间。

神经元的数学模型:

神经元的计算: 

神经元到神经网络 

        把许多这种神经元结构按照一定的层次结构连接起来就得到了神经网络

其他常用的激活函数:

常见的激活函数 

如何选择激活函数 

        sigmoid激活函数这种非线性变换一般是在输出层做分类时使用,其他的比较常用的ReLU、tanh等都是在下边说的多层、深层神经网络中的隐藏层最后使用。

        注意:当然激活函数不一定是上边非线性的,准确的来说隐藏层必须是非线性的,而最后的输出层看情况而定,分类的情况下,二分类用sigmoid(softmax也可以二分类,二分类上和sigmoid一样),多分类用softmax,或者接多个sigmoid做多标签分类;但是如果是MSE损失的回归问题,就不用做非线性变换了,或者说什么都不用做,直接y=x输出即可。

谈一下sigmoid和softmax 

        从本质上来说两者不一样,softmax是假设数据服从多项式分布,sigmoid是假设数据服从伯努利分布。 

        softmax不适合做多标签任务,因为根据softmax公式:

         可知softmax自带了归一化操作,所有类别的概率相加为1,因此会尽可能的把一个类的概率调整的很高,因此不适合多标签任务。

        而用逻辑回归sigmoid做多标签就没有归一化这个操作(有些框架为了好看会手动添加一个归一化),各类别概率不会互相影响。

        为什么softmax的各类输出概率会互相影响而sigmoid不会呢?这得从梯度下降的两个阶段说起,两个阶段下边会详细说。

        观察上边softmax传播图的蓝色线(蓝色线没有参数w,或者可以看作为1的w),结合softmax公式我们发现分母是综合了所有类别信息,,因此loss包含了所有类别的信息,反向传播求梯度也会影响到所有的参数w(w1到w12),那下一次正向传播求loss依然会综合所有的w的信息和类别信息得出loss,而sigmoid不是这样,我们看sigmoid公式:

        还有sigmoid传播图:

         sigmoid它只和当前的类别相关,因此求出的loss只包含当前类别的信息,反向求梯度也是只和自己类别相关的几个参数有关,比如最上边的类别输出只和w1、w2、w3、w4有关,那更新了这几个参数后再次正向传播求loss依然只和当前类别有关。

区分不同神经网络的三个要素:

  • 激活函数:将神经元的净输入信号转换为单一的输入信号,以便进一步在网络中传播

  • 网络拓扑:描述了模型中神经元的数量以及层数和他们的连接方式

  • 训练算法:指定如何设置连接权重,以便抑制或增加神经元在输入信号中的比重

感知机

        1958年,计算科学家Rosenblatt提出了由两层神经元组成的神经网络。他给它起了一个名字--“感知器”(Perceptron)(有的文献翻译成“感知机”,下文统一用“感知器”来指代)。

  感知器是当时首个可以学习的人工神经网络。Rosenblatt现场演示了其学习识别简单图像的过程,在当时的社会引起了轰动。

  人们认为已经发现了智能的奥秘,许多学者和科研机构纷纷投入到神经网络的研究中。美国军方大力资助了神经网络的研究,并认为神经网络比“原子弹工程”更重要。这段时间直到1969年才结束,这个时期可以看作神经网络的第一次高潮。

定义 

        感知机是包含两层神经元的结构,这两层分别是输入层神经元和输出层神经元,输出层就是M-P神经元,亦称阈值逻辑单元、功能单元。

 

参数训练 

        与神经元模型不同,感知器中的权值是通过训练得到的。因此,根据以前的知识我们知道,感知器类似一个逻辑回归模型,可以做线性分类任务。

  我们可以用决策分界来形象的表达分类的效果。决策分界就是在二维的数据平面中划出一条直线,当数据的维度是3维的时候,就是划出一个平面,当数据的维度是n维时,就是划出一个n-1维的超平面。

  下图显示了在二维平面中划出决策分界的效果,也就是感知器的分类效果。

 

         一般给定训练数据集,权重以及阈值θ(偏置项,可以看作一个固定输入为-0.1的“哑结点”(dummy node)),则感知机权重将这样调整:

 

         其中 在(0,1)范围内,称为学习率。

        可以看出,感知机若对训练集(x,y)预测正确,即,权重不会变化,如果有误差则会调整权重。

与或非问题和线性分类器以及异或和非线性分类器

线性可分情况 

        回顾神经元公式不加 f 这个激活函数就是线性计算的结果,是的,感知器就是线性分类器。 

        假如激活函数为阶跃函数,输入数据x1、x2只能取0或1,则:

         可以看到,图中a、b、c与或非可以通过训练,一定会收敛找到合适的权重(参数)w1、w2、θ组成的超平面分界线分开样本。d图这样非线性可分的问题则不能通过感知机学习到合适的解。

线性不可分情况

        Minsky在1969年出版了一本叫《Perceptron》的书,里面用详细的数学证明了感知器的弱点,尤其是感知器对异或这样的简单分类任务都无法解决。

 

        只拥有一层功能神经元(M-P神经元)的感知机不可以解决,而两层及两层以上的功能神经元就可以完美解决了:

         如上图所示,两层感知机可以解决异或这种线性不可分问题,多了一层隐藏层,也可以说多了一层功能神经元层。相邻两层直接节点全互连,即全连接。

多层前馈神经网络 

定义: 

        隐藏层如果是多层的话就是“多层前馈神经网络”了:

单层和多层网络之间的问题 

        多层网络可以有更多的隐藏层,也就会有更多的非线性变换,网络复杂度会随之更加复杂,因此有能力处理更加复杂的任务,但是不是越复杂越好,容易过拟合,如何理解复杂度,就类似二维平面找类别的分界线,简单的任务一条直线就可划分,困难的需要画出一个或多个极为复杂的不规则多边形才能正确分类,深层神经网络或者深度学习可以很好的处理这种非线性问题,当然深度学习的可解释性是非常差的,它是通过对网络的设计loss的设计加上基于训练得来的。

单节点输出和多节点输出

        输出节点可以根据任务来定,例如多分类就是多个节点,参照上边softmax来看,如果是回归任务:

         当然sigmoid的二分类也是单节点输出。

多层网络的误差逆传播算法BP(BackPropagation)

多层网络的理解 

         多层网络的学习能力很强,但是训练多层网络就得用BP算法了。

        1986年,Rumelhar和Hinton等人提出了反向传播(Backpropagation,BP)算法,解决了两层神经网络所需要的复杂计算量问题,从而带动了业界使用两层神经网络研究的热潮。

 

        对于给定数据集D={(x1,y1),(x2,y2),...,(xm,ym)},其中,再定义一些变量:

         下图为一个拥有d个输入神经元,L个输出神经元和q个隐含神经元的多层前馈神经网络, 其中输出层第j个神经元的阈值用表示,隐层第h个神经元的阈值用表示,隐层和输出层的激活函数都用sigmoid函数:

         对于训练样本,假设神经网络输出为,即:

         则网络在这个样本上的均方误差为:

 

         任意参数v的更新公式和上边感知机类似:

 

推导 

         下面以图中隐含层到输出层的连接权来进行推导。

         BP算法基于梯度下降的策略,以目标的负梯度方向对参数进行调整,对于误差和给定学习率η,有:

 

        这里一定要注意,求每个参数w变化是需要用相同的loss去对每个w求导得出梯度。 

         我们注意到先影响输出层第 j 个神经元的输入值,然后再进一步影响其输出,最后影响到均方误差。所以根据复合函数链式求导法则有:

 

         根据的定义可知:

 

         因为我们前边说了激活函数使用的sigmoid,sigmoid有如下性质:

         结合前边条件可得: 

 

         综合得:

 

        类似可以得到:

        其中表示的是隐含层的梯度:

         BP算法的目标是最小化训练集上的累计误差:

         学习率 η控制每一轮迭代更新得步长,太大容易震荡,太小更新太慢,参数更新过程是迭代进行,达到某个预设定得条件即可停止,一般精度够用即可。

 标准BP算法和累计误差逆传播(accumulated error backpropagation)算法

        上边我们推导得思路是标准BP算法,是基于一个训练样例的参数优化:

         这样会使得参数更新很频繁,并且参数间容易出现抵消现象,因此有了基于积累误差最小化的更新规则,就得到了积累误差逆传播(accumulated error backpropagation)算法。累积BP算法直接针对累计误差最小化,读取整个训练集D一遍后才对参数进行更新。

 两种策略来缓解BP网络的过拟合:

        1.早停(early stopping)

        将数据分成训练集和验证集,训练集用来计算梯度、更新连接权和阈值,验证集用来估计误差,若训练集误差降低但验证集误差升高,则停止训练,同时返回具有最小验证集误差的连接权和阈值。

        2.正则化(regularization)

 全局最小和局部最小

        我们训练的最终目的就是找到一组使得误差最小的参数,梯度下降是沿着负梯度方向找值,如果全局不止一个”谷底“,则我们可能陷入局部最小而不是全局最小,实际上我们停止训练的条件就是够用即可,不追求全局最小,但是我们到达的某个局部最小可能不满足停止条件,有几种方式可以跳出局部最小:

        1.以多组不同的参数值初始化多个神经网络,按标准化方法训练后,取其中误差最小的解作为最终的参数,这相当于从多个不同的初始点开始进行探索,这样就可能陷入不同的局部极小,从中进行有可能获得更接近全局最小的结果.
        2. 使用“模拟退火”技术,“模拟退火”在每一步都会以一定的概率接受比当前更差的结果,从而有助于“跳出”局部最小,在每一步的迭代的过程中,接受“次优解”的概率要随着时间的推移而不断的降低。

        以下图为例,模拟退火算法在搜索到局部最优解B后,会以一定的概率接受向右继续移动。也许经过几次这样的不是局部最优的移动后会到达B 和C之间的D点,于是就跳出了局部最小值B。

        3.使用“随机梯度下降”,与标准梯度下降精确计算梯度不一样,随机梯度下降法在计算梯度时加入随机的因素,于是即便其陷入到局部的极小值点,他计算的梯度仍可能不为0,这样就有可能跳出局部的极小值而继续进行搜索。 

训练两个阶段

        神经网络训练和后边我们要说的深度神经网络训练一样都是根据梯度下降或者其变种来求参的,分为两个阶段:

前向传播

        根据初始化的参数W(或者上一轮迭代得出的参数)和数据计算yhat 得出总loss

后向传播

        根据loss求出每个w参数的梯度,并更新,完成一轮迭代。

神经网络到深度学习的发展历史

        但是神经网络仍然存在若干的问题:尽管使用了BP算法,一次神经网络的训练仍然耗时太久,而且困扰训练优化的一个问题就是局部最优解问题,这使得神经网络的优化较为困难。同时,隐藏层的节点数需要调参,这使得使用不太方便,工程和研究人员对此多有抱怨。

  90年代中期,由Vapnik等人发明的SVM(Support Vector Machines,支持向量机)算法诞生,很快就在若干个方面体现出了对比神经网络的优势:无需调参;高效;全局最优解。基于以上种种理由,SVM迅速打败了神经网络算法成为主流。

 

        神经网络的研究再次陷入了冰河期。当时,只要你的论文中包含神经网络相关的字眼,非常容易被会议和期刊拒收,研究界那时对神经网络的不待见可想而知。

        在被人摒弃的10年中,有几个学者仍然在坚持研究。这其中的棋手就是加拿大多伦多大学的Geoffery Hinton教授。

  2006年,Hinton在《Science》和相关期刊上发表了论文,首次提出了“深度信念网络”的概念。与传统的训练方式不同,“深度信念网络”有一个“预训练”(pre-training)的过程,这可以方便的让神经网络中的权值找到一个接近最优解的值,之后再使用“微调”(fine-tuning)技术来对整个网络进行优化训练。这两个技术的运用大幅度减少了训练多层神经网络的时间。他给多层神经网络相关的学习方法赋予了一个新名词--“深度学习”。

   很快,深度学习在语音识别领域暂露头角。接着,2012年,深度学习技术又在图像识别领域大展拳脚。Hinton与他的学生在ImageNet竞赛中,用多层的卷积神经网络成功地对包含一千类别的一百万张图片进行了训练,取得了分类错误率15%的好成绩,这个成绩比第二名高了近11个百分点,充分证明了多层神经网络识别效果的优越性。

  在这之后,关于深度神经网络的研究与应用不断涌现。

        目前,深度神经网络在人工智能界占据统治地位。但凡有关人工智能的产业报道,必然离不开深度学习。神经网络界当下的四位引领者除了前文所说的Ng,Hinton以外,还有CNN的发明人Yann Lecun,以及《Deep Learning》的作者Bengio。

        多层神经网络的研究仍在进行中。现在最为火热的研究技术包括RNN,LSTM等,研究方向则是图像理解方面。图像理解技术是给计算机一幅图片,让它用语言来表达这幅图片的意思。ImageNet竞赛也在不断召开,有更多的方法涌现出来,刷新以往的正确率。

        神经网络的三起三落:

         下面说一下神经网络为什么能这么火热?简而言之,就是其学习效果的强大。随着神经网络的发展,其表示性能越来越强。

  从单层神经网络,到两层神经网络,再到多层神经网络,下图说明了,随着网络层数的增加,以及激活函数的调整,神经网络所能拟合的决策分界平面的能力。

 

         可以看出,随着层数增加,其非线性分界拟合能力不断增强。图中的分界线并不代表真实训练出的效果,更多的是示意效果。

  神经网络的研究与应用之所以能够不断地火热发展下去,与其强大的函数拟合能力是分不开关系的。

        当然,光有强大的内在能力,并不一定能成功。一个成功的技术与方法,不仅需要内因的作用,还需要时势与环境的配合。神经网络的发展背后的外在原因可以被总结为:更强的计算性能,更多的数据,以及更好的训练方法。只有满足这些条件时,神经网络的函数拟合能力才能得已体现,见下图

        之所以在单层神经网络年代,Rosenblat无法制作一个双层分类器,就在于当时的计算性能不足,Minsky也以此来打压神经网络。但是Minsky没有料到,仅仅10年以后,计算机CPU的快速发展已经使得我们可以做两层神经网络的训练,并且还有快速的学习算法BP。

  但是在两层神经网络快速流行的年代。更高层的神经网络由于计算性能的问题,以及一些计算方法的问题,其优势无法得到体现。直到2012年,研究人员发现,用于高性能计算的图形加速卡(GPU)可以极佳地匹配神经网络训练所需要的要求:高并行性,高存储,没有太多的控制需求,配合预训练等算法,神经网络才得以大放光彩。

  互联网时代,大量的数据被收集整理,更好的训练方法不断被发现。所有这一切都满足了多层神经网络发挥能力的条件。

        关于神经网络中的不同类别:

        具体到前馈神经网络中,就有了本文中所分别描述的三个网络:单层神经网络,双层神经网络,以及多层神经网络。深度学习中的CNN属于一种特殊的多层神经网络。 

       其实神经网络隐藏层多了 ,即很深层的神经网络就是深度学习了,参数越多模型复杂度越高,就可以处理更加复杂的任务,这就是深度学习的优势,深度学习所具有的”学习能力“主要归功于激活函数这个非线性变换上。

        神经网络属于机器学习算法,深度学习属于机器学习的分支,下一篇我们详细讨论深度学习。

参考:神经网络浅讲:从神经元到深度学习 - 计算机的潜意识 - 博客园

【如果对您有帮助,交个朋友给个一键三连吧,您的肯定是我博客高质量维护的动力!!!yadede

  • 12
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值