顿搜
罚项Regularization与Dropout——解决神经网络过拟合问题
防止过拟合方法
通常可以使用以下几种方式减少过拟合问题
- 增加训练数据的实例数量
- 减小神经网络的规模, 但是更深层更大的网络潜在有更强的学习能力
- 对 $w$ 增加罚项
L2 正则化
又名weight decay,权重减小法
交叉熵正则化
英文名:Regularized cross-entropy
$$C = =-\frac{1}{n}\sum_{x_j}\left [ y_j \ln a_j^L + (1-y_j) \ln(1 - a_j^L) \right ] + \frac{\lambda}{2n} \sum_{w}w^2$$
增加了一项: 权重之和 (对于神经网络里面的所有权重 w 相加)
λ: regularization 参数,大于 0
n: 训练集包含实例个数
二次损失正则化
英文名:Regularized quadratic cost
$$C = \frac{1}{2n}\sum_{x}\parallel y - a^L \parallel^2 + \frac{\lambda}{2n} \sum_{w}w^2 $$
对于以上两种情况, 可以概括表示为
$$C = C_0 + \frac{\lambda}{2n} \sum_{w}w^2$$
Regularization 的 Cost 偏向于让神经网络学习比较小的权重 $w$, 除非第一项的 $C_0$ 明显减少.
$\lambda$: 调整两项的相对重要程度
- 较小的 $\lambda$ 倾向于让第一项 $C_0$ 最小化.
- 较大的 $\lambda$ 倾向与最小化增大的项(权重之和.
偏导数形式
$$\frac{\partial C}{\partial w} = \frac{\partial C_0}{\partial w} + \frac{\lambda}{n}w$$
$$\frac{\partial C}{\partial b} = \frac{\partial C_0}{\partial b}$$
关于偏导数的计算,请查看反向传播 (BP) 算法深入理解——神经网络偏导数的计算
更新规则
根据梯度下降算法, 更新法则变为
$$w = w - \eta\frac{\partial C_0}{\partial w} - \eta \frac{\lambda}{n}w = (1 - \frac{\eta \lambda}{n})w - \eta\frac{\partial C_0}{\partial w}$$
$$b = b - \eta\frac{\partial C_0}{\partial b}$$
对于随机梯度下降(stochastic gradient descent)
$$w = (1 - \frac{\eta \lambda}{n})w - \frac{\eta}{m} \sum_{x} \frac{\partial C_x}{\partial w}$$
$$b = b - \frac{\eta}{m}\sum_{x}\frac{\partial C_x}{\partial b}$$
求和是对于一个 mini-batch 里面所有的 x
加入 regularization 不仅减小了 overfitting, 还避免陷入局部最小点 (local minimum).
L2 正则化总结
在神经网络中 Regularized 网络更鼓励小的权重, 小的权重的情况下, 一些随机的变化不会对神经网络的模型造成太大影响, 所以更小可能受到数据局部噪音的影响.
Un-regularized 神经网路, 权重更大, 容易通过神经网络模型比较大的改变来适应数据,更容易学习到局部数据的噪音
Regularized 更倾向于学到更简单一些的模型
简单的模型不一定总是更好,要从大量数据实验中获得,目前添加regularization 可以更好的泛化更多的从实验中得来,理论的支持还在研究之中
L1 正则化
$$C = C_0 + \frac{\lambda}{n}\sum_{w}|w|$$
跟L2 regularization 相似, 但不一样
偏导数形式
$$\frac{\partial C}{\partial w} = \frac{\partial C_0}{\partial w} + \frac{\lambda}{n} sgn(w)$$
$sgn(w)$ 指的是 $w$ 的符号
- 如果 $w$ 是正数, $sgn(w) = +1$
- 如果 $w$ 是负数, $sgn(w) = -1$
权重更新
$$w = w - \eta\frac{\lambda}{n}sgn(w) - \eta\frac{\partial C_0}{\partial w}$$
特殊处理
当 $w=0$, 偏导数 $\frac{\partial C}{\partial w}$ 无意义, 因为 |w| 的形状在 $w=0$ 时是一个 V 字形尖锐的拐点.
所以, 当 $w=0$ 时,我们就使用 un-regulazied 表达式, $sgn(0) = 0$. 本来 regularization 的目的就是减小权重, 当权重等于 0 时,无需减少
与 L2 对比
都是减小权重, 方法不同
- L1减少一个常量, L2 减少权重的一个固定比例
- 如果权重本身很大, L1 减少的比 L2 少很多
- 如果权重本身很小, L1 减少的更多
L1 倾向于集中在少部分重要的连接上
Dropout
和 L1, L2 regularization 非常不同, 不是针对 cost 函数增加一项,而是对神经网络本身的结构做改变
算法步骤
- 开始, 删除掉隐藏层随机选取的一半神经元
- 然后,在这个更改过的神经网络上正向和反向更新, 利用一个mini-batch
- 然后,恢复之前删除过的神经元,重新随机选择一半神经元删除,正向,反向,更新w,b
- 重复此过程
- 最后,学习出来的神经网络中的每个神经元都是在只有一半神经元的基础上学习的,当所有神经元被恢复后,为了补偿,我们把隐藏层的所有权重减半
原理解读
对于同一组训练数据,利用不同的神经网络来训练,训练完之后,求输出的平均值,这样可以减少过拟合
Dropout 和这个是同样的道理,每次扔到一半隐藏层的神经元,相当于我们在不同的神经网络上训练了
总结
Dropout 减少了神经元的依赖性,也就是每个神经元不能依赖于某个或者某几个其他神经元,迫使神经网聚学习更加和其他神经元联合起来的更加健硕的特征