5 权重衰减
- 缓解过拟合:
- 更多数据
- 正则化技术
- 权重衰减也称$L_2$正则化,通过函数与零的距离来衡量函数的复杂度。如何精确地测量一个函数和零之间的距离呢?一种简单的方法是通过线性函数 f(x) = w⊤x 中的权重向量的某个范数来度量其复杂性,例如$||W||^2$。将权重向量作为惩罚项加入损失函数。原始的损失:
$$L(\mathbf{w},b)=\frac{1}{n}\sum\limits^{n}_{i=1}\frac{1}{2}(\mathbf{w}^T\mathbf{x}^{(1)}+b-y^{(i)})^2$$ - 加入惩罚项
$$L=L(\mathbf{w},b)+\frac{\lambda}{2}||\mathbf{w}||^2$$ - 除以2是为了求导时消掉,让表达式更简单。使用平方范数而不是标准范数(欧几里得距离)是为了便于计算,且它对权重向量的大分量施加了巨大的惩罚,这使得我们的学习算法偏向于在大量特征上均匀分布权重的模型。相比之下,L1惩罚会导致模型将权重集中在一小部分特征上,而将其他
权重清除为零。这称为特征选择(feature selection) - 加入正则化项后的梯度更新:
$$\mathbf{w} \leftarrow (1-\eta \lambda)\mathbf{w}-\frac{\eta}{| \Beta |}\sum\limits_{ i\in \Beta }\mathbf{x}^{(i)}(\mathbf{w}^T\mathbf{x}^{(i)}+b-y^{(i)})$$
5.1 高维线性回归(实现权重衰减)
$$ y= 0.05+ \sum\limits^{d}_{i=1}0.01x_i+\epsilon, \epsilon \in N(0,0.01^2)$$
1 | import os |
w的L2范数是: 12.524763107299805
1 | train(lambd=3) #使用权重衰减 |
w的L2范数是: 0.3719361424446106
5.2 简洁实现
- 通常将权重衰减集成到优化算法中,以便与任何损失函数结合使用,并允许在不增加任何额外的计算开销的情况下向算法中添加权重衰减。
1 | def train_concise(wd): |
w的L2范数: 12.297795295715332
1 | train_concise(3) |
w的L2范数: 0.40956297516822815