l1/l2 正则化导致 vowpal wabbit 中所有特征权重为零是不是合理?

Posted

技术标签:

【中文标题】l1/l2 正则化导致 vowpal wabbit 中所有特征权重为零是不是合理?【英文标题】:Is it reasonable for l1/l2 regularization to cause all feature weights to be zero in vowpal wabbit?l1/l2 正则化导致 vowpal wabbit 中所有特征权重为零是否合理? 【发布时间】:2015-12-21 13:17:36 【问题描述】:

我从vw 得到了一个奇怪的结果,它使用在线学习方案进行逻辑回归。当我添加 --l1--l2 正则化时,我得到的所有预测都是 0.5(这意味着所有特征都是 0)

这是我的命令:

vw -d training_data.txt --loss_function logistic -f model_l1 --invert_hash model_readable_l1 --l1 0.05 --link logistic

...这里是学习过程信息:

using l1 regularization = 0.05
final_regressor = model_l1
Num weight bits = 18
learning rate = 0.5
initial_t = 0
power_t = 0.5
using no cache
Reading datafile = training_data.txt
num sources = 1
average  since         example        example  current  current  current
loss     last          counter         weight    label  predict features
0.693147 0.693147            1            1.0  -1.0000   0.5000      120
0.423779 0.154411            2            2.0  -1.0000   0.1431      141
0.325755 0.227731            4            4.0  -1.0000   0.1584      139
0.422596 0.519438            8            8.0  -1.0000   0.4095      147
0.501649 0.580701           16           16.0  -1.0000   0.4638      139
0.509752 0.517856           32           32.0  -1.0000   0.4876      131
0.571194 0.632636           64           64.0   1.0000   0.2566      140
0.572743 0.574291          128          128.0  -1.0000   0.4292      139
0.597763 0.622783          256          256.0  -1.0000   0.4936      143
0.602377 0.606992          512          512.0   1.0000   0.4996      147
0.647667 0.692957         1024         1024.0  -1.0000   0.5000      119
0.670407 0.693147         2048         2048.0  -1.0000   0.5000      146
0.681777 0.693147         4096         4096.0  -1.0000   0.5000      115
0.687462 0.693147         8192         8192.0  -1.0000   0.5000      145
0.690305 0.693147        16384        16384.0  -1.0000   0.5000      145
0.691726 0.693147        32768        32768.0  -1.0000   0.5000      116
0.692437 0.693147        65536        65536.0  -1.0000   0.5000      117
0.692792 0.693147       131072       131072.0  -1.0000   0.5000      117
0.692970 0.693147       262144       262144.0  -1.0000   0.5000      147

顺便说一句,特征的数量接近 80,000,每个样本只包含其中的一小部分(这就是为什么 current features 只有 100 个左右)。

这是我的猜测,在目标函数/损失函数中,第二项regularization loss 可能会主导整个方程,从而导致这种现象?

loss = example_loss + regularization_loss

我尝试了另一个数据集(前几天的)

$vw-hypersearch -L 1e-10 5e-4 vw --l1 % training_data.txt 
vw-hypersearch: -L: using log-space search
trying 1.38099196677199e-06 ...................... 0.121092 (best)
trying 3.62058586892961e-08 ...................... 0.116472 (best)
trying 3.81427762457755e-09 ...................... 0.116095 (best)
trying 9.49219282204347e-10 ...................... 0.116084 (best)
trying 4.01833137620189e-10 ...................... 0.116083 (best)
trying 2.36222250814353e-10 ...................... 0.116083 (best)
loss(2.36222e-10) == loss(4.01833e-10): 0.116083
trying 3.08094024967111e-10 ...................... 0.116083 (best)
3.08094e-10 0.116083

【问题讨论】:

--l1 0.05 太大了。试试--l1 1e-7 左右。这是否改善了结果?在上面的输出中,所有标签都是-1 1 标签在哪里?最后,如果您可以分享您的数据,那将会很有帮助。 @arielf vw 需要 -1 或 1 作为二进制标签。而且我已经将模型与(1e-8 可以)进行了比较,并且在测试集中没有 l1 时,它们在 AUC 中几乎相同。很有趣的结果。 你也可以一起试试--l1 ... --l2 ...。您可以使用vw-hypersearch 扫描--l1--l2 的范围以找到最佳组合。 【参考方案1】:

正如您正确怀疑的那样:正则化项在损失计算中占主导地位,导致了这个结果。这是因为在命令行--l1 0.05 上传递的正则化参数太大。

为什么会这样? vw--l1(同样适用于 --l2)正则化值直接应用于计算的 sum-of-gradients。即使用的值是 absolute 而不是 relative。经过一些收敛后,sum-of-gradients 通常接近于零,因此正则化值占主导地位。由于学习率趋于稳定(由于 L1 较大而为时过早),学习器无法从更多示例中提取更多信息。

--l1 设置为较高的值,会对收敛过程施加较高的底限。

正如上面的vw-hypersearch 结果所示,使用更小的--l 正则化项可以显着改善最终结果:

+----------+----------------+
| l1 value | final avg loss |
+----------+----------------+
| 5.1e-02  |       0.692970 |
| 3.1e-10  |       0.116083 |
+----------+----------------+

【讨论】:

以上是关于l1/l2 正则化导致 vowpal wabbit 中所有特征权重为零是不是合理?的主要内容,如果未能解决你的问题,请参考以下文章

L0, L1, L2 正则化

由于 vowpal wabbit 对 boost 库的依赖而导致的错误

L1、L2正则化

L1、L2正则化知识详解

L1,L2正则化本质

机器学习中L1,L2正则化项