自学神经网络系列—— 9 卷积神经网络CNN

1 卷积神经网络背景

  • CNN(Convolution Neural Network)是一种包含卷积层、池化层的前馈神经网络,主要用于处理图像信息、文本信息。
  • 卷积神经网络用于处理图像,旨在解决全连接神经网络参数过多的问题。例如将一个1000像素的彩色图像展开1000×1000×3=3M维的向量,假设隐藏层大小为1000,那么第一个全连接就得训练3B个参数,这会导致神经网络训练难以训练,因此引入卷积核实现神经网络各层之间的局部连接,减少参数。
  • 由于图片具有平移不变性即目标像素位于图片中的任意位置人类都可以识别,位置因素对目标像素的识别不应该造成影响。因此利用同一个卷积核去抽取图片中的任意位置的信息较为合理。
  • 卷积层由多个卷积核组成,涉及到填充、步幅、通道的概念。常见的卷积神经网络主要有有LeNet、AlexNet、VGG、GoogleNet、ResNet、DenseNet等。本篇文章作为个人学习笔记,只对卷积神经网络概念进行回顾,不深入探究各种卷积神经网络的特性。

2 卷积神经网络的基础知识

2.1 卷积

  • 卷积可看作一个自定义算子,计算结果是关于x的函数一般指下式这种积分运算:
    ∫ τ f ( τ ) g ( x − τ ) d τ \int_\tau f(\tau)g(x-\tau)d\tau τf(τ)g(xτ)dτ
  • 在信号处理中,卷积通常被用来计算信号的累积延迟,其中 f ( τ ) f(\tau) f(τ)为信号生成函数, g ( ⋅ ) g(·) g()为信号衰减函数,也叫做滤波器或卷积核,当x距离 τ \tau τ越远衰减越厉害。当信号函数遇到滤波器时,信号被过滤,衡量了存在的真实信号大小。
  • 与传统的一维卷积不同,卷积神经中的卷积核使用二维卷积来抽取图片中的真实信息,二维卷积定义如下:
    y i j = ∑ u = 1 U ∑ v = 1 V w u v x i + 1 − u , j + 1 − v y_{ij} = \sum_{u=1}^U\sum_{v=1}^Vw_{uv}x_{i+1-u,j+1-v} yij=u=1Uv=1Vwuvxi+1u,j+1v
    1
图1 二维卷积《神经网络与深度学习》邱锡鹏
  • 图1 中通过计算二维卷积发现,卷积在数据上是从下往上扫,从右往左扫计算乘积的,卷积神经网络中的卷积核是二维卷积的转置,这种操作也叫做互相关,经常用在时间序列中,分析不同变量不同时刻的相关性。特别地,当卷积核中的参数为可学习参数是,不论是二维卷积操作还是互相关操作,神经网络会自动学习应有的参数。
  • 特征抽取:卷积核(滤波器)的主要功能是进行特征抽取
    • 高斯滤波器滤波器:去噪平滑图片
    • 边缘滤波器:抽取边缘特征
    • 等等
      1
图2 不同卷积核《神经网络与深度学习》邱锡鹏

2.2 卷积神经网络结构

1

图3 卷积神经网络(来源于网络)
  • 卷积层
    • 利用卷积核进行卷积操作
    • 输入:36×36的灰度图片或卷积核输出
    • 卷积核:9×9的大小的卷积核(不同卷积层不同、同一卷积层也可以不同)
    • 输出:通过卷积核的输出叫做特征图,表示不同卷积核抽取的图片不同特征
  • 池化层
    • 利用卷积核进行特征选择
    • 相对于图片卷积核较小,因此卷积层中神经元数量依然很多,容易过拟合
    • 使用最大池化层或平均池化层来实现特征选择,降低过拟合的概率
    • 池化层对特征图扫描的趋于可以重叠也可以不重叠
    • 池化层不仅可以下采样即通过max()、mean()降维,也可以通过非线性激活函数实现降维
  • 感受野:影响特征图或者输出的所有元素大小称为感受野,随着神经网络的前向传播,每一个元素代表的感受野越来越大,即能够看到原始图像更大的视野。
  • 卷积核的输出越来越小,网络越深,每一层的卷积核数量越多,防止信息损失
  • 卷积神经网络越来越宽,输出越来越小
  • 卷积神经网络最后的输出一般展开成一维向量

2.3 卷积核的填充和步幅

  • 填充:为了使输入和输出保持同样大小,经常对输入矩阵进行填充

  • 步幅:卷积核每次从输入矩阵上滑动的行数和列数被称为步幅,一般高和宽的 步幅相等。

  • 在计算卷积核的输出时需要确定填充和步幅大小,假设输入大小为 n h n_h nh,卷积核大小为 k h k_h kh,在上下两侧共填充 p h p_h ph,在左右两侧共填充 p w p_w pw,上下步幅为 s h s_h sh,左右步幅为 s w s_w sw,则输出形状为:
    s h a p e = [ ( n h − k h + p h ) / s h + 1 ] × [ ( n w − k w + p w ) / s w + 1 ] shape = [(n_h-k_h+p_h)/s_h+1]×[(n_w-k_w+p_w)/s_w+1] shape=[(nhkh+ph)/sh+1]×[(nwkw+pw)/sw+1]

  • 步幅扩大一倍,输出就会减半

3 卷积神经网络的学习

3.1 卷积的导数

  • 损失函数关于卷积核参数的导数等于损失函数关于输出的导数对输入的卷积。
  • 导函数与导数的一致性:乘法运算对应乘法,卷积运算对应卷积运算
    ∂ L ( y , y ^ ) ∂ w i j = ∑ i = 1 n h − k h + 1 ∑ j = 1 n w − k w + 1 ∂ L ( y , y ^ ) ∂ y i j ∂ y i j ∂ w i j = ∑ i = 1 n h − k h + 1 ∑ j = 1 n w − k w + 1 ∂ L ( y , y ^ ) ∂ y i j x k h + i − 1 , k w + j − 1 {\partial L(y, \hat y) \over \partial w_{ij}} = \sum_{i=1}^{n_h-k_h+1}\sum_{j=1}^{n_w-k_w+1}{\partial L(y, \hat y) \over \partial y_{ij}} {\partial y_{ij}\over \partial w_{ij}} =\sum_{i=1}^{n_h-k_h+1}\sum_{j=1}^{n_w-k_w+1}{\partial L(y, \hat y) \over \partial y_{ij}}x_{k_h+i-1,k_w+j-1} wijL(y,y^)=i=1nhkh+1j=1nwkw+1yijL(y,y^)wijyij=i=1nhkh+1j=1nwkw+1yijL(y,y^)xkh+i1,kw+j1
  • 输入大小为 n h n_h nh,卷积核大小为 k h k_h kh
  • 输入数据对卷积核的卷积转变为输入数据对所在层误差项的卷积

3.2 反向传播算法

1

图4 卷积神经网络完整结构《神经网络与深度学习》邱锡鹏

  • 前向传播:输入层-卷积层-激活函数-汇聚层
  • 误差反向传播算法首先通过池化层,然后再向通过激活函数、卷积操作反向传播
  • 反向传播算法
    • 由于池化层做了下采样操作,所以需要通过上采样进行传播
    • 最大池化层:只向前传播了一个元素的误差,反向传播时将误差项传到上一层输出最大值对应的神经元,其他元素设为0
    • 平均池化层:前向传播时,所有元素都影响了误差项,因此将误差项均匀分配到各个神经元。
    • l l l层为卷积层
      ∂ L ( y , y ^ ) ∂ w i j = ∑ i = 1 n h − k h + 1 ∑ j = 1 n w − k w + 1 ∂ L ( y , y ^ ) ∂ y i j ∂ y i j ∂ w i j = ∑ i = 1 n h − k h + 1 ∑ j = 1 n w − k w + 1 ∂ L ( y , y ^ ) ∂ y i j x k h + i − 1 , k w + j − 1 {\partial L(y, \hat y) \over \partial w_{ij}} = \sum_{i=1}^{n_h-k_h+1}\sum_{j=1}^{n_w-k_w+1}{\partial L(y, \hat y) \over \partial y_{ij}} {\partial y_{ij}\over \partial w_{ij}} =\sum_{i=1}^{n_h-k_h+1}\sum_{j=1}^{n_w-k_w+1}{\partial L(y, \hat y) \over \partial y_{ij}}x_{k_h+i-1,k_w+j-1} wijL(y,y^)=i=1nhkh+1j=1nwkw+1yijL(y,y^)wijyij=i=1nhkh+1j=1nwkw+1yijL(y,y^)xkh+i1,kw+j1
      • 输入数据对所在层误差项的卷积
    • l + 1 l+1 l+1层为池化层
      δ l , p = ∂ L ( y , y ^ ) ∂ y l , p = ∂ L ( y , y ^ ) ∂ y l + 1 , p ∂ y l + 1 , p ∂ h l , p ∂ h l , p ∂ y l , p = δ l + 1 , p u p ( ⋅ ) ∂ h l , p ∂ y l , p \delta^{l,p}={\partial L(y, \hat y) \over \partial y^{l,p}} = {\partial L(y, \hat y) \over \partial y^{l+1,p}} {\partial y^{l+1,p} \over \partial h^{l,p}} {\partial h^{l,p} \over \partial y^{l,p}} =\delta^{l+1,p}up(·){\partial h^{l,p} \over \partial y^{l,p}} δl,p=yl,pL(y,y^)=yl+1,pL(y,y^)hl,pyl+1,pyl,phl,p=δl+1,pup()yl,phl,p
      • u p ( ⋅ ) = ∂ X l + 1 , p ∂ h l , p up(·) ={\partial X^{l+1,p} \over \partial h^{l,p}} up()=hl,pXl+1,p 代表池化层到隐藏层的上采样操作。
    • l + 1 l+1 l+1层为卷积层
      δ l = ∂ L ( y , y ^ ) ∂ y l = ∂ L ( y , y ^ ) ∂ h l ∂ h l ∂ y l = ∂ L ( y , y ^ ) ∂ x l + 1 ∂ h l ∂ y l \delta^{l}={\partial L(y, \hat y) \over \partial y^{l}} ={\partial L(y, \hat y) \over \partial h^{l}} {\partial h^{l} \over \partial y_{l}} = {\partial L(y, \hat y) \over \partial x^{l+1}} {\partial h^{l} \over \partial y_{l}} δl=ylL(y,y^)=hlL(y,y^)ylhl=xl+1L(y,y^)ylhl
    • 根据W与X的对称性 ∂ L ( y , y ^ ) ∂ x l + 1 {\partial L(y, \hat y) \over \partial x^{l+1}} xl+1L(y,y^)是第 l + 1 l+1 l+1层误差项关于第 l + 1 l+1 l+1层卷积核的卷积,这样就能

递推求出 ∂ L ( y , y ^ ) ∂ y l {\partial L(y, \hat y) \over \partial y^{l}} ylL(y,y^),进而求出 ∂ L ( y , y ^ ) ∂ w i j {\partial L(y, \hat y) \over \partial w_{ij}} wijL(y,y^)

4 其他卷积

  • 转置卷积:用于升维,两端多补0
  • 微步卷积:用于升维,步幅小于1
  • 空洞卷积:提高感受野大小,在卷积核中插入空洞,变相扩大卷积核
  • 感受野的影响因素:层数、卷积核大小、汇聚
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值