zoukankan      html  css  js  c++  java
  • 卷积神经网络——本质上是在利用卷积做特征压缩,然后再全连接

    原文:https://www.zybuluo.com/hanbingtao/note/485480 写得非常好,可以细读

    全连接网络 VS 卷积网络

    全连接神经网络之所以不太适合图像识别任务,主要有以下几个方面的问题:

    • 参数数量太多 考虑一个输入1000*1000像素的图片(一百万像素,现在已经不能算大图了),输入层有1000*1000=100万节点。假设第一个隐藏层有100个节点(这个数量并不多),那么仅这一层就有(1000*1000+1)*100=1亿参数,这实在是太多了!我们看到图像只扩大一点,参数数量就会多很多,因此它的扩展性很差。
    • 没有利用像素之间的位置信息 对于图像识别任务来说,每个像素和其周围像素的联系是比较紧密的,和离得很远的像素的联系可能就很小了。如果一个神经元和上一层所有神经元相连,那么就相当于对于一个像素来说,把图像的所有像素都等同看待,这不符合前面的假设。当我们完成每个连接权重的学习之后,最终可能会发现,有大量的权重,它们的值都是很小的(也就是这些连接其实无关紧要)。努力学习大量并不重要的权重,这样的学习必将是非常低效的。
    • 网络层数限制 我们知道网络层数越多其表达能力越强,但是通过梯度下降方法训练深度全连接神经网络很困难,因为全连接神经网络的梯度很难传递超过3层。因此,我们不可能得到一个很深的全连接神经网络,也就限制了它的能力。

    那么,卷积神经网络又是怎样解决这个问题的呢?主要有三个思路:

    • 局部连接 这个是最容易想到的,每个神经元不再和上一层的所有神经元相连,而只和一小部分神经元相连。这样就减少了很多参数。
    • 权值共享 一组连接可以共享同一个权重,而不是每个连接有一个不同的权重,这样又减少了很多参数。
    • 下采样 可以使用Pooling来减少每层的样本数,进一步减少参数数量,同时还可以提升模型的鲁棒性。

    对于图像识别任务来说,卷积神经网络通过尽可能保留重要的参数,去掉大量不重要的参数,来达到更好的学习效果。

    接下来,我们将详述卷积神经网络到底是何方神圣。

    卷积神经网络是啥

    首先,我们先获取一个感性认识,下图是一个卷积神经网络的示意图:

    图1 卷积神经网络

     

    网络架构

    如图1所示,一个卷积神经网络由若干卷积层、Pooling层、全连接层组成。你可以构建各种不同的卷积神经网络,它的常用架构模式为:

    INPUT -> [[CONV]*N -> POOL?]*M -> [FC]*K

    也就是N个卷积层叠加,然后(可选)叠加一个Pooling层,重复这个结构M次,最后叠加K个全连接层。

    对于图1展示的卷积神经网络:

    INPUT -> CONV -> POOL -> CONV -> POOL -> FC -> FC

    卷积神经网络输出值的计算

    卷积层输出值的计算

    我们用一个简单的例子来讲述如何计算卷积,然后,我们抽象出卷积层的一些重要概念和计算方法。

    假设有一个5*5的图像,使用一个3*3的filter进行卷积,想得到一个3*3的Feature Map,如下所示:

    为了清楚的描述卷积计算过程,我们首先对图像的每个像素进行编号,用表示图像的第行第列元素;对filter的每个权重进行编号,用表示第行第列权重,用表示filter的偏置项;对Feature Map的每个元素进行编号,用表示Feature Map的第行第列元素;用表示激活函数(这个例子选择relu函数作为激活函数)。

    例如,对于Feature Map左上角元素来说,其卷积计算方法为:

     

    计算结果如下图所示:

    下面的动画显示了整个Feature Map的计算过程:

    图2 卷积计算

    上面的计算过程中,步幅(stride)为1。步幅可以设为大于1的数。例如,当步幅为2时,Feature Map计算如下:

    Pooling层输出值的计算

    Pooling层主要的作用是下采样,通过去掉Feature Map中不重要的样本,进一步减少参数数量。Pooling的方法很多,最常用的是Max Pooling。Max Pooling实际上就是在n*n的样本中取最大值,作为采样后的样本值。下图是2*2 max pooling:

    除了Max Pooing之外,常用的还有Mean Pooling——取各样本的平均值。

    全连接层

    全连接层输出值的计算和上一篇文章零基础入门深度学习(3) - 神经网络和反向传播算法讲过的全连接神经网络是一样的,这里就不再赘述了。

     

    卷积神经网络的训练

    和全连接神经网络相比,卷积神经网络的训练要复杂一些。但训练的原理是一样的:利用链式求导计算损失函数对每个权重的偏导数(梯度),然后根据梯度下降公式更新权重。训练算法依然是反向传播算法。

     

  • 相关阅读:
    32.ExtJS简单的动画效果
    set、env、export差分
    【翻译】Why JavaScript Is and Will Continue to Be the First Choice of Programmers
    J2EE请求和响应—Servlet
    Leetcode: Spiral Matrix. Java
    Android正在使用Handler实现信息发布机制(一)
    Android开发工具综述,开发人员必备工具
    Android 从硬件到应用程序:一步一步爬上去 5 -- 在Frameworks蒂姆层硬件服务
    HDU 2828 DLX搜索
    2016第三周三
  • 原文地址:https://www.cnblogs.com/bonelee/p/7716284.html
Copyright © 2011-2022 走看看