深度强化学习系列: “奖励函数”的设计和设置(reward shaping)

概述

前面已经讲了好几篇关于强化学习的概述、算法(DPG->DDPG),也包括对环境OpenAI gym的安装,baseline算法的运行和填坑,虽然讲了这么多,算法也能够正常运行还取得不错的效果,但是一直以来忽略了一个非常重要的话题,那就是强化学习的**《奖励函数》**的设置。

1、 Gym-Pendulum-v0例子分析奖励函数

为什么要讲强化学习的概述呢?也许在我们以前运行的算法中我们并没有直接接触到奖励函数的设置,而是直接调用了接口函数,下面以ddpg算法(点击查看DDPG算法)运行’Pendulum-v0’环境(下图,让摆杆立起来)为例子:
这里写图片描述

for j in range(MAX_EP_STEPS):
        if RENDER:
            env.render()
        # Add exploration noise
        a = ddpg.choose_action(s)
        # add randomness to action selection for exploration
        a = np.clip(np.random.normal(a, var), -2, 2)    
        s_, r, done, info = env.step(a)
        ddpg.store_transition(s, a, r / 10, s_)

这是episode运行过程,其中根据环境观察值得到action(ddpg.choose_action(s))后, 直接将动作传给了env.step()函数了,于是我们就非常直接的得到了对应的奖励(Reward)、下一个状态( S ‘ S^{‘} S),随后直接开始考虑改善核心算法。

但是,我们忽略去研究强化学习中非常重要的奖励函数的设置,因为它会决定强化学习算法的收敛速度和程度。
那么到底env.step()背后是怎样的呢?

 def step(self, action, **kwargs):
        self._observation, reward, done, info = self.env.step(action)
        self._observation = np.clip(self._observation, self.env.observation_space.low, self.env.observation_space.high)
        return self.observation, reward, done, info

其中第三行np.clip()函数就是,大于max取max,小于min取min(查看clip()函数 ),然后继续追踪第二行self.env.step(action),得到下面代码

 def step(self,u):
        th, thdot = self.state # th := theta
        g = 10.
        m = 1.
        l = 1.
        dt = self.dt
        u = np.clip(u, -self.max_torque, self.max_torque)[0]
        self.last_u = u # for rendering
        costs = angle_normalize(th)**2 + .1*thdot**2 + .001*(u**2)

        newthdot = thdot + (-3*g/(2*l) * np.sin(th + np.pi) + 3./(m*l**2)*u) * dt
        newth = th + newthdot*dt
        newthdot = np.clip(newthdot, -self.max_speed, self.max_speed) #pylint: disable=E1111

        self.state = np.array([newth, newthdot])
        return self._get_obs(), -costs
### 关于深度强化学习奖励函数设计的方法最佳实践 #### 奖励函数的重要性 在深度强化学习领域,奖励函数对于指导智能体行为至关重要。其不仅影响模型的学习效率,还决定了最终策略的质量适用范围[^1]。 #### 设计原则 为了构建有效的奖励机制,在设计过程中应遵循若干基本原则: - **即时反馈 vs 长期规划**:需平衡短期收益长远利益之间的关系。过早给予高额回报可能导致短视行为;而过分强调未来则可能使训练过程变得不稳定。 - **稀疏性处理**:当环境中可用的信息较少时(即大多数时间里都没有明显正向或负向信号),可以通过引入辅助任务或其他形式的内在动机来增加探索机会[^2]。 - **平滑性可微分性**:考虑到许多现代RL算法依赖梯度下降法更新参数,因此保持奖励值变化相对平稳有助于提高收敛速度并减少震荡现象的发生概率。 #### 实践技巧 具体实施层面有如下建议可供参考: - **基于物理意义定义**:尽可能依据实际应用场景中的量化指标设定奖惩标准,比如电力系统调度案例中采用成本节约量作为评判依据之一[^3]。 - **多维度综合考量**:除了单一数值外还可以考虑加入更多描述状态特征的因素形成复合型评价体系,进而促进更全面的理解发展方向调整能力。 - **动态适应调节**:允许随时间推移改变某些权重系数或者阈值界限,使得整个框架能够更好地应对不同阶段的需求差异以及外部条件变动带来的挑战。 ```python def reward_function(state, action): """ 计算给定状态下采取特定动作后的即时奖励 参数: state (list): 当前环境的状态表示 action (int): 执行的动作编号 返回: float: 对应该次操作所获得/损失的价值评估得分 """ # 示例逻辑:简单线性组合方式计算总评分 immediate_reward = sum([w * f(s, a) for w, s, a in zip(weights, states_features, actions)]) return max(min(immediate_reward, upper_bound), lower_bound) ```
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@RichardWang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值