【CV】吴恩达卷积神经网络 | 第1章 | 卷积神经网络的基础

本文详细介绍了卷积神经网络的基础,包括边缘检测、填充、步长、三维卷积及网络结构示例。重点讲解了参数共享和稀疏连接如何减少参数,以及为何在计算机视觉任务中常用。涵盖了pooling层的两种类型和全连接层的应用。
摘要由CSDN通过智能技术生成

本系列文章如果没有特殊说明,正文内容均解释的是文字上方的图片
卷积神经网络 | DeepLearning.AI
2021吴恩达深度学习-卷积神经网络_bilibili

1 卷积神经网络的基础

1-1 计算机视觉

1-2 边缘检测实例

在这里插入图片描述

  • 左侧矩阵为原图像,中间矩阵为卷积核(这是一个垂直边缘检测过滤器),右侧为结果图像,星号表示卷积运算
  • 结果中的第一行第一列的值为:把卷积核放在原图像最左上角,然后用原图像中每一格的值乘卷积核中对应的那一个的值,每一格都这样算一遍,一共有九项,加起来就得到结果(上图绿色式子就是计算过程)
  • 把卷积核往右移一格再计算的结果就是结果图像中第一行第二列的值
    在这里插入图片描述
    用这个卷积核进行垂直边缘检测的例子↑↑↑

1-3 更多边缘检测

在这里插入图片描述

  • 上图第一行的三个矩阵是三个可能的垂直边缘检测过滤器,他们的转置就是水平边缘检测过滤
  • 第二行:可以把过滤器的九个参数让神经网络自己学习,以便挑选出最适合输入图像的过滤器

1-4 填充(padding)

在这里插入图片描述

  • 设原图像大小为n×n,卷积核大小为f×f,则输出结果图像大小为(n-f+1)×(n-f+1)
  • 按照之前卷积的方法,输出图像变小了,并且边缘像素进行卷积运算的次数很少,他们被丢失了

在这里插入图片描述

  • 所以现在原图像外侧增加一圈像素0,这里增加了1个像素,p是填充数量,这里p=padding=1
  • 增加填充后输出结果变成了 ( n + 2 p − f + 1 ) × ( n + 2 p − f + 1 ) (n+2p-f+1)×(n+2p-f+1) (n+2pf+1)×(n+2pf+1),保持了原图像的大小

在这里插入图片描述

  • 有两种卷积:valid卷积、same卷积
  • valid卷积指的是本章开头的卷积方法,即不添加填充(p=0),输出后图像会变小
  • same卷积指的是在原图像边缘添加填充像素,使得输出图像与输入图像大小一致
    • 要使得大小一致,填充 p = f − 1 2 p=\frac{f-1}{2} p=2f1,这就是说,卷积核必须是一个奇数边长的矩阵才能让填充像素不是一个小数,实际上,卷积核边长f几乎一直是一个奇数,这样也可以卷积核有一个单独的中心的像素来方便确定卷积核当前的位置

1-5 卷积步长(stride)

在这里插入图片描述

  • 之前的卷积核在原始图像中每次移动一个像素,即步长s=1
  • 如上图所示,现在将步长改为s=2,即每次移动两个像素
  • 换行时也是移动2个像素,如下图

在这里插入图片描述
在这里插入图片描述

  • 当填充为 p p p,步长为 s s s,原图边长为 n n n,卷积核边长为 f f f时,输出图像大小为 ( n + 2 p − f s + 1 ) × ( n + 2 p − f s + 1 ) (\frac{n+2p-f}{s}+1)×(\frac{n+2p-f}{s}+1) (sn+2pf+1)×(sn+2pf+1)
  • 如果分子不是整数,进行向下取整。向下取整符号为: ⌊ ⌋ \lfloor\rfloor ,输出图像大小公式改为: ⌊ n + 2 p − f s + 1 ⌋ × ⌊ n + 2 p − f s + 1 ⌋ \lfloor\frac{n+2p-f}{s}+1\rfloor×\lfloor\frac{n+2p-f}{s}+1\rfloor sn+2pf+1×sn+2pf+1

在这里插入图片描述
上文提到的卷积运算的方法在数学上被称作交叉相关,数学上的卷积运算需要先将卷积核按x轴和y轴分别镜像(变换后如上图所示),再进行交叉相关运算。但在卷积神经网络中,是否对卷积核镜像并不会产生很大的影响,所以为了简化计算,神经网络中的卷积运算指的就是数学中的交叉相关运算。

1-6 三维卷积

在这里插入图片描述

  • 对一幅RGB图像进行卷积操作,原图像共有3个通道,卷积核也有3个通道(即3层),上图中的原图像大小为6(height)×6(width)×3(通道数channels),卷积核大小为3×3×3,卷积核通道数需要与原图像通道数相等。
  • 卷积运算的方式与之前相同,原图像的每一层与卷积核中的一层对应进行卷积计算,最后算出3×3×3=27个数字相加得到输出图像的一个像素值,注意输出图像只有1个通道。
    在这里插入图片描述
  • 如上图,卷积核被展开为分别代表R、G、B的三个矩阵
  • 如果想要检测红色的垂直边缘的话,按照上图展开的第一行的卷积核进行运算(即R通道为垂直检测卷积核,其他通道都为0矩阵)
  • 如果想要检测所有通道的垂直边缘的话,按照上图展开的第二行的卷积核进行运算(即所有通道都为垂直检测卷积核)

在这里插入图片描述

  • 如果想要既检测垂直边缘,又检测水平边缘,如上图,用两个卷积核,一个是垂直边缘检测卷积核,一个是水平边缘检测卷积核,分别计算得到两个4×4的结果,两个结果合起来的到一个4×4×2的结果

1-7 单层卷积网络

在这里插入图片描述
如上图

  • 在进行卷积运算输出后的矩阵上加上一个实数偏差 b b b,第一个输出的4×4矩阵的偏差为 b 1 b_1 b1,第二个为 b 2 b_2 b2,加上去的偏差利用广播对矩阵内的每一个元素都加上偏差;之后再把加上偏差之后的矩阵代入到激活函数ReLU中,得到输出的4×4矩阵;再把两个运算得到的矩阵合起来得到4×4×2的矩阵(如果一共有10个卷积核,那最后得到的结果就是一个4×4×10的矩阵)
  • 在神经网络中,原图像为 a [ 0 ] a^{[0]} a[0],卷积核为 w [ 1 ] w^{[1]} w[1],卷积运算后得到的矩阵为 w [ 1 ] a [ 0 ] w^{[1]}a^{[0]} w[1]a[0],加上偏差后的矩阵为 z [ 1 ] z^{[1]} z[1],进行激活函数 g g g计算、两个结果合成后得到的4×4×2的矩阵为 a [ 1 ] a^{[1]} a[1]
  • 以上过程的公式表示为: z ( 1 ) = w [ 1 ] a [ 0 ] + b [ 1 ] z^{(1)}=w^{[1]} a^{[0]}+b^{[1]} z(1)=w[1]a[0]+b[1] a [ 1 ] = g ( z [ 1 ] ) a^{[1]}=g\left(z^{[1]}\right) a[1]=g(z[1]),这就是一个前向传播的过程
  • 这里神经网络计算的参数就是所有卷积核和偏差

在这里插入图片描述
如果有10个3×3×3的卷积核,那么在这层神经网络中共有多少个参数?

  • 所有卷积核中一共有3×3×3×10=270个参数
  • 再加上共有10个偏差
  • 所以共有270+10=280个参数

在这里插入图片描述

  • l l l表示当前需要计算出神经网络的第 l l l
  • f [ l ] f^{[l]} f[l]表示第 l l l层的卷积核的边长,如之前用的卷积核边长为3
  • p [ l ] p^{[l]} p[l]表示第 l l l层的填充大小
  • s [ l ] s^{[l]} s[l]表示第 l l l层的步长
  • n c [ l ] n_{c}^{[l]} nc[l]表示第 l l l层的卷积核的数量(下标c表示channels,因为卷积核的数量决定了经过这一层神经网络后输出矩阵的通道数)
  • l l l层的输入为 n H [ l − 1 ] n W [ l − 1 ] × n c [ l − 1 ] n_{H}^{[l-1]}n_{W}^{[l-1]} \times{n_{c}}^{[l-1]} nH[l1]nW[l1]×nc[l1],其中 n H [ l − 1 ] n_{H}^{[l-1]} nH[l1]表示上一层矩阵的高度, n W [ l − 1 ] n_{W}^{[l-1]} nW[l1]表示上一层矩阵的宽度, n c [ l − 1 ] n_{c}^{[l-1]} nc[l1]表示上一层矩阵的维度(通道数),即上一层矩阵的卷积核的数量
  • l l l层的输出为 n H [ l ] n W [ l ] × n c [ l ] n_{H}^{[l]}n_{W}^{[l]} \times{n_{c}}^{[l]} nH[l]nW[l]×nc[l]
  • l l l层矩阵的高度或宽度的计算公式为: n [ l ] = [ n [ l − 1 ] + 2 p [ l ] − f [ l ] s [ l ] + 1 ] n^{[l]}=\left[\frac{n^{[l-1]}+2 p^{[l]}-f^{[l]}}{s^{[l]}}+1\right] n[l]=[s[l]n[l1]+2p[l]f[l]+1]
  • l l l层的卷积核的大小为 f ( l ) × f l × n c [ l − 1 ] f^{(l)} \times f^{l} \times n_{c}^{[l-1]} f(l)×fl×nc[l1]
  • 系数(权重)矩阵大小为: f [ l ] × f [ l ) × n c [ l − 1 ] × n c [ l ] f^{[l]} \times f^{[l)} \times n_{c}^{[l-1]} \times n_{c}^{[l]} f[l]×f[l)×nc[l1]×nc[l]
  • 偏差矩阵大小为 n c [ l ] n_{c}^{[l]} nc[l],后面还有更好的 ( 1 , 1 , 1 , n c [ l ] ) \left(1,1,1, n_{c}^{[l]}\right) (1,1,1,nc[l])

1-8 卷积网络的简单示例

在这里插入图片描述
上图是一个完整的卷积神经网络
随着层数增加,图像大小会逐渐变小,而维度会越来越大
再结束卷积神经网络后,将最后的图像展开为一个向量,然后再输入到逻辑回归或其他东西中得出神经网络预测的结果
在这里插入图片描述
之前提到的都是卷积层(Convolution/Conv)
另外还有池化层(Pooling/Pool)和全连接层(Fully connected/Fc)

1-9 池化层

max pooling

在这里插入图片描述

  • max pooling是池化的一种类型
  • 池化过程为:这里由于确定过滤器边长为2,步长为2,所以将原图像(上图左侧)分为了4个颜色区域,在每个颜色区域的最大值取出来得到上图右侧的结果
  • 池化有超参数,这里为f=2,s=2,这两个参数是固定的,也就在梯度下降算法中确定了计算
    在这里插入图片描述
  • 这里确定过滤器边长f=3,步长s=1,则能够得当上图的结果,原图像与结果图像大小的计算公式跟之前是一样的
  • 如果图像是多维的(比如2维),那么得到的结果图像也是2维,第2维的结果计算方式是一样的

average pooling

在这里插入图片描述
average pooling常备用在深度很深的神经网络中,比如图像大小为7×7×10000
计算方式为:取区域内的平均值,(上图f=2,s=2)

总结

在这里插入图片描述
池化层的超参数常见被取为(f=2,s=2或f=3,s=2),一般不添加填充(即p=0)
池化层是没有需要学习的参数的

1-10 CNN示例/全连接层

激活函数对于提高模型鲁棒性,非线性表达能力,缓解梯度消失问题,将特征图映射到新的特征空间从何更有利于训练,加速模型收敛等问题都有很好的帮助
在这里插入图片描述
----------来源

在这里插入图片描述
上图的流程是一个完整的卷积神经网络过程,其中的参数参考了LeNet-5,但与其不同。这里以上图为例

  • 由于池化层没有(要学习的)参数,所以,这里神经网络的一层包含了一个卷积层和一个池化层,即神经网络层1包括了卷积层1(Conv1)和池化层1(Pool1)
  • 在卷积层和池化层走完后,将结果展开为一个400维的向量
  • 输入两个全连接层
  • 再输入softmax层得到每个结果的概率(比如识别数字0-9,那么softmax层输出10维向量,其中的元素为识别出是该数字的概率)神经网络中的softmax层为何可以解决分类问题
  • 这里的卷积神经网络结构为conv-pool-conv-pool-fc-fc-softmax
    卷积神经网络的结构也可能是conv(几个)-pool-conv(几个)-pool-fc(几个)-softmax

在这里插入图片描述
上图是之前的卷积神经网络例子的一些数据情况

1-11 为什么用卷积?

在这里插入图片描述
用全是全连接层的神经网络会产生非常多的参数,而用含卷积层的神经网络就可以减少参数的数量
在这里插入图片描述
卷积网络参数少的原因有:

  • 参数共享(parameter sharing)
    • 如上图右侧绿色圈内的数字0与上图左侧绿色区域内的数据均有关
  • 稀疏连接(sparsity of connections)
    • 如上图右侧红色圈内的数字30只与上图左侧红色区域内的9个数据有关
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fannnnf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值