卷积神经网络学习笔记(Foundations of Convolutional Neural Networks)

作者:arsoooo

1.1 写在开头

终于看到CNN了,考虑到毕设可能要用到,这部分原理我会迅速略过,写上自己的理解,介绍CNN的基本原理和需要掌握的知识,目的是忘记了回来看一下能激活记忆。


1.2 卷积(Convolutional)

因为处理大图意味着更多的特征值,一个1M的图片就可能要30亿个参数。为此,你需要进行卷积计算,它是卷积神经网络中非常重要的一块。
卷积的算法这里不赘述:
在这里插入图片描述
6×6矩阵和3×3矩阵进行卷积运算得到4×4矩阵。这些图片和过滤器是不同维度的矩阵,但左边矩阵容易被理解为一张图片,中间的这个被理解为过滤器,右边的图片我们可以理解为另一张图片。

如果你要使用编程语言实现这个运算,不同的编程语言有不同的函数,而不是用“*”来表示卷积。所以在编程练习中,你会使用一个叫conv_forward的函数。如果在tensorflow下,这个函数叫tf.conv2d。在其他深度学习框架中,在后面的课程中,你将会看到Keras这个框架,在这个框架下用Conv2D实现卷积运算。所有的编程框架都有一些函数来实现卷积运算。

上面卷积的例子就是一个垂直边缘检测,原理如下(直接截图了):
在这里插入图片描述
结果就是使用中间的过滤器可以检测出垂直边,这里普及一个名词“鲁棒性”,指一个系统或组织有抵御或克服不利条件的能力,有些过滤器有很高的鲁棒性。

我理解为卷积操作可以让矩阵变小,并且可以


1.3 Padding

1.2的卷积过程会有两个问题:

1.每次做卷积操作,你的图像就会缩小
2.角落边缘的像素点在输出中采用较少,意味着你丢掉了图像边缘位置的许多信息。

padding就是在卷积操作之前填充这幅图像。在这个案例中,你可以沿着图像边缘再填充一层像素。
为了指定卷积操作中的padding,你可以指定的值。也可以使用Valid卷积,也就是p=0。也可使用Same卷积填充像素,使你的输出和输入大小相同。


1.4 池化层(Pooling layers)

除了卷积层,卷积网络也经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性。
在这里插入图片描述
先举一个池化层的例子,然后我们再讨论池化层的必要性。假如输入是一个4×4矩阵,用到的池化类型是最大池化(max pooling)。执行最大池化的树池是一个2×2矩阵。执行过程非常简单,把4×4的输入拆分成不同的区域,我把这个区域用不同颜色来标记。对于2×2的输出,输出的每个元素都是其对应颜色区域中的最大元素值。
最大化运算的实际作用就是,如果在过滤器中提取到某个特征,那么保留其最大值。如果没有提取到这个特征,可能在右上象限中不存在这个特征,那么其中的最大值也还是很小,这就是最大池化的直观理解。


1.5 为什么使用卷积?(Why convolutions?)

和只用全连接层相比,卷积层的两个主要优势在于参数共享和稀疏连接。
在这里插入图片描述
在这里插入图片描述
神经网络可以通过这两种机制减少参数,以便我们用更小的训练集来训练它,从而预防过度拟合。你们也可能听过,卷积神经网络善于捕捉平移不变。通过观察可以发现,向右移动两个像素,图片中的猫依然清晰可见,因为神经网络的卷积结构使得即使移动几个像素,这张图片依然具有非常相似的特征,应该属于同样的输出标记。实际上,我们用同一个过滤器生成各层中,图片的所有像素值,希望网络通过自动学习变得更加健壮,以便更好地取得所期望的平移不变属性。

这就是卷积或卷积网络在计算机视觉任务中表现良好的原因。


1.6 经典网络(Classic networks)

我们来学习几个经典的神经网络结构,分别是LeNet-5、AlexNet和VGGNet

LeNet-5的论文是在1998年撰写的,当时人们并不使用padding,或者总是使用valid卷积,这就是为什么每进行一次卷积,图像的高度和宽度都会缩小,然后又是池化层,高度和宽度再缩小一半。过去,人们使用sigmod函数和tanh函数,而不是ReLu函数,这篇论文中使用的正是sigmod函数和tanh函数。这种网络结构的特别之处还在于,各网络层之间是有关联的,这在今天看来显得很有趣。
在这里插入图片描述
AlexNet,是以论文的第一作者Alex Krizhevsky的名字命名的,这种神经网络与LeNet有很多相似之处,不过AlexNet要大得多。正如前面讲到的LeNet或LeNet-5大约有6万个参数,而AlexNet包含约6000万个参数。当用于训练图像和数据集时,AlexNet能够处理非常相似的基本构造模块,这些模块往往包含着大量的隐藏单元或数据,这一点AlexNet表现出色。AlexNet比LeNet表现更为出色的另一个原因是它使用了ReLu激活函数。
在这里插入图片描述
VGG,也叫作VGG-16网络。值得注意的一点是,VGG-16网络没有那么多超参数,这是一种只需要专注于构建卷积层的简单网络,数字16,就是指在这个网络中包含16个卷积层和全连接层。
VGG-16网络的池化层缩小图像的高度和宽度,同时卷积层的过滤器数量变化存在一定的规律,由64翻倍变成128,再到256和512。正是设计此种网络结构的另一个简单原则。这种相对一致的网络结构对研究者很有吸引力,而它的主要缺点是需要训练的特征数量非常巨大。
在这里插入图片描述


1.6 残差网络(ResNets)(Residual Networks (ResNets))

非常非常深的神经网络是很难训练的,因为存在梯度消失和梯度爆炸问题。这节课我们学习跳跃连接(Skip connection),它可以从某一层网络层获取激活,然后迅速反馈给另外一层,甚至是神经网络的更深层。我们可以利用跳跃连接构建能够训练深度网络的ResNets,有时深度能够超过100层。
在这里插入图片描述
使用标准优化算法训练一个普通网络(图中“plain network”),没有残差,随着网络深度的加深,训练错误会先减少,然后增多。而理论上,随着网络深度的加深,应该训练得越来越好才对。因为对于一个普通网络来说,深度越深意味着用优化算法越难训练。
但有了ResNets就不一样了,即使网络再深,训练的表现却不错,比如说训练误差减少,就算是训练深达100层的网络也不例外,这种方式确实有助于解决梯度消失和梯度爆炸问题。

吴恩达老师认为,残差网络起作用的主要原因就是这些残差块学习恒等函数非常容易,你能确定网络性能不会受到影响,很多时候甚至可以提高效率,或者说至少不会降低网络的效率,因此创建类似残差网络可以提升网络性能。


1.7 Inception网络

Inception网络使用的是1×1卷积或Network in Network这种理念,我如果用到ResNets会再深入研究(取了个盗梦空间的名字哈哈),先给出链接:黄海广博士的笔记2.5节
整理者注:ResNets实现的GitHub地址
后面还可以补充一些数据增强(Data augmentation)的笔记内容


1.8 迁移学习(Transfer Learning)

迁移学习就相当于在github上download别人的数据集和权重,作为自己的初始权重,而不是自己从头训练,这样一是提高效率,而是提高质量。

引用吴恩达老师的话:网上的公开数据集非常庞大,并且你下载的其他人已经训练好几周的权重,已经从数据中学习了很多了,你会发现,对于很多计算机视觉的应用,如果你下载其他人的开源的权重,并用作你问题的初始化,你会做的更好。在所有不同学科中,在所有深度学习不同的应用中,我认为计算机视觉是一个你经常用到迁移学习的领域,除非你有非常非常大的数据集,你可以从头开始训练所有的东西。总之,迁移学习是非常值得你考虑的,除非你有一个极其大的数据集和非常大的计算量预算来从头训练你的网络。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值