Policy Evaluation之Doubly Robust论文讲解

本文深入解析了DoublyRobust(DR)评估方法,一种结合DirectMethod(DM)和InversePropensityScore(IPS)优点的策略评估技术。DR有效解决了DM的偏差和IPS的高方差问题,通过增量计算策略评估值,实现双重鲁棒性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

● 每周一言

不用担心自己有多努力,因为每个人身边总会有个人比你更努力。

导语

前一篇文章已经铺垫好了增强学习评估的概念,几乎所有对强化学习策略评估的方法都是基于重要性采样展开。其中最经典的方法,莫过于ICML2011上出现的Doubly Robust estimation了。那么,Doubly Robust estimation具体是如何评估RL的?又有什么优势?

Doubly Robust

paper link: http://www.icml-2011.org/papers/554_icmlpaper.pdf

Doubly Robust (DR, or doubly protected) estimation,其实早在上世纪后期就已经提出,在ICML2011这篇论文发表以前,DR estimation被广泛运用于推论统计学,以及在线广告投放中评估新特征的影响。

那么,在增强学习中,DR是如何运用的?论文在第二节 Problem Definition and Approach 中,给我们描述了问题场景:在有限的动作空间A中,按照某一个策略π可以采取一连串的动作,每一个动作a都能得到一个奖励回报ra。

并定义了要解决的问题是什么:对于策略评估而言,在上面描述的场景中,reward奖励的分布以及策略π都是未知的,那么到底如何评估策略?

在DR之前,Policy Evaluation有两种主流方法。第一种就是上一节我们讲到的 Direct Method (DM)

下图原文中的红圈是关于上下文x(可以理解为当前所处状态)和动作a的奖励回报函数,蓝圈则是融入了策略函数π的奖励回报函数。注意,以后所有头上带尖号的字母都代表估计值。可以看出,关于策略π的DM评估值V,取的是所有模拟样本动作所得到的奖励回报的平均值。直观理解,就是每次动作后的价值奖励期望,其中S是样本空间。

诚然,如paper所言,如果奖励回报函数估计的比较准,接近于无偏估计,那么策略评估值理应接近真实值。但是,DM只学习了上下文、动作与奖励回报的关系,却并未考虑策略π输出的动作分布,这就导致了从样本空间S中按照上述公式计算出来的评估值很可能是有偏的(biased)。

举个极端的例子,假设样本空间S一共就两个样本,一个是执行动作a得到了8分,另一个是执行动作b得到了2分。按照DM做Policy Evaluation,评估值是 (8 + 2) / 2 = 5 分。现在,假设我们从上帝视角知道了策略函数π执行动作a和b的概率分别是0.8和0.2,那么真实的评估值应该是 0.8 * 8 + 0.2 * 2 = 6.8,DM评估的偏差为 6.8 - 5 = 1.8。

很明显,在这个例子中,如果是按照策略函数π进行的模拟采样,而且样本量足够,同样也会接近真实值。但是,现实情况的抽样往往总是不那么充分,而且样本也是有限的。

在这样有限的条件下,有没有好一点的办法来解决这个偏差?有,就是论文中提到的第二种方法 Inverse Propensity Score (IPS)。下图原文中,p是上下文、历史观测值与动作的转换函数,函数I(·)用于筛选当前策略π做出的动作。仔细看看,这个公式其实就是用了上节讲的重要性采样的思想,头上带尖号的p函数就是重要性权重。

只要p函数估计准确,换言之策略π所出的动作接近真实的动作分布,那么IPS的估计值就是无偏的(unbiased)。shift in action proportions是IPS方法的精髓,转换动作分布的作用其实就是使奖励价值计算更加准确。

那么,所有问题都解决了吗?不是的。我们发现,估计的p值是评估函数的分母,这会有什么问题?不妨试想一下,如果真实值很小,在p值估计过程中,微小的波动是不是就会导致估计值V的较大波动?数学意义上讲,就是论文中所说的大方差,a much larger variance

我们不妨总结一下上述两种方法:DM估计是有偏的,但是方差较小;IPS估计是无偏的,但是方差较大。

铺垫到这,文章自然而然引出了DR估计。DR结合了DM和IPS两种评估方法,一方面获得了二者各自的优势,另一方面又削弱了二者分别的劣势。

根据上图原文中的公式,通俗理解DR的思想就是:在DM的基础上,利用IPS思想,增量计算策略评估值。 红线部分指出了DR的命名由来,只要DM和IPS其中之一的函数估计准确,DR就是有效的;如果二者的函数估计都准确,DR这个评估方法就是Doubly Robust(双重鲁棒)的了。

论文中用了两节来专门分析偏差(bias)和方差(variance),由于篇幅关系,小斗就不在此继续讲解。对证明推导感兴趣的读者,可以点开原文链接进一步阅读。

限于理解能力有限,本文有讲解谬误之处还请留言交流指出。以上便是对Doubly Robust论文的讲解,敬请期待下节内容。

结语

感谢各位的耐心阅读,后续文章于每周日奉上,敬请期待。欢迎大家关注小斗公众号 对半独白

### 双向链表的Python实现 #### 定义结点类 为了创建双向链表,首先需要定义一个`Node`类来表示单个节点。每个节点包含三个属性:存储的数据(`data`)、指向下一个节点的指针(`next`)以及指向前一个节点的指针(`prev`)。 ```python class Node: def __init__(self, data=None): self.data = data self.next = None self.prev = None ``` #### 定义链表类 接着定义`DoublyLinkedList`类用于管理这些节点并提供操作接口。初始化方法设置头部和尾部为空,并维护列表大小计数器。 ```python class DoublyLinkedList: def __init__(self): self.head = None self.tail = None self.size = 0 ``` #### 插入新节点的方法 可以在链表的不同位置插入新的节点,这里展示两种常见的插入方式: ##### 头插法 在链表开头添加一个新的节点作为新的头节点。 ```python def add_first(self, value): new_node = Node(value) if not self.head: self.head = self.tail = new_node else: new_node.next = self.head self.head.prev = new_node self.head = new_node self.size += 1 ``` ##### 尾插法 在链表结尾处追加一个新节点成为新的尾节点。 ```python def add_last(self, value): new_node = Node(value) if not self.tail: self.head = self.tail = new_node else: new_node.prev = self.tail self.tail.next = new_node self.tail = new_node self.size += 1 ``` #### 删除指定值的第一个匹配项 此功能允许移除首次出现的目标元素对应的节点。 ```python def remove(self, target_value): current = self.head while current and current.data != target_value: current = current.next if not current: return False # Not found if current.prev is None: self.head = current.next else: current.prev.next = current.next if current.next is None: self.tail = current.prev else: current.next.prev = current.prev self.size -= 1 return True ``` 以上实现了基本的双向链表结构及其核心增删改查的功能[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值