深度学习每日一问:CNN

时间:2024-03-18 14:18:41

深度学习每日一问

CNN 定义

(百度百科中):CNN是一类包含卷积运算且具有深度结构的前馈神经网络(又叫MLP)
(花书中):CNN是指那些至少在网络的一层中使用卷积运算来代替一般矩阵乘法运算的神经网络

CNN是一种专门用来处理具有类似网格结构的数据的神经网络。
eg:例如时间序列数据(可以认为是在时间轴上有规律弟采样形成的一维网格,语音,文本等)、图像数据(可以看做二维的像素网格)

卷积运算

CNN即在网络中加入了卷积运算的前馈神经网络。卷积运算在我另一篇博客中什么是卷积中详细介绍了,需要的可以自行观看。

CNN的特点

卷积运算通过三个特点改变了机器学习系统:稀疏交互、参数共享、等变表示,而且,其可以处理大小可变的输入(全连接神经网络就不行)。下面依次分开介绍:

  1. 稀疏交互
    传统的神经网络,用矩阵乘法来建立输入与输出的关系。矩阵中,每一个参数就代表着一个输入单元和一个输出单元的交互。这也就意味着,一个输出单元要和所有的输入单元以不同权重连接交互(全连接)。这个如果用在处理图像上,需要一个非常巨大的参数量(不切实际,而且会导致过拟合)。

    而,卷积网络具有稀疏连接特性,其卷积核一般远小于输入特征图。
    注:通过卷积运算,浅层卷积层检测图像上一个小patch的局部特征,通过卷积层的叠加,深层的卷积层的感受野很大,可以间接地连接到大部分输入图像,捕捉建模更加高层的语义相关特征。
    深度学习每日一问:CNN

    卷积网络需要的计算量是非常少的(和全连接相比)。比如一个有m个输入和n个输出的网络,使用全连接的时间复杂度O(mn)O(m*n)。而使用卷积网络稀疏连接特性,一个输出单元只有k个输入单元决定,时间复杂度降到O(kn)O(k*n)

  2. 参数共享
    在传统的神经网络中,参数矩阵的每个参数权重,只作用在一个输入和输出连接之后就不再使用了。而,在卷积网络中,卷积核中每一个权重元素都会作用在输入图像上近乎全部的像素(取决于pad, stride,dilation),权重是共享使用的。这很大程度减少了模型的存储需求。

  3. 等变表示
    卷积网络因为参数共享的特性,具备一定的平移等变性。什么叫做等变,就是一个函数如果满足输入以某种形式改变,则输出也以同样的方法改变这一特性,就说这个函数时等变的,用函数方程表示就是:f(g(x))=g(f(x))f(g(x))=g(f(x)), 其中f(.)f(.)是原函数, g(x)g(x)是形变函数。
    CNN则可以保持对平移操作一定程度的等变性(注意是一定程度的平移不变性, 随着网络加深, pad的加入等,都会导致平移不变性的削弱,想要了解的可以看一下Siams RPN的分析)

卷积网络只是对平移保持一定的不变性,但是对于其他形变如(旋转、尺度缩放等)需要特定的tricks来解决。

数据类型

CNN可以处理的数据类型:
深度学习每日一问:CNN

个人理解

为什么说CNN是一种特殊的NN:
其实我们可以想象成,CNN输入和输出单元之间,也是全连接的,不过,通过一种无限强的先验设计,使得每个输出只和spatial 领域的输入连接权重有意义, 其他位置的连接都是0。而且,这个权重在层内不同输出神经元上是共享的。

平移不变性有用么:
这个需要根据任务而定,当任务需要一个宽泛的语义检测(图中时候存在一只猫),这时我们肯定希望无论猫出现在图像的哪里,CNN都能检测出来,此时就需要平移不变性。
但是,当任务需要精确的位置检测,比如,在多车道检测中,不同位置车道像素应该属于不同实例,因而产生不同的特征输出,但是平移不变性显然会影响我们的检测。

CNN是专门用来处理图像的网络:
显然是错的,CNN可以处理具有网格结构的输入数据(音频,文本,图像)。而,结构化数据,比如一个excel表格,给出多个特征属性,显然使用CNN将其同等对待是不太现实的。