【吴恩达CNN】week1:卷积与池化

吴恩达深度学习CNN第一周

一. 卷积(Convolution)

正如人们在全连接网络中或是在计算机视觉应用领域中发现的一样,图像数据的巨大从而导致参数数量的锐增,给模型的训练带来了很大的问题。
而卷积运算本身即可以起到减小数据大小的作用。

1. 过滤器(filter/kernel)与卷积(convolution)

  • 输入:一个6x6的灰度图像(因此图像的大小即为6x6x1)
    在这里插入图片描述
  • 给定一个卷积核(或者称为一个过滤器)——3x3的方阵

根据需要可以填入不同的数值

在这里插入图片描述

  • 计算过程与输出
    在这里插入图片描述
    在这里插入图片描述
    将卷积核按照从左至右,从上至下的顺序每次一个单元进行移动,然后重复进行“对应元素相乘并相加”的操作,就能得到目标矩阵。

边缘检测
上述在介绍3x3的kernel时,我们曾提到过这其中的数据(和kernel的维度)都可以根据实际问题来进行设定;那么在上例的设定下,其实是为了检测出垂直边缘(从明亮向灰暗过渡的垂直边缘)

  • 从矩阵运算的角度来看
    在这里插入图片描述
  • 从图像可视化的角度来看
    在这里插入图片描述
    故,我们可以理解为,将原矩阵和kernel矩阵进行卷积运算,实质上是想在原图中找到kernel可视化所表现出的局部图像模式,在结果矩阵,极亮的区域就标明了该中特定的特征模式所在的范围

    在后续,我们也会继续学习如果将一个3x3的卷积核中的9个数字都作为参数,利用梯度下降和反向传播来寻找最优的那个卷积核。

2. 填充(padding)

(1)无填充的卷积运算存在的问题
在这里插入图片描述
①卷积运算输出的图像会缩小

当神经网络层数较深时,“图像缩小”这一特点将会很大程度地影响训练效果。

②对于图像边缘处的信息会有丢失和遗漏

如上图所示,绿色的黑框在整个卷积运算中只参与了一次;但是红色的黑框会参与多次。

(2)解决措施——填充(padding)
在这里插入图片描述
根据计算公式,可以知道需要将原图像的外部进行一层填充,才能保证输出图像具有和原图像相同的维度
W ′ = f l o o r ( ( W − F + 2 P ) / S + 1 ) W' = floor((W-F+2P)/S+1) W=floor((WF+2P)/S+1)
一般情况下,我们习惯用0进行填充。

此时,绿色黑框中已经可以影响输出结果的四个像素点了(也即参与了四次卷积运算),“边缘信息被丢失”这一缺点,通过padding 操作被削弱了。

(3)填充像素的选择
valid convolution 和Same Convolution
在这里插入图片描述
在Same padding的策略中,根据【p = (f-1)/2】的关系,也不难想到我们为什么通常选用奇数维度的卷积核kernel。

3. 卷积中的步幅(Strided Convolution)

(1)设定了步长的卷积操作
同样是将卷积核和输入图像进行对应,然后进行“对应位置元素相乘并求和”的运算;只不过每次将卷积核向右(或者向下)进行移动的时候,不再是按照默认的数值1,移动一个像素点,而是按照步长stride的设定,移动s个像素点。
在这里插入图片描述
(2)有步长的卷积运算的维度变化公式
在这里插入图片描述
而所谓【向下取整】的这个运算,意味着当卷积核不能完整地在输入数据内部时,该卷积运算就不会进行。
即:你的过滤器必须完整地处于图像中或者填充之后的图像区域内,才能输出相应结果。
在这里插入图片描述

【Notice】关于卷积与互相关
在严格的数学定义下,以上我们所讲的操作都只能称作是【互相关】,但是在深度学习领域通常我们会默认上述的操作就是所谓的“卷积”,因此在接下来的课程中,我们说对图像进行卷积操作就是以上我们谈论的相关操作。

实际上的“卷积”操作如下所示:
在这里插入图片描述

4. 三维卷积

(1)三维卷积的运算过程

三维卷积的实例,最常见的就是对RGB三通道的图像进行卷积操作,如下:

在这里插入图片描述
卷积核的移动和二维是一致的:
在这里插入图片描述

  • 卷积核的尺寸(长和宽)可以根据需要自主设定,但是卷积核的深度必须要和输入图像的深度保持一致,正如上图所展示的那样,每一次都是同时对n个通道进行“相乘并求和”的运算

(2)卷积核——特征提取器

之前在二维卷积的示例中我们提到过通过设计不同的卷积核(kernel),可以提取出不同的特征。
在这里插入图片描述
(3)卷积输出的深度
在这里插入图片描述

5. 卷积网络中的卷积层

(1)卷积层的前向传播过程
在这里插入图片描述
(2)卷积层的符号表示总结
在这里插入图片描述
有以下几点要注意:

  • 前一层的激活输出就是下一层的输入值
  • 卷积核的深度必须要和输入数据的深度值保持一致
  • 输出数据的深度是由选用的卷积核的数量确定的

(3)简单卷积神经网络的示例
在这里插入图片描述
根据上图,可以发现卷积神经网络运算的一般规律:
随着运算层数的增加,数据(图像)的大小往往会逐渐减小,但是数据的深度往往会增大。


二. 池化(Pooling)

除了卷积层,卷积神经网络也经常使用池化层——

  • 缩减模型的大小
  • 提高计算速度
  • 提高所提取特征的鲁棒性

1. 池化运算示例:最大池化(Max Pooling)

加入对一个4x4的输入数据,使用f = 2,s = 2的池化参数进行最大池化的运算:
直观来看,就是把原数组分成了四个子矩阵块,每一个子矩阵块中取其最大值作为输出的一个元素。

实质上就是维护了一个fxf大小的kernel,每次按照s的步长进行滑动,而kernel进行的运算就是对其所涵盖的fxf范围的子矩阵取其中的最大值。
在这里插入图片描述

如果把输入和输出都理解成图像中具有的某个特征,那么【最大化】操作的功能就在于:只要在任何一个象限内提取到了某个特征,它都会保留在最大池化的输出里。

最大化运算的本质就是:如果在过滤器里提取到了某个特征,那么保留其最大值;如果没有提取到这个特征,那么该部分可能不存在这个特征,相应地,得到的数值就不会很大。

  • 池化操作在实践应用中被证实效果很好,其有一组超参数,但一旦确定就固定下来,因此在反向传播的过程中不需要进行学习
  • 池化操作含有的超参数以及输入出数据的维度计算公式都和卷积是相通的
  • 上述是用二维最大池化作为示例来说明,如果输入的是一个多信道(假设深度为n)的数据,那么经过池化运算后得到的输出数据同样也是深度为n的。即在每一个信道上都按照上述的定义进行池化运算即可。

【另一种池化运算】Average Pooling
顾名思义,在针对每个子区域进行运算时,选取的不再是最大值,而是平均值。
在这里插入图片描述

2. 池化的总结

在这里插入图片描述

  • 最大池化只是计算神经网络某一层的静态属性
  • 池化的超参数不需要经过学习,有可能是手动设置的,也有可能是经过交叉验证设置的

三. 卷积神经网络示例

1. 一个完整的卷积神经网络

以下我们采用手写体数字识别的应用情景,对一个完整的卷积神经网络进行构建,并捋清了其前向传播的计算过程。
在这里插入图片描述

  • 注意卷积运算和池化运算后数据大小的变化
  • 和之前的卷积网络一样,随着层数的增加,数据的长宽尺寸会减小,但数据的深度会增加
  • 上图的最下方给出了一般卷积网络的构成

2. 各层网络结构对比

在这里插入图片描述

3. 卷积神经网络的优势

(1)减少参数,从而便于我们使用更小的训练集来训练网络模型,还能有效预防过拟合的出现。

卷积神经网络主要通过【权值共享】和【稀疏连接】来达到减少参数数目的目的。

在这里插入图片描述
①权值共享
一个filter就对应一个特征提取器,如果一个filter适用于图片中的某一区域,那么其可以适用于图片中的任何区域。
因此,每个特征检测器及输出都可以在输入图片的不同区域中使用同样的参数

filter不仅可以提取诸如边缘这样的低阶特征,也可以提取诸如眼睛、某一动物这样的高阶特征。

②稀疏连接
例如使用了一个fxf大小的filter,那么就说明输出单元的一个单元格中的值,只和源数据中的fxf个单元相关联(不论源数据本身的维度是多大),源数据中的其他单元格对该输出单元的值不造成影响。
在这里插入图片描述
(2)卷积神经网络善于捕捉平移不变,即使对图像进行像素的平移,依然可以清晰地捕捉到图像中存在的特征模式。

实际上,我们用同一个过滤器生成各层中图片的所有像素值,希望网络通过自动学习变得更加健壮;以便更好地取得所期望额平移不变属性。

4. 卷积神经网络的训练

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/kodoshinichi/article/details/109706431