卷积网络笔记

卷积网络笔记

卷积网络也叫做卷积神经网络,是一种专门用来处理类似具有网格结构的数据的神经网络。例如时间序列数据(可以认为在时间轴上有规律的一维网格数据)、图像数据(可以认为二维的像素网格数据)。
卷积神经网络在许多应用中发挥着巨大的作用,比如图像领域。所以我在学习深度学习过程中,根据自己的理解写下此文,以加深对自己的理解。

1、卷积运算

在通常的形式中,卷积是对两个函数的一种数学运算,类似如下:

s(t)=x(a)w(at)dt s ( t ) = ∫ x ( a ) w ( a − t ) d t

也可以简化为:
s(t)=(xw)(t) s ( t ) = ( x ∗ w ) ( t )

在卷积网络的术语中,函数 x x 通常被称为输入函数,w被称为核函数, s s 是输出函数,也可以叫做特征映射。
由于很多应用中,数据都是离散的,比如图片和文本。这样时刻t只能取整数值,如果定义 x x w都定义在整数时刻 t t 上,就可以定义离散形式的卷积:
s(t)=a=+x(a)w(ta)

在实际运用中,输入的通常是多维数据,核函数通常是由训练学习所得到的多位数组参数。 tensorflow t e n s o r f l o w 中都管这些多维数组叫做张量。
例如,我们处理图片的时候,输入的是一个二维数组 I I ,核函数也是一个二维数组记为K,则卷积公式为:
s(i,j)=mnI(m,n)K(im,jn) s ( i , j ) = ∑ m ∑ n I ( m , n ) K ( i − m , j − n )

由于卷积函数是可以交换的,我们也可以写作:
s(i,j)=mnI(im,jn)K(m,n) s ( i , j ) = ∑ m ∑ n I ( i − m , j − n ) K ( m , n )

卷积运算的可交换性的出现是因为我们将核函数相对于输入函数进行了翻转。但是对于神经网络来说翻转却并不是卷积一个重要的性质,许多神经网络库中会出现一个相关函数,称为互相关函数,函数如下:
s(i,j)=mnI(i+m,j+n)K(m,n) s ( i , j ) = ∑ m ∑ n I ( i + m , j + n ) K ( m , n )

一般的书中会出现下图的卷积函数计算,其计算方式就是如上面公式的描述。
这里写图片描述

2、卷积运算的优点

卷积运算通过三个重要的思想来帮助改进机器学习系统:稀疏交互,参数共享,等变表示。另外,卷积提供了一种输入数据大小可变的处理方法,后文会讲解。

2.1 稀疏交互

传统的神经网络使用全连接(矩阵运算),进行输入数据和输出数据之间的连接。其中,参数矩阵中每一个单独的参数都描述了一个输入单元和一个输出单元之间的链接,假设输入单元的数目为 m m ,输出单元的数目为n,则进行转换的参数矩阵数目为 mn m ∗ n 。当 m m n非常大的时候,必然带来一个非常大的内存开销。
但是卷积神经网络核函数的存在,我们只需要检测当前时刻核函数所覆盖的范围内,假设核函数的宽度为 k k ,输出单元的宽度为n,则需要的参数矩阵数目为 kn k ∗ n ,一般情况下,核函数的宽度要远小于输入函数的宽度,这不仅减少了模型参数存储的需求,还增快了统计效率。
这里写图片描述

这里写图片描述
从上图可以看出,处于卷积更深的单元,要比处于浅层单元的接受域更大。处于更深层次的卷积单元,能直接或间接的接受全部或者大部分原始图像特征。

2.2 参数共享

参数共享是指在一个模型的多个函数中使用相同的参数。在传统的神经网络中,每一个参数仅仅使用一次,对应着固定的输入和输出神经元,比如参数 wi,j w i , j 表示第 i i 个输入神经元和第j个输出神经元之间的连接权重。而卷积神经网络中的参数共享保证了我们只需要学习到一个卷积核函数,而不是像全连接神经网络一样在每个位置都学习一个卷积核函数。这虽然没有改变前向传播的计算时间,但是它显著的减少了参数的数目。

2.3 等变表示

3、池化

池化函数是使用某一位置相邻元素的统计值来代替当前值的函数,例如最大池化函数使用相邻元素的最大值来代替当前值。其他常用的池化函数有:平均池化函数、 L2 L 2 范数、以及距中心距离的加权平均函数。
不管采用什么样的池化函数,当输入做少许平移的时候,池化函数能帮助输入的表示近似不变。平移的不变性是指当我们对输入进行少量的平移时,经过池化函数后的大多数输出并不会发生变化。
这里写图片描述
为什么池化函数有这个特性了?这是因为池化函数只对周围的统计值比较敏感,而对具体的位置并不关心。
因为池化综合反映了全部邻居的反馈,这使得池化单元少于探测单元成了可能,我们可以通过综合池化区域的 k k 个像素来实现。下图给出了一个例子,上层的圣经元数目相比下层的神经元数目少了约3倍。
这里写图片描述
在很多任务中,池化对处理不同大小的输入具有重要作用。例如我们想对不同大小的图片进行分类,分类层的输入必须是固定大小,而这通常可以调整池化层区域的偏置大小来实现,这样分类层总是能收到相同数量的统计特征,而不必考虑最初的输入大小,当然如果最初的输入大小小于分类层的大小也是不行的。

4、填充(Padding)

在任何卷积网络中都一个重要的性质,那就是能能够隐含的对输入边界进行填充(填充值可能为0,可能为边界值)使得它加宽。如果没有这个性质,表示的宽度在每一个卷积层都会相应的缩减。假设表示层的宽度为m,卷积核的宽度为 k k ,则经过卷积后新的卷积层宽度为:

mk+1

要想维持表示层的宽带,面临着一个二选一的局面:要么选择表示层的宽度迅速衰减,要么使用一个尺寸较小的卷积核。
由于填充的存在,只需要硬件支持,神经网络就能包含任意多的卷积曾,这是因为卷积层的运算没有改变下一级的结构。但是输入像素中靠近边界的部分相比于中间部分对于输出像素的影响更小(因为边界像素部分卷积值是Padding的),这可能会导致边界像素存在一定程度的欠表示。

5、后记

卷积神经网络的原理还是比较好理解的,它极大的减少了传统神经网络的参数存储空间和计算的复杂度,并且在很多应用中取得了极大的成功。在后面几章中,我们会继续接受卷积神经网络以及卷积核的选择。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值