概述
文章目录
- 前言
- 符号约定
- 多臂老虎机
- 基于平均学习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[Rt∣At=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[R今天∣A今天=买]⋅E[R今天∣A今天=不买](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<t且Ai=a1∑i<t且Ai=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 400−600 浮动,于是估计值 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⋅n−1R1+R2+⋯+Rn−1(1.4)
这样明显很傻,因为我们要储存 n − 1 n-1 n−1 个过去的状态,既费时间也费空间。我们完全可以只关注 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+⋯+Rn−1+Rn=nn−1n−1R1+R2+⋯+Rn−1+nRn=nn−1Qn+nRn=Qn+n1(Rn−Qn)(1.5)
也就是说,每来一个新状态 R n R_n Rn ,我们只需要把差量加权 1 n ( R n − Q n ) frac{1}{n}left( R_n-Q_n right) n1(Rn−Qn) 更新到原状态即可,通项公式即
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+1←Qn+α[Rn−Qn], α=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+α[Rn−Qn]=α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−α)Rn−1+⋯+α(1−α)n−1R1+(1−α)nQ1=(1−α)nQ1+αi=1∑n(1−α)n−iRi(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=1∑nHt(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)+α(Rt−Rˉt)[1−πt(ai)],Ht(ai)−α(Rt−Rˉ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]=x∑∂Ht(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[(Rt−Rˉ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策略、乐观初始值、增量式实现、梯度赌博机所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复