精华内容
下载资源
问答
  • 卷积神经网络发展历程
    千次阅读
    更多相关内容
  • 浅谈自然辩证法视角下人工神经网络发展历程.pdf
  • 神经网络发展历程

    2022-02-06 00:10:39
    神经网络发展历程 神经元 1.引子 ​ 对于神经元的研究由来已久,1904年生物学家就已经知晓了神经元的组成结构。 ​ 一个神经元通常具有多个树突,主要用来接受传入信息;而轴突只有一条,轴突尾端有许多轴突末梢可以...

    神经网络发展历程

    神经元

    1.引子

    ​ 对于神经元的研究由来已久,1904年生物学家就已经知晓了神经元的组成结构。

    ​ 一个神经元通常具有多个树突,主要用来接受传入信息;而轴突只有一条,轴突尾端有许多轴突末梢可以给其他多个神经元传递信息。轴突末梢跟其他神经元的树突产生连接,从而传递信号。这个连接的位置在生物学上叫做“突触”。

    ​ 人脑中的神经元形状可以用下图做简单的说明:

    aHR0cHM6Ly9pbWFnZXMyMDE1LmNuYmxvZ3MuY29tL2Jsb2cvNjczNzkzLzIwMTUxMi82NzM3OTMtMjAxNTEyMjkxMjEyNDgxOTgtODE4Njk4OTQ5LmpwZw

    ​ 1943年,心理学家McCulloch和数学家Pitts参考了生物神经元的结构,发表了抽象的神经元模型MP。在下文中,我们会具体介绍神经元模型。

    2.结构

    神经元模型是一个包含输入,输出与计算功能的模型。输入可以类比为神经元的树突,而输出可以类比为神经元的轴突,计算则可以类比为细胞核。

    下图是一个典型的神经元模型:包含有3个输入,1个输出,以及2个计算功能。

    注意中间的箭头线。这些线称为“连接”。每个上有一个“权值”。

    img

    连接是神经元中最重要的东西。每一个连接上都有一个权重。

    一个神经网络的训练算法就是让权重的值调整到最佳,以使得整个网络的预测效果最好。

    我们使用a来表示输入,用w来表示权值。一个表示连接的有向箭头可以这样理解:在初端,传递的信号大小仍然是a,端中间有加权参数w,经过这个加权后的信号会变成aw,因此在连接的末端,信号的大小就变成了aw。

    在其他绘图模型里,有向箭头可能表示的是值的不变传递。而在神经元模型里,每个有向箭头表示的是值的加权传递。

    img

    如果我们将神经元图中的所有变量用符号表示,并且写出输出的计算公式的话,就是下图。

    img

    ​ 可见z是在输入和权值的线性加权和叠加了一个函数g的值。在MP模型里,函数g是sgn函数,也就是取符号函数。这个函数当输入大于0时,输出1,否则输出0。

    下面对神经元模型的图进行一些扩展。首先将sum函数与sgn函数合并到一个圆圈里,代表神经元的内部计算。其次,把输入a与输出z写到连接线的左上方,便于后面画复杂的网络。最后说明,一个神经元可以引出多个代表输出的有向箭头,但值都是一样的。

    神经元可以看作一个计算与存储单元。计算是神经元对其的输入进行计算功能。存储是神经元会暂存计算结果,并传递到下一层。

    img

    当我们用“神经元”组成网络以后,描述网络中的某个“神经元”时,我们更多地会用“单元”(unit)来指代。同时由于神经网络的表现形式是一个有向图,有时也会用“节点”(node)来表达同样的意思。

    3.效果

    神经元模型的使用可以这样理解:

    ​ 我们有一个数据,称之为样本。样本有四个属性,其中三个属性已知,一个属性未知。我们需要做的就是通过三个已知属性预测未知属性。

    具体办法就是使用神经元的公式进行计算。三个已知属性的值是a1,a2,a3,未知属性的值是z。z可以通过公式计算出来。

    ​ 这里,已知的属性称之为特征,未知的属性称之为目标。假设特征与目标之间确实是线性关系,并且我们已经得到表示这个关系的权值w1,w2,w3。那么,我们就可以通过神经元模型预测新样本的目标。

    4.影响

    1943年发布的MP模型,虽然简单,但已经建立了神经网络大厦的地基。但是,MP模型中,权重的值都是预先设置的,因此不能学习。

    1949年心理学家Hebb提出了Hebb学习率,认为人脑神经细胞的突触(也就是连接)上的强度上可以变化的。于是计算科学家们开始考虑用调整权值的方法来让机器学习。这为后面的学习算法奠定了基础。

    img

    尽管神经元模型与Hebb学习律都已诞生,但限于当时的计算机能力,直到接近10年后,第一个真正意义的神经网络才诞生。

    单层神经网络(感知器)

    1.引子

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

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

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

    img

    2.结构

    下面来说明感知器模型。

    在原来MP模型的“输入”位置添加神经元节点,标志其为“输入单元”。其余不变,于是我们就有了下图:从本图开始,我们将权值w1, w2, w3写到“连接线”的中间。

    img

    ​ 在“感知器”中,有两个层次。分别是输入层和输出层。输入层里的“输入单元”只负责传输数据,不做计算。输出层里的“输出单元”则需要对前面一层的输入进行计算。

    我们把需要计算的层次称之为“计算层”,并把拥有一个计算层的网络称之为“单层神经网络”。有一些文献会按照网络拥有的层数来命名,例如把“感知器”称为两层神经网络。但在本文里,我们根据计算层的数量来命名。

    假如我们要预测的目标不再是一个值,而是一个向量,例如[2,3]。那么可以在输出层再增加一个“输出单元”。

    下图显示了带有两个输出单元的单层神经网络,其中输出单元z1的计算公式如下图。

    img

    可以看到,z1的计算跟原先的z并没有区别。

    我们已知一个神经元的输出可以向多个神经元传递,因此z2的计算公式如下图。

    img

    可以看到,z2的计算中除了三个新的权值:w4,w5,w6以外,其他与z1是一样的。

    整个网络的输出如下图。

    img

    目前的表达公式有一点不让人满意的就是:w4,w5,w6是后来加的,很难表现出跟原先的w1,w2,w3的关系。

    因此我们改用二维的下标,用wx,y来表达一个权值。下标中的x代表后一层神经元的序号,而y代表前一层神经元的序号(序号的顺序从上到下)。

    例如,w1,2代表后一层的第1个神经元与前一层的第2个神经元的连接的权值(这种标记方式参照了Andrew Ng的课件)。根据以上方法标记,我们有了下图。

    img

    如果我们仔细看输出的计算公式,会发现这两个公式就是线性代数方程组。因此可以用矩阵乘法来表达这两个公式。

    例如,输入的变量是[a1,a2,a3]T(代表由a1,a2,a3组成的列向量),用向量a来表示。方程的左边是[z1,z2]T,用向量z来表示。

    系数则是矩阵W(2行3列的矩阵,排列形式与公式中的一样)。

    于是,输出公式可以改写成:

    ​ g(W * a) = z;

    这个公式就是神经网络中从前一层计算后一层的矩阵运算。

    3.效果

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

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

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

    img4.影响

    感知器只能做简单的线性分类任务。但是当时的人们热情太过于高涨,并没有人清醒的认识到这点。于是,当人工智能领域的巨擘Minsky指出这点时,事态就发生了变化。

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

    Minsky认为,如果将计算层增加到两层,计算量则过大,而且没有有效的学习算法。所以,他认为研究更深层的网络是没有价值的。(本文成文后一个月,即2016年1月,Minsky在美国去世。谨在本文中纪念这位著名的计算机研究专家与大拿。)

    img

    由于Minsky的巨大影响力以及书中呈现的悲观态度,让很多学者和实验室纷纷放弃了神经网络的研究。神经网络的研究陷入了冰河期。这个时期又被称为“AI winter”。

    接近10年以后,对于两层神经网络的研究才带来神经网络的复苏。

    两层神经网络(多层感知器)

    1.引子

    两层神经网络是本文的重点,因为正是在这时候,神经网络开始了大范围的推广与使用。

    Minsky说过单层神经网络无法解决异或问题。但是当增加一个计算层以后,两层神经网络不仅可以解决异或问题,而且具有非常好的非线性分类效果。不过两层神经网络的计算是一个问题,没有一个较好的解法。

    1986年,Rumelhar和Hinton等人提出了反向传播(Backpropagation,BP)算法,解决了两层神经网络所需要的复杂计算量问题,从而带动了业界使用两层神经网络研究的热潮。目前,大量的教授神经网络的教材,都是重点介绍两层(带一个隐藏层)神经网络的内容。

    这时候的Hinton还很年轻,30年以后,正是他重新定义了神经网络,带来了神经网络复苏的又一春。

    2.结构

    两层神经网络除了包含一个输入层,一个输出层以外,还增加了一个中间层。此时,中间层和输出层都是计算层。我们扩展上节的单层神经网络,在右边新加一个层次(只含有一个节点)。

    现在,我们的权值矩阵增加到了两个,我们用上标来区分不同层次之间的变量。

    例如ax(y)代表第y层的第x个节点。z1,z2变成了a1(2),a2(2)。下图给出了a1(2),a2(2)的计算公式。

    img

    计算最终输出z的方式是利用了中间层的a1(2),a2(2)和第二个权值矩阵计算得到的,如下图。

    img

    假设我们的预测目标是一个向量,那么与前面类似,只需要在“输出层”再增加节点即可。

    我们使用向量和矩阵来表示层次中的变量。a(1),a(2),z是网络中传输的向量数据。W(1)和W(2)是网络的矩阵参数。如下图。

    使用矩阵运算来表达整个计算公式的话如下:

    g(W(1) * a(1)) = a(2);

    g(W(2) * a(2)) = z;

    由此可见,使用矩阵运算来表达是很简洁的,而且也不会受到节点数增多的影响(无论有多少节点参与运算,乘法两端都只有一个变量)。因此神经网络的教程中大量使用矩阵运算来描述。

    需要说明的是,至今为止,我们对神经网络的结构图的讨论中都没有提到偏置节点(bias unit)。事实上,这些节点是默认存在的。它本质上是一个只含有存储功能,且存储值永远为1的单元。在神经网络的每个层次中,除了输出层以外,都会含有这样一个偏置单元。正如线性回归模型与逻辑回归模型中的一样。

    偏置单元与后一层的所有节点都有连接,我们设这些参数值为向量b,称之为偏置。如下图。

    img

    可以看出,偏置节点很好认,因为其没有输入(前一层中没有箭头指向它)。有些神经网络的结构图中会把偏置节点明显画出来,有些不会。一般情况下,我们都不会明确画出偏置节点。

    在考虑了偏置以后的一个神经网络的矩阵运算如下:

    g(W(1) * a(1) + b(1)) = a(2);

    g(W(2) * a(2) + b(2)) = z;

    需要说明的是,在两层神经网络中,我们不再使用sgn函数作为函数g,而是使用平滑函数sigmoid作为函数g。我们把函数g也称作激活函数(active function)。

    事实上,神经网络的本质就是通过参数与激活函数来拟合特征与目标之间的真实函数关系。初学者可能认为画神经网络的结构图是为了在程序中实现这些圆圈与线,但在一个神经网络的程序中,既没有“线”这个对象,也没有“单元”这个对象。实现一个神经网络最需要的是线性代数库。

    3.效果

    与单层神经网络不同。理论证明,两层神经网络可以无限逼近任意连续函数。

    这是什么意思呢?也就是说,面对复杂的非线性分类任务,两层(带一个隐藏层)神经网络可以分类的很好。

    下面就是一个例子(此两图来自colah的博客),红色的线与蓝色的线代表数据。而红色区域和蓝色区域代表由神经网络划开的区域,两者的分界线就是决策分界。

    img

    可以看到,这个两层神经网络的决策分界是非常平滑的曲线,而且分类的很好。有趣的是,前面已经学到过,单层网络只能做线性分类任务。而两层神经网络中的后一层也是线性分类层,应该只能做线性分类任务。为什么两个线性分类任务结合就可以做非线性分类任务?

    我们可以把输出层的决策分界单独拿出来看一下。就是下图。

    img

    可以看到,输出层的决策分界仍然是直线。关键就是,从输入层到隐藏层时,数据发生了空间变换。也就是说,两层神经网络中,隐藏层对原始的数据进行了一个空间变换,使其可以被线性分类,然后输出层的决策分界划出了一个线性分类分界线,对其进行分类。

    这样就导出了两层神经网络可以做非线性分类的关键–隐藏层。联想到我们一开始推导出的矩阵公式,我们知道,矩阵和向量相乘,本质上就是对向量的坐标空间进行一个变换。因此,隐藏层的参数矩阵的作用就是使得数据的原始坐标空间从线性不可分,转换成了线性可分。

    两层神经网络通过两层的线性模型模拟了数据内真实的非线性函数。因此,多层的神经网络的本质就是复杂函数拟合。

    下面来讨论一下隐藏层的节点数设计。在设计一个神经网络时,输入层的节点数需要与特征的维度匹配,输出层的节点数要与目标的维度匹配。而中间层的节点数,却是由设计者指定的。因此,“自由”把握在设计者的手中。但是,节点数设置的多少,却会影响到整个模型的效果。如何决定这个自由层的节点数呢?目前业界没有完善的理论来指导这个决策。一般是根据经验来设置。较好的方法就是预先设定几个可选值,通过切换这几个值来看整个模型的预测效果,选择效果最好的值作为最终选择。这种方法又叫做Grid Search(网格搜索)。

    了解了两层神经网络的结构以后,我们就可以看懂其它类似的结构图。例如EasyPR字符识别网络架构(下图)。

    img

    EasyPR使用了字符的图像去进行字符文字的识别。输入是120维的向量。输出是要预测的文字类别,共有65类。根据实验,我们测试了一些隐藏层数目,发现当值为40时,整个网络在测试集上的效果较好,因此选择网络的最终结构就是120,40,65。

    4.训练

    下面简单介绍一下两层神经网络的训练。

    在Rosenblat提出的感知器模型中,模型中的参数可以被训练,但是使用的方法较为简单,并没有使用目前机器学习中通用的方法,这导致其扩展性与适用性非常有限。从两层神经网络开始,神经网络的研究人员开始使用机器学习相关的技术进行神经网络的训练。例如用大量的数据(1000-10000左右),使用算法进行优化等等,从而使得模型训练可以获得性能与数据利用上的双重优势。

    机器学习模型训练的目的,就是使得参数尽可能的与真实的模型逼近。具体做法是这样的。首先给所有参数赋上随机值。我们使用这些随机生成的参数值,来预测训练数据中的样本。样本的预测目标为yp,真实目标为y。那么,定义一个值loss,计算公式如下。

    ​ loss = (yp - y)2

    这个值称之为损失(loss),我们的目标就是使对所有训练数据的损失和尽可能的小。

    如果将先前的神经网络预测的矩阵公式带入到yp中(因为有z=yp),那么我们可以把损失写为关于参数(parameter)的函数,这个函数称之为损失函数(loss function)。下面的问题就是求:如何优化参数,能够让损失函数的值最小。

    此时这个问题就被转化为一个优化问题。一个常用方法就是高等数学中的求导,但是这里的问题由于参数不止一个,求导后计算导数等于0的运算量很大,所以一般来说解决这个优化问题使用的是梯度下降算法。梯度下降算法每次计算参数在当前的梯度,然后让参数向着梯度的反方向前进一段距离,不断重复,直到梯度接近零时截止。一般这个时候,所有的参数恰好达到使损失函数达到一个最低值的状态。

    在神经网络模型中,由于结构复杂,每次计算梯度的代价很大。因此还需要使用反向传播算法。反向传播算法是利用了神经网络的结构进行的计算。不一次计算所有参数的梯度,而是从后往前。首先计算输出层的梯度,然后是第二个参数矩阵的梯度,接着是中间层的梯度,再然后是第一个参数矩阵的梯度,最后是输入层的梯度。计算结束以后,所要的两个参数矩阵的梯度就都有了。

    反向传播算法可以直观的理解为下图。梯度的计算从后往前,一层层反向传播。前缀E代表着相对导数的意思。

    img

    反向传播算法的启示是数学中的链式法则。在此需要说明的是,尽管早期神经网络的研究人员努力从生物学中得到启发,但从BP算法开始,研究者们更多地从数学上寻求问题的最优解。不再盲目模拟人脑网络是神经网络研究走向成熟的标志。正如科学家们可以从鸟类的飞行中得到启发,但没有必要一定要完全模拟鸟类的飞行方式,也能制造可以飞天的飞机。

    优化问题只是训练中的一个部分。机器学习问题之所以称为学习问题,而不是优化问题,就是因为它不仅要求数据在训练集上求得一个较小的误差,在测试集上也要表现好。因为模型最终是要部署到没有见过训练数据的真实场景。提升模型在测试集上的预测效果的主题叫做泛化(generalization),相关方法被称作正则化(regularization)。神经网络中常用的泛化技术有权重衰减等。

    5.影响

    两层神经网络在多个地方的应用说明了其效用与价值。10年前困扰神经网络界的异或问题被轻松解决。神经网络在这个时候,已经可以发力于语音识别,图像识别,自动驾驶等多个领域。

    历史总是惊人的相似,神经网络的学者们再次登上了《纽约时报》的专访。人们认为神经网络可以解决许多问题。就连娱乐界都开始受到了影响,当年的《终结者》电影中的阿诺都赶时髦地说一句:我的CPU是一个神经网络处理器,一个会学习的计算机。

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

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

    img

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

    多层神经网络(深度学习)

    1.引子

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

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

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

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

    img

    2.结构

    ​ 我们延续两层神经网络的方式来设计一个多层神经网络。

    在两层神经网络的输出层后面,继续添加层次。原来的输出层变成中间层,新加的层次成为新的输出层。所以可以得到下图。

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Lt7B1Vc9-1644077433670)(https://gitee.com/mengyuw20/cloudimage/raw/master/img/aHR0cHM6Ly9pbWFnZXMyMDE1LmNuYmxvZ3MuY29tL2Jsb2cvNjczNzkzLzIwMTUxMi82NzM3OTMtMjAxNTEyMjQyMDQzMzkyMzQtMTk5NDYyMDMxMy5qcGc%20(1)].png)

    依照这样的方式不断添加,我们可以得到更多层的多层神经网络。公式推导的话其实跟两层神经网络类似,使用矩阵运算的话就仅仅是加一个公式而已。

    在已知输入a(1),参数W(1),W(2),W(3)的情况下,输出z的推导公式如下:

    g(W(1) * a(1)) = a(2);

    g(W(2) * a(2)) = a(3);

    g(W(3) * a(3)) = z;

    ​ 多层神经网络中,输出也是按照一层一层的方式来计算。从最外面的层开始,算出所有单元的值以后,再继续计算更深一层。只有当前层所有单元的值都计算完毕以后,才会算下一层。有点像计算向前不断推进的感觉。所以这个过程叫做“正向传播”。

    下面讨论一下多层神经网络中的参数。

    首先我们看第一张图,可以看出W(1)中有6个参数,W(2)中有4个参数,W(3)中有6个参数,所以整个神经网络中的参数有16个(这里我们不考虑偏置节点,下同)。

    aHR0cHM6Ly9pbWFnZXMyMDE1LmNuYmxvZ3MuY29tL2Jsb2cvNjczNzkzLzIwMTUxMi82NzM3OTMtMjAxNTEyMjQyMTI1MzE0ODQtNTcwNzQ1MDUzLmpwZw

    ​ 假设我们将中间层的节点数做一下调整。第一个中间层改为3个单元,第二个中间层改为4个单元。

    经过调整以后,整个网络的参数变成了33个。

    img

    ​ 虽然层数保持不变,但是第二个神经网络的参数数量却是第一个神经网络的接近两倍之多,从而带来了更好的表示(represention)能力。表示能力是多层神经网络的一个重要性质,下面会做介绍。

    在参数一致的情况下,我们也可以获得一个“更深”的网络。

    img

    ​ 上图的网络中,虽然参数数量仍然是33,但却有4个中间层,是原来层数的接近两倍。这意味着一样的参数数量,可以用更深的层次去表达。

    3.效果

    ​ 与两层层神经网络不同。多层神经网络中的层数增加了很多。

    增加更多的层次有什么好处?更深入的表示特征,以及更强的函数模拟能力。

    更深入的表示特征可以这样理解,随着网络的层数增加,每一层对于前一层次的抽象表示更深入。在神经网络中,每一层神经元学习到的是前一层神经元值的更抽象的表示。例如第一个隐藏层学习到的是“边缘”的特征,第二个隐藏层学习到的是由“边缘”组成的“形状”的特征,第三个隐藏层学习到的是由“形状”组成的“图案”的特征,最后的隐藏层学习到的是由“图案”组成的“目标”的特征。通过抽取更抽象的特征来对事物进行区分,从而获得更好的区分与分类能力。

    关于逐层特征学习的例子,可以参考下图。

    img

    ​ 更强的函数模拟能力是由于随着层数的增加,整个网络的参数就越多。而神经网络其实本质就是模拟特征与目标之间的真实关系函数的方法,更多的参数意味着其模拟的函数可以更加的复杂,可以有更多的容量(capcity)去拟合真正的关系。

    通过研究发现,在参数数量一样的情况下,更深的网络往往具有比浅层的网络更好的识别效率。这点也在ImageNet的多次大赛中得到了证实。从2012年起,每年获得ImageNet冠军的深度神经网络的层数逐年增加,2015年最好的方法GoogleNet是一个多达22层的神经网络。

    在最新一届的ImageNet大赛上,目前拿到最好成绩的MSRA团队的方法使用的更是一个深达152层的网络!关于这个方法更多的信息有兴趣的可以查阅ImageNet网站。

    4.训练

    ​ 在单层神经网络时,我们使用的激活函数是sgn函数。到了两层神经网络时,我们使用的最多的是sigmoid函数。而到了多层神经网络时,通过一系列的研究发现,ReLU函数在训练多层神经网络时,更容易收敛,并且预测性能更好。因此,目前在深度学习中,最流行的非线性函数是ReLU函数。ReLU函数不是传统的非线性函数,而是分段线性函数。其表达式非常简单,就是y=max(x,0)。简而言之,在x大于0,输出就是输入,而在x小于0时,输出就保持为0。这种函数的设计启发来自于生物神经元对于激励的线性响应,以及当低于某个阈值后就不再响应的模拟。

    在多层神经网络中,训练的主题仍然是优化和泛化。当使用足够强的计算芯片(例如GPU图形加速卡)时,梯度下降算法以及反向传播算法在多层神经网络中的训练中仍然工作的很好。目前学术界主要的研究既在于开发新的算法,也在于对这两个算法进行不断的优化,例如,增加了一种带动量因子(momentum)的梯度下降算法。

    在深度学习中,泛化技术变的比以往更加的重要。这主要是因为神经网络的层数增加了,参数也增加了,表示能力大幅度增强,很容易出现过拟合现象。因此正则化技术就显得十分重要。目前,Dropout技术,以及数据扩容(Data-Augmentation)技术是目前使用的最多的正则化技术。

    5.影响

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

    前段时间一直对人工智能持谨慎态度的马斯克,搞了一个OpenAI项目,邀请Bengio作为高级顾问。马斯克认为,人工智能技术不应该掌握在大公司如Google,Facebook的手里,更应该作为一种开放技术,让所有人都可以参与研究。马斯克的这种精神值得让人敬佩。
    重要。目前,Dropout技术,以及数据扩容(Data-Augmentation)技术是目前使用的最多的正则化技术。

    5.影响

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

    前段时间一直对人工智能持谨慎态度的马斯克,搞了一个OpenAI项目,邀请Bengio作为高级顾问。马斯克认为,人工智能技术不应该掌握在大公司如Google,Facebook的手里,更应该作为一种开放技术,让所有人都可以参与研究。马斯克的这种精神值得让人敬佩。

    展开全文
  • 神经网络发展历程--简单介绍
  • [总结] 卷积神经网络发展历程

    千次阅读 多人点赞 2019-07-31 16:21:51
    本文用于总结卷积神经网络(CNN)发展历程

    一直都想梳理一下 CNN 网络结构的发展过程,却感觉无从下手,直到最近看到这篇文章:CNN网络结构的发展:从LeNet到EfficientNet
    于是我便下决心依照这篇文章所述顺序,对卷积神经网络的发展历程做一次粗略的梳理,也算对之前的知识框架做一次梳理。
    写这篇博文肯定有所疏漏或者理解错误的地方,有些定义我也不能清楚的进行表达,请各位谅解。

    1. LeNet

    论文链接:Gradient-based learning applied to document recognition, 发表时间:1998 年

    以现在的眼光来看,LeNet 绝对是一个小网络,也没什么特点。但是,LeNet 是 CNN 网络结构的开山鼻祖,第一次定义了 CNN 网络结构
    LeNet 的特点如下所示:

    • 定义了卷积神经网络(Convolutional Neural Network, CNN)的基本框架:卷积层 + 池化层(Pooling Layer) + 全连接层
    • 定义了卷积层(Convolution Layer),与全连接层相比,卷积层的不同之处有两点:局部连接(引进“感受野”这一概念)、权值共享(减少参数数量)
    • 利用池化层进行下采样(Downsampooling),从而减少计算量
    • 用 Tanh 作为非线性激活函数(现在看到的都是改进过的 LeNet 了,用 ReLU 代替 Tanh。相较于 Sigmoid,Tanh 以原点对称(zero-centered),收敛速度会快。关于其解释,请看:谈谈激活函数以零为中心的问题

    PS: 关于全连接层,作者 Yann LeCun 曾在推特上指出:直接将特征图(Featuremap)展开输入到全连接层,会导致 CNN 仅适用于指定尺度的图像上。LeCun 认为 CNN 应该尽可能适用与各种尺度的图像上,这一点也得到许多人的认同。对于分类(Classification)问题,利用全局平均池化(Global Average Pooling, GAP)操作代替特征图的拉伸,这样 CNN 便可以处理各种尺度的图像了。而对于语义分割(Semantic Segmentation)问题,Fully Convolutional Networks for Semantic Segmentation 已经提出了一个完全没有全连接层的全卷积网络了,可以在这个问题上处理任意大小的图像。

    PPS: 一般来说,卷积和池化的核的宽与高相等。
    卷积计算公式: S i z e o u t = ( S i z e i n − K e r n e l P o o l i n g + 2 ∗ P a d d i n g ) / S t r i d e + 1 Size_{out} = (Size_{in} - Kernel_{Pooling}+2*Padding)/Stride + 1 Sizeout=(SizeinKernelPooling+2Padding)/Stride+1
    池化计算公式: S i z e o u t = ( S i z e i n − K e r n e l P o o l i n g ) / S t r i d e + 1 Size_{out} = (Size_{in} - Kernel_{Pooling})/Stride + 1 Sizeout=(SizeinKernelPooling)/Stride+1

    2. AlexNet

    论文链接:ImageNet Classification with Deep Convolutional Neural Networks, 发表时间:2012 年

    2012 年,Krizhevsky 与 Hinton 推出了 AlexNet,并在当年的 ILSVRC(ImageNet Large-Scale Visual Recognition Challenge)中以超过第二名10.9个百分点的绝对优势一举夺冠,引起了许多学者对深度学习的研究,可以算是深度学习的热潮的起始标志吧。

    当时的算力不如现在这样强劲,AlexNet 用的 GTX 580 也只有 3GB 的显存(这也导致其设计出双 GPU 框架,现在的许多深度学习框架都有这样的能力,不过当时只能通过手动编写底层代码,工作量可想而知),却完成了在 ImageNet 上的巨大突破,这在当时是非常轰动的,变相证明了深度学习的能力。

    由于算力的不断进步,AlexNet 在许多任务显得太"小"了,很少见到它的身影。所以我认为相较于 AlexNet 的框架,作者所做的一些其他改进更有值得研究的地方。

    AlexNet 的特点如下所示:

    • 采用双 GPU 网络结构,从而可以设计出更“大”、更“深”的网络(相较于当时的算力来说)
    • 采用 ReLU 代替 Tanh,稍微解决梯度消失问题(Gradient Vanishing Problem),加快网络收敛速度。(关于常见激活函数的比较,可以看这篇:常用激活函数的比较 - 徐小贱民的文章 - 知乎
    • 提出局部相应归一化(LRN, Local Response Normalization),据作者所言,该操作能减少指标 Top-1/Top-5 Error Rate 1.4%/1.2%。(我个人不喜欢 LRN,因为我觉得它的超参数太多了,不具备很好的泛化能力。关于 Normalization 的发展历程可以看这篇:[笔记] 神经网络中 Normalization 的发展历程
    • 令 Pooling 操作中的 stride 小于池化核的大小,从而使相邻的池化区域存在重叠部分,这一操作称为 Overlapping Pooling。据作者所言,这一操作能减少指标 Top-1/Top-5 Error Rate 0.4%/0.3%,并且减少过拟合现象。
    • 对训练数据进行随机裁剪(Random Crop),将训练图像由 256 × 256 裁剪为 224 × 224,并做随机的镜像翻转(Horizontal Reflection)。并在测试时,从图像的四个角以及中心进行裁剪,并进行镜像翻转,这样可以得到 10 个 Patch,将这些 Patch 的结果进行平均,从而得到最终预测结果。(之前在一个人脸识别比赛中,我师兄用这样的操作直接提高了4~5个点,算是一种简单的集成操作吧)
    • 对训练图像做 PCA(主成分分析),利用服从 (0,0.1) 的高斯分布的随机变量对主成分进行扰动。作者指出,这一操作能减少指标 Top-1 Error Rate 1%。
    • 利用 Dropout 避免网络过拟合。(我觉得这也算是集成操作的一种,因为随着模型的复杂度的提高,弱分类器也会越来越大,纯粹由弱分类器进行 Ensemble 应该不实际。最近谷歌对 Dropout 的专利貌似申请下来了,据说相关文档详细到可以作为 Dropout 的使用指南。)

    PS: PyTorch 中的 TORCHVISION.MODELS 提供基于 ImageNet 训练好的 AlexNet 模型,将其加载到显存中占了 1191 MiB(训练与测试所占显存大小依赖于实验设置,故不做讨论)。

    3. VGG

    论文链接:Very Deep Convolutional Networks for Large-Scale Image Recognition, 发表时间:2014.09

    2014 年,Simonyan 和 Zisserman 提出了 VGG 系列模型(包括VGG-11/VGG-13/VGG-16/VGG-19),并在当年的 ImageNet Challenge 上作为分类任务第二名、定位(Localization)任务第一名的基础网络出现。对于当时而言,VGG 属于很”深“的网络,已经达到 19 层的深度(虽然同年的 GooLeNet 有22层),这是一个不小的突破,因为理论上神经网络模型的拟合能力应该是随着模型”大小“不断增加的。

    虽然 VGG 的出现时间比较早,而且隔年又出现了 ResNet 这样现象级的网络模型,但是至今仍经常出现在论文中(虽然往往作为比较对象出现)。此外,VGG 的一些设置至今都在使用,所以,有必要了解一下 VGG 的网络结构。

    网络结构:

    VGG 其实跟 AlexNet 有一定的相似之处,都是由五个卷积层与激活函数叠加的部分和三个全连接层组成,但是不同的是,VGG加“深”了前面由五个卷积层与激活函数叠加的部分,使得每部分并不是一个卷积层加一个激活函数组成,而是多个这样的组合组成一部分(有人习惯称这个为 Conv Layer Group),每个部分之间进行池化操作。

    此外,VGG 与当时其他卷积神经网络不同,不采用感受野大的卷积核(如:7 × 7,5 × 5),反而采用感受野小的卷积核(3 × 3)。关于这样做的好处,作者指出有如下两点:减少网络参数量;由于参数量被大幅减小,于是可以用多个感受野小的卷积层替换掉之前一个感受野大的卷积层,从而增加网络的非线性表达能力。

    从 VGG-16 开始,VGG 引进卷积核大小为 1 × 1 的卷积层(最早应该在 Network In Network 提到),使得在不影响特征图大小的情况下,增加网络的非线性表达能力。

    由上图可以看出,VGG 每个“大”部分计算得到的特征图大小应该是固定的,以输入大小为 (224,244,3) 的图像举例,所计算得到的特征图大小分别为 (112,112,64),(56,56,128),(28,28,256),(14,14,512),(7,7,512)。(VGG 的最后三层全连接层太大了,尤其是第一层,大小达到了 (25088,4096) )

    其他细节:

    • 作者提到曾使用 LRN,但是并没有任何效果提升,反而还使得内存使用和计算时间增加。
    • 在训练过程中,作者为避免随机初始化对训练带来负面影响,于是利用小的网络参数初始化大的网络参数(比如用以训练好的 VGG-11 去初始化部分 VGG-13 的网络参数)。
    • 对训练图像进行预处理时,先做宽高等比缩放(原文用的词是 isotropically rescaled,即同质化缩放),使其最短边长度达到 S,接着再做随机裁剪。其中,关于 S 的设置,作者提出了两种训练方案:Single-Scale Training,Multi-Scale Training。

    PS: PyTorch 中的 TORCHVISION.MODELS 提供基于 ImageNet 训练好的 VGG-11/VGG-13/VGG-16/VGG-19 模型,以及对应使用 Batch Normalization 的版本,分别将其加载到显存中占了 1467/1477/1501/1527 MiB(训练与测试所占显存大小依赖于实验设置,故不做讨论)。

    4. Inception Net

    • Inception Net V1 (GoogLeNet)

    论文链接:Going Deeper with Convolutions, 发表时间:2014.09

    2014 年,Google 提出了 Inception 网络结构,并以此构建了 GoogLeNet(之所以这样命名,是为了向LeNet致敬;此外,GoogLeNet 也经常被称为 Inception Net V1,而该论文经常被称为 Inception V1),从而在同年的 ImageNet Challenge 的分类与检测(Detection)任务上夺得第一名。

    与 VGG 不同,Inception 结构虽然也倾向于加“深”网络结构,从而提高模型的表达能力,但是作者充分考虑到现实中计算资源的限制,所以对模型中局部结构进行了精心设计,并且抛弃全连接层(虽然 GoogLeNet 最后加了一层全连接层,但这是作者为了其他人能更方便的利用模型进行微调(Finetune))。

    作者在文中指出,提高模型表达能力的最直接的办法就是增加模型的“大小”,而这又会导致两个问题的产生:模型越大,其网络参数也就越大,就越容易产生过拟合现象,所以就需要更大的数据集,然而大型数据集的构建成本是很高昂的;模型越大,对于计算资源的需求就越大,这在现实任务中是难以接受的。而作者认为解决这两个问题的基本方法是将全连接层,甚至是卷积层改为稀疏的网络结构。(作者还在文中指出,GoogLeNet 的参数仅有 AlexNet 的 1/12,而 AlexNet 的全连接层的参数量甚至占到了自身参数量的 90% 以上)

    受到 Network In Network 以及 HeHebbian Principle 的启发,作者通过增加网络的宽度,从而提高网络的表达能力,并尝试找到卷积神经网络中的最优局部稀疏结构,即 Inception Module(如上图所示)。

    作者所设计的 Inception Module 与常见的网络结构不同,打破了常规的卷积层串联的设计思路,选择将卷积核大小为 1 × 1,3 × 3,5 × 5 的卷积层和池化核大小为 3 × 3 的池化层进行并联,并将各自所得到的特征图进行 Concatenate 操作合并在一起,作为后续的输入。

    之所以 Inception Module 由上图左侧发展被改进为上图右侧,是因为:作者希望希望模型中深层的 Inception Module 可以捕捉到 Higher Abstraction,所以作者认为深层的 Inception Module中的卷积层的空间集中度应该逐渐降低,以此捕捉更大面积的特征。故,作者令越深层的 Inception Module 中,卷积核大小为 3 × 3 和 5 × 5 这两个卷积层的输出通道数占比越多。但这又将导致计算量增加,所以为了解决这个问题,作者在原有 Inception Module 的基础上,利用卷积核大小为 1 × 1 的卷积层进行降维操作,从而减小计算量(这建立在一个假设之上:即使是低维的映射也可能包含关于相关图像区域的大量信息)。

    由于 Inception Module 保持了输入输出的尺寸一致,故 GoogLeNet 可以由 Inception Module 进行模块化搭建。仔细观察 GoogLeNet 的结构,你会发现作者在 Inception Module (4a) 和 (4d) 设置了额外的辅助 Loss,用以增加向后传导的梯度,缓解梯度消失问题,同时增加额外的正则化操作。在文章中,作者指出这样操作的目的主要是使得模型中低层的特征也具备很好的区分能力。(文章中,这两个额外的 Loss 会乘上衰减系数 0.3,与最后的 Loss 相加,作为整个模型的 Loss)

    • Inception Net V2

    论文链接:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift, 发表时间:2015.02

    2015 年,谷歌提出了 Batch Normalization 操作,将其添加在之前的 GoogLeNet,并修改了一定的结构与实验设置,得到了 Inception Net V2,在 ImageNet 上达到分类任务超过 GoogLeNet。(关于 BN 的详细笔记,可以参考这篇博文:[笔记] 神经网络中 Normalization 的发展历程

    网络结构:

    • 将 Inception Module 中卷积核大小为 5 × 5 的卷积层用两个相连的卷积核大小为 3 × 3 的卷积层进行替换。作者指出,这一操作是的模型参数增加了 25%,计算成本提高了 30%。
    • 将输出大小为 28 × 28 的 Inception Module 的个数由两个提升到三个,即增加 Inception Module (3c)。
    • 在 Inception Module 中进行池化操作(有时为平均池化(Average Pooling),有时为最大池化(Max Pooling))
    • 两个 Inception Module 之间不再进行池化操作,仅在 Inception Module (3c) 和 (4e) 前添加 stride-2 conv/pooling layer。
    • 将网络第一层的卷积层替换为深度乘子为 8 的可分离卷积(Separable Convolution,关于这个概念,可以参考:卷积神经网络中的Separable ConvolutionCNN中千奇百怪的卷积方式大汇总)。

    其他细节:

    • 作者在文中指出,他们并不是直接简单的将 BN 添加到网络中的,还做了如下的改动:增大学习率,移除 Dropout,减小 L2 正则化项,加速学习率衰减,移除 LRN,更彻底的打乱训练数据,减少光学畸变( Photometric Distortion,关于这个概念,可以参考这篇文章:SSD中的数据增强细节)。下图为作者关于学习率的对比实验:
    • Inception Net V3

    论文链接:Rethinking the Inception Architecture for Computer Vision, 发表时间:2015.12

    时隔将近一年,谷歌又发了篇论文对之前提出的 Inception Module 进行了思考。在这篇论文中,作者首先四条设计神经网络的原则,接着提出如何分解大卷积核的卷积层,接着反思辅助分类器(Auxiliary Classifier)的作用,接着按照自己所提的第一条原则对常见的 Size Reduction 做了改进,最后将以上改进添加进之前的网络结构中。

    关于四条设计神经网络的原则:(没能完全理解,直接放原文吧)

    • Avoid representational bottlenecks, especially early in the network.
    • Higher dimensional representations are easier to process locally within a network.
    • Spatial aggregation can be done over lower dimensional embeddings without much or any loss in representational power.
    • Balance the width and depth of the network.

    关于如何分解大卷积核的卷积层:

    作者提出两种解决办法:利用连续的两层小卷积核的卷积层代替大卷积核的卷积层(下图左侧所示);利用连续的两层非对称的卷积层(卷积核大小为 n × 1 和 1 × n)代替原有卷积层(卷积核大小为 n × n)(下图右侧所示)。

    这样做的好处自然是减少参数量以及计算量。此外,作者对于这两种操作都做了相应的实验并发现:使用第一种操作时,添加在卷积层后的激活函数都为 ReLU 比 Linear+ReLU 好;使用第二种操作,最好在模型的中间层使用(适用的FeatureMap大小范围为 12~20)。

    关于辅助分类器的作用:

    GoogLeNet 曾在 Inception Module (4a) 和 (4d) 设置了额外的辅助 Loss,即设置了辅助分类器,当时作者对其的理解是:使梯度更好的回传到低层,避免梯度消失问题,提高模型的收敛速度与最终表现。但是作者通过实验发现:在训练初期,有无辅助分类器并无区别;在训练后期,有辅助分类器将提高模型的最终表现;此外,作者去掉 GoogLeNet 中较低的辅助分类器的分支,发现此举并不会导致模型性能有明显的降低。最后,作者认为:辅助分类器起到的作用更像是正则化。

    关于如何有效减少特征图尺寸:

    在分类任务中,许多模型都会随着深度的整长不断通过池化操作缩小特征图尺寸,以此减小模型的“体积”。由于池化操作会导致特征图中的许多信息丢失,许多模型都习惯在特征图的宽与高缩小一半的同时,利用卷积核为 1 × 1 的卷积层使得特征图的通道数量翻倍(即 C × W × H -> 2C × W/2 × H/2),以此减少池化操作所带来的信息丢失。

    这样操作有两种选择:先进行升维操作,再进行池化操作;先进行池化操作,再进行升维操作。作者指出,根据原则一,我们应先进行升维操作,再进行池化操作。(我觉得挺好理解的,本来升维就是为了避免池化操作带来的信息丢失,但是在已经池化后的特征图上做升维的效果肯定不如在未池化的特征图上做升维的效果好)

    当然,这样做会导致计算量增加,于是作者提出了另一种做法,如下图所示:

    • Inception Net V4

    论文链接:Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning, 发表时间:2016.02

    在 Inception-v4 中,作者将 Inception 和 ResNet 结合在一起,推出了 Inception-ResNet-v1,Inception-ResNet-v2,Inception-v4。其中,Inception-v4 的总体结构如上图所示,各个模块细节如下图所示。

    可以看得出来,Inception-v4 的结构设计非常复杂,需要大量的实验验证以及工程经验,一般只有大厂才有能力做这样的工作,这也是为什么最近 NAS 这么火的原因吧。

    • Xception

    论文链接:Xception: Deep Learning with Depthwise Separable Convolutions , 发表时间:2016.10

    在这篇论文中,Google 利用 Depthwise Separable Convolution 对 Inception V3 进行了改进,并结合 Residual Connection 设计了新的网络:Xception(含有 Extreme Inception 的意味)。

    作者在文章开头便指出 Inception Module 背后的思路是通过一系列操作使得模型的学习更加简单有效(分别单独学习通道之间的关系和空间关系),这意味着 Inception Module 假设通道之间的关系和空间关系是可以被分离开的(这个假设的一个变体就是 width-wise correlation and height-wise correlation,即 Inception V3 里的卷积核大小为 7×1 和 1×7 的卷积层)。接着,作者由 Inception V3 中的 Inception Module 进行演变,得到极端版本的 Inception Module,与 Depthwise Separable Convulotion 思路一致,如下图所示:

    作者指出 “extreme” version of Inception Module 与 Depthwise Separable Convolution 主要存在两点不同:

    • Depthwise Convolution 和 Pointwise Convolution 的顺序不同。不过,作者认为这一点并不重要。
    • 在 Inception Module 中,Depthwise Convolution 和 Pointwise Convolution 后都会接着 ReLU;而 Depthwise Separable Convolution 一般仅在 Pointwise Convolution 后接着 ReLU。作者认为这一点差异比较重要,并在后续的实验中进行了讨论(后面发现在 Pointwise Convolution 后接 ReLU/ELU,都不如中间不添加激活函数的表现效果)。

    最后,作者提出了新的网络:Xception(结合了 Inception Module, Residual Connection, Depthwise Seperable Convolution),网络结构如下所示:

    5. ResNet

    • Residual Network

    论文链接:Deep Residual Learning for Image Recognition,发表时间:2015.12

    2015 年,Kaiming He 提出了 ResNet(拿到了 2016 年 CVPR Best Paper Award),不仅解决了神经网络中的退化问题(Degrade Problem,即相较于浅层神经网络,深层神经网络的深度到达一定深度后,拟合能力反而更差,训练/测试误差更高),还在同年的 ILSVRC 和 COCO 竞赛横扫竞争对手,分别拿下分类、定位、检测、分割任务的第一名。(个人觉得,ResNet真的属于现象级论文,所提出的残差结构大幅提高了神经网络的拟合能力)

    网络结构:

    简单来说,Kaiming 在文中提出了残差结构(Residual Block,如上图左侧所示),使得原本所要拟合的函数 H ( x ) H(x) H(x),改为 F ( x ) F(x) F(x),其中, H ( x ) = F ( x ) + x H(x)=F(x)+x H(x)=F(x)+x。虽然在“多个非线性层可以拟合任意函数”这一假设下二者并无区别,但是 Kaiming 假设模型学习后者,将更容易进行优化与收敛。(在残差结构中,模型利用 Shorcut 进行 Identity Mapping,这样也解决了梯度消失现象)

    由于 Residual Block 并不需要额外的参数以及计算量,Kaiming 在文中以此做了多组对照实验,证明该网络结构的有效性(所用的两个 ResNet 为 ResNet-18 和 ResNet-34)。但是,若要将模型的深度继续不断增加,需要对其进行改进:将原先的 Residual Block(上图右侧所示,也被称作 Basic Block) 改进为 Bottleneck Block,减少模型的参数与计算量。

    其他细节:

    • 对训练数据进行数据增强:从 [256,480] 随机采样,作为图像最短边长度,进行宽高等比缩放;随机裁剪 224 * 224,并进行随机镜像翻转;并对所有训练图像的每个像素值进行统计,并减去该平均值。
    • 对测试数据使用 10-crop 测试方法。
    • ResNet 在非线性层后,激活函数前使用 Batch Normalization。

    PS: PyTorch 中的 TORCHVISION.MODELS 提供基于 ImageNet 训练好的 ResNet-18/ResNet-34/ResNet-50/ResNet-101/ResNet-152 模型,以及对应使用 Batch Normalization 的版本,分别将其加载到显存中占了 1007/1113/1179/1227/1443 MiB(训练与测试所占显存大小依赖于实验设置,故不做讨论)。

    • 关于 Residual Network 中 Identity Mapping 的讨论

    论文链接:Identity Mappings in Deep Residual Networks,发表时间:2016.03

    Kaiming 在这篇论文中对 ResNet 中的 Identity Mapping 进行了详细的讨论(前向传导、后向传导的分析),并且设计并尝试了多种不同的 Shortcut Connection 设计(如上图所示),并在最后对激活函数做了讨论,从而提出了新的 Residual Block(为与原版结构区分,Kaiming 称其为 full pre-activateion Residual Block)。

    我个人是比较喜欢这篇论文的,不仅对照实验设置的很详细,也对各类实验现象进行了分析,尤其是最后关于激活函数的讨论(到现在为止,这应该都还是开放问题,大家并没有一个统一的观点)。总的来说,Kaiming 在这篇论文中做出了两处改动:移除了 Short Connection 中的 ReLU,并将 Residual Mapping 中的 BN 和 ReLU 提前至对应的神经网络层前。

    PS: 阅读 PyTorch 所提供的源码,可以发现 PyTorch 中的 TORCHVISION.MODELS 所提供的 ResNet 模型,都是按照之前文章所述实现的,即 original Residual Block 版本。

    6. DenseNet

    论文链接:Densely Connected Convolutional Networks,发表时间:2016.08

    2016 年,DenseNet 横空出世,在当年也引起过热议。与 ResNet、Inception Net 不同,DenseNet 即没从网络的深度入手,也没从网络的宽度入手,而是对每层的 FeatureMap 进行特征复用,以此缓解梯度消失问题,加强网络中特征的传递,有效对特征进行复用,并在提高网络的表现效果的同时减少了网络的参数量

    在论文中,作者提出了一种网络结构:Dense Block(如下图所示)。在 Dense Block 中,每层卷积层的输入为在该 Block 中之前所有卷积层所输出的 FeatureMap 的 concation 结果 (此处与 ResNet 不同,ResNet 中将结果进行 add )。作者在文中指出,ResNet 成功的关键点在于:‘they create short paths from early layers to later laters’;作者认为自己之所以提出的 Dense Block 这样的结果,就是为了保证层与层之间的信息能最大程度的保存。

    网络结构:

    • DenseNet 与其他 CNN 类似,同样保留着 down-sampling layers 的设计,网络中包含四个 Dense Block 和四个 Transition Layer,分别处理不同 Size 的 FeatureMap / 对 FeatureMap 进行 Pooling 操作。
    • 根据 Identity Mappings in Deep Residual Networks,作者在 Dense Block 中将 BN 和 ReLU 设置在卷积层前面。由于 Dense Block 的特征复用操作,越后面的卷积层,其输入的 Channel 越大。故作者在 DenseNet 中引用了 Bottleneck Layer,即:BN-ReLU-Conv(1×1)-BN-ReLU-Conv(3×3),以此避免计算量的快速增长。(文中记使用 Bottleneck Layer 的 DesnseNet 为 DenseNet-B)
    • 作者还尝试在 Transition Layer 中对 FeatureMap 的 Channel 数量进行缩减,设输入的 FeatureMap 的 Channel 数为 m, θ \theta θ 为压缩因子,则输出的 FeatureMap 的 Channel 数为 ⌊ θ m ⌋ \lfloor \theta m \rfloor θm。(实验中,作者设置 θ \theta θ为0.5;,并记使用Bottleneck Layer 以及设置 Transition Layer 的 θ < 1 \theta < 1 θ<1 的 DesnseNet 为 DenseNet-BC)
    • 为保持特征复用的实现(即同意 DenseNet 中的所有 FeatureMap 大小一致),作者令 Dense Block 中的卷积层的卷积核大小为 3 × 3,padding 为 1,且采用zero-padding。

    PS: PyTorch 中的 TORCHVISION.MODELS 提供基于 ImageNet 训练好的 DenseNet-121/DenseNet-161/DenseNet-169/DenseNet-201 模型,分别将其加载到显存中占了 1115/1201/1135/1153 MiB(训练与测试所占显存大小依赖于实验设置,故不做讨论)。

    7. MobileNet

    • MobileNet V1

    论文链接:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications,发表时间:2017.04

    (关于 MobileNet 系列文章,可以参考我之前所写的一篇博文:[论文笔记] MobileNet 系列论文笔记,链接如下,虽然当时也是刚刚开始接触深度学习)

    2017年左右,神经网络模型轻量化已经逐渐引起人们的关注,常见的手段分为两种:设计轻量化网络模型以及对已经训练好的复杂网络进行压缩(比如:降低精度、剪枝等等)。此时,Google 提出了一个轻量化模型:MobileNet,成为后续人们常使用的 Baseline Model。

    在 MobileNet 中,作者利用 Depthwise Separable Convolution 设计了一个轻量化网络,并通过设置 Width Multiplier 和 Resolution Multiplier 这两个超参数方便用户根据需求任意更改网络宽度与输入分辨率大小,从而使得人们可以根据任务需要与实际场景对模型进行 latency 和 accuracy 的权衡。

    关于 Depthwise Separable Convolution:

    Depthwise Separable Convolution 其实是将 Standard Convolution 拆分成两个部分:Depthwise Convolution 和 Pointwise Convolution。

    其实这个概念不难理解,只需要看作者所提供的图就好了:

    原先的 Standard Convolution 中每个 Filter 的 shape 为 ( D k , D k , M ) (D_k,D_k,M) (Dk,Dk,M),其中 M M M 为所输入 Feature Map 的 channel 数。每个 Filter 在所输入的 Feature Map 上进行卷积,输出的 shape 为 ( D o u t , D o u t , 1 ) (D_{out},D_{out},1) (Dout,Dout,1),如果有 N N N 个 Fliter,则输出的 shape 为 ( D o u t , D o u t , N ) (D_{out},D_{out},N) (Dout,Dout,N)

    反观 Depthwise Separasble Convolution:在 Depthwise Convolution 阶段,每个 Depthwise Convolution Fliter 的 shape 为 ( D k , D k , 1 ) (D_k,D_k,1) (Dk,Dk,1),共有 M M M 个 Filer,则输出结果的 shape 为 ( D o u t , D o u t , M ) (D_{out},D{out},M) (Dout,Dout,M);接着在 Pointwise Convolution 阶段, 每个 Pointwise Convolution Filter 的 shape 为 ( 1 , 1 , M ) (1,1,M) (1,1,M),共有 N N N 个 Filter,则输出结果的 shape 为 ( D o u t , D o u t , N ) (D_{out},D_{out},N) (Dout,Dout,N)

    可以明显看出,Standard Convolution 所需参数为 D k ∗ D k ∗ M ∗ N D_k*D_k*M*N DkDkMN,而 Depthwise Separable Convolution 所需参数为 D k ∗ D k ∗ M + M ∗ N = M ∗ ( D k ∗ D k + N ) D_k*D_k*M + M*N = M*(D_k*D_k+N) DkDkM+MN=M(DkDk+N),与 Standard Convolution 相比,所减少的参数数量为 ( N − 1 ) ∗ D k ∗ D k − N (N-1)*D_k*D_k-N (N1)DkDkN

    作者在论文中,也分别对 Standard Convolution 和 Depthwise Separable Convolution 的计算代价做了对比:

    关于 Width Multiplier:

    作者在论文中提出,可以利用超参数 α \alpha α 控制 MobileNet 的通道数,使得输入 Feature Map 的 channel 数变为 α M \alpha M αM,输出 Feature Map 的 channel 数变为 α N \alpha N αN
    其中, α = 1 \alpha=1 α=1为 baseline MobileNet, α < 1 \alpha<1 α<1为 reduced MobileNet。

    关于 Resolution Multiplier:

    作者在论文中提出,可以利用超参数 ρ \rho ρ 控制 MobileNet 的 resolution。
    其中, ρ = 1 \rho=1 ρ=1为 baseline MobileNet, ρ < 1 \rho<1 ρ<1为 reduced MobileNet。

    • MobileNet V2

    论文链接:MobileNetV2: Inverted Residuals and Linear Bottlenecks,发表时间:2018.01

    2018年,Google 在 MobileNet 基础上提出了新的模型 MobileNet V2。其中,提出了新的结构 Inverted Residuals and Linear Bottlenecks,并利用MobileNet V2 实现分类/目标检测/语义分割多目标任务。

    关于 Inverted Residuals and Linear Bottlenecks:

    首先,先讲清楚什么是 Inverted Residuals and Linear Bottlenecks 结构:

    下图是 Residual Block 与 Invereted Residual Block 的区别,可以看到原先的 Residual block 是先降 Channel 再升 Channel 的,不过现在 Inverted Residual Block 却是先升 Channel 再降 Channel 的。

    其次是 Linear 的部分,作者在文中指出 ReLU 的使用将会使得 low-dimension channel tensor 产生崩塌,造成信息损失,故将最后的 ReLU6 去掉,直接进行线性输出。(关于 ReLU6:卷积之后通常会接一个ReLU非线性激活,在Mobile v1里面使用ReLU6,ReLU6就是普通的ReLU但是限制最大输出值为6(对输出值做clip),这是为了在移动端设备float16的低精度的时候,也能有很好的数值分辨率,如果对ReLU的激活范围不加限制,输出范围为0到正无穷,如果激活值非常大,分布在一个很大的范围内,则低精度的float16无法很好地精确描述如此大范围的数值,带来精度损失。)

    作者对于这部分做了详细的实验与推导,在此我尽量进行描述:

    作者首先提到 It has been long assumed that manifolds of interest in neural networks could be embedded in low-dimensional subspaces ,其次利用实验探究 ReLU 所带来的信息损失:

    他人见解:

    1. 这意味着,在较低维度的张量表示(兴趣流形)上进行ReLU等线性变换会有很大的信息损耗。因而本文提出使用线性变换替代Bottleneck的激活层,而在需要激活的卷积层中,使用较大的M使张量在进行激活前先扩张,整个单元的输入输出是低维张量,而中间的层则用较高维的张量。
    2. 用线性变换层替换channel数较少的层中的ReLU,这样做的理由是ReLU会对channel数低的张量造成较大的信息损耗。我个人的理解是ReLU会使负值置零,channel数较低时会有相对高的概率使某一维度的张量值全为0,即张量的维度减小了,而且这一过程无法恢复。张量维度的减小即意味着特征描述容量的下降。

    关于这部分我的理解比较肤浅,建议大家阅读论文,并查阅他人的见解:

    To summarize, we have highlighted two properties that are indicative of the requirement that the manifold of interest should lie in a low-dimensional subspace of the higher-dimensional activation space:

    1. If the manifold of interest remains non-zero volume after ReLU transformation, it corresponds to a linear transformation.
    2. ReLU is capable of preserving complete information about the input manifold, but only if the input manifold lies in a low-dimensional subspace of the input space.
    • MobileNet V3

    论文链接:Searching for MobileNetV3,发表时间:2019.05

    (还没看,之后有空再写)

    8. ShffuleNet

    • ShuffleNet V1

    论文链接:ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices,发表时间:2017.07

    2017年,Face++ 的张翔宇(跟 Kaiming 一起推出 ResNet)推出了 ShffuleNet(一种极高效的移动端卷积神经网络模型),其 Insight 是:许多 Basic Architecture (比如:Xception, ResNet) 在计算资源受限时,其性能将大幅下降,而这是由于其中包含大量的 1 ∗ 1 1*1 11 Convolution 所导致的。

    因此,在ShffuleNet中,作者利用 Group Convolution, Depthwise Separable Convolution 结合,提出 Pointwise Group Convolution 以避免大量 1 ∗ 1 1*1 11 Convoltuion,并利用 Channel Shuffle 缓解由 Group Convolution 带来的副作用,并在 Residual Block 的基础上进行网络结构设计,使得网络的计算量减少的同时,仍能保持较高的性能。

    网络结构:

    • Group Convolution and Channel Shffule

      关于 Group Convolution 的概念,最早应该是在 AlexNet 中所提出来的,用于解决当时 GPU 显存不够用的尴尬境地。不过,本篇论文中作者利用 Group Convolution 减少模型的计算量与参数量(关于 Group Convolution 的参数量与其他细节可以阅读:Group Convolution分组卷积,以及Depthwise Convolution和Global Depthwise Convolution)。为避免由于 Group Convolution 导致所学习特征较为局限(多个 Group Convolution 叠加,将导致某个输出channel仅仅来自输入channel的一小部分),作者引进 Channel Shuffle 操作(作者将 Channel Dimension 由 g ∗ n g * n gn reshape 为 ( g , n ) (g,n) (g,n),进行转置为 ( n , g ) (n,g) (n,g),并进行 flattening,以此完成 Channel Shuffle,使得该操作是可微分的)。

    • Depthwise Separable Convolution and Residual Connection

      作者利用 Depthwise Separable Convolution 对 Residual Block 进行改进,从而设计出 ShffuleNet Unit。其中,Pointwise Convolution 由于 Group Convolution 的缘故,需改为 Pointwise Group Convolution。作者还指出:之所以不在 Depthwise Convolution 后接 ReLU,是根据 Xception所述;使用 BN 与 ReLU 的方式,是模仿 ResNet 以及 Inception V2。(作者还提到,之所以只利用 Depthwise Convolution 处理 Bottleneck Feature Map,是因为 Depthwise Convolution 很难在移动端上有高效的实现,尽管理论上其参数量与计算量都较小 )

    • ShuffleNet Architecture
    • ShuffleNet V2

    论文链接:ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design,发表时间:2018.07

    近几年来,人们对如何设计高效的神经网络模型的讨论较为热烈,许多针对移动端设备使用的模型结构相继推出,如:MobileNet 系列模型, ShffuleNet 系列模型等等。人们都称这样的网络是“小”网络,衡量标准便是其参数量与运算量,但是这样的衡量标准是否精确呢?

    2018年,Face++ 对衡量模型复杂度的指标(如:FLOPs)进行讨论,提出应该使用更为直接的指标(如:运行速度),并应直接在目标平台上进行测试。此外,Face++ 还提出了四条关于高效网络设计的实用准则,并依据此提出了 ShffuleNet V2。

    在论文中,作者对 Xception, ShffuleNet V1/V2, MobileNet V2进行了详细测试:

    作者认为,之所以出现“运算量差不多的两个模型的速度却会差很多”这一现象,是因为许多影响运行速度的因素并不能通过运算量进行体现,如: Memory Access Cost (MAC) 和模型的并行化程度往往没被纳入考虑范围中,而且模型在不同的平台上的运行速度往往也不一样。

    关于高效网络设计的实用准则:

    • Equal channel width minimizes memory access cost (MAC).(卷积层输入、输出的通道数量一致可以减少 MAC)
    • Excessive group convolution increases MAC.(组卷积的分组数量的增加将导致 MAC 增加)
    • Network fragmentation reduces degree of parallelism.(网络过多的分支将影响其并行性能)
    • Element-wise operations are non-negligible.(元素级别的操作不应被忽略)

    ShffuleNet V2 网络结构:

    参考资料:

    在这里插入图片描述

    展开全文
  • 卷积神经网络发展历程及经典论文

    万次阅读 多人点赞 2019-05-01 23:28:51
    1980年日本学者福岛邦彦(Kunihiko Fukushima)提出的神经认知机模型(Neocognitron) Fukushima K, Miyake S. Neocognitron: A self-organizing neural network model for a mechanism of visual pattern ...

    2012年,AlexNet横空出世,以极大优势赢得了ImageNet 2012图像识别挑战赛的冠军,也引发研究人员对早期神经网络、卷积神经网络的思考和再研究。至此,卷积神经网络开始领衔掀起此轮人工智能浪潮。这篇文章将简要介绍卷积神经网络的发展历程以及其中涉及到的经典论文。

    涉及的论文已在以下仓库中分享:Awesome-CNN-Papers

    卷积神经网络的前身与早期发展

    这阶段的卷积神经网络发展为现代卷积神经网络的蓬勃发展提供了必要的理论基础。

    • 1980年日本学者福岛邦彦(Kunihiko Fukushima)提出神经认知机模型Neocognitron;福岛邦彦因此获得 2021 年度鲍尔奖「Bower Award and Prize for Achievement in Science」,获奖理由为:通过发明第一个深度卷积神经网络Neocognitron将神经科学原理应用于工程的开创性研究,这是对人工智能发展的关键贡献。
      Fukushima K, Miyake S. Neocognitron: A self-organizing neural network model for a mechanism of visual pattern recognition[M].Competition and cooperation in neural nets. Springer, Berlin, Heidelberg, 1982: 267-285.

    • 1989年Yann LeCun提出第一个真正意义上的CNN:LeNet 1989
      LeCun Y, Boser B, Denker J S, et al. Backpropagation applied to handwritten zip code recognition[J]. Neural computation, 1989, 1(4): 541-551.

    • 1998年Yann LeCun进一步介绍了LeNet(又称LeNet-5),影响力巨大。
      LeCun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11): 2278-2324.

    现代卷积神经网络的基本架构与经典模块的提出

    • 2012年ILSVRC(分类)冠军:AlexNet,掀起深度学习计算机视觉狂潮
      Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[C].Advances in neural information processing systems. 2012: 1097-1105.

    • 2013年ILSVRC(分类)冠军:ZFNet
      Zeiler M D, Fergus R. Visualizing and understanding convolutional networks[C].European conference on computer vision. Springer, Cham, 2014: 818-833.

    • 2014年ILSVRC(分类)冠军:GoogLeNet,提出Inception结构
      Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C]. Cvpr, 2015.

    • 2014年ILSVRC(分类)亚军:VGGNet,亮点是对网络深度的研究
      Simonyan K, Zisserman A. Very deep convolutional networks for large-scale image recognition[J]. arXiv preprint arXiv:1409.1556, 2014.

    • 2015年ILSVRC(分类)冠军:ResNet,提出Residual结构
      He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C].Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.

    • 2016年Google团队结合了Inception结构与Residual 结构,提出Inception-Residual Net
      Szegedy C, Ioffe S, Vanhoucke V, et al. Inception-v4, inception-resnet and the impact of residual connections on learning[C].AAAI. 2017, 4: 12.

    • 2016年何凯明提出新的ResNet的想法:Identity Mapping
      He K, Zhang X, Ren S, et al. Identity mappings in deep residual networks[C].European Conference on Computer Vision. Springer, Cham, 2016: 630-645.

    • 2017年DenseNet
      Huang G, Liu Z, Weinberger K Q, et al. Densely connected convolutional networks[C].Proceedings of the IEEE conference on computer vision and pattern recognition. 2017, 1(2): 3.

    卷积注意力机制的探索与完善

    • 2017年ILSVRC(分类)冠军:SENet(Squeeze-and-Excitation Networks),提出了Squeeze-and-Excitation Block,网络结合SE Block和Res Block
      Hu J, Shen L, Sun G. Squeeze-and-excitation networks[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 7132-7141.

    轻量级卷积神经网络的发展

    2016年以来,轻量级卷积神经网络的研究开始逐渐浮现,为视觉深度学习模型在移动设备上的应用提供条件。

    • 2016年MobileNet
      Howard A G, Zhu M, Chen B, et al. Mobilenets: Efficient convolutional neural networks for mobile vision applications[J]. arXiv preprint arXiv:1704.04861, 2017.

    • 2016年ShuffleNet
      Zhang X, Zhou X, Lin M, et al. Shufflenet: An extremely efficient convolutional neural network for mobile devices[J]. arXiv preprint arXiv:1707.01083, 2017.

    • 2016年Xception【注:Xception目标并不是使卷积神经网络轻量化,而是在不增加网络复杂度的情况下提升性能,但其中使用的depthwise convolution思想是MobileNet等轻量级卷积神经网络的关键,故也列在这里】
      Chollet F. Xception: Deep learning with depthwise separable convolutions[J]. arXiv preprint, 2017: 1610.02357.

    • 2016年ResNeXt【注:ResNeXt也是为了在不增加网络复杂度的情况下提升性能,列在此处的原因与Xception相同】
      Xie S, Girshick R, Dollár P, et al. Aggregated residual transformations for deep neural networks[C].Computer Vision and Pattern Recognition (CVPR), 2017 IEEE Conference on. IEEE, 2017: 5987-5995.

    • 2018年MobileNet V2
      Sandler M, Howard A, Zhu M, et al. Mobilenetv2: Inverted residuals and linear bottlenecks[C]//Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition. 2018: 4510-4520.

    • 2018年ESPNet【ESPNet这篇文章不是纯粹介绍CNN网络的,而是为语义分割任务设计的,但是其CNN网络也是轻量的。】
      Mehta S, Rastegari M, Caspi A, et al. Espnet: Efficient spatial pyramid of dilated convolutions for semantic segmentation[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 552-568.

    • 2018年ShuffleNet V2
      Ma N, Zhang X, Zheng H T, et al. Shufflenet v2: Practical guidelines for efficient cnn architecture design[C]//Proceedings of the European Conference on Computer Vision (ECCV). 2018: 116-131.

    • 2018年ESPNetV2
      Mehta S, Rastegari M, Shapiro L, et al. ESPNetv2: A Light-weight, Power Efficient, and General Purpose Convolutional Neural Network[J]. arXiv preprint arXiv:1811.11431, 2018.

    展开全文
  • AI与神经网络 人工智能已经发展了六七十年,经历了几度繁荣和衰落。虽然已取得不错的进展,但是与理想中的人工智能差距还是很大。 人工智能三大学派:符号学派、连接学派、行为学派。符号学派认为,任何能够将物理...
  • 2015)等都是遵循了传统CNN的层层堆砌的结构,其中VGG的改进是使用连续的几个3x3的卷积核代替AlexNet中的较大卷积核(11x11,7x7,5x5等),这样可以带来更深的非线性网络结构,便于学习更加复杂的模式,同时参数之...
  • 人工神经网络发展历程

    千次阅读 2014-03-05 18:36:23
    简要介绍人工神经网络发展五大历程,都是具有标志性的: (1)MP神经网络模型,由此开始 ,可以说神经网络始于 20世纪40年代 (2)Hebb规则,提出了人工神经网络的学习规则 (3)感知器模型,第一次将纯理论付诸...
  • 卷积神经网络发展历程

    千次阅读 2019-11-09 20:12:43
    卷积神经网络取得的第一个进步是AlexNet网络,它是在2012年提出的。这里有一些关键的改进:它提出了ReLu,也就是有助于防止消失的梯度问题;它也引入了dropout的概念,使得每层中神经元随机地打开和关闭,防止过拟合...
  • 人工智能与深度神经网络 深度神经网络,也被称为深度学习,是人工智能领域的重要分支,根据麦卡锡(人工智能之父)的定义,人工智能是创造像人一样的智能机械的科学工程。深度学习与人工智能的关系如图1所示: ...
  • 神经网络发展历史概述

    千次阅读 2021-08-20 17:21:48
    神经网络发展也经历了高潮和低谷,本文主要对其发展的几个关键节点进行简要说明,之后的文章会各阶段主要技术进行讲解。 第一阶段 1943年,美国神经生理学家Warren McCulloch和数学家Walter Pitts首次提出形式神经...
  • 图卷积神经网络(0)——发展历程

    千次阅读 2020-04-04 23:26:09
    视频来源:图神经网络在线研讨会2020 1. GNN在干什么 目前较火的CNN在欧式空间中已经表现出了强大的处理能力,其最大的特点在于平移不变性,这种特性能够很好的处理欧式空间的中的数据,但是, 图则是一类典型的非欧...
  • 神经网络发展过程

    千次阅读 2022-03-31 11:41:32
    神经网络发展大致经过五个阶段。 第一阶段:模型提出 在1943年,心理学家Warren McCulloch和数学家Walter Pitts和最早描述了一种理想化的人工神经网络,并构建了一种基于简单逻辑运算的计算机制。他们提出的神经...
  • “从样例中学习”、“在问题求解和规划中学习”、“通过观察和发现学习”、“从指令中学习” “归纳学习”、“类比学习”、“示教学习”...连接主义:感知机、神经网络、深度学习; 符号主义:决策树; 统计学习:SVM;
  • 人工智能发展史——卷积神经网络

    千次阅读 2021-12-29 18:18:24
    1、卷积神经网络发展史(convolutional neural networks,CNN) CNN是针对图像领域任务提出的神经网络,经历数代人的发展,在2012年之后大部分图像任务被CNN统治,例如图像分类,图像分割,目标检测,图像检索等 CNN...
  • 很好的文章!!!!! https://www.jiqizhixin.com/articles/2019-05-27-4 http://www.lunarnai.cn/2018/07/03/Brief_history_CNN/
  • CNN主要的经典结构包括:LeNet、AlexNet、ZFNet、VGG...LeNet是卷积神经网络的祖师爷LeCun在1998年提出,用于解决手写数字识别的视觉任务。自那时起,CNN的最基本的架构就定下来了:卷积层、池化层、全连接层。如今...
  • 来源:西电人工智能学院摘要:焦李成教授谈深度神经网络发展历程2018年11月18日下午,计算机科学与技术学部主任、人工智能学院焦李成教授在成都参加了由中国人工智能学会主办...
  • 神经网络发展历程

    千次阅读 2020-06-25 20:33:04
    第一代人工神经网络 1943年,心理学家Warren McCulloch和数理逻辑学家Walter Pitts在合作的《A logical calculus of the ideas immanent in nervous activity》论文中提出并给出了人工神经网络的概念及人工神经元的...
  • 随着ReLU和dropout的提出,以及GPU和大数据带来的历史机遇,CNN在2012年迎来了历史突破–AlexNet,从此CNN呈现爆炸式发展。  从此,Deep Learning一发不可收拾,ILSVRC每年都不断被Deep Learning刷榜,如图1所示,...
  • 卷积神经网络发展概览 一、早期探索LeNetAlexNetVGG二、深度化ResNetDenseNet三、模块化GoogLeNetInception V2Inception V3Inception V4ResNeXtXception四、注意力SENetscSECBAM五、高效化... 卷积神经网络的结构发展...
  • 神经网络发展

    千次阅读 2019-05-19 15:31:24
    简述神经网络发展的三起两落。
  • 经典CNN卷积神经网络发展

    千次阅读 2021-11-18 11:13:48
    本文详细介绍了CNN卷积神经网络的历史发展历程,以及详细分析了各阶段具有代表性的网络,如LeNet AlexNet VGG GoogLeNet ResNet等
  • 我的毕设做的是基于opencv和卷积神经网络的人脸识别项目。在做完这个项目之后,我一直想好好总结一下所学到的关于卷积神经网络的知识。现在趁着有点空闲,随手记录一点以前学过的,或者正在学习的知识点,相当于一个...
  • 为了更好地了解光子神经网络发展历程,把握当前光子神经网络的研究热点以及展望未来光子神经网络的发展方向,本文对光子前馈、循环以及脉冲神经网络的研究现状进行梳理,以阐释光子神经网络在实时训练、非线性运算、...
  • 神经网络发展历史

    万次阅读 多人点赞 2019-08-27 16:11:44
    深度学习 ... 深度学习算法最近变得越来越流行和越来越有用的算法,然而深度学习或者深度神经网络的成功得益于层出不穷的神经网络模型架构。这篇文章当中作者回顾了从 1998 年开始,近 18 年来...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,377
精华内容 3,350
关键字:

神经网络发展历程

友情链接: Nonhypotenuse-Numbers.c.zip