精华内容
下载资源
问答
  • 人工智能中卷积神经网络基本原理综述

    万次阅读 多人点赞 2017-12-11 16:10:00
    人工智能Artificial Intelligence中卷积神经网络Convolutional Neural Network基本原理综述人工智能(Artificial Intelligence,简称AI)的Deep Learning(深度学习)通过机器学习,把某一层的输出output当做下一层...
    人工智能Artificial Intelligence中卷积神经网络Convolutional Neural Network基本原理综述


    人工智能(Artificial Intelligence,简称AI)的Deep Learning(深度学习)通过机器学习,把某一层的输出output当做下一层的输入input。在人工智能中,认为output是机器通过深度学习获得的某种“智慧”。深度学习(Deep Learning)通过神经网络把海量数据分组,然后形成组合分层结果,这样就形成了神经网络,通过层层的深度学习,最终获得理想的结果。人工智能的最终目的,是实现机器能够高效模拟人类大脑进行有效思考,在人类有挑战意义的领域,进化出超越人类认知和思考水平的人工智能。

    卷积神经网络(Convolutional Neural Network,简称CNN)基本结构和原理

    卷积神经网络是人工神经网络的一种,卷积神经网络是机器深度学习中的一种“前馈神经网络”,前馈是信号量的输入获得,到输出过程是往前方传导的,简言之信号是往前方传递的,所以称之为前馈。前馈用以神经网络的计算输出,不对神经网络调整,每一层中每一个神经元算出该层的输出并向下一层传递到输出层,进而计算出网络的输出结果。Back Propagation神经网络,即BP神经网络。反向传播训练神经网络权值和阈值的调整。网络前向传递计算输出结果时与正确结果存在误差,因此需要Back Propagation调整神经网络的前向计算过程。

    卷积神经网络本质上是一种输入到输出的映射网络,它能够学习大量的输入与输出之间的映射关系,而不需要任何输入和输出之间的精确的数学表达式,只要用已知的模式对卷积神经网络加以训练,神经网络就具有输入输出之间的映射能力。卷积神经网络执行的是有监督训练,所以其样本集是由形如:(输入向量,理想输出向量)的向量对构成。这些向量对,可以是从实际运行系统中采集来。在开始训练前,所有的权重都应该用一些不同的小随机数进行初始化。小随机数用来保证神经网络不会因权值过大而进入饱和状态,从而导致训练失败,权值不同用来保证神经网络可以正常地学习。事实上,如果用相同的权值去初始化矩阵,则神经网络无能力学习。

    卷积神经网络是一个多层的神经网络,每层由多个二维平面组成,而每个平面由多个独立神经元组成。卷积神经网络的神经元感知周围神经单元。


    图像通过和三个可训练的滤波器和可加偏置进行卷积,滤波过程如图,卷积后在C1层产生三个特征映射图,然后特征映射图中每组的四个像素再进行求和,加权值,加偏置,通过一个Sigmoid函数得到三个S2层的特征映射图。这些映射图再进入滤波器得到C3层。这个层级结构再和S2一样产生S4。最终,这些像素值被光栅化,并连接成一个向量输入到传统的神经网络,得到输出。
    C层为特征提取层,每个神经元的输入与前一层的局部感受器(探测器)相连,并提取该局部的特征,一旦该局部特征被提取后,它与其他特征间的位置关系也随之确定下来;S层是特征映射层,卷积神经网络的每个计算层由多个特征映射组成,每个特征映射为一个平面,平面上所有神经元的权值相等。卷积运算可以使原信号特征增强,并且降低噪音,这种特征提取结构在识别时对输入样本有较高的畸变容忍能力。
    卷积神经网络包含卷积层和池化层。卷积神经网络特征检测层通过数据训练进行学习,避免显示的特征提取,隐式地从训练数据中进行深度学习,同一特征映射面上的神经元权值相同,意味着可以并行训练学习。流行的分类方式多是基于统计特征,这意味着在进行分类前必须提取某些特征。然而,显式的特征提取并不容易,在一些实际问题中也并非总是可靠的。卷积神经网络,避免了显式的特征取样,隐式地从训练数据中进行学习。这使得卷积神经网络明显有别于其他基于神经网络的分类器,通过结构重组和减少权值将特征提取功能融合进多层感知器。

    最小化数据预处理:通过感受野和权值共享减少神经网络需要训练的参数个数

    卷积神经网络降低参数数量,目的是降低计算负荷压力。其中一个策略是局部感知,以图像识别为例,如果把一个1000 X 1000的图像作为输入参数,每个隐层神经元都连接感知图像的每一个像素点,如果全连接,那数据就太多,1000x1000x1000000=10^12,计算压力太大,所以要考虑一种有效的方式。局部感知可以解决这个问题,局部感知基于以下基本假设:人类的大脑在认知周围世界时候,是从局部到全局的。任一图像中,某一特定像素点和局部周围的像素关系紧密,而和较远距离的全局像素关系不是非常密切,即平面图像的空间联系是局部的。每一个神经元,没有必要对全局的像素点都要认知,一不必要,二是资源浪费。每一个神经元都无须对全局图像做感受,每个神经元只感受局部的图像,然后在更高层,这些感受到不同局部的神经元综合起来就可以得到全局信息。
    神经网络中的参数经过局部感知后,有些时候数据集可能仍然非常大。此时可以考虑第二种方案,权值共享。假设图像中有1000X1000=1000000(一百万)个像素点,经过处理,每个神经元100(卷积操作)个特征相同,那么此时要处理的1000000数据集问题就缩减为处理100的问题,数据量大大降低。局部感受野是10X10,隐层每个感受野只需要和这10X10的局部图像相连接,所以1百万个隐层神经元就只有一亿个连接,即10^8个参数。比原来降低四个0(数量级)。


    隐层的每一个神经元都连接10X10个像素点,即每一个神经元存在10 X 10=100个连接权值参数。如果每个神经元这100个参数是相同的呢?也就是说每个神经元用的是同一个卷积核去卷积图像。这样我们就只有100个参数,不管隐含层的神经元个数有多少,两层间的连接我只有100个参数,这就是卷积神经网络权值共享。
    权值共享降低了网络的复杂度,避免了特征提取和分类过程中模型重建开销。权值共享的方式:假设针对图像,设定100个提取(学习)特征,这100个提取特征与图像中的不同区域及位置没有关系,是打算要深度学习的特征。图像的一块(局部感受野)作为层级结构中最低层的输入,信号再依次传输到不同的层,每层通过一个数字滤波器(或探测器)去获取感知数据的最显著的特征。
    举例,假设从一个图像中取出8 X 8的像素样本中首先训练机器学习到的特征作为探测器,然后再回归到图像中的任一区域。举例,假设从图像中选取一小块8 X 8的区域,通过对8 X 8的小区域学习到的特征与1000 X 1000的图形做卷积,从而就得到该完整图像中任一位置的有价值的输出值,激活值。
    下图展示了3 X 3的卷积核在5 X 5的图像上做卷积的过程。每一次卷积均以固定的算式算出激活值,假设激活值越大越符合要求的条件,那么通过这种筛选方式就可以筛出需要的图像:




    卷积神经网络中的多核卷积

    实际的运用中,往往要多层卷积,多层卷积越往层级高的地方,特征越具有全局意义,单层卷积学习到的特征更多的是局部性特征。如果用100个参数时,只有一个10 X 10的卷积核,这样的特征提取是不充分的。这样只提取一种特征,现实中需要提取多种特征。假如一种滤波器,也就是一种卷积核,去提取图像的一种特征,比如某个方向边缘。那需要提取不同的特征,就需要加多几种滤波器(探测器)。所以当加到100种滤波器,每种滤波器的参数不一样,表示它提出输入图像的不同特征,例如不同的边缘。这样每种滤波器去卷积完整图像就得到对图像不同特征的映射Feature Map。因此100种卷积核就有100个Feature Map。这100个Feature Map就组成了一层神经元。100种卷积核乘以每种卷积核共享100个参数=100x100=10K,每一层也就是1万个参数。



    不同的颜色代表不同的卷积核,也即不同的颜色表达不同的滤波器,每一个卷积核算出的结果形成一幅全新的图像。
    再假设针对图像设定更多的卷积核,比如32个,这也就意味着可以学习32个特征。多个卷积核时候,32个卷积核,生成32幅图像。这32幅图可以认为是完整图像的不同通道。
    通过卷积算出特征后,开始利用特征进行分类,理论上可以用所有提取到的特征训练分拣器,但这里计算机要处理的数据太多太多。比如一个96 X 96像素图像,假设已经学习得到400个定义的8 X 8输入的特征,每一个特征和图像卷积都会得到一个 (96−8+1)×(96−8+1)=7921维的卷积特征,由于有 400 个特征,所以每个样例就会得到一个 7921 × 400 = 3,168,400 维的卷积特征向量。学习一个拥有超过三百多万特征输入的分类器任务量太大,并且容易出现过拟合 (over-fitting)。
    卷积后的特征值,在完整图像的不同区域极有可能仍然适用,因此为了描述一个大图像的特征,可以针对不同位置的特征进行聚合统计。比如可以计算图像中某一块区域的平均值(或者最大值),这些概略性的特征统计,第一可以大大降低需要计算的维度,第二还可以从一定程度上改善拟合结果。这种聚合的计算过程就叫做池化 (Pooling),或称之为平均池化或者最大池化 (依据计算池化的方式):

    展开全文
  • 卷积神经网络概念与原理

    万次阅读 多人点赞 2016-09-05 10:00:27
    一、卷积神经网络基本概念 受Hubel和Wiesel对猫视觉皮层电生理研究启发,有人提出卷积神经网络(CNN),Yann Lecun 最早将CNN用于手写数字识别并一直保持了其在该问题的霸主地位。近年来卷积神经网络在多个方向...

    一、卷积神经网络的基本概念

     

           受Hubel和Wiesel对猫视觉皮层电生理研究启发,有人提出卷积神经网络(CNN),Yann Lecun 最早将CNN用于手写数字识别并一直保持了其在该问题的霸主地位。近年来卷积神经网络在多个方向持续发力,在语音识别、人脸识别、通用物体识别、运动分析、自然语言处理甚至脑电波分析方面均有突破。

           卷积神经网络与普通神经网络的区别在于,卷积神经网络包含了一个由卷积层和子采样层构成的特征抽取器。在卷积神经网络的卷积层中,一个神经元只与部分邻层神经元连接。在CNN的一个卷积层中,通常包含若干个特征平面(featureMap),每个特征平面由一些矩形排列的的神经元组成,同一特征平面的神经元共享权值,这里共享的权值就是卷积核。卷积核一般以随机小数矩阵的形式初始化,在网络的训练过程中卷积核将学习得到合理的权值。共享权值(卷积核)带来的直接好处是减少网络各层之间的连接,同时又降低了过拟合的风险。子采样也叫做池化(pooling),通常有均值子采样(mean pooling)和最大值子采样(max pooling)两种形式。子采样可以看作一种特殊的卷积过程。卷积和子采样大大简化了模型复杂度,减少了模型的参数。

    二、卷积神经网络的应用场景

     

    三、卷积神经网络的原理

    3.1 神经网络

           首先介绍神经网络,这一步的详细可以参考资源1。简要介绍下。神经网络的每个单元如下:

    logistic

           其对应的公式如下:

    equal

           其中,该单元也可以被称作是Logistic回归模型。当将多个单元组合起来并具有分层结构时,就形成了神经网络模型。下图展示了一个具有一个隐含层的神经网络。

    equal

            其对应的公式如下:

    equal

           比较类似的,可以拓展到有2,3,4,5,…个隐含层。

           神经网络的训练方法也同Logistic类似,不过由于其多层性,还需要利用链式求导法则对隐含层的节点进行求导,即梯度下降+链式求导法则,专业名称为反向传播。关于训练算法,本文暂不涉及。

    3.2 卷积神经网络

           受Hubel和Wiesel对猫视觉皮层电生理研究启发,有人提出卷积神经网络(CNN),Yann Lecun 最早将CNN用于手写数字识别并一直保持了其在该问题的霸主地位。近年来卷积神经网络在多个方向持续发力,在语音识别、人脸识别、通用物体识别、运动分析、自然语言处理甚至脑电波分析方面均有突破。

           卷积神经网络与普通神经网络的区别在于,卷积神经网络包含了一个由卷积层和子采样层构成的特征抽取器。在卷积神经网络的卷积层中,一个神经元只与部分邻层神经元连接。在CNN的一个卷积层中,通常包含若干个特征平面(featureMap),每个特征平面由一些矩形排列的的神经元组成,同一特征平面的神经元共享权值,这里共享的权值就是卷积核。卷积核一般以随机小数矩阵的形式初始化,在网络的训练过程中卷积核将学习得到合理的权值。共享权值(卷积核)带来的直接好处是减少网络各层之间的连接,同时又降低了过拟合的风险。子采样也叫做池化(pooling),通常有均值子采样(mean pooling)和最大值子采样(max pooling)两种形式。子采样可以看作一种特殊的卷积过程。卷积和子采样大大简化了模型复杂度,减少了模型的参数。卷积神经网络的基本结构如图所示:

     

           卷积神经网络由三部分构成。第一部分是输入层。第二部分由n个卷积层和池化层的组合组成。第三部分由一个全连结的多层感知机分类器构成。

    3.2.1局部感受野

           卷积神经网络有两种神器可以降低参数数目,第一种神器叫做局部感知野。一般认为人对外界的认知是从局部到全局的,而图像的空间联系也是局部的像素联系较为紧密,而距离较远的像素相关性则较弱。因而,每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知,然后在更高层将局部的信息综合起来就得到了全局的信息。网络部分连通的思想,也是受启发于生物学里面的视觉系统结构。视觉皮层的神经元就是局部接受信息的(即这些神经元只响应某些特定区域的刺激)。如下图所示:左图为全连接,右图为局部连接。

    equal

            在上右图中,假如每个神经元只和10×10个像素值相连,那么权值数据为1000000×100个参数,减少为原来的万分之一。而那10×10个像素值对应的10×10个参数,其实就相当于卷积操作。

    3.2.3 权值共享

           但其实这样的话参数仍然过多,那么就启动第二级神器,即权值共享。在上面的局部连接中,每个神经元都对应100个参数,一共1000000个神经元,如果这1000000个神经元的100个参数都是相等的,那么参数数目就变为100了。

           怎么理解权值共享呢?我们可以这100个参数(也就是卷积操作)看成是提取特征的方式,该方式与位置无关。这其中隐含的原理则是:图像的一部分的统计特性与其他部分是一样的。这也意味着我们在这一部分学习的特征也能用在另一部分上,所以对于这个图像上的所有位置,我们都能使用同样的学习特征。

           更直观一些,当从一个大尺寸图像中随机选取一小块,比如说 8x8 作为样本,并且从这个小块样本中学习到了一些特征,这时我们可以把从这个 8x8 样本中学习到的特征作为探测器,应用到这个图像的任意地方中去。特别是,我们可以用从 8x8 样本中所学习到的特征跟原本的大尺寸图像作卷积,从而对这个大尺寸图像上的任一位置获得一个不同特征的激活值。

           如下图所示,展示了一个3×3的卷积核在5×5的图像上做卷积的过程。每个卷积都是一种特征提取方式,就像一个筛子,将图像中符合条件(激活值越大越符合条件)的部分筛选出来。

    equal

    3.2.4 多卷积核

           上面所述只有100个参数时,表明只有1个10*10的卷积核,显然,特征提取是不充分的,我们可以添加多个卷积核,比如32个卷积核,可以学习32种特征。在有多个卷积核时,如下图所示:

    equal

           上图右,不同颜色表明不同的卷积核。每个卷积核都会将图像生成为另一幅图像。比如两个卷积核就可以将生成两幅图像,这两幅图像可以看做是一张图像的不同的通道。如下图所示,下图有个小错误,即将w1改为w0,w2改为w1即可。下文中仍以w1和w2称呼它们。

          下图展示了在四个通道上的卷积操作,有两个卷积核,生成两个通道。其中需要注意的是,四个通道上每个通道对应一个卷积核,先将w2忽略,只看w1,那么在w1的某位置(i,j)处的值,是由四个通道上(i,j)处的卷积结果相加然后再取激活函数值得到的。

    equal

    equal

           所以,在上图由4个通道卷积得到2个通道的过程中,参数的数目为4×2×2×2个,其中4表示4个通道,第一个2表示生成2个通道,最后的2×2表示卷积核大小。

    3.2.5 Down-pooling

           在通过卷积获得了特征 (features) 之后,下一步我们希望利用这些特征去做分类。理论上讲,人们可以用所有提取得到的特征去训练分类器,例如 softmax 分类器,但这样做面临计算量的挑战。例如:对于一个 96X96 像素的图像,假设我们已经学习得到了400个定义在8X8输入上的特征,每一个特征和图像卷积都会得到一个 (96 − 8 + 1) × (96 − 8 + 1) = 7921 维的卷积特征,由于有 400 个特征,所以每个样例 (example) 都会得到一个 7921 × 400 = 3,168,400 维的卷积特征向量。学习一个拥有超过 3 百万特征输入的分类器十分不便,并且容易出现过拟合 (over-fitting)。

           为了解决这个问题,首先回忆一下,我们之所以决定使用卷积后的特征是因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。因此,为了描述大的图像,一个很自然的想法就是对不同位置的特征进行聚合统计,例如,人们可以计算图像一个区域上的某个特定特征的平均值 (或最大值)。这些概要统计特征不仅具有低得多的维度 (相比使用所有提取得到的特征),同时还会改善结果(不容易过拟合)。这种聚合的操作就叫做池化 (pooling),有时也称为平均池化或者最大池化 (取决于计算池化的方法)。

    equal

            

           子采样有两种形式,一种是均值子采样(mean-pooling),一种是最大值子采样(max-pooling)。两种子采样看成特殊的卷积过程,如图下图所示:

           (1)均值子采样的卷积核中每个权重都是0.25,卷积核在原图inputX上的滑动的步长为2。均值子采样的效果相当于把原图模糊缩减至原来的1/4。

           (2)最大值子采样的卷积核中各权重值中只有一个为1,其余均为0,卷积核中为1的位置对应inputX被卷积核覆盖部分值最大的位置。卷积核在原图inputX上的滑动步长为2。最大值子采样的效果是把原图缩减至原来的1/4,并保留每个2*2区域的最强输入。

            至此,卷积神经网络的基本结构和原理已经阐述完毕。

     

    3.2.6 多卷积层

     

     

           在实际应用中,往往使用多层卷积,然后再使用全连接层进行训练,多层卷积的目的是一层卷积学到的特征往往是局部的,层数越高,学到的特征就越全局化。

    四、卷积神经网络的训练

          本文的主要目的是介绍CNN参数在使用bp算法时该怎么训练,毕竟CNN中有卷积层和下采样层,虽然和MLP的bp算法本质上相同,但形式上还是有些区别的,很显然在完成CNN反向传播前了解bp算法是必须的。

    4.1 Forward前向传播

     

           前向过程的卷积为典型valid的卷积过程,即卷积核kernalW覆盖在输入图inputX上,对应位置求积再求和得到一个值并赋给输出图OutputY对应的位置。每次卷积核在inputX上移动一个位置,从上到下从左到右交叠覆盖一遍之后得到输出矩阵outputY(如图4.1与图4.3所示)。如果卷积核的输入图inputX为Mx*Nx大小,卷积核为Mw*Nw大小,那么输出图Y为(Mx-Mw+1)*(Nx-Nw+1)大小。

     

    4.2 BackForward反向传播

           在错误信号反向传播过程中,先按照神经网络的错误反传方式得到尾部分类器中各神经元的错误信号,然后错误信号由分类器向前面的特征抽取器传播。错误信号从子采样层的特征图(subFeatureMap)往前面卷积层的特征图(featureMap)传播要通过一次full卷积过程来完成。这里的卷积和上一节卷积的略有区别。如果卷积核kernalW的长度为Mw*Mw的方阵,那么subFeatureMap的错误信号矩阵Q_err需要上下左右各拓展Mw-1行或列,与此同时卷积核自身旋转180度。subFeatureMap的错误信号矩阵P_err等于featureMap的误差矩阵Q_err卷积旋转180度的卷积核W_rot180。

           下图错误信号矩阵Q_err中的A,它的产生是P中左上2*2小方块导致的,该2*2的小方块的对A的责任正好可以用卷积核W表示,错误信号A通过卷积核将错误信号加权传递到与错误信号量为A的神经元所相连的神经元a、b、d、e中,所以在下图中的P_err左上角的2*2位置错误值包含A、2A、3A、4A。同理,我们可以论证错误信号B、C、D的反向传播过程。综上所述,错误信号反向传播过程可以用下图中的卷积过程表示。

     

    4.3 权值更新过程中的卷积

           卷积神经网络中卷积层的权重更新过程本质是卷积核的更新过程。由神经网络的权重修改策略我们知道一条连接权重的更新量为该条连接的前层神经元的兴奋输出乘以后层神经元的输入错误信号,卷积核的更新也是按照这个规律来进行。

     

           在前向卷积过程中,卷积核的每个元素(链接权重)被使用过四次,所以卷积核每个元素的产生四个更新量。把前向卷积过程当做切割小图进行多个神经网络训练过程,我们得到四个4*1的神经网络的前层兴奋输入和后层输入错误信号,如图所示。

     

            根据神经网络的权重修改策略,我们可以算出如图所示卷积核的更新量W_delta。权重更新量W_delta可由P_out和Q_err卷积得到,如图下图所示。

    五、常见网络结构

     

    5.1 ImageNet-2010网络结构

    ImageNet LSVRC是一个图片分类的比赛,其训练集包括127W+张图片,验证集有5W张图片,测试集有15W张图片。本文截取2010年Alex Krizhevsky的CNN结构进行说明,该结构在2010年取得冠军,top-5错误率为15.3%。值得一提的是,在今年的ImageNet LSVRC比赛中,取得冠军的GoogNet已经达到了top-5错误率6.67%。可见,深度学习的提升空间还很巨大。

    下图即为Alex的CNN结构图。需要注意的是,该模型采用了2-GPU并行结构,即第1、2、4、5卷积层都是将模型参数分为2部分进行训练的。在这里,更进一步,并行结构分为数据并行与模型并行。数据并行是指在不同的GPU上,模型结构相同,但将训练数据进行切分,分别训练得到不同的模型,然后再将模型进行融合。而模型并行则是,将若干层的模型参数进行切分,不同的GPU上使用相同的数据进行训练,得到的结果直接连接作为下一层的输入。

    equal

    上图模型的基本参数为:
    
    • 输入:224×224大小的图片,3通道
    • 第一层卷积:11×11大小的卷积核96个,每个GPU上48个。
    • 第一层max-pooling:2×2的核。
    • 第二层卷积:5×5卷积核256个,每个GPU上128个。
    • 第二层max-pooling:2×2的核。
    • 第三层卷积:与上一层是全连接,3*3的卷积核384个。分到两个GPU上个192个。
    • 第四层卷积:3×3的卷积核384个,两个GPU各192个。该层与上一层连接没有经过pooling层。
    • 第五层卷积:3×3的卷积核256个,两个GPU上个128个。
    • 第五层max-pooling:2×2的核。
    • 第一层全连接:4096维,将第五层max-pooling的输出连接成为一个一维向量,作为该层的输入。
    • 第二层全连接:4096维
    • Softmax层:输出为1000,输出的每一维都是图片属于该类别的概率。

    5.2 DeepID网络结构

            DeepID网络结构是香港中文大学的Sun Yi开发出来用来学习人脸特征的卷积神经网络。每张输入的人脸被表示为160维的向量,学习到的向量经过其他模型进行分类,在人脸验证试验上得到了97.45%的正确率,更进一步的,原作者改进了CNN,又得到了99.15%的正确率。

    如下图所示,该结构与ImageNet的具体参数类似,所以只解释一下不同的部分吧。

    equal

           上图中的结构,在最后只有一层全连接层,然后就是softmax层了。论文中就是以该全连接层作为图像的表示。在全连接层,以第四层卷积和第三层max-pooling的输出作为全连接层的输入,这样可以学习到局部的和全局的特征。

     

     

     

     

    参考资源

    • [1] http://deeplearning.stanford.edu/wiki/index.php/UFLDL%E6%95%99%E7%A8%8B 栀子花对Stanford深度学习研究团队的深度学习教程的翻译
    • [2] http://blog.csdn.net/zouxy09/article/details/14222605 csdn博主zouxy09深度学习教程系列
    • [3] http://deeplearning.net/tutorial/ theano实现deep learning
    • [4] Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[C]//Advances in neural information processing systems. 2012: 1097-1105.
    • [5] Sun Y, Wang X, Tang X. Deep learning face representation from predicting 10,000 classes[C]//Computer Vision and Pattern Recognition (CVPR), 2014 IEEE Conference on. IEEE, 2014: 1891-1898.
    • [6] http://blog.csdn.net/stdcoutzyx/article/details/41596663
     
     
    展开全文
  • 卷积神经网络的应用:卷积神经网络使用卷积提取图像的特征来进行图像的分类和识别 分类 相似图像搜索 目标识别 语义分割 卷积神经网络与神经网络的形状对...

    卷积神经网络的应用:
    卷积神经网络使用卷积提取图像的特征来进行图像的分类和识别
             

         

                       分类                        相似图像搜索                                  目标识别                               语义分割

     

    卷积神经网络与神经网络的形状对比, 卷积是有厚度的

    卷积在提取特征时的图像变化,从刚开始较低水平的特征图,到最后较高水平的特征图的变化,原先提取的是图片的特征,后面提取到的是一些高级的分类特征

     

    1. 卷积的实际计算过程:假设样本的维度为N, C, H, W, 卷积的维度为F, C, H, W,   F表示有几个卷积核, C表示卷积的通道,每一个卷积都与每个特征图做一次卷积操作,即对应位置相乘操作,因此样本的通道和卷积的通道必须是相同的,最后将3个通道相乘的结果,进行加和,最后加上一个b,获得一个特征图, 卷积后的维度等于N, F, H, W

       

                             第一次卷积                                                    向右移动一个stride

    代码:

      # 将C通道分别进行相乘,和最后的相加操作,再加上一个b值,作为最后的输出
     out[i, f, j, k] = np.sum(x_pad[i, :, j*s:j*s+HH, k*s:k*s+WW] * w[f]) + b[f]

     

    2.  卷积的参数共享: 卷积的操作共享表示的是,对于一个特征图的卷积,只使用一个卷积核进行卷积,因此降低了参数的数量

    3. 卷积后的维度计算, 卷积后的维度,第一个维度:参与卷积样本的数目N, 第二个参数F,表示卷积核的个数,

    第三个参数: H_new = int(H-HH + 2*pad) / stride + 1, 第四个参数:W_new = int(W-WW + 2*pad) / stride + 1, 特征图维度W,卷积核维度WW, pad表示补零的层数,stride表示卷积核每次移动的步长

     

    代码:

    # 进行卷积后的H和W的维度计算
     H_new = int((H - HH + 2*pad) / stride + 1)
     W_new = int((W - WW + 2*pad) / stride + 1)

     

    4.pool池化操作, 为了在后续的操作中,可以更好的提取特征,因此压缩了矩阵的维度,池化操作分为两种:最大值池化和均值池化, 选择选框中最大的数作为池化的结果

       

                                    池化操作                                                                         最大值池化

    代码:

     # 将图像上卷积区域的最大值,赋值给池化后的数据
       out[i, c, j, k] = np.max(x[i, c, j*s:j*s+HH, k*s:k*s+WW])

     

    5.图像卷积的流程: 下图的卷积的流程:卷积-relu激活-卷积-relu激活-池化... 池化-全连接(进行图像的类别预测)

    6.  卷积的反向传播 , 卷积的反向传播,分为dx, dw, db

    对于dx = dout * w, dw = dout * x , db += dout  进行加和

    代码:

     # 获得前向传播的x
      windows = x_pad[i, :, j*s:j*s+HH, k*s:k*s+WW]
     # dw[f] = dout[i, f, j, k] * x 
      dw[f] += dout[i, f, j, k] * windows
     # dx = dout * w 
      dx[i, :, j*s:j*s+HH, k*s:k*s+WW] += dout[i, f, j, k] * w[f]
     # db[f] += dout[i, f, j, k] 
      db[f] += dout[i, f, j, k]

    7. 池化的反向传播

    获得前向传播的X, 构造(X == dout(i, f, j, k)) * dout(i, f, j, k),显示出[0, 0, 0, 6] 这样的矩阵

    代码:

      # 生成[[false, false],[false, True]]
        window = (np.array(x[i, c, j*s:j*s+HH, k*s:k*s+WW]) == dout[i, c, j, k])
      # [[false, false],[false, True]] * dout[i, c, j, k] = [[0, 0], [0, dout[i, c, j, k]]
        out[i, c, j*s:j*s+HH, k*s:k*s+WW] = window * dout[i, c, j, k]

     

    转载于:https://www.cnblogs.com/my-love-is-python/p/10511345.html

    展开全文
  • 卷积神经网络CNN基本原理详解

    万次阅读 多人点赞 2018-03-13 00:01:24
    卷积神经网络(Convolutional Neural Network,简称CNN),是一种前馈神经网络,人工神经元可以响应周围单元,可以进行大型图像处理。卷积神经网络包括卷积层和池化层。

    CNN基本原理详解

           卷积神经网络(Convolutional Neural Network,简称CNN),是一种前馈神经网络,人工神经元可以响应周围单元,可以进行大型图像处理。卷积神经网络包括卷积层和池化层。
           卷积神经网络是受到生物思考方式启发的MLPs(多层感知器),它有着不同的类别层次,并且各层的工作方式和作用也不同。这里提供一个较好的CNN教程(http://cs231n.github.io/convolutional-networks/)。文章中详细介绍了CNN的计算方式和数据的流动过程,这里只做简单的介绍。

    传统神经网络如下图所示

    传统神经网络

    CNN网络结构

    CNN网络结构

    如图所示,CNN网络工作时,会伴随着卷积并且不断转换着这些卷积。

    Keras–基于python的深度学习框架

           Keras是一个高层神经网络API,Keras由纯Python编写而成并基Tensorflow、Theano以及CNTK后端。Keras 为支持快速实验而生,能够把你的idea迅速转换为结果,如果你有如下需求,请选择Keras:

    • 简易和快速的原型设计(keras具有高度模块化,极简,和可扩充特性)
    • 支持CNN和RNN,或二者的结合
    • 无缝CPU和GPU切换
      keras适用于python:2.7-3.6
      安装需要执行:
      pip install keras
      即可。

    CNN基本原理

    <注>:本文主要介绍CNN的基本原理,不会细说传统神经网络和神经元的知识,假定你已经了解这些。

    1 CNN网络层级结构
    CNN网络一共有5个层级结构:

    • 输入层
    • 卷积层
    • 激活层
    • 池化层
    • 全连接FC层

    输入层

           与传统神经网络/机器学习一样,模型需要输入的进行预处理操作,常见的3中预处理方式有:

    • 去均值
    • 归一化
    • PCA/SVD降维等

    卷积层

           局部感知:人的大脑识别图片的过程中,并不是一下子整张图同时识别,而是对于图片中的每一个特征首先局部感知,然后更高层次对局部进行综合操作,从而得到全局信息。
           卷积层使用“**卷积核”**进行局部感知。举个例子来讲,一个32×32×3的RGB图经过一层5×5×3的卷积后变成了一个28×28×1的特征图,那么输入层共有32×32×3=3072个神经元,第一层隐层会有28×28=784个神经元,这784个神经元对原输入层的神经元只是局部连接,如下图所示:

    CNN卷积层示意
           通过局部感知特性,大大减少了模型的计算参数。但是仅仅这样还是依然会有很多参数。这就有了权值共享机制:
           在上面的局部感知中,假设有1m的隐层神经元,每个神经元1010的连接,这样就会有1m10*10个参数。实际上,对于每一层来讲,所有神经元对应的权值应该是相等的,也就是说,第一个神经元的参数向量为[w1,w2,…,w100],那么其他同层的神经元也是[w1,w2,…,w100],这就是权值共享。
           为什么需要权值共享呢?同一层下的神经元的连接参数只与特征提取的有关,而与具体的位置无关,因此可以保证同一层中所有位置的连接是权值共享的。例如:第一层隐层是一般用边缘检测,第二层是对第一层学到的边缘曲线组合得到一些特征,比如:角度、线形等;第三层会学到更加复杂的特征,比如:眼睛、眉毛等。对于同一层来说,他们提取特征的方式是一样的,第三层的神经元都是用来提取“眼睛”的特征,因此,需要计算的参数是一样的。

    卷积计算示例

    激励层

    所谓激励,实际上是对卷积层的输出结果做一次非线性映射。
    如果不用激励函数(其实就相当于激励函数是f(x)=x),这种情况下,每一层的输出都是上一层输入的线性函数。容易得出,无论有多少神经网络层,输出都是输入的线性组合,与没有隐层的效果是一样的,这就是最原始的感知机了。
    常用的激励函数有:

    • Sigmoid函数
    • Tanh函数
    • ReLU
    • Leaky ReLU
    • ELU
    • Maxout
      激励层建议:首先ReLU,因为迭代速度快,但是有可能效果不加。如果ReLU失效的情况下,考虑使用Leaky ReLU或者Maxout,此时一般情况都可以解决。Tanh函数在文本和音频处理有比较好的效果。

    池化层

    池化(Pooling):也称为欠采样下采样。主要用于特征降维,压缩数据和参数的数量,减小过拟合,同时提高模型的容错性。主要有:

    • Max Pooling:最大池化
    • Average Pooling:平均池化

    最大池化示意图
    通过池化层,使得原本44的特征图压缩成了22,从而降低了特征维度。

    Pooling操作
    虽然人不太容易分辨出池化后的特征图,但是没关系,机器还是可以识别的。

    输出层

    经过前面若干次卷积+激励+池化后,终于来到了输出层,模型会将学到的一个高质量的特征图片全连接层。其实在全连接层之前,如果神经元数目过大,学习能力强,有可能出现过拟合。因此,可以引入dropout操作,来随机删除神经网络中的部分神经元,来解决此问题。还可以进行局部归一化(LRN)、数据增强等操作,来增加鲁棒性,这里不做介绍。
    当来到了全连接层之后,可以理解为一个简单的多分类神经网络(如:BP神经网络),通过softmax函数得到最终的输出。整个模型训练完毕。
    下图展示了一个含有多个卷积层+激励层+池化层的过程:

    CNN完整过程示意图

    展开全文
  • 目录 1.三个性质 1.1局部性 ...3.卷积神经网络基本形式 4.补充 4.1小滤波器的有效性 4.2网络的尺寸设计   卷积神经网络于1998年由Yann Lecun提出,卷积网络用于处理计算机图像。图像分类是...
  • 卷积神经网络工作原理基本的四步) 以下截图转载自: https://www.youtube.com/watch?v=FmpDIaiMIeA&index=3&list=PLVZqlMpoM6kbaeySxhdtgQPFEC5nV7Faa 如有侵权,请告知,删除就是。 一 :识别 前提:...
  • 卷积神经网络CNN原理详解(一)——基本原理 为什么要用神经网络? 特征提取的高效性。 大家可能会疑惑,对于同一个分类任务,我们可以用机器学习的算法来做,为什么要用神经网络呢?大家回顾一下,一个分类任务,我们...
  • 卷积神经网络之一:基本原理

    千次阅读 2015-07-05 14:24:53
    卷积神经网络基本原理,卷积与池化过程的实例理解
  • 如果不了解基本原理的,可以先看看上篇文章:【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理 卷积神经网络的前向传播 首先我们来看一个最简单的卷积神经网络: 1.输入层---->卷积层 以上一节的例子为...
  • 卷积神经网络CNN原理——结合实例matlab实现

    万次阅读 多人点赞 2016-10-22 21:32:00
    卷积神经网络CNN是深度学习的一个重要组成部分,由于其优异的学习性能(尤其是对图片的识别)。近年来研究异常火爆,出现了很多模型LeNet、Alex net、ZF net等等。由于大多高校在校生使用matlab比较多,而网上的教程...
  • 卷积神经网络基本原理 什么是卷积运算 数学上的卷积 数学上,我们通常用反褶和乘积运算定义卷积: f(t)=f1(t)∗f2(t)=∫−∞+∞f1(τ)f2(t−τ)dτ f(t)=f_1(t)*f_2(t)=\int_{-\infty}^{+\infty}f_1(\tau)f_2(t-\...
  • 详细解释卷积神经网络CNN的原理和一些基本概念
  • 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理  上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度。有的同学表示不是很理解原理,为什么传统的...
  • http://www.elecfans.com/d/691826.html 你会回来赞我的。 其他: 视频:http://www.iqiyi.com/paopao/u/1218440663/video/
  • 有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可以识别手写数字,我们要采用卷积神经网络CNN来进行别呢?CNN到底是怎么识别的?用CNN有哪些优势呢?我们下面就来简单分析...
  • 有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可以识别手写数字,我们要采用卷积神经网络CNN来进行别呢?CNN到底是怎么识别的?用CNN有哪些优势呢?我们下面就来简单分析...
  • 神经网络的预备知识  为什么要用神经网络? 特征提取的高效性。  大家可能会疑惑,对于同一个分类任务,我们可以用机器学习的算法来做,为什么要用神经网络呢?大家回顾一下,一个分类任务,我们在用机器学习...
  • 本文为【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理(2) 从上文的计算中我们可以看到,同一层的神经元可以共享卷积核,那么对于高位数据的处理将会变得非常简单。并且使用卷积核后图片的尺寸变小,...
  • 最近在学习卷积神经网络,今天花了一天终于大致搞懂了它的基本原理,在这里作一个总结,并推荐几篇我觉得讲得很好的文章。 卷积神经网络是什么,为什么用它 众所周知卷积神经网络(CNN)在处理图像问题上有很好的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 666
精华内容 266
关键字:

卷积神经网络基本原理