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 ,则有如下等式:
- 池化(pooling):(也称为汇聚)池化是缩小高、长方向上的空间的运算。一般来说,池化的窗口大小会和步幅设定成相同的值。池化是指对每个区域进行下采样(Down Sampling)得到一个值,作为这个区域的概括。
常见池化方法
- Max 池化
- Average 池化
4. 卷积层
4.1 一维卷积
假设信号发生器每个时刻 t 产生一个信号x_t ,齐信息的衰减率为 w_k ,即在 k-1 个时间步长后,信息为原来的 w_k 倍。则在 t 时刻接收到的信号 y_t 为当前时刻产生的信息和以前时刻延迟信息的叠加:
记作
其中,* 表示卷积操作,把 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 ),其卷积为
记作
4.3 互相关
互相关和卷积的区别仅仅在于卷积核是否进行翻转,互相关公式为:
记作
- 在神经网络中使用卷积是为了进行特征抽取,卷积核是否进行翻转和其特征抽取的能力无关。
- 特别是当卷积核是可学习的参数时,卷积和互相关在能力上是等价的。
- 在具体实现上,一般会以互相关操作来代替卷积,从而会减少一些不必要的操作或开销。
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} 为一个标量函数,则:
5. 反卷积(转置卷积)层
卷积操作用来实现高维特征到低维特征的转换,而反卷积(转置卷积)用来将低维特征映射到高维特征。
5.1 转置关系
对于一个高维向量 boldsymbol{x} in mathbb{R}^d 和一个低维向量 boldsymbol{z} in mathbb{R}^p ,其中 p lt d 。如果用仿射变换实现高维到低维的映射:
其中,boldsymbol{W} in mathbb{R}^{p times d} 为转换矩阵。则可以通过转置 boldsymbol{W} 来实现低维到高维的反向映射:
这两个映射之间不是逆关系,只是形式上的转置关系。
【注】在全连接网络中,忽略激活函数,前向计算和反向传播就是一种转置关系。
- 前向计算:第 l 1 层净输入:
- 反向传播:第l 层的误差项:
5.2 反卷积(转置卷积)
对于输入为 (H_{in}, W_{in}) ,步长为 stride ,填充为 padding ,卷积核大小为 kernel_size ,输出补偿填充为 output_padding ,转置卷积输出的结果为:
6. 池化层
池化层有以下特征:
- 没有要学习的参数
- 通道数不发生变化
- 对微小的位置变化具有鲁棒性(健壮)