Convolutional Neural Network
CNN基本结构
卷积层(convolutional layer)
卷积 — — 提取特征
卷积层的通过卷积核的过滤提取出图片中局部的特征
卷积层大小计算
s = stride, p = padding, f = filter size (square)
𝑊𝑖,𝐻𝑖: The width and height of the input image
𝑊𝑜,𝐻𝑜: The width and height of the output image
公式计算:
- padding情况下: W o = ⌊ W i − 1 s w ⌋ + 1 and H o = ⌊ H i − 1 s h ⌋ + 1 W_{o}=\left\lfloor\frac{W_{i}-1}{s_{w}}\right\rfloor+1 \text { and } H_{o}=\left\lfloor\frac{H_{i}-1}{s_{h}}\right\rfloor+1 Wo=⌊swWi−1⌋+1 and Ho=⌊shHi−1⌋+1
- no padding: W O = ⌊ W i − f w s w ⌋ + 1 and H o = ⌊ H i − f h s h ⌋ + 1 W_{O}=\left\lfloor\frac{W_{i}-f_{w}}{s_{w}}\right\rfloor+1 \text { and } H_{o}=\left\lfloor\frac{H_{i}-f_{h}}{s_{h}}\right\rfloor+1 WO=⌊swWi−fw⌋+1 and Ho=⌊shHi−fh⌋+1
eg1:
eg2:
eg3:
Convolution layer with multiple filters and feature maps 多重卷积
一个卷积核先和3个通道的左上角的矩阵卷积,然后将得到的值全部加在一起。依次计算。
多卷积核方式:
池化层(Pooling layer)
池化层简单说就是下采样,他可以大大降低数据的维度。
池化层相比卷积层可以更有效的降低数据维度,这么做不但可以大大减少运算量,还可以有效的避免过拟合。
-
Makes the representations smaller and more manageable
使表示形式更小,更易于管理
-
Subsample the image
-
Operates over each activation map independently
独立在每个激活图上运行
公式:
In practice, we don’t overlap, s=f.
W O = ⌊ W i − 1 s ⌋ + 1 H O = ⌊ H i − 1 s ⌋ + 1 \begin{array}{l} W_{O}=\left\lfloor\frac{W_{i}-1}{s}\right\rfloor+1 \\ H_{O}=\left\lfloor\frac{H_{i}-1}{s}\right\rfloor+1 \end{array} WO=⌊sWi−1⌋+1HO=⌊sHi−1⌋+1
eg:
max-pooling
将每次选取卷积核框中的里面的最大值代表整个方块的值
average pooling
将每次选取卷积核框中的里面元素求均值来代表表整个方块的值
在tf中的写法:
Fully connected layer 全连接层
-
The last tensor is flattened and some fully connected layers are added to classify the input.
最后一个张量被扁平,并添加一些完全连接的层以对输入进行分类。
-
The last tensor [5,5,10] →1 layer with 5x5x10= 250 neurons
最后一个张量[5,5,10]→1层,有5x5x10 = 250神经元
-
全连接层(fully connected layers,FC) 在整个卷积神经网络中起到“分类器”的作用。
-
每个神经元与其前一层进行全连接,将前期所提取的各种局部特征综合起来,最后通过输出层得到每个类别的后验概率。
-
经过卷积层和池化层降维过的数据,全连接层才能”跑得动”,不然数据量太大,计算成本高,效率低下。
softmax
-
softmax位于卷积神经网络层的最后一层,用于分类问题。
-
softmax的输入是T * 1的向量,输出也是T * 1的向量,只不过输出的向量的每个值的大小范围为0到1。softmax的输出向量就是该样本属于各个类的概率。
Batch Normalization Layer 批规范化层
常见问题:
- covariate shift:
-
The distribution (nature) of training data is different from that of testing data
培训数据的分布(性质)与测试数据的分布不同
假设x是属于特征空间的某一样本点,y是标签。covariate这个词,其实就是指这里的x,那么covariate shift可以直接根据字面意思去理解:样本点x的变化。
-
Internal covariate shift (ICS)
本质上就是说将每一层的输入作为一个分布看待,由于底层的参数随着训练更新,导致相同的输入分布得到的输出分布改变了即不是独立同分布了
- 定义:深度神经网络涉及到很多层的叠加,而每一层的参数更新会导致上层的输入数据分布发生变化,通过层层叠加,高层的输入分布变化会非常剧烈,这就使得高层需要不断去重新适应底层的参数更新。为了训好模型,我们需要非常谨慎地去设定学习率、初始化权重、以及尽可能细致的参数更新策略。
- 原因:W和b值的更新或者mini-batches 的改变
Batch Normalization 批标准化
详细资料:什么是批标准化 (Batch Normalization) - 知乎 (zhihu.com)
Batch normalization 的 batch 是批数据, 把数据分成小批小批进行 stochastic gradient descent. 而且在每批数据进行前向传递 forward propagation 的时候, 对每一层都进行 normalization 的处理
优点:
- Cope with internal covariate shift
- Reduce gradient vanishing/exploding
- Reduce overfitting
- Make training more stable
- Converge faster
- Allow us to train with bigger learning rate
计算过程如下:
gamma和β的作用:用了BN之后,数据分布会集中在0-1之间,这一区间激活函数曲线比较线性(导数接近1),这样就不能很好的利用激活函数的非线性化性质了。所以加γ和β就是要在一定程度下抵消BN带来的线性化,做了一个trade off。
对于测试集:BN还有scale和shift参数要考虑,所以还是需要计算均值和方差,不能只输入一个点。计算所有批均值和方差的指数加权移动平均,然后再加上scale和shift,这样计算才完整
Dropout Layer
-
This is a cheap technique to reduce model capacity
- Reduce overfitting
-
In each iteration, at each layer, randomly choose some neurons and drop all connections from these neurons
在每一iteration中,在每一层中,随机选择一些神经元并从这些神经元中删除所有连接
- odropout_rate = 1 – keep_prob
影响CNN性能的因素
- 层数(深度)
- 特征面的数目
- 网络组织
- 减少可学习权重的数量会减小CNN规模
- 权重矩阵在内核/过滤器之间共享会减小CNN规模
- 深层与大部分输入间接交互会减小CNN规模
CNN的优缺点
优点:
-
共享卷积核,对高维数据处理无压力
-
无需手动选取特征,训练好权重,即得特征分类效果好
-
与传统的MLP相比,CNN中卷积层的权值共享使网络中可训练的参数边少,降低了网络模型复杂度,较少过拟合,从而获得一个更好的泛化能力。
-
CNN结构中使用池化操作使得模型中的神经元个数大大的减少,对输入空间的平移不变行也更有鲁棒性
-
CNN结构的拓展性很强,它可以采用很深的层数,深度模型具有更强的表达能力,能够处理更复杂的分类问题
-
CNN的局部连接、权值共享和池化操作比传统的MLP具有更少的连接和参数,更易于训练。
缺点:
- 需要调参,需要大样本量,训练最好要GPU
- 物理含义不明确
三大神经网络的优缺点
AlexNet
优点:
-
首次使用GPU加速
-
随机drop掉一些神经元,有效降低了过拟合
-
使用ReLU替换之前的sigmoid的作为激活函数,ReLU部分解决了sigmoid的梯度饱和性
-
计算简单
-
收敛速度快
缺点:
- 在小于0的地方会出现神经单元死亡,并且不能复活的情况。所以,有关于ReLU的改进方法的提出(leaky ReLU, parameterized ReLU, random ReLU)
- 如果移除一个卷积层,那么整个AlexNet网络都会退化
GoogLeNet
优点:- 提高了网络内部的计算资源的利用率,能在保持现有计算预算不变的情况下增加网络的深度和宽度
缺点:
- 使用更深的网络,但是这会导致参数太多,如果训练数据集有限,很容易产生过拟合;
- 创建数据集的代价很大,尤其是如果数据集分类很麻烦的情况下;
- 网络越深,容易出现梯度弥散问题(梯度越往后穿越容易消失),难以优化模型。
VGG
优点:
-
VGGNet的结构非常简洁,使用小卷积核和连续的卷积层,整个网络都使用了同样大小的卷积核尺寸(3x3)和最大池化尺寸(2x2)
-
几个小滤波器(3x3)卷积层的组合比一个大滤波器(5x5或7x7)卷积层好
-
验证了通过不断加深网络结构可以提升性能
缺点:
- VGG耗费更多计算资源,并且使用了更多的参数(这里不是3x3卷积的锅),导致更多的内存占用(140M)。其中绝大多数的参数都是来自于第一个全连接层(VGG有3个全连接层)
411)]
优点:
-
VGGNet的结构非常简洁,使用小卷积核和连续的卷积层,整个网络都使用了同样大小的卷积核尺寸(3x3)和最大池化尺寸(2x2)
-
几个小滤波器(3x3)卷积层的组合比一个大滤波器(5x5或7x7)卷积层好
-
验证了通过不断加深网络结构可以提升性能
缺点:
- VGG耗费更多计算资源,并且使用了更多的参数(这里不是3x3卷积的锅),导致更多的内存占用(140M)。其中绝大多数的参数都是来自于第一个全连接层(VGG有3个全连接层)