假设我想在一组历史数据的上下文设置中测试一个多臂强盗算法。为了简单起见,让我们假设只有两个臂A和B,并且假设奖励是二进制的。此外,假设我有一个数据集,用户可以看到这两只手臂中的一只,并且我有奖励的记录。模拟在线运行算法的场景的最佳方法是什么?
我想做的是:如果算法输出A,那么我想记录一个奖励,这样算法就可以学习,为了做到这一点,我们从用户被显示输出的数据中随机地进行均匀采样以获得这个奖励。
我想知道这种方法是否合适,是否有人知道用历史数据模拟在线学习算法的更好方法,特别是多臂强盗问题?
发布于 2018-01-03 15:29:15
您所遇到的问题是,用户最初是在与优化者正在学习的策略不同的策略下向A或B显示的。您可能不知道从该策略中A或B的概率(如果您知道的话,这将允许更多的微妙)。
您将需要拒绝与优化器在任何时候所做的不匹配的示例。这可能会给你留下更少的历史数据,并有可能得到一个偏颇的结果。
为了做到这一点,我们从一组数据中随机进行均匀采样,向用户展示输出以获得这种奖励。
如果我正确理解了这一点,您将计划:
遗憾的是,这是行不通的,因为在第三步中,您将上下文与代理的决定分开。因此,您将不度量代理的可能奖励,而是使用不同用户群并根据历史策略(您可能甚至不知道)获得奖励的代理的混合奖励。
一种较不偏颇的办法可能是:
如果代理的策略与大量用户的历史策略不同,这里可能会出现抽样偏差问题。问题是,由于缺乏关于奖励的数据,您正在系统地删除旧策略说了一件事的用户,而新的策略则是另一回事。因此,除非最初的策略是完全随机的,否则您实际培训/评估的样本将不会在用户群体中选择正确的比率,因为它是不同的。重要性抽样可以帮助减少这种情况,但前提是您必须知道在历史和学习代理策略中进行A/取舍B选择的可能性。
另一种可能是训练一个有监督的模型,从你的历史数据中预测给定用户数据和行为的奖励,并使用它来驱动一个在线环境的模拟器。如果您也在此测试期间培训您的代理,您可能需要通过抽样$x
https://datascience.stackexchange.com/questions/26203
复制相似问题