强化学习笔记:熵正则

0 策略过于确定的优劣

策略学习的目的是学出一个策略网络 \pi(a|s;\theta)用于控制智能体agent。
比如基于某一个状态s,策略网络的输出为:

那么基本上agent进行的动作就是向右了 

这样过于确定性的决策有好有坏:

  • 好处在于不容易选中很差的动作,比较安全。
  • 坏处在于智能体就会安于现状,不去尝试没做过的动作,不去探索更多的状态,无法找到更好的策略。

1 熵正则的引入

        我们希望策略网络的输出的概率不要集中在一个动作上,至少要给其他的动作一些非零的概率,让这些动作能被探索到。
        可以用熵 (Entropy) 来衡量概率分布的不确定性。 对于上述离散概率分布 p = [ p 1 , p 2 , p 3],熵等于
         熵小说明概率质量很集中,熵大说明随机性很大

 

 2 策略学习中的熵正则

        我们希望策略网络输出的概率分布的熵不要太小。我们不妨把熵作为正则项,放到策略学习的目标函数中。

        

        策略网络的输出是维度等于 |A| 的向量, 它表示定义在动作空间上的离散概率分布。
        这个概率分布的熵定义为:
        我们希望对大多数状态,熵都比较大,也就是让 E_S[H(S;\theta)]比较大。
        所以此时,带有熵正则的策略学习可以写作:

 

2.1 带熵正则的优化

带熵正则之后,梯度是:

通过推导可得此时g(θ)的无偏估计是

 2.1.1 推导

 所以二者一结合,有:

 

参考内容:王树森 强化学习

 

### PyTorch 中实现正则化的代码示例 在强化学习算法中加入正则化可以促进策略探索,防止过早收敛到次优解。对于给定的概率分布 $\pi(a|s)$,其对应的 $H(\pi)$ 可以通过下述方式计算: $$ H(\pi) = -\sum_a \pi(a|s)\log[\pi(a|s)] $$ 为了在训练过程中引入正则项,在损失函数中加上负的乘以一个小系数即可[^1]。 下面是一个简单的基于PyTorch框架下的正则化实现例子: ```python import torch import torch.nn.functional as F def compute_entropy_loss(logits): policy_dist = F.softmax(logits, dim=-1) log_policy_dist = F.log_softmax(logits, dim=-1) entropy = -(policy_dist * log_policy_dist).sum(dim=-1).mean() return -0.01 * entropy # 使用较小的比例因子控制强度 ``` 此段代码定义了一个辅助函数 `compute_entropy_loss` 来计算并返回负作为额外惩罚项的一部分。这里假设输入参数 logits 是未经过激活函数处理的动作概率估计;接着利用 softmax 函数将其转换成合法的概率分布形式,并据此求得相应的。最后取平均再乘上一个权重(本例设为-0.01),得到最终要加回到总损失中的部分。 当构建完整的优化目标时,则需将上述所得与原始的目标函数相结合: ```python total_loss = original_loss + compute_entropy_loss(policy_logits) optimizer.zero_grad() total_loss.backward() optimizer.step() ``` 在此基础上调整超参 `-0.01` 的大小能够改变对不确定性的偏好程度,从而影响整个系统的性能表现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

UQI-LIUWJ

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

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

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

打赏作者

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

抵扣说明:

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

余额充值