我从 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 个,每个样本只包含其中的一小部分(这就是为什么当前特征
只有 100 个左右)。
这是我的猜测,在目标函数/损失函数中,第二项正则化损失
可能主导整个方程,从而导致这种现象?
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
上传递的正则化参数太大。
为什么会这样? vw
将 --l1
(同样适用于 --l2
)正则化值直接应用于计算的梯度总和。即使用的值是绝对而不是相对。经过一定程度的收敛后,梯度总和通常会接近于零,因此正则化值占主导地位。由于学习率处于稳定状态(由于 L1 较大而为时过早),学习器无法从进一步的示例中提取更多信息。
将 --l1
设置为较高值,会对收敛过程施加较高的下限。
如上面的 vw-hypersearch
结果所示,使用更小的 --l
正则化项可以显着改善最终结果:
+----------+----------------+
| l1 value | final avg loss |
+----------+----------------+
| 5.1e-02 | 0.692970 |
| 3.1e-10 | 0.116083 |
+----------+----------------+
关于classification - l1/l2 正则化导致 Vowpal wabbit 中所有特征权重为零是否合理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32752833/