Deep Learning (2) - Regularization
在机器学习中,有两种常见的问题:
- bias (或者hIgh bias, underfitting,欠拟合)
- variance (或者high variance, overfitting, 过拟合)
前者通常因为模型不够复杂,不足以通过现有数据预测出正确的结果。training error过大。解决的方法可以通过增大训练网络。
而后者是因为模型过于依赖训练数据,而对测试数据效果不佳。training error不大,但是dev error却比较大。改善的办法是正则化,即Regularization。
Regularization
加入正则化因素的损失函数如下:
(1)式中没有对b进行正则化,即没有。原因是b只是一个常数,而w通常是一个大矩阵,数据比较多,容易出现过拟合。添加b也可以,但通常对运算结果影响不大。
(1)式的正则项,称为L2 regularization。通常有下面几种:
- L2 regularization (又叫weight decay):
- L1 regularization:
- Frobenius regularization:
- Dropout regularization: 在另一章单独阐述。
L2 regularization = weight decay
因为当我们使用正则化的损失函数求导时有:
我的理解,因为w在减小,所以叫权重衰减。
Dropout regularization
Dropout就是随机删除一些hidden unit来实现正则化。
Implementation Example (Inverted Dropout)
这是最常见的Dropout实现方法,叫”Inverted Dropout” (反向随机Dropout)。计算步骤如下:
d3 = np.random.rand(a3.shape[0], a3.shape[1]) < keep-proba3 = np.multiply(a3, d3)a3 /= keep-prob
解释一下:
- keep-prob代表保留hidden unit的概率。如果keep-prob = 0.8,则有80%的unit被保留,20%的unit被删除
- 之所以最后一行要re-scale,因为a3被删除掉一些unit,他的期望值就只有原先的keep-prob的比例,所以这里需要re-scale,这样在验证test set的时候不会有scaling的问题
- 注意:第一行用的是
np.random.rand
而不是np.random.randn
。因为randn
获取的随机数是正态分步,所以并不能保证小于keep-prob
的概率为keep-prob
。rand
产生的是均匀分步,则能保证。
Make Prediction at Test Time
验证的时候,不使用Dropout。因为引入Dropout就是引入随机噪声,会导致预测值即不稳定。所以验证时通常不用Dropout。
Other Regularization
- Augment data set.
- 将原有图片进行处理得到更大的training set来消除variance。例如旋转,反转图片
- Early Stopping
- 在variance问题还不是很明显的时候stop,看下图,在中间的点处就停止迭代。
Vanishing/Exploding Gradients
梯度消失和梯度爆炸。这是为什么神经网络为什么不能很深。
以这样的网络举例。采用线性激活函数,即g(z)=z,则
(2)式中的平方项又叫Xavier Initialization,即
(3)式中的平方项叫He Initialization,即
Conclusion for random weight initialization
- Different initializations lead to different results
- Random initialization is used to break symmetry and make sure different hidden units can learn different things
- Don’t intialize to values that are too large
- He initialization works well for networks with ReLU activations.