假设我们的模型只有一个参数 \(w\),损失函数为 \(L(w)\),加入 L1 和 L2 正则化后的损失函数分别记为 \(J_1(w), J_2(w)\):
\[\begin{gathered} J_1(w) = L(w) + \lambda |w| \\ J_2(w) = L(w) + \lambda w^2 \end{gathered} \]原损失函数 \(L\) 在 \(w = 0\) 处的导数记为 \(L'(0)\),那么 \(J_1\) 在 \(w = 0\) 处的左、右导数为:
\[\begin{gathered} J_{-}'(0) = L'(0) - \lambda \\ J_{+}'(0) = L'(0) + \lambda \\ \end{gathered} \]当 \(\lambda > |L'(0)|\) 时,\(w = 0\) 处的左导数 \(L'(0) - \lambda < 0\)、右导数 \(L'(0) + \lambda > 0\),此时 \(w = 0\) 为 \(J_1\) 的一个极小值点。
也就是说,即使 \(L\) 不在 \(w = 0\) 处取得极小值(\(L'(0) \neq 0\)),我们也能够通过调节 \(\lambda\) 将损失函数的极小值点“转移”到 \(w = 0\)。
再来看 L2 正则化时的情况,\(J_2\) 在 \(w = 0\) 处的导数为:
\[J_2'(0) = [L'(w) + 2 \lambda w]_{w = 0} = L'(0) \]由此可见,如果 \(L\) 不在 \(w = 0\) 处取得极小值(\(L'(0) \neq 0\)),那么加入 L2 正则项后仍然不可能在 \(w = 0\) 处取得极小值。
总结:L1 正则化能将损失函数的极小值点“转移”到 \(w = 0\) 处,而 L2 正则化无论如何设置 \(\lambda\) 都达不到这样的效果。
相关资料:
- l1 相比于 l2 为什么容易获得稀疏解? - 王赟 Maigo的回答 - 知乎
- L1正则为什么更容易获得稀疏解_keep_forward的博客
- l1 相比于 l2 为什么容易获得稀疏解? - 王小明的回答 - 知乎