第一篇文章介绍了卷积神经网络的数据输入形式和权值的初始化:CNN)卷积神经网络(一)
第二篇文章介绍了卷积操作,常用的激活函数(CNN)卷积神经网络(二
下面来看一下接下来的层级结构:
由第一张图可以看到池化层压在卷积层中;因为做完卷积操作之后,还是有很大的数据量级,为了减少参数的数量,降低计算机资源消耗,同时缓解过拟合,通常会抽取大部分重要的数据出来,用来表征整张图片,而其他的就会去掉。其实这么做就是为了保留有效的数据(信息)。
如图,昨晚下采样之后,图片数据的维度就从224X224X64降为112X112X64了。
那pooling layer 具体是怎么实现的呢?
为了保留图片的大部分信息,一般会采用max操作,也就是在2X2的区域内的四个数,取最大值。
另一个操作就是取average,求这2X2的区域的平均值嘛!
两层之间都有权重连接,通常全连接层在卷积神经网络的尾部。
主要是因为如果下采样层采样的太猛了,可以通过这一层进行重新拟合出来。
这一层并不是一定要的,但也有把全连接层拿掉的,比如Googlenet.
最经典的卷积神经网络是:
第一个卷积层
左边的filter,右边是昨晚卷积操作之后得到的。
你会发现,不同的神经元关注的点不一样,有的是关注它的轮廓,有的是关注它的形状,有的是关注它的颜色,最后每个filter得到的结果合起来就是这个卷积层对整张图片的理解了。
第二个卷积层
这是第二个卷积层
貌似我们已经不明白它到底是在干嘛了,但卷积神经网络就是通过这样的操作,最终有了图像识别的能力。
同一般的机器学习一样,卷积神经网络也是先定义损失函数,来衡量预测出来的和实际结果之间的差别,最小化损失函数中W和b,CNN用的优化算法是SGD,这个SGD默认分批的,CNN也用BP算法来求偏导,值得一提的是,在下采样层的偏导该怎么求呢?
下采样的函数如果采用max的话,函数可以表示为:
说一下它的优点
缺点
前面说了卷积神经网络没有具体的物理含义,但在数学上,很早就有卷积的定义了,所以我想从数学这个角度,给大家提供一个理解卷积的思路。
卷积和的定义如下:
由公式(1),你会发现两个函数( x(t),h(t) )变成了一个函数: y(t) ,用数学术语表示就是把二元函数卷成一元函数了,俗称降维打击,可能这就是为什么卷积操作能减少参数量的原因之一吧。
卷积公式是从傅立叶变换推导出来的,所以从源头的角度来看一下,希望能有助于理解。
首先看一下傅立叶变换的一个推论:
除了加法,还有乘法,这时候,有一个问题:是否存在一种新的结合方式,使得 f(t),g(t) 结合后的函数的傅立叶变换结果是 F(s)G(s) ?
我们用倒推法来试一下能不能推出这样的结合方式,假设有信号函数 f(x),g(t)(x,t 均为横轴自变量),F(s),G(s)分别为他们的傅立叶变换, 有:
最后,我们还要定义一个特殊的二元运算符号∗∗来替代h(t)(也叫卷积运算符,注意,这个不是乘法的乘号哦):
这个定理说明,信号f和信号g的卷积的傅里叶变换,等于f、g各自的傅里叶变换的积,因此,傅里叶变换将一个函数或是信号表示为许多弦波的叠加。
虽然公式很恼人,但是傅立叶变换在其中扮演的角色,相当于一种映射之类的,提供了一种信号间的连接关系。更直观得,快速傅立叶变换是一种将时域和空域中的数字转换到频域中的算法,如下所示,你可以看到一个信号是如何被傅立叶变换转换的:
红色代表时域,蓝色代表频域。这在现实中又是什么呢?如果红色代表你听到的音乐的话,那么蓝色就代表这首音乐对应的频谱。
更加详细的关于傅立叶变换可以参考这篇文章: 如果看了这篇文章,还不懂傅立叶变换,那就过来掐死我