VGG 19 笔记

1. ConvNet Configurations

  • Architecture

    • 图片的输入尺寸是 $224\times224\times3$ ,在预处理阶段,每个像素都要减去训练集中所有图片 RGB 值的均值。这样可以保证新的 RGB 值的均值为 0 。

    • 卷积核的尺寸设置为 $3\times3$ ,或者 $1\times1$ 。其中图片经过尺寸为 $1\times1$ 的卷积核可以看作是在做一个线性变换。

    • Stride 设置为 1 。Padding 的设置可以让图像经过卷积层之后尺寸不变,也就是说当卷积核尺寸是 $3\times3$ 的时候,Padding 设置为 1 。

    • 池化操作采用的是 Max-Pooling,尺寸是 $2\times2$ ,Stride 是 2 ,也就是说不像AlexNet那样是重叠的。

    • 没有使用LRN(Local Response Normalization),因为实验结果表明,LRN 没有改善深度神经网络的表现,反而增加了很多的计算量和计算时间。

  • Configurations

    • 不同配置的深度神经网络最主要的差别在于卷积层的层数不同,从 11 层到 19 层。每一层 Channel 的个数从 64 到 512 。
  • Discussion

    • 卷积核的尺寸比传统的深度神经网络(比如 AlexNet )都要小。在效果上和性能上( Weights 变少了)都有提升。

    • 使用了三次 ReLU 层,而不是一次。

    • $1\times1$ 的卷积核是增强决策函数非线性性质的一种方法,同时可以不影响其它的层。可以把 $1\times1$ 的卷积核看作是在相同维度的空间里面的线性变换,可以对 ReLU 层起到辅助的效果。

    • 比 GoogleNet 的结构更简单。

2. Details

  • Training

    • 整体的训练过程与 AlexNet 类似。

    • Learning Rate:学习率 $\eta$ 初始化为 $10^{-2}$ 。在每次验证集准确率不再提高的时候,$\eta$ 减小为原来的十分之一。

    • Momentum 设置为 0.9 。Momentum 代表在 Backward Propagation(BP)过程中沿用「上一次 BP 」的梯度的比例,即下式当中的 $\alpha$ ,这个操作可以让此次的变化梯度适当地沿用上次的,避免权重 ${\bf w}$ 的剧烈变化。

    $$ \Delta{\bf w}_{t+1}=-\eta\frac{\partial {\bf E}}{\partial {\bf w}_t}+\alpha\Delta{\bf w}_t $$

    • Regularization: 正则化采用了 Weight Decay 的方法,$L_2$ 惩罚因子 $\lambda$ 为 $5\times10^{-4}$ 。

      正则化的目的是减少深度神经网络的过拟合。假设原始的损失函数为 ${\bf E}_0$(比如平方误差 $\frac{1}{2}\sum(y_i-\hat y_i)^2$ ),加入 $L_2$ 正则项之后的损失函数为:

      $$ {\bf E}={\bf E_0}+\frac{\lambda}{2}\sum w_i^2 $$

      求梯度可得:

      $$ \begin{aligned} \Delta{\bf w}&=-\eta\frac{\partial {\bf E}}{\partial {\bf w}}\\[1em] &=-\eta\frac{\partial {\bf E}_0}{\partial {\bf w}}-\lambda\eta{\bf w} \end{aligned} $$

      可以看出 $L_2$ 正则化是趋向于将权重 ${\bf w}$ 变小,使得权重对待各个输入更加公平,防止过分地放大某个输入。

      同时使用了 Momentum 和 Weight Decay 两种 Tricks 之后的梯度为:

      $$ \Delta{\bf w}_{t+1}=-\eta\frac{\partial {\bf E}}{\partial {\bf w}_t}+\alpha\Delta{\bf w}_t-\lambda\eta{\bf w}_t $$

    • Dropout:在前两层全连接层实行Dropout,概率为 0.5 。

    • Weights Initialisation:权重的初始化对于最后的结果影响很大。如果是随机初始化的话,权重 ${\bf w}$ 被初始化为服从 $N(0,10^{-2})$ 高斯分布的随机值,偏置 ${\bf b}$ 设置为 0 。对于最浅层的网络采用随机初始化,当层数增加之后,沿用浅层相同的层的训练好的参数作为初始化值(Pre-Train 的思想)。

    • Training Set Augmentation:扩充训练样本。首先像 AlexNet 那样对原始训练集进行水平翻转、 RGB 值强度变化。然后还有对图片进行放大缩小的变换操作。有两种方法,一种是对于不同的尺寸训练不同的分类器。另一种是直接训练一个分类器,每张图片在训练之前会被随机缩放。

  • Testing

    测试方法与 Overfeat 当中类似,待补充。

  • Implement

    该网络通过一个定制的 Caffe 实现,可以同时利用多个 GPU 。GPU 之间通过并行地计算梯度来加速训练。

References