作者: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

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

  1. 神经网络讲解与实例,如何理解神经网络

    如何简单形象又有趣地讲解神经网络是什么? 神经网络最重要的用途是分类,为了让大家对分类有个直观的认识,咱们先看几个例子:垃圾邮件识别:现在有一封电子邮件,把出现在里面的所有词汇提取出来,送进一个机器里 ...

  2. 深度学习笔记(九):神经网络剪枝(Neural Network Pruning)详细介绍

    文章目录 1:What is pruning 2:Pruning in MLP(多层感知机) 2.2 How to make mask 3.Pruning in CNN(卷积神经网络) 1:What ...

  3. 深刻理解交叉熵损失函数

    说起交叉熵损失函数「Cross Entropy Loss」,脑海中立马浮现出它的公式: 我们已经对这个交叉熵函数非常熟悉,大多数情况下都是直接拿来使用就好.但是它是怎么来的?为什么它能表征真实样本标签 ...

  4. 神经网络入门(最通俗的理解神经网络)

    先从回归(Regression)问题说起.我在本吧已经看到不少人提到如果想实现强AI,就必须让机器学会观察并总结规律的言论.具体地说,要让机器观察什么是圆的,什么是方的,区分各种颜色和形状,然后根据这 ...

  5. 【深度学习】神经网络入门(最通俗的理解神经网络)

    form:http://tieba.baidu.com/p/3013551686?pid=49703036815&see_lz=1# 先从回归(Regression)问题说起.我在本吧已经看到 ...

  6. 《从0到1-全面深刻理解MySQL系列》- 最详细的MySQL安装流程(Window版)

    个人主页: IT学习日记 版权: 本文由[IT学习日记]原创.在CSDN首发 如果文章对你有帮助.欢迎关注.点赞.收藏(一键三连).有任何问题欢迎私信,看到会及时回复! 文章大纲 下载前需要了解的一些 ...

  7. 【模型修改的漫漫长路】经典VGG模型理解-这大概是目前最详细的讲解了【一】

    前言-论文好不容易写出来了,好不容易让导师看了,结果老师说模型不改只能发普通的文章,在我再三退却后变成了模型不改不给发[其实是自己太菜,论文写的太菜].用的模型什么的没理解透,现在突然说修改简直是天方 ...

  8. 【机器学习】深刻理解决策树-动手计算ID3算法

     一.决策树概述 决策树算法易于理解.可解释性强,是一个非常常见并且优秀的机器学习算法,可分类,也可回归.现在许多最优秀的集成模型,基础也是决策树.因此,决策树系列算法是机器学习绕不过的大山.需要进行 ...

  9. uboot 详细注释讲解

    转自:http://home.eeworld.com.cn/my/space-uid-135723-blogid-25548.html uboot 详细注释讲解 标签:  uboot  注释  讲解  ...

最新文章

  1. Swift - 使用addSubview()方法将StoryBoard中的视图加载进来
  2. vb.net限制datagridview不能选择_家里安装200兆宽带,网速还是很慢怎么办?教你一招解除网速限制...
  3. Linux下Poppler源码编译安装
  4. 【数据结构与算法】之深入解析“解码方法”的求解思路与算法示例
  5. linux查看java版本_linux 查看java版本
  6. 每日一题(C语言基础篇)2
  7. namenode开启DEBUG
  8. base64是啥原理
  9. 拓端tecdat|R语言中的岭回归、套索回归、主成分回归:线性模型选择和正则化
  10. 如何购买一只好的基金
  11. 天下网商属于阿里系吗_“阿里公子”商标申请被驳回,不属于马云父亲的阿里家族吗?...
  12. NOIP模拟19/07/22
  13. html 网站发布到公网
  14. 简易封装 element form表单
  15. MySQL 如何实现数据插入
  16. 计算机一级试题上网题收发邮件,计算机等级一级MS Office考题:第一套上网题
  17. 卸载VS2013或者VS2012版本
  18. Advanced IP Scanner –免费的轻量级Windows端口扫描器
  19. 看图猜成语小程序源码
  20. shell编程实例--实现累加

热门文章

  1. STM32学习心得二十六:DAC数模转换实验
  2. AirSim学习(1)-介绍,安装,unity测试
  3. 图神经网络(三):节点分类
  4. 【python 时间戳】python获取13位时间戳以及时间戳转换
  5. 杭电ACM2085--核反应堆
  6. 函数指针的用法以及用途详解
  7. Web中的HTML、css、jQuery、js
  8. Teradata 记事本
  9. 初始化Linux数据盘(fdisk)
  10. 遭遇Win32.Loader.c,Trojan.PSW.Win32.GameOnline,Trojan.PSW.Win32.AskTao等2