【问题标题】:(vowpal wabbit) contextual bandit dealing with new context(vowpal wabbit) 处理新上下文的上下文强盗
【发布时间】:2020-04-22 06:14:21
【问题描述】:

最后几天我正在尝试训练一个上下文强盗算法 throw Vowpalwabbit,所以我正在做一些玩具模型,可以帮助我理解算法的工作原理。

所以我想象了一个有 4 种可能动作的状态,并在两个不同的上下文中训练我的模型。 每个上下文在 4 个动作中只有一个最优动​​作。

我就是这样做的。

vw = pyvw.vw("--cb_explore 4 -q UA --epsilon 0.1")
vw.learn('1:-2:0.5 | 5')
vw.learn('3:2:0.5 | 5')
vw.learn('1:2:0.5 | 15')
vw.learn('3:-2:0.5 | 15')
vw.learn('4:2:0.5 | 5')
vw.learn('4:2:0.5 | 15')
vw.learn('2:2:0.5 | 5')
vw.learn('2:2:0.5 | 15')

因此,对于我的示例,对于他的特征等于 5 的上下文,最佳动作是 2,而对于另一个,最佳动作是 3。

当我在这两个上下文中进行预测时,没有问题,因为算法已经遇到过一次并且已经获得了奖励来调节他的选择。

但是当我到达一个新的上下文时,我希望算法能够让我做出最相关的动作,例如通过考虑上下文特征的相似性。

例如,如果我给出一个等于 29 的特征,我希望得到动作 3,因为 29 比 5 更接近 15。

所以我现在的审讯。

谢谢!

【问题讨论】:

    标签: python reinforcement-learning vowpalwabbit


    【解决方案1】:

    问题在于您构建功能的方式。特征的输入格式定义为name[:value],如果未提供值,则默认值为 1.0。因此,您提供的是名称为5 或15 的功能。特征名称被散列并用于确定特征的索引。因此,在您的情况下,特征 5 和特征 15 的值都为 1.0,并且是具有不同索引的不同特征。

    因此,要解决您的问题,您只需为您的功能命名。

    vw.learn('1:-2:0.5 | my_feature_name:5')
    vw.learn('1:2:0.5 | my_feature_name:15')
    

    您可以阅读有关输入格式here 的更多信息。

    另外,我想指出 -q UA 在您的示例中没有做任何事情,因为您没有命名空间。可以通过将命名空间放在栏旁边来指定它们。以下示例有两个命名空间,A 和 B。(注意:如果命名空间使用多个字符,则只有第一个字符与 -q 一起使用)

    1:-2:0.5 |A my_feature_name:5 |B yet_another_feature:4
    

    在这种情况下,如果我们提供 -q AB,那么 VW 将在运行时为 A 和 B 中的每对特征创建一个新特征。这使您可以在 VW 学习的表示中表达更复杂的交互。

    【讨论】:

    • 首先我要感谢您的回答!我有一些与-q 小部件相关的问题,首先是每个示例,如果我有两个以上的功能。要获得具有命名空间(A、B、C、D)的 4 个功能的每个示例的所有交互,以获取所有交互 -q AB -q BC -q CD -q AC ... 的正确格式?然后我可以在上下文特征和动作特征之间创建交互吗?
    • 只是为了澄清您可以在每个命名空间中放置多个功能。 (|A my_feature_name:5 feature:2 |B ...) 你也可以自己交互命名空间。 (-q AA) 此外,在您的示例中,如果您想自动添加 ABCD 的所有二次曲线,您可以使用-q ::。 : 表示通配符,将匹配所有命名空间。
    猜你喜欢
    • 2015-08-06
    • 2017-05-31
    • 2020-04-08
    • 2021-10-13
    • 2015-04-11
    • 2015-02-19
    • 1970-01-01
    • 2015-09-16
    • 1970-01-01
    相关资源
    最近更新 更多