第九章 卷积网络
卷积网络(convolutional network),也叫作卷积神经网络
(convolutional neural network,CNN),是一种专门用来处理具有类似网格结构的数据的神经网络。
卷积网络提供了一种方法来特化神经网络,使其能够处理具有清楚的网格结构拓扑的数据,以及将这样的模型扩展到非常大的规模。 这种方法在二维图像拓扑上是最成功的。
卷积是一种特殊的线性运算。
【补充-为什么要使用卷积?】
在传统的神经网络中,比如多层感知机(MLP),其输入通常是一个特征向量:需要人工设计特征,然后将这些特征计算的值组成特征向量。在过去几十年的经验来看,人工找到的特征并不是怎么好用,特征有时多了(需要PCA降维),特征有时少了(容易过拟合),有时选择的特征根本就不起作用(真正起作用的特征在浩瀚的未知里面)。这就是为什么在过去卷积神经网络一直被SVM等完虐的原因。
如果特征都是从图像中提取的,那如果把整副图像作为特征来训练神经网络不就行了,那肯定不会有任何信息丢失!那先不说一幅图像有多少冗余信息,单说着信息量就超级多。。。假如有一幅1000*1000的图像,如果把整幅图像作为向量,则向量的长度为1000000(106)。再假如隐含层神经元的个数和输入一样,也是1000000;那么,输入层到隐含层的参数数据量有1012,什么样的机器能训练这样的网络呢。所以,我们还得降低维数,同时得以整幅图像为输入(人类实在找不到好的特征了)。于是,牛逼的卷积来了。
CNN卷积神经网络层级结构如下
CNN网络一共有5个层级结构:
输入层、卷积层、激活层、 池化层、全连接FC层
卷积运算
在通常形式中,卷积convolution是对两个实变函数的一种数学运算。
关于卷积介绍参见(通俗易懂) https://www.zhihu.com/question/22298352?rf=21686447
卷积的连续(上)和离散(下)定义式子有一个共同的特征:
我们令 x = τ , y = n − τ x=\tau,y=n-\tau x=τ,y=n−τ,那么 x + y = n x+y=n x+y=n 就是下面这些直线:
如果遍历这些直线,就好比,把毛巾沿着角卷起来:
卷积的含义解释:
先对g函数进行翻转,相当于在数轴上把g函数从右边褶到左边去,也就是卷积的“卷”的由来。
然后再把g函数平移到n,在这个位置对两个函数的对应点相乘,然后相加,这个过程是卷积的“积”的过程。
再说的直接一点:所谓两个函数的卷积,本质上就是先将一个函数翻转,然后进行滑动叠加。
在连续情况下,叠加指的是对两个函数的乘积求积分,在离散情况下就是加权求和,为简单起见就统一称为叠加。
整个卷积过程就是:翻转——>滑动——>叠加——>滑动——>叠加——>滑动——>叠加…
多次滑动得到的一系列叠加值,构成了卷积函数。
卷积的“卷”,指的的函数的翻转,从 g(t) 变成 g(-t) 的这个过程;同时,“卷”还有滑动的意味在里面(吸取了网友李文清的建议)。如果把卷积翻译为“褶积”,那么这个“褶”字就只有翻转的含义了。
卷积的“积”,指的是积分/加权求和。
举例1:丢骰子
有两枚骰子,把它们都抛出去,两枚骰子点数加起来为4的概率是多少?
分析一下,两枚骰子点数加起来为4的情况有三种情况:1+3=4, 2+2=4, 3+1=4
因此,两枚骰子点数加起来为4的概率为:
写成卷积的方式就是
( f ∗ g ) ( 4 ) = ∑ m = 1 3 f ( 4 − m ) g ( m ) (f*g)(4)=\sum_m=1^3f(4-m)g(m) (f∗g)(4)=m∑=13f(4−m)g(m)
在这里我们进一步用上面的翻转滑动叠加的逻辑进行解释。
首先,因为两个骰子的点数和是4,为了满足这个约束条件,我们还是把函数 g 翻转一下,然后阴影区域上下对应的数相乘,然后累加,相当于求自变量为4的卷积值,如下图所示:
进一步,如此翻转以后,可以方便地进行推广去求两个骰子点数和为 n 时的概率,为f 和 g的卷积 f*g(n),如下图所示:
由上图可以看到,函数 g 的滑动,带来的是点数和的增大。这个例子中对f和g的约束条件就是点数和,它也是卷积函数的自变量。有兴趣还可以算算,如果骰子的每个点数出现的概率是均等的,那么两个骰子的点数和n=7的时候,概率最大。
举例2,图像处理
对上面图像的处理函数(如平滑,或者边缘提取),也可以用一个g矩阵来表示,如:
注意,我们在处理平面空间的问题,已经是二维函数了,相当于:
f ( x , y ) = a x , y f(x,y)=a_{x,y} f(x,y)=a