L1和L2的几何对决:菱形与圆球的较量
先从最经典的线性回归说起。无正则化的最小二乘就是最小化 ∥y – Xw∥²。加L2就是加上 λ∥w∥²,加L1是 λ∥w∥₁。为什么就能控制过拟合?看损失函数的等高线,它们与约束区域的切点就是最优解。L2约束区域是个超球,L1是个超菱形。和等高线相切时,L1更容易切在坐标轴上,这就产生了稀疏权重——很多分量直接归零。这就是特征选择,也是L1称“拉索”的原因。但L2只会把权重均匀地往小拉,不会归零。所以L2擅长处理特征共线性,而L1适合高维特征筛选。不过实际中,真高维时L1也会疯,毕竟它假设特征之间独立——这就引出弹性网络,那都是后话。
落地三大坑点,摔过才懂
坑一:缩放,缩放,还是缩放! 正则化假设所有特征在同一个量级。如果有个特征范围0-1000,另一个0-1,那L2惩罚会拼命压大尺度特征,小尺度特征几乎没有惩罚。这导致模型被量纲绑架。解决方案?永远在正则化前做标准化(StandardScaler),或者更稳健地用RobustScaler。别偷懒,我见过一个项目就因为忘记Normalize,L2效果比基线还差3个点——组里debug了两天。 坑二:λ不是你想调就能调好的。 很多人上来就用默认1.0或者0.1,然后在测试集上看效果,这不叫调参,这叫瞎蒙。正确的姿势是:利用交叉验证,在验证集上画学习曲线。λ太小,过拟合;λ太大,欠拟合,偏差飙升。最稳妥的是对数尺度的网格搜索,比如[0.0001, 0.001, 0.01, 0.1, 1, 10]。但如果你特征很多,网格搜索爆计算,试试随机搜索或贝叶斯优化。我的经验:在200维的文本分类里,贝叶斯优化只用了网格搜索1/20的时间,找到了相差0.3%以内的λ。这效率,香。 坑三:L1的稀疏不是魔法,不稳定才是常态。 L1求解常用坐标下降或次梯度,但损失函数非光滑,容易震荡收敛。尤其当特征间有强相关性时,L1可能随机挑一个而扔掉另一个,导致模型在不同数据子集上稀疏模式迥异。这就是为什么弹性网络(Elastic Net)几乎成了标配:引入一点L2惩罚,让损失更严格凸,稳定性大幅提升。我在Kaggle竞赛里见过太多人死磕纯L1直接过拟合,换成ElasticNet(l1_ratio=0.5)后,交叉验证标准差降了一半。说到底,这是一种权衡。
别把正则化当万金油
正则化不是免费的午餐。它本质上引入了偏差,来换取方差降低。如果数据足够多,没有正则化的模型可能更好。此外,正则化不能代替好的特征工程,也不能解决数据泄露——它只能管住你拟合噪声,却管不住你拟合错误。还有,深度学习里Dopout、BatchNorm其实也算隐式正则化,和权重衰减联合使用有时会冲突,得小心调度。总之,正则化是工具,不是信条。 说到底,每次看到有人发论文说“我们用了L2正则化,λ=0.0001”,然后声称SOTA,我都想翻白眼。这参数到底调没调过,自己心里没数?真正的工程美学,是理解每个超参背后的物理含义,而不是往模型里随手撒一把正则化盐。好了,今天就聊这些,下次我们再扒一扒Dropout的内在机理。作者|大讲堂
排版|大讲堂
审核|阿辰
大讲堂