在前面咱们讲述了DNN的模型与前向反向传播算法。而在DNN大类中,卷积神经网络(Convolutional Neural Networks,如下简称CNN)是最为成功的DNN特例之一。CNN普遍的应用于图像识别,固然如今也应用于NLP等其余领域,本文咱们就对CNN的模型结构作一个总结。html
在学习CNN前,推荐你们先学习DNN的知识。若是不熟悉DNN而去直接学习CNN,难度会比较的大。这是我写的DNN的教程:git
深度神经网络(DNN)模型与前向传播算法github
首先咱们来看看CNN的基本结构。一个常见的CNN例子以下图:post
图中是一个图形识别的CNN模型。能够看出最左边的船的图像就是咱们的输入层,计算机理解为输入若干个矩阵,这点和DNN基本相同。学习
接着是卷积层(Convolution Layer),这个是CNN特有的,咱们后面专门来说。卷积层的激活函数使用的是ReLU。咱们在DNN中介绍过ReLU的激活函数,它其实很简单,就是$ReLU(x) = max(0,x)$。在卷积层后面是池化层(Pooling layer),这个也是CNN特有的,咱们后面也会专门来说。须要注意的是,池化层没有激活函数。htm
卷积层+池化层的组合能够在隐藏层出现不少次,上图中出现两次。而实际上这个次数是根据模型的须要而来的。固然咱们也能够灵活使用使用卷积层+卷积层,或者卷积层+卷积层+池化层的组合,这些在构建模型的时候没有限制。可是最多见的CNN都是若干卷积层+池化层的组合,如上图中的CNN结构。blog
在若干卷积层+池化层后面是全链接层(Fully Connected Layer, 简称FC),全链接层其实就是咱们前面讲的DNN结构,只是输出层使用了Softmax激活函数来作图像识别的分类,这点咱们在DNN中也有讲述。
从上面CNN的模型描述能够看出,CNN相对于DNN,比较特殊的是卷积层和池化层,若是咱们熟悉DNN,只要把卷积层和池化层的原理搞清楚了,那么搞清楚CNN就容易不少了。
首先,咱们去学习卷积层的模型原理,在学习卷积层的模型原理前,咱们须要了解什么是卷积,以及CNN中的卷积是什么样子的。
你们学习数学时都有学过卷积的知识,微积分中卷积的表达式为:$$S(t) = \int x(t-a)w(a) da$$
离散形式是:$$s(t) = \sum\limits_ax(t-a)w(a)$$
这个式子若是用矩阵表示能够为:$$s(t)=(X*W)(t)$$
其中星号表示卷积。
若是是二维的卷积,则表示式为:$$s(i,j)=(X*W)(i,j) = \sum\limits_m \sum\limits_n x(i-m,j-n) w(m,n)$$
在CNN中,虽然咱们也是说卷积,可是咱们的卷积公式和严格意义数学中的定义稍有不一样,好比对于二维的卷积,定义为:$$s(i,j)=(X*W)(i,j) = \sum\limits_m \sum\limits_n x(i+m,j+n) w(m,n)$$
这个式子虽然从数学上讲不是严格意义上的卷积,可是大牛们都这么叫了,那么咱们也跟着这么叫了。后面讲的CNN的卷积都是指的上面的最后一个式子。
其中,咱们叫W为咱们的卷积核,而X则为咱们的输入。若是X是一个二维输入的矩阵,而W也是一个二维的矩阵。可是若是X是多维张量,那么W也是一个多维的张量。
有了卷积的基本知识,咱们如今来看看CNN中的卷积,假如是对图像卷积,回想咱们的上一节的卷积公式,其实就是对输入的图像的不一样局部的矩阵和卷积核矩阵各个位置的元素相乘,而后相加获得。
举个例子以下,图中的输入是一个二维的3x4的矩阵,而卷积核是一个2x2的矩阵。这里咱们假设卷积是一次移动一个像素来卷积的,那么首先咱们对输入的左上角2x2局部和卷积核卷积,即各个位置的元素相乘再相加,获得的输出矩阵S的$S_{00}$的元素,值为$aw+bx+ey+fz$。接着咱们将输入的局部向右平移一个像素,如今是(b,c,f,g)四个元素构成的矩阵和卷积核来卷积,这样咱们获得了输出矩阵S的$S_{01}$的元素,一样的方法,咱们能够获得输出矩阵S的$S_{02},S_{10},S_{11}, S_{12}$的元素。
最终咱们获得卷积输出的矩阵为一个2x3的矩阵S。
再举一个动态的卷积过程的例子以下:
咱们有下面这个绿色的5x5输入矩阵,卷积核是一个下面这个黄色的3x3的矩阵。卷积的步幅是一个像素。则卷积的过程以下面的动图。卷积的结果是一个3x3的矩阵。
上面举的例子都是二维的输入,卷积的过程比较简单,那么若是输入是多维的呢?好比在前面一组卷积层+池化层的输出是3个矩阵,这3个矩阵做为输入呢,那么咱们怎么去卷积呢?又好比输入的是对应RGB的彩色图像,便是三个分布对应R,G和B的矩阵呢?
在斯坦福大学的cs231n的课程上,有一个动态的例子,连接在这。建议你们对照着例子中的动图看下面的讲解。
(欢迎转载,转载请注明出处。欢迎沟通交流: liujianping-ok@163.com)
1) Neural Networks and Deep Learning by By Michael Nielsen
2) Deep Learning, book by Ian Goodfellow, Yoshua Bengio, and Aaron Courville
4)CS231n Convolutional Neural Networks for Visual Recognition, Stanford