Cousera - Deep Learning - 课程笔记 - Week 10

2018年11月版本

Week 10

计算机视觉 Computer Vision

  • 图像分类:判断图像中的内容是不是属于某一目标类
  • 对象检测:寻找判断并定位图像中目标对象的位置
  • 神经风格转换:对图像进行指定风格的重绘
  • 挑战:输入可以任意大

边缘检测 Edge Detection

  • 边缘可以说是视觉神经网络第一层隐藏层能捕捉到的最基本特征

  • 检测物体可以使用边缘检测,基本思路是分别进行垂直边缘和水平边缘的检测

  • 使用卷积核完成卷积,垂直方向和水平方向(以3*3卷积核为例,垂直核左一列为1,有一列为-1,中间一列为0,水平核类似)

  • 卷积操作就是将卷积核覆盖在等大小的区域内,做乘法加和,结果就是对应位置的结果

  • 上面提到的卷积核能够区分亮到暗(亮边界)以及暗到亮(暗边界)的边界,垂直核可以检测到垂直边界,水平核检测水平边界

  • 对于核中数字的使用可以有其他的选择(以垂直核为例)

    • Sobel过滤器,左右两列中间值分别为2核-2
    • Scharr过滤器,左右两列对应3,10,3和-3,-10,-3
    • 可以通过学习的方式得到卷积核的各个位置上的值(反向传播)

补白 Padding

  • 对于一幅 n × n n\times n n×n的图片,使用 f × f f\times f f×f的卷积核,产生的结果的维数是 ( n − f + 1 ) × ( n − f + 1 ) (n-f+1)\times(n-f+1) (nf+1)×(nf+1)
  • 上面的情况会产生缺陷
    • 每进行一次卷积操作,图片会变小
    • 边角上的元素只能在输出中被使用一次
  • 解决方法:对图片补白,即增加一个额外的边缘(通常补0)
    • 可以保持图片的原有大小,记补白量为 p = 1 p=1 p=1,则最终结果会变成 ( n + 2 p − f + 1 ) × ( n + 2 p − f + 1 ) (n+2p-f+1)\times(n+2p-f+1) (n+2pf+1)×(n+2pf+1)
    • 边角上的元素能够影象更多的结果,减弱了边角信息被忽略的严重程度
    • 更大的p是可以的
  • Valid卷积:没有补白
  • Same卷积:通过补白,使输出结果的尺寸和输入相同,即 p = f − 1 2 p=\frac{f-1}{2} p=2f1,f为奇数时,可以这样选择补白量保证输入输出尺寸相同
  • 在CV领域,f通常都是奇数的(具有一个中心,更方便描述位置,同时方便对称补白)

带步长的卷积 Strided Convolutions

  • 与补白一样,是CNN的重要组成部分
  • 步长,即每次卷积操作卷积核移动的步长
  • 对于一幅 n × n n\times n n×n的图片,使用 f × f f\times f f×f的卷积核,补白层为 p p p,步长为 s s s,那么得到的结果就是 ⌊ n + 2 p − f s + 1 ⌋ × ⌊ n + 2 p − f s + 1 ⌋ \lfloor\frac{n+2p-f}{s}+1\rfloor\times\lfloor\frac{n+2p-f}{s}+1\rfloor sn+2pf+1×sn+2pf+1
  • 实际上深度学习领域实现的卷积操作应当称为“交叉相关(cross-correlation)”,数学书籍中介绍的卷积操作往往需要先对卷积核进行反转后再做乘积和

三维卷积

  • 针对RGB图像的数据,我们将图像数据视为三维,分别为图像的高度、宽度以及通道个数
  • 卷积核必须和图像拥有相同的通道个数
  • 输出结果将会是二维的(通道数将变为1)
  • 将对应位置的全部元素做乘积和,得到的结果作为对应位置的输出,在这个过程中,卷积核只在图像的长宽维度上移动
  • 可以选择对某一通道的卷积核全置0,实现对该通道的屏蔽
  • 多个卷积核产生的结果可以构成一个多维的输出
  • 维数关系为 ( n × n × n c ) ∗ ( f × f × n c ) → ( ( n − f + 1 ) × ( n − f + 1 ) × n c ′ ) (n\times n\times n_c )*(f\times f\times n_c)\rightarrow((n-f+1)\times(n-f+1)\times n_c^{\prime}) (n×n×nc)(f×f×nc)((nf+1)×(nf+1)×nc),其中 n c ′ n_c^{\prime} nc为使用的卷积核数量,即特征数量
  • 三维卷积意味着我们可以对多通道图像再不同特征上使用卷积操作

单层卷积神经网络 Convolutional Network

  • 延续上面的三位卷积,针对不同的卷积核产生了不同结果,为了能够构成一层网络,还需要对每一个输出增加一个偏置量b,再使用非线性函数进行激活
  • 线性计算(卷积),添加偏置量,非线性操作
  • 对于一个单层CNN,如果使用 n c ′ n_c^{\prime} nc个卷积核,每个卷积核维数为 f × f × n c f\times f\times n_c f×f×nc,那么我们需要 10 × ( f × f × n c + 1 ) 10\times (f\times f\times n_c + 1) 10×(f×f×nc+1)个参数
  • 无论输入的图片有多大,每一层的训练参数个数是不变的,因此CNN对于输入数据不容易过拟合
  • CNN常用表示总结,对第 l l l层:
    • f [ l ] f^{[l]} f[l],过滤器尺寸,即卷积核的维数为 f [ l ] × f [ l ] f^{[l]}\times f^{[l]} f[l]×f[l]
    • p [ l ] p^{[l]} p[l],填充层大小,也可以用valid或者same卷积表示
    • s [ l ] s^{[l]} s[l],步长大小
    • n c [ l ] n_c^{[l]} nc[l],过滤器数量
    • 输入矩阵维数为 n H [ l − 1 ] × n W [ l − 1 ] × n c [ l − 1 ] n^{[l-1]}_H \times n^{[l-1]}_W \times n^{[l-1]}_c nH[l1]×nW[l1]×nc[l1]
    • 输出矩阵维数为 n H [ l ] × n W [ l ] × n c [ l ] n^{[l]}_H \times n^{[l]}_W \times n^{[l]}_c nH[l]×nW[l]×nc[l]
    • 高和宽的输入输出关系为 n H [ l ] = ⌊ n H [ l − 1 ] + 2 p [ l ] − f [ l ] s [ l ] + 1 ⌋ , n W [ l ] = ⌊ n W [ l − 1 ] + 2 p [ l ] − f [ l ] s [ l ] + 1 ⌋ n^{[l]}_H=\lfloor\frac{n^{[l-1]}_H+2p^{[l]}-f^{[l]}}{s^{[l]}}+1\rfloor,n^{[l]}_W=\lfloor\frac{n^{[l-1]}_W+2p^{[l]}-f^{[l]}}{s^{[l]}}+1\rfloor nH[l]=s[l]nH[l1]+2p[l]f[l]+1,nW[l]=s[l]nW[l1]+2p[l]f[l]+1
    • 对每个过滤器,有维数 f [ l ] × f [ l ] × n c [ l − 1 ] f^{[l]} \times f^{[l]} \times n_c^{[l-1]} f[l]×f[l]×nc[l1]
    • 激活值 a [ l ] → n H [ l ] × n W [ l ] × n c [ l ] , A [ l ] → m × n H [ l ] × n W [ l ] × n c [ l ] a^{[l]} \rightarrow n^{[l]}_H \times n^{[l]}_W \times n^{[l]}_c,A^{[l]} \rightarrow m \times n^{[l]}_H \times n^{[l]}_W \times n^{[l]}_c a[l]nH[l]×nW[l]×nc[l],A[l]m×nH[l]×nW[l]×nc[l]
    • 权重 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]
  • CNN的最后一部通常会做的是,将所有的变量展开成一个很长的向量,然后使用softmax或者逻辑回归得到最终的预测输出
  • 很多应用中,随着CNN层数加深,图像尺寸往往会变小,而频道数会不断增大
  • CNN中层的类型
    • 卷积层(Convolution,Conv)
    • 池化层(Pooling,Pool)
    • 全连接层(Full Connected,FC)

池化层 Pooling Layers

  • 用于减少表示的大小,以提高计算速度
  • 最大池化(Max Pooling):输出值是对应区域的最大值
    • 池化的输入区域就类似于选择了一个过滤器,其尺寸和步长指定,计算不是卷积而是取最大值
    • 凸显一个区域内是否存在着某个特征(如果不存在,最大值也是很小的一个值)
    • 它具有一套超参数(步长 s s s和过滤器尺寸 f f f),但是没有任何需要学习的参数
    • 对多通道情况,输出结果具有相同通道数,即 n c [ l ] = n c [ l − 1 ] n_c^{[l]}=n_c^{[l-1]} nc[l]=nc[l1]
  • 均值池化(Average Pooling):取得是对应区域内的均值
    • 在网络非常大时,会使用均值池化以合并表示
  • 通常情况下,池化是不需要补白的
  • 池化层只具有两个超参数而没有需要学习的参数
  • 有时人们会视卷积层和池化层为“一层”,方便计算权重

全连接层 Full Connected Layers

  • 前后神经元完全连接的层,具有偏置量
  • 池化层没有参数,卷积层具有相对更少的参数,大多数参数出现于全连接层
  • 激活的尺寸也在逐步减小

为什么要用卷积? Why Convolutions?

  • 有两个主要的优势:
    • 参数共享
    • 连接的稀疏性
  • 参数共享:一个对于图像一个区域起作用的特征提取器可能会对图像的另一个区域也起作用
  • 连接的稀疏性:在每一层,每一个输出值只取决于一小部分输入值
  • 可用于捕捉平移不变性(Translation Invariance)

CNN的反向传播

  • 此部分课程中并没有明确给出,但是在作业中给出了相关练习,在此标明
  • 和传统网络类似,对dA的求解,需要下一层的W和dZ,由于在卷积网络中,下一层的Z的每一个位置都由覆盖到偏移量的上一层的A的一些区域卷积求解得到,因此需要将所有这些区域都覆盖到,我们可以根据卷积核左上角位置求得当前位置下的覆盖区域,反过来用就行了,有 d A + = ∑ h = 0 n H ∑ w = 0 n W W c × d Z h w dA += \sum\limits_{h=0} ^{n_H} \sum\limits_{w=0} ^{n_W} W_c \times dZ_{hw} dA+=h=0nHw=0nWWc×dZhw
  • 上述的代码实现为(简化了,没转置)
da_prev_pad[vert_start:vert_end, horiz_start:horiz_end, :] += W[:,:,:,c] * dZ[i, h, w, c]
  • 对权重dW,同样是使用A和dZ,只是这里的A是当前位置使用的A的区域,有 d W c + = ∑ h = 0 n H ∑ w = 0 n W a s l i c e × d Z h w dW_c += \sum\limits_{h=0} ^{n_H} \sum\limits_{w=0} ^ {n_W} a_{slice} \times dZ_{hw} dWc+=h=0nHw=0nWaslice×dZhw
  • 上述的代码实现为
dW[:,:,:,c] += a_slice * dZ[i, h, w, c]
  • 对db,也是类似求和的思想,有 d b = ∑ h ∑ w d Z h w db = \sum_h \sum_w dZ_{hw} db=hwdZhw
  • 上述代码实现为
db[:,:,:,c] += dZ[i, h, w, c]
  • 对池化层的BP,分最大池化和均值池化两种情况考虑
    • 对最大池化,一个核的区域内只有最大值有贡献,因此我们只需要找到最大值,然后将误差传播给他即可
    • 对均值池化,误差需要均匀地分布在所有元素上
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值