--oaa 2 和 --loss_function=logistic 在 Vowpal Wabbit 中的效果

     2023-03-13     221

关键词:

【中文标题】--oaa 2 和 --loss_function=logistic 在 Vowpal Wabbit 中的效果【英文标题】:Effect of --oaa 2 and --loss_function=logistic in Vowpal Wabbit 【发布时间】:2014-08-31 17:31:36 【问题描述】:

我应该在 VW 中使用哪些参数来执行二元分类任务?例如,让我们使用rcv1_small.dat。我thought 最好使用逻辑损失函数(或铰链),使用--oaa 2 毫无意义。然而,经验结果(在所有 4 个实验中报告了渐进式验证 0/1 损失)表明最佳组合是 --oaa 2 没有逻辑损失(即具有默认平方损失):

cd vowpal_wabbit/test/train-sets

cat rcv1_small.dat | vw --binary
# average loss = 0.0861

cat rcv1_small.dat | vw --binary --loss_function=logistic
# average loss = 0.0909

cat rcv1_small.dat | sed 's/^-1/2/' | vw --oaa 2
# average loss = 0.0857

cat rcv1_small.dat | sed 's/^-1/2/' | vw --oaa 2 --loss_function=logistic
# average loss = 0.0934

我的主要问题是:为什么--oaa 2 没有给出与--binary 完全相同的结果(在上述设置中)

我的第二个问题是:为什么优化逻辑损失并不能改善 0/1 损失(与优化默认平方损失相比)?这是该特定数据集的特定数据吗?

【问题讨论】:

【参考方案1】:

我在使用--csoaa 时遇到过类似的情况。详情请见here。我的猜测是,在 N 个类的多类问题的情况下(无论您将 2 指定为多个类),vw 实际上适用于 N 个特征副本。当对每个可能的类进行预测/学习时,相同的示例会获得不同的 ft_offset 值,并且此偏移量用于散列算法。因此,所有类都从同一数据集的行中获得“独立”的一组特征。当然特征值是相同的,但 vw 不保留值 - 只有特征权重。每个可能的类别的权重都不同。并且由于用于存储这些权重的 RAM 数量是用-b(默认为-b 18)固定的——你有更多的类你有更多的机会得到一个哈希冲突。您可以尝试增加-b 值并检查--oaa 2--binary 结果之间的差异是否正在减小。但我可能错了,因为我没有深入了解大众代码。

至于损失函数 - 您无法直接比较平方(默认)和逻辑损失函数的平均损失值。您应该从使用平方损失获得的结果中获得原始预测值,并根据逻辑损失获得这些预测的损失。该函数将是:log(1 + exp(-label * prediction) 其中标签是先验已知答案。在 vw 中实现的所有损失函数的此类函数 (float getLoss(float prediction, float label)) 可以在 loss_functions.cc 中找到。或者您可以使用1.f / (1.f + exp(- prediction) 将原始预测值初步缩放到 [0..1],然后按照kaggle.com 中的描述计算日志损失:

double val = 1.f / (1.f + exp(- prediction); // y = f(x) -> [0, 1]
if (val < 1e-15) val = 1e-15;
if (val > (1.0 - 1e-15)) val = 1.0 - 1e-15;
float xx = (label < 0)?0:1; // label -1,1 -> 0,1
double loss = xx*log(val) + (1.0 - xx) * log(1.0 - val);
loss *= -1;

您还可以使用“/vowpal_wabbit/utl/logistic”脚本或--link=logistic 参数将原始预测缩放到[0..1]。两者都使用1/(1+exp(-i))

【讨论】:

谢谢,您对我的主要问题的回答似乎是正确的。将-b 28 添加到上面的示例中,结果 squared=0.0856,logistic=0.0909,oaa_squared=0.0855,oaa_logistic=0.0909。有趣的是,由于哈希冲突(使用默认值 -b 18),oaa(具有两倍的特征)有时(平方)更好,有时(逻辑)更差。 直到我猜下面。由于损失函数不仅定义了损失值,而且还定义了在通用梯度下降算法中需要执行的步骤,并且由于 vw 是在线学习系统 - 算法与特定损失函数收敛的速度有多快很重要。此外,当您测量最终平均损失时,它可能取决于数据集的大小。如果数据集很小,那么具有特定损失函数的 gd 在预测接近 50/50 的最初步骤中的表现就很重要。 这个不确定期可能会因 logloss 而更大,转换为 0/1 loss 后其影响会被放大。我会尝试指定--passes n ,并希望在更长的距离上结果可以预期。 你又是对的,vw --binary -c --loss_function=logistic --passes=2 导致损失“0.077 h”。这是一个保留损失,因此它与之前报告的值并不能真正具有可比性(因为现在我只对 90% 的数据进行训练)。但是,--loss_function=logistic 导致相同的损失“0.077 h”,因此似乎两次通过有助于隐藏逻辑损失和平方损失之间的差异。更多的传球几乎没有区别。 --oaa 也是如此。所以我认为我的问题得到了充分的回答。谢谢。 我也可以调整初始学习率,而不是使用更多通道。 vw --binary --loss_function=logistic -l 1 结果为 0.0885。由于最近大众汽车的改进,vw --binary 现在有 0.0856。最佳学习率:vw --binary -l 0.45 为 0.0852。因此,通过调整学习率,logistic 和 squared 之间的差距即使一次通过也会小一些(但它仍然存在)。好的,我已经完成了这个挑剔。

致远oaa8htmlofficeservletgetshell漏洞

0x00漏洞简介致远OA在国内的用户也比较多,2019年攻防演练暴出来htmlofficeservletgetshell漏洞0x01影响组件致远A8-V5协同管理软件V6.1sp1致远A8+协同管理软件V7.0、V7.0sp1、V7.0sp2、V7.0sp3致远A8+协同管理软件V7.10x02漏洞指纹/seeyon/htmlofficeservlet/... 查看详情

2018-05-17-oaa-一种mermaid脚本驱动的软件项目模块图形化表述思路(代码片段)

layout:posttitle:2018-05-17-OAA-一种mermaid脚本驱动的软件项目模块图形化表述思路key:20180517tags:OAAflowchartsequencediagram泳道图时序图图表OAAPMMastermodify_date:05-17---OAA-一种mermaid脚本驱动的软件项目模块图形化表述思路说明:本文发布于:gitee,... 查看详情

小飞鱼通达二开致远oaa8+设计工作流实例初体验(图文)

 跟通达OA打交道的日子已经说不上有多少天了,借着这次系统升级的机会对致远OA来个全面的学习了解。经过一些初步的接触和操作使用,发现致远OA跟通达OA还是有很大的区别的,当然重点还是在工作流这块,A8... 查看详情

如何在pytorch中获取自定义损失函数的权重?

...-09-2318:49:33【问题描述】:我在pytorch中有一个模型,想在loss_function中添加L1正则化。但我不想将权重传递给loss_function()-有更好的方法吗?有关详细信息,请参阅下面的loss_function()。classAu 查看详情

小飞鱼通达二开致远oaa8+设计工作流实例初体验(图文)

 跟通达OA打交道的日子已经说不上有多少天了,借着这次系统升级的机会对致远OA来个全面的学习了解。经过一些初步的接触和操作使用,发现致远OA跟通达OA还是有很大的区别的,当然重点还是在工作流这块,A8... 查看详情

致远oaa6版安装

准备工作,操作系统winserver2019,sqlserver2019。致远OA安装包0.SeeyonInstall.zip相关下载:winserver2019下载地址:cn_windows_server_2019_updated_july_2020_x64_dvd_2c9b67da.isomagnet:?xt=urn:btih:22A410DEA1B0886354A34D19E995BECBB7EBA15E&dn=cn_wi... 查看详情

利用pytorch建立神经网络

...训练神经网络: 1、正向传播:opt=net(x) 2、计算损失:loss_function(opt,y) 3、梯度清零:optimizer.zero_grad() 4、反向传播:loss.backward() 5、参数优化:optimizer.step() 查看详情

无法正确设置提升

...k,但它仍然无法正常工作:$gcc-I/c/MinGW/include-std=c++14a.cpp-oaa.cpp:1:35:致命错误:boost/lambda 查看详情

Vowpal Wabbit 中的纠错锦标赛 (ect) 多类分类

...来了解它,但无法从中得到太多。我知道它与one-against-al(oaa)不同,甚至比oaa表现更好。我想简单解释一下 查看详情

如何编辑默认生成文件

...尝试使用make命令编译程序时,会出现以下错误:g++a.cpp-oaa.cpp:Infunction‘intmain()’:a.c 查看详情

利用pytorch的载入训练npy类型数据代码(代码片段)

...mdeftrain_one_epoch(model,optimizer,data_loader,device,epoch):model.train()loss_function=torch.nn.CrossEntropyLoss()#fromloss_functionimportFocalLoss1#loss_function=FocalLoss1().cuda()accu_loss=torch.zeros(1).to(device)#累计损失accu_num=torch.zeros(1).to(device)#累计预测正... 查看详情

machinelearningwithoracledatabaseadvancedanalytics

ariticlefrom: http://www.ateam-oracle.com/ml-with-oracle-database-cloud-advanced-analyticsOracleDB+OracleDataMining+OracleREnterprise=DatabaseAdvancedAnalytics(OAA)TheDatabaseAdvancedAnalyticsopt 查看详情

财务sap系统是啥

...的凭证。(收款凭证)oDZ,向顾客收款的凭证。(收款凭证)oAA,与固定资产相关的凭证。·特殊总帐标记有A,B,C,D四种,分别对应预收账款,应收票据,预收款请求和担保。CO知识点·一个成本控制范围下可包含一个公司代码,也... 查看详情

pytorch教程-4:pytorch中网络的训练与测试(代码片段)

...首先我们需要定义其结构,实例化一个用于计算Loss的loss_function和一个用于更新参数的optimizerÿ 查看详情

vim使用

...入vima.cpp按i进入编辑 按esc,再按“:wq”保存输入g++-oaa.cpp编辑输入vima.in  输入输入  ./a<a.in 运行输入 gedita.cpp 复制文件内复制方法 v开始选中,y结束选中,按 “+y 复制, 查看详情

乱码问题(代码片段)

...x下打开乱码[[email protected]~]#iconv-fgbk使用须知.txt-tutf8-oaa.txt[[email protected]~]#cataa.txt买家须知相关收到主机后如带独显一定要打开机箱拿出机箱内部的防震气泡柱方可使用1,主机前三次开机会比较慢(加载对应驱动文件)... 查看详情

如何使用 Keras RNN 模型来预测未来的日期或事件?

...它的代码:num_units=2activation_function=\'sigmoid\'optimizer=\'adam\'loss_function=\'mean_s 查看详情

核心数据设计:更好的 1 模型和 2 商店或 2 模型和 2 商店?

】核心数据设计:更好的1模型和2商店或2模型和2商店?【英文标题】:CoreDataDesign:better1modelwith2storesor2modelsand2stores?【发布时间】:2013-04-2814:56:30【问题描述】:我在iOS应用中使用核心数据时遇到了设计问题。我有两家商店,一... 查看详情