干货 | 深度学习之卷积神经网络(CNN)的模型结构

2017 年 11 月 1 日 机器学习算法与Python学习

微信公众号

关键字全网搜索最新排名

【机器学习算法】:排名第一

【机器学习】:排名第一

【Python】:排名第三

【算法】:排名第四

前言

在前面我们讲述了DNN的模型与前向反向传播算法。而在DNN大类中,卷积神经网络(Convolutional Neural Networks,以下简称CNN)是最为成功的DNN特例之一。CNN广泛的应用于图像识别,当然现在也应用于NLP等其他领域,本文我们就对CNN的模型结构做一个总结。


在学习CNN前,推荐大家先学习DNN的知识。可以查看之前的文章

深度学习之DNN与前向传播算法

深度学习之DNN与反向传播算法

干货 | 深度学习之损失函数与激活函数的选择

干货 | 深度学习之DNN的多种正则化方式


CNN的基本结构

一个常见的CNN例子如下图:

上图是一个图形识别的CNN模型。可以看出最左边的图像就是我们的输入层,计算机理解为输入若干个矩阵,这点和DNN基本相同。


接着是卷积层(Convolution Layer),这个是CNN特有的,我们后面专门来讲。卷积层的激活函数使用的是ReLU。我们在DNN中介绍过ReLU的激活函数,它其实很简单,就是ReLU(x)=max(0,x)。在卷积层后面是池化层(Pooling layer),这个也是CNN特有的,我们后面也会专门来讲。需要注意的是,池化层没有激活函数。


卷积层+池化层的组合可以在隐藏层出现很多次,上图中出现两次。而实际上这个次数是根据模型的需要而来的。当然我们也可以灵活使用使用卷积层+卷积层,或者卷积层+卷积层+池化层的组合,这些在构建模型的时候没有限制。但是最常见的CNN都是若干卷积层+池化层的组合,如上图中的CNN结构。

    

在若干卷积层+池化层后面是全连接层(Fully Connected Layer, 简称FC),全连接层其实就是我们前面讲的DNN结构,只是输出层使用了Softmax激活函数来做图像识别的分类,这点我们在DNN中也有讲述。

    

从上面CNN的模型描述可以看出,CNN相对于DNN,比较特殊的是卷积层和池化层,如果我们熟悉DNN,只要把卷积层和池化层的原理搞清楚了,那么搞清楚CNN就容易很多了。


初识卷积

首先,我们去学习卷积层的模型原理,在学习卷积层的模型原理前,我们需要了解什么是卷积,以及CNN中的卷积是什么样子的。

大家学习数学时都有学过卷积的知识,微积分中卷积的表达式为:

离散形式为:

矩阵形式为:

如果是二维的卷积,则表示式为:

在CNN中,虽然我们也是说卷积,但是我们的卷积公式和严格意义数学中的定义稍有不同,比如对于二维的卷积,定义为:

这个式子虽然从数学上讲不是严格意义上的卷积,但是大牛们都这么叫了,那么我们也跟着这么叫了。后面讲的CNN的卷积都是指的上面的最后一个式子。其中,我们叫W为我们的卷积核,而X则为我们的输入。如果X是一个二维输入的矩阵,而W也是一个二维的矩阵。但是如果X是多维张量,那么W也是一个多维的张量。


CNN的卷积层

有了卷积的基本知识,我们现在来看看CNN中的卷积,假如是对图像卷积,回想我们的上一节的卷积公式,其实就是对输出的图像的不同局部的矩阵和卷积核矩阵各个位置的元素相乘,然后相加得到。

举个例子如下:图中的输入是一个二维的3x4的矩阵,而卷积核是一个2x2的矩阵。这里我们假设卷积是一次移动一个像素来卷积的,那么首先我们对输入的左上角2x2局部和卷积核卷积,即各个位置的元素相乘再相加,得到的输出矩阵S的S00的元素,值为aw+bx+ey+fz。接着我们将输入的局部向右平移一个像素,现在是(b,c,f,g)四个元素构成的矩阵和卷积核来卷积,这样我们得到了输出矩阵S的S01的元素,同样的方法,我们可以得到输出矩阵S的S02,S10,S11,S12的元素。

最终我们得到卷积输出的矩阵为一个2x3的矩阵S。

再举一个动态的卷积过程的例子如下:

我们有下面这个绿色的5x5输入矩阵,卷积核是一个下面这个黄色的3x3的矩阵。卷积的步幅是一个像素。则卷积的过程如下面的动图。卷积的结果是一个3x3的矩阵。



上面举的例子都是二维的输入,卷积的过程比较简单,那么如果输入是多维的呢?比如在前面一组卷积层+池化层的输出是3个矩阵,这3个矩阵作为输入呢,那么我们怎么去卷积呢?又比如输入的是对应RGB的彩色图像,即是三个分布对应R,G和B的矩阵呢?

在斯坦福大学的cs231n的课程上,有一个动态的例子,链接在这。

http://cs231n.github.io/assets/conv-demo/index.html

CNN的池化层

相比卷积层的复杂,池化层则要简单的多,所谓的池化,个人理解就是对输入张量的各个子矩阵进行压缩。假如是2x2的池化,那么就将子矩阵的每2x2个元素变成一个元素,如果是3x3的池化,那么就将子矩阵的每3x3个元素变成一个元素,这样输入矩阵的维度就变小了。

要想将输入子矩阵的每nxn个元素变成一个元素,那么需要一个池化标准。常见的池化标准有2个,MAX或者是Average。即取对应区域的最大值或者平均值作为池化后的元素值。


下面这个例子采用取最大值的池化方法。同时采用的是2x2的池化。步幅为2。

首先对红色2x2区域进行池化,由于此2x2区域的最大值为6.那么对应的池化输出位置的值为6,由于步幅为2,此时移动到绿色的位置去进行池化,输出的最大值为8.同样的方法,可以得到黄色区域和蓝色区域的输出值。最终,我们的输入4x4的矩阵在池化后变成了2x2的矩阵。进行了压缩。

小结

理解了CNN模型中的卷积层和池化层,就基本理解了CNN的基本原理,后面再去理解CNN模型的前向传播算法和反向传播算法就容易了。

欢迎分享给他人让更多的人受益

参考:

  1. 周志华《机器学习》

  2. Neural Networks and Deep Learning by By Michael Nielsen

  3. 博客园

    http://www.cnblogs.com/pinard/p/6140514.html

  4. 李航《统计学习方法》

加我微信:guodongwe1991,备注姓名-单位-研究方向(加入微信机器学习交流1群)

招募 志愿者

广告、商业合作

请加QQ:357062955@qq.com

喜欢,别忘关注~

帮助你在AI领域更好的发展,期待与你相遇!

登录查看更多
12

相关内容

卷积神经网络的概述论文:分析、应用和展望,21页pdf
专知会员服务
90+阅读 · 2020年4月7日
深度学习算法与架构回顾
专知会员服务
81+阅读 · 2019年10月20日
深度神经网络模型压缩与加速综述
专知会员服务
128+阅读 · 2019年10月12日
深度学习自然语言处理综述,266篇参考文献
专知会员服务
229+阅读 · 2019年10月12日
GAN新书《生成式深度学习》,Generative Deep Learning,379页pdf
专知会员服务
202+阅读 · 2019年9月30日
干货合集 | 卷积神经网络CNN的基本原理
七月在线实验室
6+阅读 · 2018年7月27日
干货 | 卷积神经网络入门这一篇就够了
数盟
6+阅读 · 2018年1月18日
深度学习之CNN简介
Python技术博文
20+阅读 · 2018年1月10日
【CNN】一文读懂卷积神经网络CNN
产业智能官
18+阅读 · 2018年1月2日
【干货】卷积神经网络CNN学习笔记
机器学习研究会
15+阅读 · 2017年12月17日
干货 | 深度学习之CNN反向传播算法详解
机器学习算法与Python学习
17+阅读 · 2017年11月21日
干货 | 深度学习之卷积神经网络(CNN)的前向传播算法详解
机器学习算法与Python学习
9+阅读 · 2017年11月17日
干货 | 深度学习之损失函数与激活函数的选择
机器学习算法与Python学习
15+阅读 · 2017年9月18日
CNN之卷积层
机器学习算法与Python学习
8+阅读 · 2017年7月2日
Interpretable CNNs for Object Classification
Arxiv
20+阅读 · 2020年3月12日
Neural Image Captioning
Arxiv
5+阅读 · 2019年7月2日
Neural Approaches to Conversational AI
Arxiv
8+阅读 · 2018年12月13日
Arxiv
5+阅读 · 2018年9月11日
Arxiv
22+阅读 · 2018年2月14日
Arxiv
4+阅读 · 2017年7月25日
VIP会员
相关VIP内容
卷积神经网络的概述论文:分析、应用和展望,21页pdf
专知会员服务
90+阅读 · 2020年4月7日
深度学习算法与架构回顾
专知会员服务
81+阅读 · 2019年10月20日
深度神经网络模型压缩与加速综述
专知会员服务
128+阅读 · 2019年10月12日
深度学习自然语言处理综述,266篇参考文献
专知会员服务
229+阅读 · 2019年10月12日
GAN新书《生成式深度学习》,Generative Deep Learning,379页pdf
专知会员服务
202+阅读 · 2019年9月30日
相关资讯
干货合集 | 卷积神经网络CNN的基本原理
七月在线实验室
6+阅读 · 2018年7月27日
干货 | 卷积神经网络入门这一篇就够了
数盟
6+阅读 · 2018年1月18日
深度学习之CNN简介
Python技术博文
20+阅读 · 2018年1月10日
【CNN】一文读懂卷积神经网络CNN
产业智能官
18+阅读 · 2018年1月2日
【干货】卷积神经网络CNN学习笔记
机器学习研究会
15+阅读 · 2017年12月17日
干货 | 深度学习之CNN反向传播算法详解
机器学习算法与Python学习
17+阅读 · 2017年11月21日
干货 | 深度学习之卷积神经网络(CNN)的前向传播算法详解
机器学习算法与Python学习
9+阅读 · 2017年11月17日
干货 | 深度学习之损失函数与激活函数的选择
机器学习算法与Python学习
15+阅读 · 2017年9月18日
CNN之卷积层
机器学习算法与Python学习
8+阅读 · 2017年7月2日
相关论文
Interpretable CNNs for Object Classification
Arxiv
20+阅读 · 2020年3月12日
Neural Image Captioning
Arxiv
5+阅读 · 2019年7月2日
Neural Approaches to Conversational AI
Arxiv
8+阅读 · 2018年12月13日
Arxiv
5+阅读 · 2018年9月11日
Arxiv
22+阅读 · 2018年2月14日
Arxiv
4+阅读 · 2017年7月25日
Top
微信扫码咨询专知VIP会员