卷积核
- 在数字图像处理中,边缘检测常用一些33的算子做卷积运算,这类算子被称为过滤器、*核。
- 卷积运算,就是进行元素乘积求和。例如矩阵区域与垂直边缘检测的过滤器相乘得,求和等于 -5,-5就是结果。
- 在深度学习中进行边缘检测,不一定要用研究出来的特定33算子,而是把这9个数字当成参数,用反向传播去*学习这9个参数。
如果我们有一个 n×n 的图像,用 f×f 的过滤器做卷积,那么输出的维度就是 (n−f+1)×(n−f+1)。这样的话会有两个缺点:
在图像外围填充 p 圈像素,通常使用0来填充。卷积后输出大小为(n+2p−f+1) * (n+2p−f+1)。
- 比如原始图像 66,卷积后变成 44。如果将图像填充 p=1 圈像素点,变成 88的图像,卷积后输出大小为 66。
- Valid 卷积,意思是不填充。那么 n×n 的图像用 f×f 的过滤器卷积后,得到 (n−f+1)×(n−f+1) 维的输出。
Same 卷积,就是卷积后输出的大小与原始图像大小相同。用 n+2p−f+1=n 这个等式求解p,得到 p=(f−1)/2。所以当f是一个奇数的时候,选择相应的 p 就能得到和输入尺寸相同的输出。
stride 步幅
步长为2,7×7的矩阵用 3*3 的过滤器卷积后,得到3×3的输出。
用f×f 的过滤器卷积一个n×n的图像,padding为p,stride 为s,那么输出大小为 。如果商不是整数,向下取整。
彩色图像的卷积
与RBG三个通道相对应,过滤器也需要三层,每层对应一个通道。
- 计算RBG图像的卷积,同样也是计算元素乘积求和,3个通道分别计算完卷积后得到的数字相加,就得到第一个位置的数字。滑动过滤器,计算下一个位置。
- 如果我们想同时检测垂直边缘和水平边缘,或者其他特征,可以叠加多个过滤器,每个过滤器卷积后的输出也是堆叠在一起。输出大小的最后一个维度一般称为通道数,文献里也称为立方体的深度。
我们总结一下维度,如果你有一个的输入图像,这里的是通道数目,然后卷积上的过滤器,按照惯例,图像的通道数和过滤器的必须数值相同。过滤器可以有个,然后你就得到了,这个输出通常是下一层的输入。这里其实就是下一层输入的通道数。换句话说,输出的通道数会等于你要检测的特征数(即过滤器个数)。
单层卷积神经网络
还记得前向传播怎么计算吗?,执行非线性函数得到,其中是输入图像。卷积操作中的这些过滤器就是变量W^{[1]}。
- 所以在一层卷积神经网络中,首先执行线性函数做卷积,再加上偏差;然后应用激活函数ReLU。这样就通过神经网络的一层把一个6×6×3的维度演化为一个4×4×2维度的。
- 计算参数量:假设你有10个过滤器,每个过滤器是3×3×3,那么这一层有多少个参数呢?我们来计算一下,每个过滤器有27个参数,再加上一个偏差b,28个参数。而现在我们有10个过滤器,所以共有28×10=280个参数。
- 请注意一点,不论输入图片有多大,参数量始终都是280个。这就是卷积神经网络的一个特征,叫作“避免过拟合”。
- 设计卷积神经网络时,要决定过滤器的大小、步幅、padding,以及使用多少个过滤器,确定这些超参数需要费工夫。
- 只有卷积层的卷积网络示例,图片分类问题,判断是否是猫图:
- 假设图片大小是39×39×3,第一层我们用一个3×3的过滤器来提取特征,,有10个过滤器。 ,所以第一层激活值的维度是(37×37×10)。
- 假设第二层我们采用的过滤器是5×5的矩阵,即,步幅为2,即,padding为0,即,且有20个过滤器,所以其输出结果为17×17×20。
- 最后一个卷积层,假设过滤器还是5×5,步幅为2,即,假设使用了40个过滤器,padding为0,最后结果为7×7×40。
- 到此,我们从这张39×39×3的输入图像中提取了7×7×40=1960个特征。将其平滑处理,展开成有1960个单元的向量。为了预测输出结果,我们把这个长向量传入softmax回归函数,用 表示最终的预测输出。
Pooling 池化层
- 除了卷积层,卷积网络也经常使用池化层来缩减模型的大小,提高计算速度,同时提高所提取特征的鲁棒性。池化类型有最大池化和平均池化。
- 最大池化(max pooling),输出的每个元素都是其对应颜色区域中的最大元素值。f 和 s 是最大池化的超参数,但池化过程中没有需要学习的参数。一旦确定了 f 和 s,它就是一个固定运算,梯度下降不会改变它的值。
- 举例1:假设我们使用 2×2 矩阵,步幅s是2,输出如下图
- 举例二:f = 3,s = 1.
- 最大池化的直观理解:只要在任何一个区域内提取到某个特征,它都会保留在最大化的池化输出里。如果没有这个特征,那么其中的最大值也还是很小。
- 平均池化(average pooling),选取的是每个区域的平均值。f 和 s 也是超参数。
- 目前来说,最大池化比平均池化更常用。但也有例外,就是深度很深的神经网络,你可以用平均池化来分解规模为7×7×1000的网络的表示层,在整个空间内求平均值,得到1×1×1000。
池化的超参数包括过滤器大小 f 和步幅 s,常用的参数值为 f=2,s=2,应用频率非常高,其效果相当于高度和宽度缩减一半,也有使用f=3,s=2的情况。你也可以根据自己意愿增加表示padding等其他超级参数,但是很少这么做。
卷积神经网络示例(仿LeNet-5)
人们在计算神经网络有多少层时,通常只统计具有权重和参数的层。因为池化层没有权重和参数,只有一些超参数。本课程中,我们把CONV1和POOL1共同作为一个卷积,并标记为Layer1。
- CNN的一种常见结构是,一个或多个卷积后面跟随一个池化层,然后一个或多个卷积层后面再跟一个池化层,然后是几个全连接层,最后是一个softmax。
- 计算一下示例神经网络中的激活值形状,激活值大小和参数数量
- 此例中的卷积神经网络很典型,看上去它有很多超参数,关于如何选定这些参数,常规做法是尽量不要自己设置超参数,而是查看文献中别人采用了哪些超参数,选一个在别人任务中效果很好的架构。根据我的经验,找到整合基本构造模块最好方法就是大量阅读别人的案例。
- 有几点要注意,第一,池化层和最大池化层没有参数;第二卷积层的参数相对较少,其实大部分参数都在全连接层。
随着神经网络的加深,激活值尺寸会逐渐变小,如果激活值尺寸下降太快,也会影响神经网络性能。
why CNN
和只用全连接层相比,卷积层的两个主要优势在于参数共享和稀疏连接。通过这两种机制可以减少参数,以便我们用更小的训练集来训练神经网络,从而预防过度拟合。
- 参数共享
- 特征检测(如垂直边缘检测)如果适用于图片的某个区域,那么它也适用于图片的其他区域。
- 你们也可能听过,卷积神经网络善于捕捉平移不变。通过观察可以发现,向右移动几个像素,图片中的猫依然清晰可见,这张图片依然具有非常相似的特征,应该属于同样的输出标记。
- 实际上,我们用同一个过滤器生成各层中图片的所有像素值,希望网络通过自动学习变得更加健壮,以便更好地取得所期望的平移不变属性。
- 稀疏连接
- 如下图所示,右边这个输出单元(元素0)是通过3×3的卷积计算得到的,仅与36个输入特征中的9个相连接,其它像素值都不会对输出产生任影响,这就是稀疏连接的概念。