# 卷积神经网络介绍

前面文章中我们介绍了传统神经网络结构，传统神经网络通常由输入层、隐藏层、输出层构成。传统神经网络在处理计算机视觉时遇到的一个主要问题就是输入层维度很大。比如一张1000x1000x3的图片，神经网络输入层的维度达到300万，随之使得权重参数W的维度也非常庞大，庞大的计算参数给计算机视觉带来了计算灾难。

卷积神经网络（Convolutional Neural Network，简写CNN）是在传统神经网络的基础上增加了卷积层（Convolution Layers）和池化层（Pooling Layers）。比如单层卷积神经网络的结构为：输入层 → 卷积层 → 池化层 → 全连接层 → 输出层。使用卷积神经网络，利用过滤器或者卷积核提取图像主要特征，可以大大减小参数的维度，减小计算量。

## 1.卷积层（Convolution Layers）

卷积层主要是通过一个过滤器（或者称为卷积核）矩阵，在输入矩阵上进行滑动求卷积（此处的卷积为对应位置元素的乘积和）。比如输入为28×28的图片，过滤器filter为5×5，从左至右，从上至下滑动卷积，得到一个（28-5+1）×（28-5+1）=24×24的输出矩阵。我们发现，通过卷积后，图片的原始大小变小了，这可能不是我们期望的结果，设想经过若干次卷积后，我们的图片不断缩小可能将会严重失真。我们可以在原始图像周围设置padding参数，填充若干像素0，使得卷积后的图片大小与原始图片大小相等。Tensorflow的卷积函数conv2d()中Padding参数提供给我们两种模式:SAME和VALID。当我们设置Padding为SAME时，表示图像周围填充0，卷积后图像大小不变；当我们设置Padding为VALID时，表示不填充，卷积后图像变小。

## 2.池化层（Pooling Layers）

池化层是卷积神经网络用来减小图片尺寸，提高运算速度的，同时，池化层也能减小噪声影响，提取通过取最大值（最大池化）或者平均值（平均池化）提取特征。

### 2.1 最大池化（max pooling）

最大池化是只保留区域内的最大值（特征），忽略其他值，从而降低噪声影响，提高模型健壮性。而且，模型需要的超参数仅为过滤器尺寸和步长，计算量较小。

对于多通道，我们就针对每一通道进行最大池化。

### 2.2 平均池化（average pooling）

与最大池化不同，平均池化是在过滤器滑动区域计算平均值。在实际应用中，我们更多的是用最大池化。

## 3.经典卷积神经网络——LeNet-5模型

LeNet-5模型是由Yann LeCun教授于1988年提出的，是第一个成功应用于数字识别问题的卷积神经网络。LeNet-5模型共有7层，2层卷积层，2层池化层，2层全连接层，1层输出层。大致结构为：输入层 → 卷积层1 → 池化层1 → 卷积层2 → 池化层2 → 全连接层1 → 全连接层2 → 输出层。
