Residual Net

当 CNN 变得很深的时候,反而 Train Error 变高了.

一个问题是,30 层的网络其实训一个 identity 是困难的. 那原本 20 层的网络,再经过 30 层的网络,都可能无法保证这 20 层的网络的好的结果能够被保留下来. 于是训练就很困难.

于是就有一个 Residual Link / Skip Link:对于一系列操作 \(F\),原本就是 \(x\to F(x)\),现在变成 \(x\to x+F(x)\). 最不济 \(F(x)\) 学成 \(0\) 就好了(由于 Relu 这是极容易的),至少也能保证一个 identity. 这样构成了一个 Residual Block. 这些 Block 可以无害地无限垒叠起来.

而从另一个角度去理解,最上面的梯度要穿过很多层的梯度才能传到最底下,只要有若干个小的后面就梯度没了,导致底下很难训练. 而加上了残差之后梯度可以直接沿着 Skip Link 往下走.

而又另一方面,神经网络足够深的时候,Loss Landscape 也会变得很古神. 而加了残差的就平滑软糯了很多.

Overfitting

解决 Overfitting 可以做数据增强.

最简单的是水平的翻转. 除非要分类左右手.

还可以旋转,移动,拉近,模糊,对比度,明亮度,饱和度,仿射变换(模拟其他视角)等.

但是不能做过了. 检测的办法就是随便采样一些图片让人看一看.


Regularization.

Loss 加上 \(\lambda R(W)\). \(\lambda\) 是一个重要的超参.

其中可以选择 L2 Regularization \(R(W)=\sum W_{i,j}^2\),以及 L1 Regularization \(R(W)=\sum |W_{i,j}|\). 或者可以将这两个拼起来,\(R(W)=\beta W_{i,j}^2+|W_{i,j}|\).

一个训练的方法是先不加 Regularization,先确保网络 Main Loss 下降,再去调 \(\lambda\).


Dropout.

Foward 中每次随机 \(p\) 概率点设置成 \(0\).

Dropout 强迫网络能重复表达一个东西,并且尽量避免 co-adaptation.


Batchnorm.

很神奇,Batchnorm 也可以减少过拟合. 并且很多时候用了 Batchnorm 让 Dropout 不是特别需要了.

其实 Batchnorm 对模型的表达加了一些限制(迫使网络的输出在 Relu 前服从高斯分布),所以也是一种正则项.


数据增强和 Batchnorm 是很好用的.

但最后一层 FC - SoftMax 中间就不用 BatchNorm 了. 因为最后答案真不是高斯分布.


下面是有关图像分类的东西.

图像分类

KNN

对于空间中的点,选取离自己最近的 \(k\) 个关键点,然后按关键点的颜色做 majority vote.

对一些别的东西有点用. 对图片分类没啥用.

Softmax

一个对 Sigmoid 的扩展. \(p_i=\frac{e^{x_i}}{\sum e^{x_i}}\).

KL 散度

两个分布 \(P,Q\) 的 KL 散度 \(D(P||Q)=\sum_x P(x)\log(\frac{P(x)}{Q(x)})\). 化简一下就知道 \(-\sum P(x)\log Q(x)+\sum P(x)\log P(x)\).

\(P\) 为真实分布,那么 \(\sum P(x)\log P(x)\) 是常量. 得到交叉熵 \(-\sum P(x)\log Q(x)\).

参考讲义:Lecture 7- Deep Learning IV