前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布

CNN

作者头像
hotarugali
发布2022-03-10 14:44:14
8280
发布2022-03-10 14:44:14
举报

1. 简介

CNN 是专门用于处理网格化数据的神经网络。CNN 中新增了 Convolution 层和 Pooling 层,CNN 的层的连接顺序是「Convolution-ReLU-(Pooling)」(Pooling 层有时会被省略)。这可以理解为之前的 “Affine-ReLU” 连接被替换成了「Convolution-ReLU-(Pooling)」连接。

2. CNN 的优势

  • 全连接层(Affine 层)忽略了数据的形状。比如,输入数据是图像时,图像通常是高、长、通道方向上的 3 维形状。但是,向全连接层输入时,需要将 3 维数据拉平为 1 维数据。

图像是 3 维形状,这个形状中应该含有重要的空间信息。比如,空间上邻近的像素为相似的值、 RBG 的各个通道之间分别有密切的关联性、相距较远的像素之间没有什么关联等, 3 维形状中可能隐藏有值得提取的本质模式。

  • 而卷积层可以保持形状不变。当输入数据是图像时,卷积层会以 3 维数据的形式接收输入数据,并同样以 3 维数据的形式输出至下一层。因此,在 CNN 中,可以(有可能)正确理解图像等具有形状的数据。

【注】把 3 维数据表示为多维数组时,书写顺序为(channel, height, width)。作为 4 维数据,滤波器的权重数据要按(output_channel, input_channel, height, width)的顺序书写。

3. 术语

  • 特征图(feature map):卷积层的输入输出数据。输入数据称为输入特征图,输出数据称为输出特征图。
  • 卷积(convolution):滤波器上的元素和输入的窗口数据对应元素进行相乘并累加求和。
  • 填充(padding):在进行卷积层的处理之前,有时要向输入数据的周围填入固定的数据(比如 0 等)。「幅度为 1 的填充」是指用幅度为 1 像素的 0 填充周围。

使用填充主要是为了调整输出的大小(防止每次进行卷积运算后空间缩小以至最终空间缩小为 1 ),可以在保持空间大小不变的情况下将数据传给下一层。

  • 步幅(stride):应用滤波器的位置间隔称为步幅。

【注】增大步幅后,输出大小会变小。而增大填充后,输出大小会变大。

设输入大小为 (H,W) ,滤波器大小为 (FH,FW) ,输出大小为 (OH,OW) ,填充为 P ,步幅为 S ,则有如下等式:

\begin{array}{c} OH = \frac{H + 2P - FH}{S} + 1 \\ OW = \frac{W + 2P - FW}{S} + 1 \end{array}
  • 池化(pooling):(也称为汇聚)池化是缩小高、长方向上的空间的运算。一般来说,池化的窗口大小会和步幅设定成相同的值。池化是指对每个区域进行下采样(Down Sampling)得到一个值,作为这个区域的概括。

常见池化方法

  1. Max 池化
  2. Average 池化

4. 卷积层

4.1 一维卷积

假设信号发生器每个时刻 t 产生一个信号x_t ,齐信息的衰减率为 w_k ,即在 k-1 个时间步长后,信息为原来的 w_k 倍。则在 t 时刻接收到的信号 y_t 为当前时刻产生的信息和以前时刻延迟信息的叠加:

\begin{array}{c} y_t = \sum_{k=1}^K w_k x_{t-k+1} \end{array}

记作

\begin{array}{c} \boldsymbol{y} = \boldsymbol{w} * \boldsymbol{x} \end{array}

其中,* 表示卷积操作,把 w_1,w_2,\cdots,w_K 称作滤波器或卷积核。

4.2 二维卷积

给定一个图像 \boldsymbol{X} \in \mathbb{R}^{M \times N} 和一个滤波器 \boldsymbol{W} \in \mathbb{W}^{U \times V} (一般 U \ll M, V \ll N ),其卷积为

\begin{array}{c} y_{ij} = \sum_{u=1}^U \sum_{v=1}^V w_{uv} x_{i-u+1,j-v+1} \end{array}

记作

\begin{array}{c} \boldsymbol{Y} = \boldsymbol{W} * \boldsymbol{X} \end{array}

4.3 互相关

互相关和卷积的区别仅仅在于卷积核是否进行翻转,互相关公式为:

\begin{array}{c} y_{ij} = \sum_{u=1}^U \sum_{v=1}^V w_{uv} x_{i+u-1,j+v-1} \end{array}

记作

\begin{array}{c} \boldsymbol{Y} = \boldsymbol{W} \otimes \boldsymbol{X} = rotate_{180^\circ}(\boldsymbol{W}) * \boldsymbol{X} \end{array}
  • 在神经网络中使用卷积是为了进行特征抽取,卷积核是否进行翻转和其特征抽取的能力无关。
  • 特别是当卷积核是可学习的参数时,卷积和互相关在能力上是等价的。
  • 在具体实现上,一般会以互相关操作来代替卷积,从而会减少一些不必要的操作或开销。

4.4 常用卷积

  • 窄卷积:S = 1, P = 0 ,卷积后输出长度为 M - K + 1
  • 宽卷积:S = 1, P = K - 1 ,卷积后输出长度为 M + K - 1 。宽卷积运算符号为:\tilde{\otimes}
  • 等宽卷积:S = 1, P = (K-1)/2 ,卷积后输出长度为 M

4.5 导数

假设 \boldsymbol{Y} = \boldsymbol{W} \otimes \boldsymbol{X} ,其中 \boldsymbol{X} \in \mathbb{R}^{M \times N}, \boldsymbol{W} \in \mathbb{R}^{U \times V}, Y \in \mathbb{R}^{(M-U+1)\times(N-V+1)} ,函数 f(\boldsymbol{Y}) \in \mathbb{R} 为一个标量函数,则:

\begin{array}{c} \frac{\partial f(\boldsymbol{Y})}{\partial \boldsymbol{W}} = \frac{\partial f(\boldsymbol{Y})}{\partial \boldsymbol{Y}} \otimes \boldsymbol{X} \\ \frac{\partial f(\boldsymbol{Y})}{\partial \boldsymbol{X}} = rotate_{180^\circ}(W) \tilde{\otimes} \frac{\partial f(\boldsymbol{Y})}{\partial \boldsymbol{Y}} \end{array}

5. 反卷积(转置卷积)层

卷积操作用来实现高维特征到低维特征的转换,而反卷积(转置卷积)用来将低维特征映射到高维特征。

5.1 转置关系

对于一个高维向量 \boldsymbol{x} \in \mathbb{R}^d 和一个低维向量 \boldsymbol{z} \in \mathbb{R}^p ,其中 p \lt d 。如果用仿射变换实现高维到低维的映射:

\begin{array}{c} \boldsymbol{z} = \boldsymbol{W} \boldsymbol{x} \end{array}

其中,\boldsymbol{W} \in \mathbb{R}^{p \times d} 为转换矩阵。则可以通过转置 \boldsymbol{W} 来实现低维到高维的反向映射:

\begin{array}{c} \boldsymbol{x} = \boldsymbol{W}^T \boldsymbol{z} \end{array}

这两个映射之间不是逆关系,只是形式上的转置关系。

【注】在全连接网络中,忽略激活函数,前向计算和反向传播就是一种转置关系。

  • 前向计算:第 l + 1 层净输入:
\begin{array}{c} \boldsymbol{z}^{(l+1)} = \boldsymbol{W}^{(l+1)} \boldsymbol{z}^{(l)} \end{array}
  • 反向传播:第l 层的误差项:
\begin{array}{c} \delta^{(l)} = (\boldsymbol{W}^{(l+1)})^T \delta^{(l+1)} \end{array}

5.2 反卷积(转置卷积)

对于输入为 (H_{in}, W_{in}) ,步长为 stride ,填充为 padding ,卷积核大小为 kernel\_size ,输出补偿填充为 output\_padding ,转置卷积输出的结果为:

\begin{array}{c} H_{out}=(H_{in}-1)stride[0]-2padding[0]+kernel\_size[0]+output\_padding[0] \end{array}
\begin{array}{c} W_{out}=(W_{in}-1)stride[1]-2padding[1]+kernel\_size[1]+output\_padding[1] \end{array}

6. 池化层

池化层有以下特征:

  • 没有要学习的参数
  • 通道数不发生变化
  • 对微小的位置变化具有鲁棒性(健壮)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-10-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 简介
  • 2. CNN 的优势
  • 3. 术语
  • 4. 卷积层
    • 4.1 一维卷积
      • 4.2 二维卷积
        • 4.3 互相关
          • 4.4 常用卷积
            • 4.5 导数
            • 5. 反卷积(转置卷积)层
              • 5.1 转置关系
                • 5.2 反卷积(转置卷积)
                • 6. 池化层
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档