赞
踩
因为想申请 CSDN 博客认证需要一定的粉丝量,而我写了五年博客才 700 多粉丝,本文开启关注才可阅读全文,很抱歉影响您的阅读体验
强化学习的标准交互过程如下:每个时刻,智能体根据根据其 策略(policy)
,在当前所处 状态(state)
选择一个 动作(action)
,环境(environment)
对这些动作做出相应的相应的响应,转移到新状态,同时产生一个 奖励信号 (reward)
,这通常是一个数值,奖励的折扣累加和称为 收益/回报 (return)
,是智能体在动作选择过程中想要最大化的目标
在这个过程中,“奖励 & 收益” 其实是智能体目标的一种形式化、数值化的表征。可以把这种想法非正式地表述为 “收益假设”
智能体所有的 “目标” 或 “目的” 都可以归结为:最大化智能体收到的标量奖励信号的累计和(称之为“收益”)的概率期望值 —— Richard S.Sutton
使用收益来形式化目标是强化学习最显著的特征之一
注意,收益是通过奖励信号计算的,而奖励函数是我们提供的,奖励函数起到了人与算法沟通的桥梁作用
某种程度上,奖励函数设计可以看作 “面向强化学习的编程”,算法工程师根据特殊 “语法”,将期望的任务和目标 “翻译” 成奖励函数,由强化学习算法进行 “编译”,最后在 agent 与 environment 的交互过程中 “运行”(指导算法训练)。“编译器”(RL算法)的性能和 “编程质量”(奖励函数质量)共同决定了策略的性能
需要注意的是,智能体只会学习如何最大化收益,如果想让它完成某些指定任务,就必须保证我们设计的奖励函数可以使得智能体最大化收益的同时也能实现我们的目标
主线事件
:强化学习的任务目标通常可以分为两类
这是所有强化学习任务的 根本目标,可以把上述定性目标的达成和定量目标的改善成为 主线事件
主线奖励
:根据主线事件可以相应地定义 主线奖励
,这通常是简单的
主线回报相对于任务目标而言往往是无偏
的,因此只包含主线回报的奖励函数往往是最简单也最理想(从指向性来看)的形式
稀疏奖励问题
针对稀疏奖励问题,学界提出了很多方法,可以概括为以下三类
下面对第三种方法加以说明
要从奖励函数设置角度克服稀疏奖励问题,直观的想法就是在主线回报的基础上增加其他的奖励项或惩罚项,使得奖励函数变得稠密,给与Agent足够强的指导,从而加快 DRL 算法收敛速度并提升性能。这些主线奖励以外的奖励称为 辅助奖励
,通常有三类
子目标奖励
:这是辅助奖励的主要形式,其设计方法是把任务目标进一步分解为子目标,然后按照各自在促进主线事件实现过程中的贡献大小和作用方向分别给予适当的奖励或惩罚,这个操作也称为 贡献度分配
。子目标总体上分为 “鼓励型” 和 “回避型” 两类。理想情况下,贡献度分配是由RL算法在主线目标引导下自行完成的。塑形奖励
:塑形奖励的基本思想就是向没有定义奖励信号的状态添加奖励信号,早期,添加奖励的具体方式缺少理论指导,往往会导致偏离任务初衷的行为。吴恩达在20世纪末提出了 Potential-Based Reward Shaping 技术,给出了一种在维持最优策略不变前提下加速算法收敛的奖励塑形方法,现在的 “塑形奖励” 通常指这种方法及基于其思想的变体。Potential-Based Reward Shaping 方法给每个状态设定一个势能函数
ϕ
(
s
)
\phi(s)
ϕ(s),代表着当前状态与目标之间的距离,这样转移
(
s
,
a
,
a
′
)
(s,a,a')
(s,a,a′) 就有了额外的塑形奖励
γ
ϕ
(
s
′
)
−
ϕ
(
s
)
\gamma \phi(s')-\phi(s)
γϕ(s′)−ϕ(s),即内驱奖励
:这种奖励意在模仿自然生物的好奇心,它不针对任何具体的目标,而是无差别地鼓励 agent 探索未知状态,借此增加有效转移发生概率,这种方法主要用于在复杂任务中加强探索。实践中,若前两种辅助奖励效果已经够好,则不需要内驱奖励用一张图来表示这些奖励函数,上侧图代表对 “鼓励型” 子目标施加正向奖励,对 “回避型” 子目标施加惩罚;下侧图代表对两类子目标都施加负奖励,通过减少惩罚的形式激励 “鼓励型” 子目标,这种方法可以避免 Reward Hacking,但是可能导致 “懦弱” 行为
所有这些辅助奖励的设计都需要对任务逻辑有深入了解,且需要 domain-knowledge。越复杂任务,动作空间、状态空间越大,就越难通过奖励函数向 agent 清楚传达我们的目标,设计奖励函数的成本就越高。如果去看一些复杂任务的奖励函数,往往会感到一头雾水,比如下面这个后空翻任务
这个任务来自论文 《Deep Reinforcement Learning from Human Preferences》,为了用RL方法实现它,研究人员花费5个小时设计了右侧的奖励函数。可见,其中 backroll = -ob[7]
应该是一个定性型的主线奖励,其他都是各种辅助奖励
鲁莽
:如果奖励函数中没有对某个不希望出现的行为设置惩罚,或者惩罚力度过小,会导致agent无法学会规避此事件,或是权衡利弊后选择承担此事件的惩罚以换取更大的收益。比如二维平面导航任务中,如果没有对碰撞和电量过低设置惩罚,可能导致agent为了避免绕路试图 “穿过” 墙壁,或无视自身电量不足的现状只顾驶向终点,直至半路停车抛锚贪婪
:贪婪行为主要分为 Wireheading 和 Reward Hacking 两类。Wireheading
主要指由于动作空间设置不合理,导致 agent 学会通过执行特殊动作改变其对环境信息进行感知与加工的过程,以获取超额回报、屏蔽惩罚的问题。比如玩俄罗斯方块的 agent,可能学会在游戏结束前按下暂停键以避免扣分,或者通过使用作弊码直接加分,为了避免这类问题,应当设计合理的动作空间。Reward Hacking
主要指由于由于奖励函数片面奖励某个子目标而又缺乏制衡时,agent 可能反复攫取局部收益而忽略初始目标的问题,比如二维平面导航任务,要求agent从一个房间的起点走到另一个房间的终点,为了鼓励穿过门,在门位置施加奖励,这可能导致 agent 反复来回穿过门以攫取局部奖励。为了避免这类问题,应该通过减少惩罚的形式鼓励agent实现子目标,除了主线奖励和内驱奖励外,尽量避免对子目标施加正向奖励,除非某个鼓励类子目标的达成是一次性的或数量可控懦弱
:懦弱行为常见于辅助惩罚项很多且绝对值相对与主线奖励过大的情形。agent在训练初期收到大量的负反馈阻碍了其进一步探索到主线事件并获取奖励,从而陷入局部最优,可以看作一种特殊的 reward hachking 问题。比如在 Atria 游戏 PitFall 中,Agent为了躲避密集的惩罚信号而选择停在起始位置不动在强化学习的标准设定中,我们通过奖励函数给予 agent 指导,但是 从奖励函数到任务目标的关系是间接的、抽象的,对奖励函数稍加改变,最后优化得到的策略就很可能天差地别。事实上,我们很难通过奖励函数准确地向 agent 传达我们想实现的目标。比如对于定性目标任务,在终止状态上,我们可以有把握地说,没错,我们要鼓励到达这里,给与高奖励,但是在其他状态下,我们对于给予不同奖励的后果其实很难有一个良好的估计,但如果想在这些状态也对 agent 有强力的指导,就必须要设置奖励,这样就很容易引入偏差,要想减少偏差,就要上各种 trick 迭代实验,导致成本飙升
还原到本质来看,奖励函数的存在的意义就是向 agent 指明任务目标,根据前文分析,当任务比较复杂时,奖励函数实现这个任务的能力其实是有限的,这不是说不存在一个好的奖励函数,而是奖励函数的设计空间太大了,好的奖励函数太难找了,这已经是一个学术问题,称为 “最优奖励问题(Optimal Reward Problem)”
一个自然的想法是,我们可以使用其他方式向 agent 传递目标,这样就引出了各种方法
再看回来,奖励函数的数学形式其实还是很好的,描述能力强,而且可以很方便地形式化问题,因此大部分这些方法最后还是转变为找一个好的奖励函数
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。