DeepLearning.ai学习笔记(四)卷积神经网络 -- week1 卷积神经网络基础知识介绍

一、计算机视觉

如图示,之前课程中介绍的都是64* 64 3的图像,而一旦图像质量增加,例如变成1000 1000 * 3的时候那么此时的神经网络的计算量会巨大,显然这不现实。所以需要引入其他的方法来解决这个问题。

二、边缘检测示例

边缘检测可以是垂直边缘检测,也可以是水平边缘检测,如上图所示。

至于算法如何实现,下面举一个比较直观的例子:

可以很明显的看出原来6 * 6的矩阵有明显的垂直边缘,通过3 * 3的过滤器(也叫做 “核”)卷积之后,仍然保留了原来的垂直边缘特征,虽然这个边缘貌似有点大,这是因为数据不够大的原因,如果输入数据很大的话这个不是很明显了。

三、更多边缘检测内容

除了上面的垂直,水平边缘检测,其实也可以检测初颜色过度变化,例如是亮变暗,还是暗变亮?

下面是一些常见的过滤器,第二个是Sobel filter,具有较强的鲁棒性,第三个是Schoss filter

其实过滤器的9个参数也可以通过学习的方式获得,虽然比较费劲,但是可能会学到很多其他除了垂直,水平的边缘特征,例如45°,70°等各种特征。

四、Padding

1.为什么要用padding

之所以运用Padding(填充)主要是为了解决如下两个缺点:

1.由前面的例子可以看到,每经过一次卷积计算,原数据都会减小,但有的时候我们并不希望这样。举个比较极端的例子:假设原数据是30 * 30的一只猫的图像,经过10次卷积(过滤器是3 * 3)后,最后图像只剩下了10 * 10了,此时不就剩下马赛克了吗23333

2.由卷积的计算方法可以知道,图像边缘特征计算次数显然少于图像中间位置的像素点,如下图示(绿色的位置明显是冷宫)

所以为了解决上=上面两个问题,引入了padding,一般是padding=1,填充的数据是0。效果如下:

原来的6 * 6填充后变成了8 * 8,此时在经过一次卷积得到的仍旧是6 * 6的矩阵。

下面总结一下卷积之后得到矩阵大小的计算方法,假设:

  • 原数据是 n * n
  • 过滤器是 f * f
  • padding p * p

得到的矩阵大小是 (n+2p-f+1)*(n+2p-f+1)

对于第二个缺点,虽然边缘像素点仍旧计算的比较少,但是这个缺点至少一定程度上被削弱了。

2.如何padding的大小

两种选择:Valid 卷积Same 卷积

  • valid 卷积

即不添加padding。

  • Same 卷积

即保持原图像矩阵的大小。满足 (n+2p-f+1) = n ,即 \(p=\frac{f-1}{2}\) 为了满足上式,f一般奇数。

五、卷积步长

过滤器纵向,横向都需要按步长S来移动,如图示

结合之前的内容,输出矩阵大小计算公式方法为,假设:

  • 原数据是 : n * n
  • 过滤器是 : f * f
  • padding : p * p
  • 步长Stride: s * s

得到的矩阵大小是 ⌊\(\frac{n+2p-f}{s}\)+1⌋*⌊\(\frac{n+2p-f}{s}\)+1⌋

⌊⌋: 向下取整符号 ⌊59/60⌋=0

⌈⌉:向上取整符号 ⌈59/60⌉=1

六、卷积中“卷”的体现之处

这一节用立体卷积来解释。

如图示,输入矩阵是 6 * 6 * 3(height * width * channels),过滤器是3 * 3 * 3,计算方法是一一对应相乘相加,最后得到4 * 4的二维矩阵。

有时可能需要检测横向边缘和纵向边缘,或者其他特征,所以我们可以使用多个过滤器。 上图则使用了两个过滤器,得到的特征矩阵大小为 4 * 4 * 2.

七、单层卷积网络

如图示得到4 * 4的矩阵后还需要加上一个变差\(b_n\),之后还要进行非线性转换,即用ReLU函数。因此假如在某一卷积层中使用了10个3 * 3的过滤器,那么一共有\((3*3+1)*10=280\)个参数。

下面总结了各项参数的大小和表示方法:

  • 过滤器大小:\(f^{[l]}\)
  • 填充 padding:\(p^{[l]}\)
  • 步长 stride:\(s^{l}\)
  • 激活函数: \(a^{l}:n_H^{l} * n_W^{l} * n_c^{l}\)
  • 权重Weight: \(f^{l}*f^{l}*n_c^{[l-1]}*n_c^{[l]}\)
  • 偏差bias:\(1*1*1*n_c^{[l]}\)
  • 输入矩阵(height* width* channels): \(n_H^{l-1} * n_W^{l-1} * n_c^{l-1}\)
    • 每一卷积层的过滤器的通道的大小 = 输入层的通道大小
  • 输出矩阵(height* width* channels): \(n_H^{l} * n_W^{l} * n_c^{l}\)
    • 输出层的通道的大小 = 过滤器的个数

输出层与输入层计算公式:

\(n_{H/W}^{[l]}=[\frac{n_{H/W}^{[l-1]}+2p^{[l]}-f^{[l]}}{s^{[l]}}+1]\)

八、简单卷积网络示例

上图简单介绍了卷积网络的计算过程,需要再介绍的一点是最后一层的全连接层,即将7 * 7 * 40的输出矩阵展开,得到1960个节点,然后再采用逻辑回归或Softmax来进行预测。

另外从上面的例子还可以看到,在一般的卷积神经网络中,每一层的矩阵的height和width是逐渐减小的,而channel则是增加的。

卷积神经网络中常见的三中类型的layer:

  • Convolution (Conv 卷积层)
  • Pooling (Pool 池化层)
  • Fully connected (FC 全连接层)

九、池化层

Pooling layer(池化层)的作用是压缩数据,加速运算,同时提高所提取特征的鲁棒性。

  • Max Pooling 即选取最大的
  • Average Pooling 即计算平均值,但是这个用的不多,因为这个会加入更多的计算量

注意:一般来说池化层是不需要Padding的,所以p都会置为0

十、卷积神经网络示例

注意:在吴大大的视频中将 Conv layerPooling layer合并在一起视为一层,因为池化层没有参数(因为池化层的过滤器的无参数,而且其大小可以事先确定好)。 但是在其他文献中可能会把池化层算成单独的层,所以具体视情况而定。

十一、为什么使用卷积?

卷积相比于全连接的好处最直观的就是使用的参数更少:

如图示,加入我们有一个32 * 32 * 3的图片,经过6个5 * 5的过滤器后可以得到28 * 28 * 6的矩阵,此时我们只需要 \(5*5*6=150\)个参数就可以了。而如果不用卷积呢?

首先32 * 32 3 = 3072,假如输出矩阵也要是28 28 * 6,即4704个节点,如果全连接的话那么就需要4704 * 3072个权 重参数,所以这个对比还是很明显的了。

至于为什么可以保证参数少的同时也保证了有效性,是因为如下两个原因

  • 参数共享(Parameter sharing)
  • 稀疏连接(Sparsity of connections)

参数共享:例如我们希望获取图像的竖向特征,那么我们只需加入一个可以检测竖向特征的过滤器就够了。 稀疏连接:如上图所示,输出矩阵左上角的0只与输入矩阵左上角的9个元素有关,其他的值不会干扰。输出矩阵其他位置也一样。所以这就是为什么卷积网络也可以捕捉到图像平移的特征,例如将图片中的猫向左平移几个像素点后,依然能够识别正确。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大数据挖掘DT机器学习

数据挖掘算法-Matlab实现:Logistic 回归

什么叫做回归呢?举个例子,我们现在有一些数据点,然后我们打算用一条直线来对这些点进行拟合(该曲线称为最佳拟合曲线),这个拟合过程就被称为回归。 利用Logis...

4236
来自专栏深度学习那些事儿

深度学习中IU、IoU(Intersection over Union)的概念理解以及python程序实现

Intersection over Union是一种测量在特定数据集中检测相应物体准确度的一个标准。我们可以在很多物体检测挑战中,例如PASCAL VOC ch...

8943
来自专栏算法channel

深度学习|卷积神经网络(CNN)介绍(前篇)

01 — 回顾 以上推送了神经网络相关的介绍性内容和相关的基础理论,包括: 神经网络的基本结构:输入层,隐含层,输出层; 批随机梯度下降算法(mini-batc...

5469
来自专栏PaddlePaddle

卷积层

深度学习基础理论-CNN篇 卷积层 卷积层(convolution layer)是卷积神经网络中的基础操作,甚至在网络最后起分类作用的全连接层在工程实现时也...

4269
来自专栏AI研习社

用Kaggle经典案例教你用CNN做图像分类!

前言 在上一篇专栏《利用卷积自编码器对图片进行降噪》中,我们利用卷积自编码器对 MNIST 数据进行了实验,这周我们来看一个 Kaggle 上比较经典的一...

4106
来自专栏机器学习原理

深度学习——CNN(2)池化层怎么反向传播?为什么采用小批量梯度下降?学习率设置

1.6K3
来自专栏计算机视觉战队

DeepLab v2及调试过程

今天我们开始说说语义分割第二个系列,DeepLab V2。说这个之前,我们先说说FCN的一些简单知识。 图像语义分割,简单而言就是给定一张图片,对图片上的每一个...

4726
来自专栏专知

使用SSD进行目标检测:目标检测第二篇

【导读】近日,CV-Tricks.com发布了一篇文章,使用SSD进行目标检测,SSD是当前最流行的目标检测算法之一。作者从检测的基本概念、滑动窗口检测、减少滑...

5805
来自专栏人工智能LeadAI

VGG和GoogLeNet inception

01 介绍 googlenet和vggnet这两个模型是在AlexNet后人工神经网络方面研究的又一里程碑,也是许多论文和博客中用来和提出的新方法进行对比的b...

39014
来自专栏贾志刚-OpenCV学堂

tensorflow风格迁移网络训练与使用

卷积神经网络实现图像风格迁移在2015的一篇论文中最早出现。实现了一张从一张图像中提取分割,从另外一张图像中提取内容,叠加生成一张全新的图像。早前风靡一时的风格...

2772

扫码关注云+社区

领取腾讯云代金券