卷积神经网络的特点和应用

1. 概念

英文名:convolutional neural network

是一种前馈神经网络,即表明没有环路,普通神经网络的 BP 算法只是用于方便计算梯度,也是前馈神经网络。

是深度学习结构的一种,是一种深度、前馈神经网络。

可以使用 BP 算法进行训练

ConvNet architectures make the explicit assumption that the inputs are images, which allows us to encode certain properties into the architecture

卷积神经网络的前提:输入是二维结构或者三维结构,但起比较大作用的是空间维度(spacial),深度那一维并没有太明显的作用。

1.1 空间维度 spacial

是宽和高,不包含深度

1.2 什么是卷积

https://www.zhihu.com/question/22298352

这条知乎解释得非常清楚!

卷积的离散和连续解释,其实就是求和符号和积分符号换一下而已

CNN 中卷积的体现在于,在神经元的感受野里的输入和权重滤波器做点积,然后权重滤波器对整个输入在空间维度上一边移动一边做点积,然后求和,所以跟一般的卷积是在时间上移动不同的是,这里是在空间上移动。

这是二维离散卷积的表达方式,因为权重滤波器是在空间上移动,空间上是有高和宽两个维度的

1.3 滤波器和输出数据体

滤波器是权重滤波器,是待学习的参数

输出数据体才是卷积层神经元

不同的滤波器的权重不同,表达的是对图片要素的关注点不同,比如说如果某个滤波器对红色敏感,即对于红色的像素点会有正向输出,那么扫描一张大部分是红色的图片的时候,该滤波器得到的 activation map 会有大面积的正向输出。所以说,滤波器是不同的特征提取器。

1.4 卷积层的输出

滤波器在输入数据体空间上移动,得到一张 activation map,多个滤波器(个数是超参数)都与输入数据体进行卷积,会得到多张在深度方向上堆叠在一起的 activation maps,然后呢,下一层的滤波器会把这些 activation maps 的结果相结合作为输入,而不是把一个滤波器在空间移动后的点积结果相加,因为滤波器在扫描完整个输入体之后,得到的是一张 activation map,而不是一个值哦!所谓卷积中移动求和的概念,应该是体现在把点积的结果汇聚成一张 activation map,这也算是求了个和吧!然后一个卷积层的输出就是多个 maps 在深度方向上的叠加。

一张 activation map 其实就是滤波器权重参数与小块输入的点积+偏置,然后组在一起!

activation map 其实是这样的:

如图所示:28×28 个神经元的输出,每个神经元都只看它的感受野的输入,每个神经元的权重和偏置相同。神经元的输出也是 wx+b

上面的图只说明了一张 activation map,其实多张 activation maps 就是深度方向上堆叠在一起的神经元的输出,只不过深度方向上的神经元不会共享权重和偏置,但深度方向上重叠的神经元的感受野是一样的。

1.5 图片的表达转换

原始图像假如是一个 32×32×3 的输入数据体,经过一层卷积层的输出(假设有 6 个 3×3×3 的滤波器 with pading1),则变成了一个 32326 的输出数据体,也就是说,图片的表达由原来的输入数据体来表达,变成了现在的输出数据体来表达。

1.6 参数的个数

每一个卷积层的参数个数是(滤波器的感受野×输入深度+1)×滤波器个数,比如滤波器的感受野是 3×3×3,个数是 6,则这一层卷积层的参数个数是(9+1)×6=60 个,其中加的那个 1 是偏置,也就是说一个输出数据体的整个深度切片上的神经元共享同一个权重向量,和同一个偏置,不同的深度切片的权重和偏置不同

1.7 卷积层总结

卷积层接受 W1×H1×D1 的输入数据体(width, height, depth)

卷积层输出 W2×H2×D2 的输出数据体

需要 4 个超参数:K\F\S\P

K 代表滤波器个数,F 是神经元视野即滤波器大小,S 是 stride 步长,P 是 padding

根据超参数,可以由输入数据体的大小,计算出输出数据体的大小

W2=(W1-F+2P)/S+1

H2=(H1-F+2P)/S+1

D2=K

因为参数共享,因此总共有 F.F.D1.K 个权重和 K 个偏置参数

1.8 补充

sc231n 视频中补充了一些可以进行卷积层计算的 API,其中提到一些计算框架

Torch 是一个科学计算框架,内置大量的机器学习算法,GPU first 特性。LuaJIT 语言接口,底层是 C/CUDA 实现。Torch – provides a Matlab-like environment for state-of-the-art machine learning algorithms in lua (from Ronan Collobert, Clement Farabet and Koray Kavukcuoglu)

Caffe 是一个深度学习框架,Caffe -Caffe is a deep learning framework made with expression, speed, and modularity in mind

Lasagne 是 Theano 中的一个轻量级的库,用于建立和训练神经网络

Theano – CPU/GPU symbolic expression compiler in python (from MILA lab at University of Montreal)。Theano is a Python library that allows you to define, optimize, and evaluate mathematical expressions involving multi-dimensional arrays efficiently

2. 池化层 pooling layer

max pooling 和 average pooling 是两种常见的方法

输入的数据体是 W1×H1×D1,输出数据体是 W2×H2×D2

超参数有两个 F/S,F 是 spacial extent,S 是 stride 即步长

W2=(W1-F)/S+1

H2=(H1-F)/S+1

D2=D1

没有参数,因为 pooling layer 计算的是 a fixed function of the input

对 pooling layers,不常用 zero padding

3. full connecting layer

最后是一个 spacial size 减少,但深度依然是滤波器个数的全连接层,这一层的数据体会全部和输出进行全连接

4. ReLU 层

无论是教学视频还是学习资料里都提到了 ReLU 层,这其实让人难以理解,至少给我带来了困扰,因为 ReLU 只不过是一种神经元激活函数而已,后来经过和大家的讨论,得出的结论是:其实就是卷积层的神经元的激活函数是 ReLU 函数而已,即 f(W×X+b) 中的 f,其中 W 和 X 之间是卷积而不是传统 MLP 中的点积。

5. case study

AlexNet -> ZFNet -> VGGNet -> GoogLeNet -> ResNet

6. 趋势

目前的趋势是使用更小的 filter 和更深的结构

另外一个趋势是抛弃 pooling 和 FC 层,只留下 CONV 层

7. 讨论

根据另一个同学的学习结论,CNN 不但可以运用于图像,还可以运用于 NLP 即自然语言处理,不过在卷积层的参数设置,以及池化层的参数设置上有些不同,如下图所示。这是对自然语言语句进行二分类的 CNN 结构图,论文是《ASensitiveAnalysisOfCNNForSentenceClassification》。

①滤波器的空间视野,宽度需要与词向量的长度一致,高度可以自由调节,由高度的不同形成多个卷积层,同样的高度下可以由滤波器个数这个超参数形成多个 activation maps

②图中的步长为 1,因此绿色的高度为 3 的滤波器得到的 activation map 的高度就为 5,黄色的高度为 2 的滤波器得到的 activation map 的高度就为 6,这里的图像可以认为是侧面视角,宽度与滤波器宽度一致,看不到而已。

③池化层是 1-max pooling,即整张 activation map 中只选择一个最大值!因此从 6 张 activation map 中就产生了一个一元的特征向量

④最后的 softmax 层就是把这个一元的特征向量作为输入,用来得到句子的类别

除了这些参数外,论文中还提出了一些有趣的结论,这里不一一列举,具体看论文:

①滤波器的视野(高度)选择,最好选择效果最好值的紧邻值,比如说 7 效果最好,那么就没有必要尝试 2,应该尝试 6 和 8 作为下一个卷积层的视野高度

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

管蓉的专栏

1 篇文章1 人订阅

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI研习社

如何解决机器学习中的数据不平衡问题?

在机器学习任务中,我们经常会遇到这种困扰:数据不平衡问题。 数据不平衡问题主要存在于有监督机器学习任务中。当遇到不平衡数据时,以总体分类准确率为学习目标的传统分...

3469
来自专栏华章科技

浅说深度学习

在机器学习中,我们(1)读取数据,(2)训练模型,(3)使用模型对新数据做预测。训练可以看作是当模型拿到新数据的时候、逐步学习一个的过程。在每一步,模型做出预测...

1192
来自专栏计算机视觉战队

从零基础成为深度学习高手——Ⅱ

今天继续昨天的知识,继续学习新的一个阶段知识: 深度学习基础知识 接下来我们了解一下基础知识,我们上面也提到了,我们这次主要以卷积神经网络在图像识别领域的应...

2756
来自专栏人工智能头条

非科班出身,我是如何自己摸索研究卷积神经网络体系结构的

虽然很不愿意提起这件伤心事,但国庆假期确实结束了?。在这说长不长说短也不算短的7天里,不知道大家有没有吃好喝好玩好pia学好呢?

903
来自专栏机器之心

深度 | 从AlexNet到残差网络,理解卷积神经网络的不同架构

3047
来自专栏用户2442861的专栏

循环神经网络教程第一部分-RNN简介

作者:徐志强 链接:https://zhuanlan.zhihu.com/p/22266022 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业...

811
来自专栏人工智能LeadAI

零基础入门深度学习 | 第五章: 循环神经网络

无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习这个超热的技术,会不会感...

4807
来自专栏用户2442861的专栏

循环神经网络教程第三部分-BPTT和梯度消失

作者:徐志强 链接:https://zhuanlan.zhihu.com/p/22338087 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,...

501
来自专栏数据派THU

独家 | 初学者的问题:在神经网络中应使用多少隐藏层/神经元?(附实例)

本文将通过两个简单的例子,讲解确定所需隐藏层和神经元数量的方法,帮助初学者构建神经网络。

880
来自专栏AI研习社

从LeNet-5到DenseNet

卷积、池化等操作不再赘述,总结一下从LeNet到DenseNet的发展历程。 ? 图1. LeNet-5 网络结构 一、LeNet-5 卷积神经网络的开山之...

4257

扫码关注云+社区