第二部分 · 学习给文本分类

怎样避免模型只记住练过的题?

训练时表现好,不一定代表遇到新数据也能做好。正则化通过约束参数,帮助模型学到更容易推广的规律。

第 5 讲在 PDF 第 17–19 页回顾了本页内容。接下来的多分类逻辑回归与 softmax会把分类器扩展到两个以上的类别。

训练集上表现好,还不够 Lec 4 · Sep 3

假设训练集里的“wow”碰巧只出现在正面评论中。模型可能因此给这个词非常大的权重,过分依赖这个偶然线索。可是在新评论里,人们可能以不同方式使用它,也可能完全不用它,这时模型就容易判断失误。

这就是过拟合(overfitting)的风险:模型把有用的规律和偶然细节、噪声一起学了进去。完全拟合训练集不一定就是过拟合,但也不能据此认定模型很好。我们真正关心的是泛化(generalization),也就是模型面对新样本时的表现。

训练时能优化的,与最终在意的

给定训练集 \(D=\{(x^{(i)},y^{(i)})\}\),我们通过最小化损失来找到一个函数 \(f(x)\)。难点在于:直接优化的是训练集 \(D\) 上的损失,真正关心的却是模型在未见过的样本上能否预测正确。

太简单、刚合适,还是太复杂?

欠拟合比较合适过拟合
模型太简单,表达不了数据中的规律。例如特征 \([1,x]\) 只能描述一条直线,可能连训练数据也拟合不好。模型抓住了数据背后的规律,对新样本也能作出较好的预测。模型过分追随训练数据的细节。课件示意图中的模型训练损失为 0,却在观测点之间或之外作出很不稳定的预测。

正则化:让过大的权重付出代价 Lec 4 · Sep 3

减少过拟合的一种办法,是让模型不要过分依赖某些特征。正则化(regularization)会在训练损失之外再加一项惩罚。这样,模型既要尽量预测正确,也要控制参数的大小:

平均预测损失,加上参数惩罚
\[ \hat\theta = \arg\min_\theta \ \underbrace{\frac{1}{N}\sum_{i=1}^N L\big(f(x^{(i)};\theta), y^{(i)}\big)}_{\text{原始损失}} \ +\ \lambda\, R(\theta) \]
  • 第一项是平均预测损失,第二项 \(\lambda R(\theta)\) 是新增的惩罚。
  • \(\lambda\) 决定惩罚有多强,可以取任意 \(\ge0\) 的值。\(\lambda=0\) 时没有正则化,值越大,惩罚越受重视。它是需要我们选择的超参数(hyperparameter),不是像普通权重那样直接从训练中学出的参数。
  • \(R(\theta)\) 衡量参数的大小。常用的两种方式是 L2 范数的平方和 L1 范数,下面分别说明。

L2:权重越大,惩罚增长得越快

L2 正则化把各个权重的平方相加,因此较大的权重会带来明显更大的惩罚。对这项惩罚求导,就会在原来的损失梯度上增加 \(2\lambda w\):

把权重平方相加:\(w\) 的 L2 范数平方
\[ R(w) = \|w\|_2^2 = \sum_{j=1}^{d} w_j^2 \]
在原损失梯度上加上惩罚项的梯度
\[ \nabla_w \big( L + \lambda \|w\|_2^2 \big) = \nabla_w L + 2\lambda w \]
对应的梯度下降更新
\[ w \leftarrow w - \eta\,\nabla_w L - 2\eta\lambda\, w \]

更新式多减去了 \(w\) 自身的一个倍数。这部分调整指向零,在步长足够小时,会让权重缩小,所以称为权重衰减(weight decay)。它抑制过大的权重,帮助模型减少对单个特征的过度依赖。

这里“L2 惩罚等价于权重衰减”的更新关系,针对的是普通梯度下降;其他优化算法实现权重衰减的方式可能不同。

L1:让一部分权重变成零

L1 正则化相加的是权重的绝对值,而不是平方。只要权重不为零,惩罚项的导数就只看它的正负,不看它有多大:

把权重绝对值相加:\(w\) 的 L1 范数
\[ R(w) = \|w\|_1 = \sum_{j=1}^{d} |w_j| \]
非零处的导数,以及对应的参数更新
\[ \frac{\partial}{\partial w_j} \lambda \|w\|_1 = \lambda \, \mathrm{sign}(w_j) \qquad\Rightarrow\qquad w_j \leftarrow w_j - \eta\,\frac{\partial L}{\partial w_j} - \eta\lambda\,\mathrm{sign}(w_j) \]

在 \(w_j=0\) 处,绝对值函数有一个尖角,没有普通意义上的导数。这时使用次梯度(subgradient):对于该惩罚项,\([-\lambda,\lambda]\) 内任意值都可以,0 也是其中一种选择。因此,上面的符号函数写法在非零处是导数,在零处取 0 则是一个合法的次梯度选择。

L1 和 L2 的差别在哪里

比较内容L1L2
惩罚项怎样调整非零权重?无论权重的绝对值多大,都给出大小为 \(\eta\lambda\)、朝向零的调整。调整大小与权重成比例:权重越大,调整越大。
倾向得到什么结果?倾向得到稀疏的解,也就是许多权重恰好为零。不过,简单的次梯度更新可能越过零,而不是正好落在零上;最终是否得到精确的零,还与解和优化方法有关。让模型中的权重整体较小,通常不会强制它们恰好为零。
这有什么用?若 \(w_j=0\),特征 \(j\) 就不再影响预测。这相当于做特征选择,去掉拟合后的模型不需要的特征。以比较平滑的方式削弱大权重的影响。权重衰减是深度学习中常见的正则化方法。
它与平滑有什么联系

正则化与 n-gram 模型中的平滑有相似的作用:都愿意牺牲一点训练集上的拟合程度,换取在新数据上更好的表现。两者也都引入了需要选择的设置,例如这里的 \(\lambda\),以及平滑中的 \(k\) 或插值权重。应当用单独留出的验证数据调节这些值,不能用测试集调参。

这一页要记住什么
  • 目标是预测好新样本,而不只是把训练损失降到零。
  • 正则化在损失上增加 \(\lambda R(\theta)\)。L2 抑制大权重;L1 倾向产生稀疏权重,可以起到选择特征的作用。
  • 用单独留出的验证数据,选择合适的正则化强度 \(\lambda\)。