我是靠谱客的博主 光亮茉莉,最近开发中收集的这篇文章主要介绍强化学习の学习笔记(一)——多臂老虎机、ε-greedy策略、乐观初始值、增量式实现、梯度赌博机,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

    • 前言
    • 符号约定
    • 多臂老虎机
      • 基于平均学习Q函数
      • ε-greedy策略
      • 乐观初始值
      • 增量式实现
    • 梯度赌博机

前言

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

符号约定

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

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

q ∗ ( a ) = ⋅ E [ R t ∣ A t = a ] (0.1) q_*left(aright)xlongequal[]{cdot}mathbb{E}left[R_t|A_t=aright]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(aright) q(a) 。因此,强化学习干的就是这样一件事情——通过数据去学习收益概率分布,用学到的结果得到估计值 Q t ( a ) Q_tleft(aright) Qt(a)

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

Q t ( a ) = ⋅ t 时刻前通过执行动作 a 得到的收益和 t 时刻前执行动作 a 的次数 (1.2) Q_tleft( a right) xlongequal[]{cdot}frac{ttext{时刻前通过执行动作}atext{得到的收益和}}{ttext{时刻前执行动作}atext{的次数}}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_tleft( a right) xlongequal[]{cdot}frac{sum_{i<ttext{且}A_i=a}{R_i}}{sum_{i<ttext{且}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_tleft(乙right)=350 Qt()=350

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

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

那么怎么办呢?我们还是要偶尔给乙一点秀一下自己的机会。具体落实下来就是以 ε varepsilon ε 的概率不按常理出牌,假设此时 Q t ( 甲 ) > Q t ( 乙 ) Q_tleft(甲right)> Q_tleft(乙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+alphaleft[R_n-Q_nright], 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_tleft(aright) Qt(a) ,而是他们的相对值 H t ( a ) H_tleft( 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_tleft( a_i right)}=0tag{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 _tleft( a_k right) xlongequal[]{cdot}frac{exp left[ H_tleft( a_k right) right]}{sum_{i=1}^n{exp left[ H_tleft( 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_tleft( a_i right) +alpha left( R_t-bar{R}_t right) left[ 1-pi _tleft( a_i right) right] ,& i=k\ H_tleft( a_i right) -alpha left( R_t-bar{R}_t right) pi _tleft( a_i right) ,& ine 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_tleft( a right) +alpha frac{partial mathbb{E} left[ R_t right]}{partial H_tleft( 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 _tleft( 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_tleft( a right)}&=sum_x{frac{partial pi _tleft( x right) q_*left( x right)}{partial H_tleft( a right)}}\ &=sum_x{left[ q_*left( x right) -B_t right] frac{partial pi _tleft( x right)}{partial H_tleft( 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_tleft( a right)}&=sum_x{pi _tleft( x right) left[ q_*left( x right) -B_t right] frac{partial pi _tleft( x right)}{partial H_tleft( a right)}frac{1}{pi _tleft( x right)}}\ &=mathbb{E} left[ left( R_t-bar{R}_t right) frac{partial pi _tleft( a_k right)}{partial H_tleft( a right)}frac{1}{pi _tleft( 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 _tleft( a_k right)}{partial H_tleft( a right)}=begin{cases} pi _tleft( a_k right) left[ 1-pi _tleft( a_k right) right] ,& i=k\ -pi _tleft( a_k right) cdot pi _tleft( a_k right) ,& ine 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.3right)} (2.3) 式成立。

最后

以上就是光亮茉莉为你收集整理的强化学习の学习笔记(一)——多臂老虎机、ε-greedy策略、乐观初始值、增量式实现、梯度赌博机的全部内容,希望文章能够帮你解决强化学习の学习笔记(一)——多臂老虎机、ε-greedy策略、乐观初始值、增量式实现、梯度赌博机所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部