2.2 cross-entropy

交叉熵(cross-entropy)是model-free,policy-based,on-policy的强化学习方法。也就是说:

不对环境建模
估计智能体的策略
需要从环境中获得新的数据

我们举个例子,注意不同episode的 o i , a i , r i o_i,a_i,r_i oi,ai,ri是不同的,为了简单起见,取 γ = 1 \gamma=1 γ=1
在这里插入图片描述
每一个单元格都代表了智能体在episode中的每一步。由于环境的随机性和智能体根据概率分布抽样选择动作的方式,某些episode会比其他的更好。cross-entropy的核心是扔掉不好的episode,然后训练出更好的。步骤如下:

  1. 在环境中跑N个episode
  2. 计算每个episode的总奖励,并确定奖励边界,通常,我们把奖励边界定义为episode奖励排名的50%或70%
  3. 抛弃所有奖励在边界值以下的episode
  4. 使用剩余的episode训练神经网
  5. 从第1步重新开始,直到结果令我们满意为止

这就是cross-entropy方法的描述。神经网络学习如何重复动作,从而获得更大的回报,不断地将边界变得越来越高。尽管这种方法简单,但它在简单环境中表现良好,易于实现,并且对超参数变化非常鲁棒,是一种理想的baseline方法。

可以尝试一下用cross-entropy方法解决gym中CartPole-v0这个环境的控制问题

cross-entropy方法的数学原理

cross-entropy的基础是重要性采样定理(importance sampling theorem)
E x ∼ p ( x ) [ H ( x ) ] = ∫ x p ( x ) H ( x ) d x = ∫ x q ( x ) p ( x ) q ( x ) H ( x ) d x = E x ∼ q ( x ) [ p ( x ) q ( x ) H ( x ) ] \mathbb{E}_{x\sim p\left( x \right)}\left[ H\left( x \right) \right] =\int_x{p\left( x \right) H\left( x \right) dx}=\int_x{q\left( x \right) \frac{p\left( x \right)}{q\left( x \right)}H\left( x \right) dx}=\mathbb{E}_{x\sim q\left( x \right)}\left[ \frac{p\left( x \right)}{q\left( x \right)}H\left( x \right) \right] Exp(x)[H(x)]=xp(x)H(x)dx=xq(x)q(x)p(x)H(x)dx=Exq(x)[q(x)p(x)H(x)]
在RL中, H ( x ) H(x) H(x)是通过某种策略 x x x获得的奖励值, p ( x ) p(x) p(x)是所有policy的概率分布。我们不想通过搜索所有可能的策略来最大化return;相反,我们采用这样的方法:用 q ( x ) q(x) q(x)近似 p ( x ) H ( x ) p(x)H(x) p(x)H(x),找到一个最佳的 q ( x ) q(x) q(x)使return最大化,这个时候的 q ( x ) q(x) q(x)就是我们所需要的policy。

那怎么刻画 q ( x ) q(x) q(x)近似 p ( x ) H ( x ) p(x)H(x) p(x)H(x)的程度呢?可以用Kullback-Leibler(KL)散度刻画两个概率分布的距离,如下所示:
K L ( p 1 ( x ) ∣ ∣ p 2 ( x ) ) = E x ∼ p 1 ( x ) [ ln ⁡ p 1 ( x ) p 2 ( x ) ] = E x ∼ p 1 ( x ) [ ln ⁡ p 1 ( x ) ] − E x ∼ p 1 ( x ) [ ln ⁡ p 2 ( x ) ] KL\left( p_1\left( x \right) ||p_2\left( x \right) \right) =\mathbb{E}_{x\sim p_1\left( x \right)}\left[ \ln \frac{p_1\left( x \right)}{p_2\left( x \right)} \right] =\mathbb{E}_{x\sim p_1\left( x \right)}\left[ \ln p_1\left( x \right) \right] -\mathbb{E}_{x\sim p_1\left( x \right)}\left[ \ln p_2\left( x \right) \right] KL(p1(x)p2(x))=Exp1(x)[lnp2(x)p1(x)]=Exp1(x)[lnp1(x)]Exp1(x)[lnp2(x)]
我们现在要对这个函数进行优化,注意优化变量是 p 2 ( x ) p_2(x) p2(x)。KL的第一项称为,它与 p 2 ( x ) p_2(x) p2(x)无关,在优化过程中可以忽略。第二项称为交叉熵(cross-entropy),这是深度学习中非常常见的优化目标。

其实交叉熵就是
− 真 值 ∗ l n ( 估 计 值 ) -真值*ln(估计值) ln()

结合这两个公式,我们可以得到一个迭代算法,不断将 q ( x ) q(x) q(x)逼近 p ( x ) H ( x ) p(x)H(x) p(x)H(x)
q i + 1 ( x ) = arg ⁡ min ⁡ q i + 1 ( x ) − E x ∼ q i ( x ) p ( x ) q i ( x ) H ( x ) ln ⁡ q i + 1 ( x ) q_{i+1}\left( x \right) =\underset{q_{i+1}\left( x \right)}{\arg\min}-\mathbb{E}_{x\sim q_i\left( x \right)}\frac{p\left( x \right)}{q_i\left( x \right)}H\left( x \right) \ln q_{i+1}\left( x \right) qi+1(x)=qi+1(x)argminExqi(x)qi(x)p(x)H(x)lnqi+1(x)
这种优化方法是一种通用的cross-entropy,但是放在RL中,可以大大简化这个式子,首先,待优化的 q ( x ) q(x) q(x)就是 π ( a ∣ s ) \pi \left( a|s \right) π(as) H ( x ) H(x) H(x)更是可以简化成指示函数:reward大于阈值返回1,否则返回0。于是迭代算法简化成:
π i + 1 ( a ∣ s ) = arg ⁡ min ⁡ π i + 1 − E z ∼ π i ( a ∣ s ) [ R ( z ) > ψ i ] ln ⁡ π i + 1 ( a ∣ s ) \pi _{i+1}\left( a|s \right) =\underset{\pi_{i+1}}{\arg\min}-\mathbb{E}_{z\sim \pi_i\left( a|s \right)}\left[ R(z) > \psi_i \right] \ln \pi _{i+1}\left( a|s \right) πi+1(as)=πi+1argminEzπi(as)[R(z)>ψi]lnπi+1(as)

严格地说,公式中的所有概率分布函数还应满足概率的公理,但是在我们写程序的时候softmax函数已经帮我们解决了这个问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值