强化学习の学习笔记(一)——多臂老虎机、ε-greedy策略、乐观初始值、增量式实现、梯度赌博机

前言

因为毕设的关系,要学习点强化学习的内容。我采用的教材是Richard S. Sutton/Andrew G. Barto著,俞凯等译的《强化学习(第2版)》。

符号约定

一般来说,大写符号代表随机变量,小写符号代表随机变量的一次具体实现。

  • A t = d e f A_t\xlongequal[]{\mathrm{def}} Atdef 在时刻 t t t 采取的动作( A A A 意味着action)
  • R t = d e f R_t\xlongequal[]{\mathrm{def}} Rtdef 该动作对应的收益( R R R 意味着reward)
  • 具体动作 a a a 对应的估计价值为 Q t ( a ) Q_t\left(a\right) Qt(a)
  • 具体动作 a a a 对应的真实价值为 q ∗ ( a ) q_*\left(a\right) q(a) ,该价值是给定动作 a a a 收益的期望:

q ∗ ( a ) = ⋅ E [ R t ∣ A t = a ] (0.1) q_*\left(a\right)\xlongequal[]{\cdot}\mathbb{E}\left[R_t|A_t=a\right]\tag{0.1} q(a) E[RtAt=a](0.1)

举个例子,你今天是否去买彩票记为 A t o d a y A_{\mathrm{today}} Atoday ,记买彩票这个行为为 d o do do ,不买彩票这个行为为 n o t not not

假设这个时候有一个上帝视角的人,它知道你今天买彩票 买 买 或者不买彩票 不 买 不买 这个行为的真实期望收益为

{ q ∗ ( 买 ) = ⋅ E [ R 今 天 ∣ A 今 天 = 买 ] q ∗ ( 不 买 ) = ⋅ E [ R 今 天 ∣ A 今 天 = 不 买 ] (0.2) \begin{cases} q_*\left(买\right)&\xlongequal[]{\cdot}\mathbb{E}\left[R_{今天}|A_{今天}=买\right]\\ q_*\left(不买\right)&\xlongequal[]{\cdot}\mathbb{E}\left[R_{今天}|A_{今天}=不买\right] \end{cases} \tag{0.2} {q()q() E[RA=] E[RA=](0.2)

然而,虽然旁观者清,但你当局者迷,你只能对 q ∗ ( 买 ) q_*\left(买\right) q() q ∗ ( 不 买 ) q_*\left(不买\right) q() 进行估计,得到估计期望收益为 Q 今 天 ( 买 ) Q_{今天}\left(买\right) Q() Q 今 天 ( 不 买 ) Q_{今天}\left(不买\right) Q() 。然后你根据估计的期望收益进行行动。

多臂老虎机

我们假设有两个老虎机,并已知老虎机的收益分布是均值为 500 500 500 ,方差为 100 100 100 的正态分布;另一个老虎机的收益分布是均值为 550 550 550 ,方差为 200 200 200 的正态分布。那么,如果将均值作为价值,那么

{ q ∗ ( 甲 ) = 500 q ∗ ( 乙 ) = 550 (1.1) \begin{cases} q_*\left(甲\right)=500\\ q_*\left(乙\right)=550 \end{cases} \tag{1.1} {q()=500q()=550(1.1)

显然, q ∗ ( 甲 ) < q ∗ ( 乙 ) q_*\left(甲\right)<q_*\left(乙\right) q()<q() ,我们无脑选择后者就完事了。全书完——

⋮ \vdots

骗你的啦——

基于平均学习Q函数

这里的问题在于:现实中我们不知道真实的收益概率分布 R t R_t Rt ,天底下哪有这种好事啊。那么我们自然得不到 q ∗ ( a ) q_*\left(a\right) q(a) 。因此,强化学习干的就是这样一件事情——通过数据去学习收益概率分布,用学到的结果得到估计值 Q t ( a ) Q_t\left(a\right) Qt(a)

那么,怎么学习 Q t ( a ) Q_t\left(a\right) Qt(a) 呢?最简单的办法就是多次测量取平均值咯。

Q t ( a ) = ⋅ t 时刻前通过执行动作 a 得到的收益和 t 时刻前执行动作 a 的次数 (1.2) Q_t\left( a \right) \xlongequal[]{\cdot}\frac{t\text{时刻前通过执行动作}a\text{得到的收益和}}{t\text{时刻前执行动作}a\text{的次数}}\tag{1.2} Qt(a) t时刻前执行动作a的次数t时刻前通过执行动作a得到的收益和(1.2)

或者这么写可能会看得更清楚些,其实就是把每次选择 a a a 的收益加起来取平均。

Q t ( a ) = ⋅ ∑ i < t 且 A i = a R i ∑ i < t 且 A i = a 1 (1.3) Q_t\left( a \right) \xlongequal[]{\cdot}\frac{\sum_{i<t\text{且}A_i=a}{R_i}}{\sum_{i<t\text{且}A_i=a}{1}}\tag{1.3} Qt(a) i<tAi=a1i<tAi=aRi(1.3)

那么,最简单的选择策略就是:无脑选择价值更高的就行了。这也被称为贪心策略,这个名字很形象,就好像一个小孩,永远只看重眼前的利益,永远选择当下收益最高的办法

ε-greedy策略

看起来事情是如此地美好,我们似乎已经完全解决了多臂老虎机的问题了。但是啊,人之所谓成熟,就是眼光更长远,不能只为眼前利益所动。按照之前的贪心策略,我们开始兴冲冲地开始跑代码,然后可能会遇到一个诡异的情况。

回顾下问题描述:
已知老虎机的收益分布是均值为 500 500 500 ,方差为 100 100 100 的正态分布;另一个老虎机的收益分布是均值为 550 550 550 ,方差为 200 200 200 的正态分布。

因为收益是随机的,假设乙第一次很倒霉,第一次的收益是 350 350 350 ,估计值 Q t ( 乙 ) = 350 Q_t\left(乙\right)=350 Qt()=350

然后后面抽甲,甲稳定在 400 − 600 400-600 400600 浮动,于是估计值 Q t ( 甲 ) ⩾ 400 Q_t\left(甲\right)\geqslant400 Qt()400

这下就惨了,虽然乙均值很高,但是第一次倒霉,导致我们总有 Q t ( 甲 ) > Q t ( 乙 ) Q_t\left(甲\right)> Q_t\left(乙\right) Qt()>Qt() ,所以总选择估计价值高的甲。然而实际上乙的期望收益更高,这样就埋没了人才,很不好

那么怎么办呢?我们还是要偶尔给乙一点秀一下自己的机会。具体落实下来就是以 ε \varepsilon ε 的概率不按常理出牌,假设此时 Q t ( 甲 ) > Q t ( 乙 ) Q_t\left(甲\right)> Q_t\left(乙\right) Qt()>Qt() ,但在 ε \varepsilon ε 概率下,诶,但这波我们就是不按常理出牌,就是玩,我们就是要选择估计价值更低的乙

一般来说, ε \varepsilon ε 都是一个比较小的数字,比如 ε = 0.1 \varepsilon=0.1 ε=0.1 ,那么平均下来,十次就会有一次不按常理出牌。因为总体而言还是贪心策略,但是以 ε \varepsilon ε 的概率不按常理出牌,所以被称为 ε − g r e e d y \varepsilon-\mathrm{greedy} εgreedy 策略。

乐观初始值

对于多臂老虎机问题,我们遇到了埋没了人才乙的问题。除了 ε − g r e e d y \varepsilon-\mathrm{greedy} εgreedy 策略,还有其他办法能解决吗?当然是有的。一个简单的方法就是乐观初始值,如果我们不知道初始值,我们就将“最乐观”的情形设置为初始值。比如将 1000 1000 1000 设置为初始值,即使乙有一次很倒霉,遇到了 350 350 350 ,由于乐观初始值,乙总是有着出手的机会。

乐观初始值在平稳问题下比较有效,但对于非平稳问题,就不那么适合了。下面我们即将讨论非平稳问题。

增量式实现

前面还有一个问题,我们应当如何计算 Q t Q_t Qt

为了简化问题,我们只关注一个动作 a a a ,假设第 i i i 次选择动作 a a a ,收益是 R i R_i Ri ,那么按照直接平均的策略,那么——

Q n = ⋅ R 1 + R 2 + ⋯ + R n − 1 n − 1 (1.4) Q_n \xlongequal[]{\cdot}\frac{R_1+R_2+\cdots +R_{n-1}}{n-1}\tag{1.4} Qn n1R1+R2++Rn1(1.4)

这样明显很傻,因为我们要储存 n − 1 n-1 n1 个过去的状态,既费时间也费空间。我们完全可以只关注 Q n + 1 Q_{n+1} Qn+1 Q n Q_n Qn 的差量——

Q n + 1 = R 1 + R 2 + ⋯ + R n − 1 + R n n = n − 1 n R 1 + R 2 + ⋯ + R n − 1 n − 1 + R n n = n − 1 n Q n + R n n = Q n + 1 n ( R n − Q n ) (1.5) \begin{aligned} Q_{n+1}&=\frac{R_1+R_2+\cdots +R_{n-1}+R_n}{n}\\ &=\frac{n-1}{n}\frac{R_1+R_2+\cdots +R_{n-1}}{n-1}+\frac{R_n}{n}\\ &=\frac{n-1}{n}Q_n+\frac{R_n}{n}\\ &=Q_n+\frac{1}{n}\left( R_n-Q_n \right)\\ \end{aligned}\tag{1.5} Qn+1=nR1+R2++Rn1+Rn=nn1n1R1+R2++Rn1+nRn=nn1Qn+nRn=Qn+n1(RnQn)(1.5)

也就是说,每来一个新状态 R n R_n Rn ,我们只需要把差量加权 1 n ( R n − Q n ) \frac{1}{n}\left( R_n-Q_n \right) n1(RnQn) 更新到原状态即可,通项公式即

Q n + 1 ← Q n + α [ R n − Q n ] ,   α = 1 n (1.6) Q_{n+1}\leftarrow Q_n+\alpha\left[R_n-Q_n\right],\ \alpha=\frac{1}{n}\tag{1.6} Qn+1Qn+α[RnQn], α=n1(1.6)

或者更明确地

新估计值 ← 旧估计值 + 步长 × ( 目标 − 旧估计值 ) (1.7) \text{新估计值}\gets \text{旧估计值}+\text{步长}\times \left( \text{目标}-\text{旧估计值} \right) \tag{1.7} 新估计值旧估计值+步长×(目标旧估计值)(1.7)

那么问题来了,步长 α \alpha α 一定只能是 1 n \frac{1}{n} n1 吗?

如果步长为 1 n \frac{1}{n} n1 ,意味着每次试验的权重相同。那么假设我们要预测股票这种实时性很强的东西(非平稳问题),希望更注重当前的状态,不那么重视过去的状态,就可以调大步长以加大最新内容的权重,比如最简单的就是把步长当作常数,此时的公式即

Q n + 1 = Q n + α [ R n − Q n ] = α R n + ( 1 − α ) Q n (1.8) \begin{aligned} Q_{n+1}&=Q_n+\alpha \left[ R_n-Q_n \right]\\ &=\alpha R_n+\left( 1-\alpha \right) Q_n\\ \end{aligned}\tag{1.8} Qn+1=Qn+α[RnQn]=αRn+(1α)Qn(1.8)

我们发现了递推公式,递推 n n n 次自然得到

Q n + 1 = α R n + ( 1 − α ) Q n = α R n + α ( 1 − α ) R n − 1 + ⋯ + α ( 1 − α ) n − 1 R 1 + ( 1 − α ) n Q 1 = ( 1 − α ) n Q 1 + α ∑ i = 1 n ( 1 − α ) n − i R i (1.9) \begin{aligned} Q_{n+1}&=\alpha R_n+\left( 1-\alpha \right) Q_n\\ &=\alpha R_n+\alpha \left( 1-\alpha \right) R_{n-1}+\cdots +\alpha \left( 1-\alpha \right) ^{n-1}R_1+\left( 1-\alpha \right) ^nQ_1\\ &=\left( 1-\alpha \right) ^nQ_1+\alpha \sum_{i=1}^n{\left( 1-\alpha \right) ^{n-i}R_i}\\ \end{aligned}\tag{1.9} Qn+1=αRn+(1α)Qn=αRn+α(1α)Rn1++α(1α)n1R1+(1α)nQ1=(1α)nQ1+αi=1n(1α)niRi(1.9)

可以看到,这是一个加权平均,越新的数据权重越高。我们取一个最极端的情形 α = 1 \alpha=1 α=1 ,这意味着 Q n + 1 = R n Q_{n+1}=R_n Qn+1=Rn ,这个网络变成了鱼的记忆(X),永远只能记住最近的数据,以前的数据都会被遗忘。

梯度赌博机

基于平均的估计太low了,我们自然的想法就是——能不能基于神经网络的梯度更新的方法进行更新。

此时我们关心的不再是每个动作的绝对收益 Q t ( a ) Q_t\left(a\right) Qt(a) ,而是他们的相对值 H t ( a ) H_t\left( a \right) Ht(a) 。假设有动作 a 1 , a 2 , ⋯   , a n a_1,a_2,\cdots ,a_n a1,a2,,an ,因为是相对值,所以它们的和为 0 0 0 ,类似于零和博弈,即

∑ i = 1 n H t ( a i ) = 0 (2.1) \sum_{i=1}^n{H_t\left( a_i \right)}=0\tag{2.1} i=1nHt(ai)=0(2.1)

我们借鉴softmax的思想,定义选择动作 a k a_k ak 的概率为

π t ( a k ) = ⋅ exp ⁡ [ H t ( a k ) ] ∑ i = 1 n exp ⁡ [ H t ( a i ) ] (2.2) \pi _t\left( a_k \right) \xlongequal[]{\cdot}\frac{\exp \left[ H_t\left( a_k \right) \right]}{\sum_{i=1}^n{\exp \left[ H_t\left( a_i \right) \right]}}\tag{2.2} πt(ak) i=1nexp[Ht(ai)]exp[Ht(ak)](2.2)

每次假设 t t t 时刻动作 a k a_k ak 后的收益为 R t R_t Rt ,此前的平均收益为 R ˉ t \bar{R}_t Rˉt ,则按照如下方式更新

H t + 1 ( a i ) ← { H t ( a i ) + α ( R t − R ˉ t ) [ 1 − π t ( a i ) ] , i = k H t ( a i ) − α ( R t − R ˉ t ) π t ( a i ) , i ≠ k (2.3) H_{t+1}\left( a_i \right) \gets \begin{cases} H_t\left( a_i \right) +\alpha \left( R_t-\bar{R}_t \right) \left[ 1-\pi _t\left( a_i \right) \right] ,& i=k\\ H_t\left( a_i \right) -\alpha \left( R_t-\bar{R}_t \right) \pi _t\left( a_i \right) ,& i\ne k\\ \end{cases}\tag{2.3} Ht+1(ai){Ht(ai)+α(RtRˉt)[1πt(ai)],Ht(ai)α(RtRˉt)πt(ai),i=ki=k(2.3)

至于这里的系数是怎么来的,其实这里是类似于梯度上升推导而来的。考虑梯度上升公式

H t + 1 ( a ) ← H t ( a ) + α ∂ E [ R t ] ∂ H t ( a ) (2.4) H_{t+1}\left( a \right) \gets H_t\left( a \right) +\alpha \frac{\partial \mathbb{E} \left[ R_t \right]}{\partial H_t\left( a \right)}\tag{2.4} Ht+1(a)Ht(a)+αHt(a)E[Rt](2.4)

结合 E [ R t ] = ∑ x π t ( x ) q ∗ ( x ) \mathbb{E} \left[ R_t \right] =\sum_x{\pi _t\left( x \right) q_*\left( x \right)} E[Rt]=xπt(x)q(x) ,自然有——

∂ E [ R t ] ∂ H t ( a ) = ∑ x ∂ π t ( x ) q ∗ ( x ) ∂ H t ( a ) = ∑ x [ q ∗ ( x ) − B t ] ∂ π t ( x ) ∂ H t ( a ) (2.5) \begin{aligned} \frac{\partial \mathbb{E} \left[ R_t \right]}{\partial H_t\left( a \right)}&=\sum_x{\frac{\partial \pi _t\left( x \right) q_*\left( x \right)}{\partial H_t\left( a \right)}}\\ &=\sum_x{\left[ q_*\left( x \right) -B_t \right] \frac{\partial \pi _t\left( x \right)}{\partial H_t\left( a \right)}}\\ \end{aligned}\tag{2.5} Ht(a)E[Rt]=xHt(a)πt(x)q(x)=x[q(x)Bt]Ht(a)πt(x)(2.5)

这里为什么我们要引入一个 B t B_t Bt 呢?是因为我们希望结果的均值尽可能为 0 0 0 ,这样才公平。因为假设大家都是正收益的话,梯度永远是正的。我们希望平均梯度为 0 0 0 ,形成零和博弈,从而有

∂ E [ R t ] ∂ H t ( a ) = ∑ x π t ( x ) [ q ∗ ( x ) − B t ] ∂ π t ( x ) ∂ H t ( a ) 1 π t ( x ) = E [ ( R t − R ˉ t ) ∂ π t ( a k ) ∂ H t ( a ) 1 π t ( a k ) ] (2.6) \begin{aligned} \frac{\partial \mathbb{E} \left[ R_t \right]}{\partial H_t\left( a \right)}&=\sum_x{\pi _t\left( x \right) \left[ q_*\left( x \right) -B_t \right] \frac{\partial \pi _t\left( x \right)}{\partial H_t\left( a \right)}\frac{1}{\pi _t\left( x \right)}}\\ &=\mathbb{E} \left[ \left( R_t-\bar{R}_t \right) \frac{\partial \pi _t\left( a_k \right)}{\partial H_t\left( a \right)}\frac{1}{\pi _t\left( a_k \right)} \right]\\ \end{aligned}\tag{2.6} Ht(a)E[Rt]=xπt(x)[q(x)Bt]Ht(a)πt(x)πt(x)1=E[(RtRˉt)Ht(a)πt(ak)πt(ak)1](2.6)

结合softmax的求导公式

∂ π t ( a k ) ∂ H t ( a ) = { π t ( a k ) [ 1 − π t ( a k ) ] , i = k − π t ( a k ) ⋅ π t ( a k ) , i ≠ k (2.7) \frac{\partial \pi _t\left( a_k \right)}{\partial H_t\left( a \right)}=\begin{cases} \pi _t\left( a_k \right) \left[ 1-\pi _t\left( a_k \right) \right] ,& i=k\\ -\pi _t\left( a_k \right) \cdot \pi _t\left( a_k \right) ,& i\ne k\\ \end{cases}\tag{2.7} Ht(a)πt(ak)={πt(ak)[1πt(ak)],πt(ak)πt(ak),i=ki=k(2.7)

自然有 ( 2.3 ) \mathrm{\left(2.3\right)} (2.3) 式成立。

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值