CNN

2022-03-10 14:44:14 浏览数 (1)

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. 池化层

池化层有以下特征:

  • 没有要学习的参数
  • 通道数不发生变化
  • 对微小的位置变化具有鲁棒性(健壮)

0 人点赞