译者 | 崔皓
审校 | 孙淑娟
研究人员提出了一些方法,在理论上保证重尾奖励分布的先验信息最小的情况下损失最小。

研究多臂赌博机问题(MABs)是为了解决不确定环境下的连续决策问题,针对多臂赌博机(MABs)的探索算法通常假定奖励噪声为轻尾分布。然而,现实世界的数据集往往是重尾噪声的。有鉴于此,来自韩国的研究人员提出了一种算法,该算法能够以最小的先验信息实现最小的最优性(最大损失情况下的最小损失)。与现有算法相比,新算法在自主交易和个性化推荐系统中具有潜在的应用。
在数据科学中,研究人员通常要处理包含噪声的观测数据。在这种情况下,数据科学家探索顺序决策的问题。也被称为 "随机多臂赌博机"问题(stochastic MAB)。在这里,一个智能代理在一个不确定的环境下,根据嘈杂的奖励(Rewards),依次探索和选择行动。它的目标是最小化累积遗憾(Regret)--最大奖励(Rewards)和所选行动的预期奖励之间的差异。遗憾(Regret)越小,意味着决策效率越高。
大多数现有的关于随机MABs的研究都是在奖励噪声遵循轻尾分布的假设下进行遗憾分析。然而,事实上,许多现实世界的数据集显示出重尾的噪声分布。这些数据包括用于开发个性化推荐系统的用户行为模式数据,用于自动交易开发的股票价格数据,以及用于自动驾驶的传感器数据。
在最近的一项研究中,韩国中央大学的Kyungjae Lee助理教授和蔚山科技学院的Sungbin Lim助理教授都解决了这个问题。在他们的理论分析中,他们证明了现有的随机MABs算法对于重尾奖励是次优的。更具体地说,这些算法采用的方法--稳健的置信度上限(UCB)和具有无界扰动的自适应扰动探索(APE)--不能保证最小化(最大可能损失的最小化)的最优性。
"基于这一分析,提出了最小最优鲁棒(MR)UCB和APE方法。MR-UCB利用更严格的稳健均值估计器的置信度约束,而MR-APE是其随机化版本。它采用了有界扰动,其规模与MR-UCB中修改后的置信度界限一致,"李博士在谈到他们的工作时解释说,这项工作于2022年9月14日发表在IEEE神经网络与学习系统期刊上。

研究人员接下来得出了依赖差距和独立的累积遗憾的上界。对于这两种提议的方法,后者的值与重尾噪声假设下的下限相吻合,从而实现了最小的最优性。此外,新方法需要最小的先验信息,并且只依赖于奖励有界时刻的最大顺序。相比之下,现有的算法需要该时刻的上限,而这一先验信息在许多现实世界的问题中可能无法获得。
在建立了他们的理论框架后,研究人员通过在帕累托和弗雷谢噪声下进行模拟测试了他们的方法。他们发现,MR-UCB的表现一直优于其他探索方法,而且在重尾噪声下,随着行动数量的增加,MR-UCB更加稳健。
此外,两人利用加密货币数据集验证了他们的方法,表明MR-UCB和MR-APE在处理重尾的合成和现实世界的随机MAB问题上是有益的--最大的最佳遗憾界限和最小的先验知识。
由于容易受到重尾噪声的影响,现有的MAB算法在对股票数据进行建模时表现不佳。他们无法预测股票价格的大幅上涨或突然下跌,造成巨大的损失。相比之下,MR-APE可用于自主交易系统,通过股票投资获得稳定的预期收益,"李博士在讨论本项工作的潜在应用时评论道。"此外,它还可以应用于个性化的推荐系统,因为行为数据显示出重尾的噪音。有了对个人行为的更好预测,就有可能提供比传统方法更好的推荐,这可以使广告收入最大化,"他总结道。
崔皓,51CTO社区编辑,资深架构师,拥有18年的软件开发和架构经验,10年分布式架构经验。曾任惠普技术专家。乐于分享,撰写了很多热门技术文章,阅读量超过60万。《分布式架构原理与实践》作者。
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我主要使用Ruby来执行此操作,但到目前为止我的攻击计划如下:使用gemsrdf、rdf-rdfa和rdf-microdata或mida来解析给定任何URI的数据。我认为最好映射到像schema.org这样的统一模式,例如使用这个yaml文件,它试图描述数据词汇表和opengraph到schema.org之间的转换:#SchemaXtoschema.orgconversion#data-vocabularyDV:name:namestreet-address:streetAddressregion:addressRegionlocality:addressLocalityphoto:i
目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非
是否可以在PyYAML或Ruby的Psych引擎中禁用创建anchor和引用(并有效地显式列出冗余数据)?也许我在网上搜索时遗漏了一些东西,但在Psych中似乎没有太多可用的选项,而且我也无法确定PyYAML是否允许这样做.基本原理是我必须序列化一些数据并将其以可读的形式传递给一个不是真正的技术同事进行手动验证。有些数据是多余的,但我需要以最明确的方式列出它们以提高可读性(anchor和引用是提高效率的好概念,但不是人类可读性)。Ruby和Python是我选择的工具,但如果有其他一些相当简单的方法来“展开”YAML文档,它可能就可以了。 最佳答案
我认为我的问题最好用一个例子来描述。假设我有一个名为“Thing”的简单模型,它有一些简单数据类型的属性。像...Thing-foo:string-goo:string-bar:int这并不难。数据库表将包含具有这三个属性的三列,我可以使用@thing.foo或@thing.bar之类的东西访问它们。但我要解决的问题是当“foo”或“goo”不再包含在简单数据类型中时会发生什么?假设foo和goo代表相同类型的对象。也就是说,它们都是“Whazit”的实例,只是数据不同。所以现在事情可能看起来像这样......Thing-bar:int但是现在有一个新的模型叫做“Whazit”,看起来
我有一个要在我的Rails3项目中使用的数组扩展方法。它应该住在哪里?我有一个应用程序/类,我最初把它放在(array_extensions.rb)中,在我的config/application.rb中我加载路径:config.autoload_paths+=%W(#{Rails.root}/应用程序/类)。但是,当我转到railsconsole时,未加载扩展。是否有一个预定义的位置可以放置我的Rails3扩展方法?或者,一种预先定义的方式来添加它们?我知道Rails有自己的数组扩展方法。我应该将我的添加到active_support/core_ext/array/conversion
我似乎经常遇到一些设计问题,但我不知道是什么是真的很合适。一方面我经常听到我应该限制耦合和坚持单一职责,但当我这样做时,我常常发现它很困难到在需要时将信息获取到程序的一部分。为了例如,classSingerdefinitialize(name)@name=nameendattr:nameend那么Song应该是:classSongdefnew(singer)@singer=singerendend或classSongdefnew(singer_name)@singer_name=singer_nameendend后者耦合性小,按道理应该用。但如果我以后发现宋有什么需要了解更多歌手,我的
我需要使用ActiveMerchant库在我们的一个Rails应用程序中设置支付解决方案。尽管这个问题非常主观,但人们对主要网关(BrainTree、Authorize.net等)的体验如何?它必须:处理定期付款。有能力记入个人帐户。能够取消付款。有办法存储用户的付款详细信息(例如Authotize.netsCIM)。干杯 最佳答案 ActiveMerchant很棒,但在过去一年左右的时间里,我在使用它时发现了一些问题。首先,虽然某些网关可能会得到“支持”——但并非所有功能都包含在内。查看功能矩阵以确保完全支持您选择的网关-http
我有一个像这样的ruby散列{"stuff_attributes"=>{"1"=>{"foo"=>"bar","baz"=>"quux"},"2"=>{"foo"=>"bar","baz"=>"quux"}}}我想把它变成一个看起来像这样的散列{"stuff_attributes"=>[{"foo"=>"bar","baz"=>"quux"},{"foo"=>"bar","baz"=>"quux"}]}我还需要保留键的数字顺序,并且键的数量是可变的。上面是super简化的,但我在底部包含了一个真实的例子。执行此操作的最佳方法是什么?附言还需要递归就递归而言,这是我们可以假设的:1)
参见下面的示例,我想最好使用第二种方法,但第一种也可以。哪种方法最好,使用另一种的后果是什么?classTestdefstartp"started"endtest=Test.newtest.startendclassTest2defstartp"started"endendtest2=Test2.newtest2.start 最佳答案 我肯定会说第二种变体更有意义。第一个不会导致错误,但对象实例化完全过时且毫无意义。外部变量在类的范围内不可见:var="string"classAvar=A.newendputsvar#=>strin