参考教程:西湖大学 赵世钰 - 强化学习的数学原理
一些学习经验
- 的公式方便用于理论分析,而便于编程实现
- 要注意实际问题中,我们是从某一个指定状态抵达一个目标状态,还是要找所有状态的最优策略
为突出强调概念名词,紫色按钮是可通过点击转换中英文翻译的,
- agent 在环境中的状态,RL 中最关键的一个量,需要根据实际情况自己确定。所有状态放在一起就是状态空间,S={si}
- agent 在每一个状态都可能有一系列可能的行为,所有可能行为构成行为空间,A(si)={ai}
- 当 agent 做出一个 action 后,agent 的状态会发生改变,不同的 action 有不同的 state 转换,定义了 agent 和环境交互的行为。
- 确定情况(deterministic):可以直接用矩阵表达,维度是 S×A
- 随机情况(stochastic):用条件概率表达: p(s2∣s1.a1)=0.2,p(si∣s1,a2)=0.8(∀i=2)
- 告诉 agent 每个状态下要采取哪个行动。π(a∣s)
- 确定情况:π(a2∣s1)=1,π(ai∣s1)=0(∀i=2) 表示在s1状态下一定会采取a2的行动;
- 随机情况:π(a1∣s1)=0.5,π(a2∣s1)=0.5,π(ai∣s1)=0(∀i=1,2) 表示在s1状态下有对半开的概率采取 a1 或 a2 的行动;
- agent 采取行动后,给 agent 的一个反馈值,如果是正值则代表鼓励这种行为,如果是负数就代表惩罚这种行为,如果是 0 就代表没有惩罚(一定程度上是鼓励)。通过 reward 告诉 agent 应该怎么做,不该怎么做。奖励取决于当前状态和行动,而不是下一步的状态。奖励集合:R(s,a)
- 确定情况:用 table 表示,行表示状态,列表示行动,值表示奖励值
- 随机情况:p(r=−1∣s1,a1)=0.5,p(r=1∣s1,a1)=0.5,表示在 s1 状态下采取 a1 状态,有 0.5 的可能性拿到-1 的奖励,也有 0.5 的可能拿到 1.
- 状态-行动-奖励链。
- 沿着某条轨迹得到奖励值总和。
- γ∈[0,1) 在达到目标之后,策略还在持续进行,会使得轨迹链变得无穷长,该轨迹的 return 也很大,所以要对每一步 policy 拿到的 reward 乘上一个折合因子(<1),使最后的 return 收敛。这样得到的 return 称作 discounted return.
原来的 return:r1=0+0+0+1+1+1+⋯
折合的 return:rdiscounted,1=0+γ×0+γ2×0+γ3×1+γ4×1+γ5×1+⋯
=γ3(1+γ+γ2+⋯)=γ31−γ1 - agent 按照策略与环境交互时,到达终点时 agent 会停止,由此产生的轨迹被称为 episode。episode 一般是有限步的。
- 状态集合 S={si},行动集合 A(si)={ai},奖励集合R(s,a)
- 状态转移概率 p(s′∣s,a),奖励概率 p(r∣s,a)
- 策略 π(a∣s)
- 马尔科夫特性:状态转移概率和奖励概率均具有历史无关性。 p(st+1∣at,st,⋯,a0,s0)=p(st+1∣at,st)
St→AtRt+1,St+1
St→AtRt+1,St+1→At+1Rt+2,St+2→At+2⋯
则,折合采样:
Gt=Rt+1+γRt+2+γ2Rt+3+⋯
=Rt+1+γ(Rt+2+γRt+3+⋯)
=Rt+1+γGt+1
- Gt的期望值,vπ(s)=E[Gt∣St=s],不同的策略会得到不同的轨迹,也就有不同状态值。return是针对单个轨迹的reward和,state value是针对该策略下所有可能轨迹的reward和的平均值。
vπ(s)=E[Gt∣St=s]
=E[Rt+1+γGt+1∣St=s]
=E[Rt+1∣St=s]+γE[Gt+1∣St=s]
其中,
E[Rt+1∣St=s]=Σa[π(a∣s)(Σrp(r∣s,a)r)]
E[Gt+1∣St=s]=Σs′[vπ(s′)(Σap(s′∣s,a)π(a∣s))]
- vπ(s)=Σa{π(a∣s)[(Σrp(r∣s,a)r+Σs′vπ(s′)Σap(s′∣s,a))]}
- π(a∣s) 是给定的策略,某个状态下执行某个行动的可能性;
- p(r∣s,a) 和 p(s′∣s,a) 代表动态模型,表示确定状态和行动之后,能够获得的奖励/状态转移概率,需要知道模型是否已知。
根据各项含义,可以继续简化式子: - vπ(s)=rπ(s)+γΣs′pπ(s′∣s)vπ(s′)
- rπ(s)=Σa(π(a∣s)Σr(p(r∣s,a)r)) 表示该策略下每一个状态可能得到的奖励的加权平均,即:即时奖励
- pπ(s′∣s)=Σa(π(a∣s)p(s′∣s,a)) 表示该策略下从当前状态转换到下一个状态的概率,即:状态转移概率
- 写成矩阵向量形式:vπ=rπ+γPπvπ
- vπ=[vπ(s1),vπ(s2),⋯,vπ(sn)]T
- rπ=[rπ(s1),rπ(s2),⋯,rπ(sn)]T
- Pπ∈Rn×n,Pπ,i,j=pπ(sj∣si),即状态转移概率矩阵。
- 在给定一个策略后,需要通过贝尔曼方程求解每一个状态的state value,这个过程叫作policy evaluation.由于求解贝尔曼方程需要求逆矩阵,所以为了防止奇异矩阵,在实际中一般采用迭代法求解,即:vk+1=rπ+γPπvk
- agent从一个状态出发,选择一个行动能够得到的return的平均值。qπ(s,a)=E[Gt∣St=s,At=a]。
- 和state value的联系:vπ(s)=Σa(π(a∣s)qπ(s,a))
- qπ(s,a)=Σrp(r∣s,a)r+Σs′vπ(s′)Σap(s′∣s,a)
- 如果一个policy下任意状态的state value都比另一个policy下任意状态的state value要大,那前一个policy就是optimal policy.
Bellman optimality equation
vπ(s)=maxπΣa{π(a∣s)[(Σrp(r∣s,a)r+Σs′vπ(s′)Σap(s′∣s,a))]}
=maxπΣaπ(a∣s)q(s,a),其中q(s,a)代表action value- 矩阵形式:v=maxπ(rπ+γPπv)
- 需要考虑的问题:
- Algorithm:公式如何求解?
- Existence:解是否存在?
- Uniqueness:解是否唯一?
- Optimality:为什么最优?
- 目前已知的量有:p(r∣s,a), γ, p(s′∣s,a),这三个量分别代表奖励分布规律,折合因子,系统模型(采取什么行动后会到哪个状态)。
- 目前未知的量有:π(a∣s), v(s′),一般我们会先给定一个v(s′)的初始值,然后求解最优的π(a∣s)
- 如果我们把右侧的最优问题看成一个函数(因为v会初始给定),则最优公式转变成:v=f(v),变成了一个经典的不动点(fixed point)问题。
- f是一个压缩映射的话,则有: ∣∣f(x1)−f(x2)∣∣≤γ∣∣x1−x2∣∣
- 如果一个函数满足压缩映射,那他他一定存在唯一的一个不定点 x∗ ,使得 f(x∗)=x∗
- 具体这个不动点怎么算呢,可以用迭代求,xk+1=f(xk),当k趋于无穷大的时候,x会趋向于不动点,这个收敛是指数级别的。
- 记结论:贝尔曼公式是一个压缩映射函数,一定存在唯一一个不动点,且这个不动点就是方程的解。
- 求解最优贝尔曼方程的方法:
- 迭代求不动点 v∗
- 则 π∗=argmaxπ(rπ+γPπv∗)
- vk+1=f(vk)=maxπ(rπ+γPπvk)
- policy update:给定 vk,求解满足条件的 πk+1, πk+1=argmaxπ(rπ+γPπvk),是一个优化过程。这个优化问题的解法不难,是通过计算每一个状态对应每一个的行动的action value,取最大的那个action value就是当前最好的策略,如此反复迭代。
- value update:计算在πk+1策略下的vk+1,以此作为下一迭代步的初始值。
-
- policy evaluation:给定初始策略 π0,求解该策略下的贝尔曼公式,得到vπk的state value,其中vπk=rπk+γPπkvπk。在这一步过程中,求解 vπk 就是在求解贝尔曼方程,有两种方法:1)逆矩阵,2)迭代。而我们不采用逆矩阵方法,所以在整个大的policy iteration框架下,还有一步小的迭代,这一步迭代是为了确定在给定策略条件下,各个状态的state value。
- policy improvement:πk+1=argmaxπ(rπ+γPπvπk),选取在该state value下最大的action value,作为下一步的新策略。以此完成策略的迭代。
- state iteration和policy iteration对比
步骤 | 策略迭代 | 值迭代 | 备注 |
---|
1) Policy | π0 | N/A | |
2) Value | vπ0=rπ0+γPπ0vπ0 | v0:=vπ0 | |
3) Policy | π1=argmaxπ(rπ+γPπvπ0) | π1=argmaxπ(rπ+γPπv0) | 两个策略是一样的 |
4) Value | vπ1=rπ1+γPπ1vπ1 | v1=rπ1+γPπ1v0 | 这步发生了不同 |
5) Policy | π2=argmaxπ(rπ+γPπvπ1) | π2′=argmaxπ(rπ+γPπv1) | |
在第四步求解的时候,策略迭代需要用迭代法求解贝尔曼公式,以此来得到 vπ1 的值,为了求这个值需要先给定一个初始估计值,然后迭代无穷步最后收敛值真实值。而值迭代,在第四步,是需要根据已知的初始值迭代一步得到下一次的新值。两者都是在用迭代法求解贝尔曼公式,策略迭代算了很多步,值迭代只算了一步。
- 由此引出truncated policy iteration,前面的算法一致,但是在这步只需要迭代有限步,不是只迭代一步,也不是非常多步,而是一个中间值。(初始给一个瞎猜的策略)
之所以要提出蒙特卡洛,是因为在大多数情况下,我们是不知道系统模型的,无法使用贝尔曼公式。所以需要有大量的数据做支撑,来拟合出原有的数据分布概率模型。在蒙特卡洛方法里,旨在通过大量的尝试,推测出 qπk(s,a) 的期望值。然后再采用policy iteration做迭代优化。通过 vπ(s)=Σa(π(a∣s)qπ(s,a)) 计算下一步的 state value。
- 最基础的蒙特卡洛算法:要求从一个随机估计的策略出发,对每一个(s,a),都遍历N个episode,求这N个episode的平均return值作为(s,a)状态-策略对的action value。
- MC-based Exploring Starts:遍历N个episode太过漫长,考虑任意一个episode链:(s1,a1)→(s3,a2)→(s2,a4)→(s2,a5)→⋯ ,通过这个链,可以计算出 (s1,a1) 的action value,同时还能够获得 (s2,a4) 的action value,因为 g(s1,a1)=r(s1,a1)+γg(s3,a2)。然后这个方法,就把这一次的episode作为action value的估计值,代入policy iteration做优化
(说是可以通过数学证明,证明出这样是依然收敛的,背结论吧,感觉后面多半不会用到)。 - 在具体的编程实现中,建议逆序递推做累加,每一次都给return的值 +γg(st,at) ,就能计算出这条链上每一个 (s,a) 的action value。
- MC-based ε-greedy:这里提出了soft policy的概念,也就是说每一个策略里每一个行动不是唯一确定的,而是有概率发生的,这个概率定义为:
- 对于greedy action(就是action value最大的action),π(a∣s)=1−∣A(s)∣ε(A(s)−1)
- 对于其他action,π(a∣s)=∣A(s)∣ε
- ε 是[0,1]的一个正数,A(s) 是当前状态所拥有行动的数目。
- 之所以会选择用soft policy是为了平衡 exploitation 和 exploration,平衡探索性和最优性。
ε-greedy 其实就是把原来是确定性的 π(a∣s) 转换成了stochastic的情况。
- 方法计算平均数。设置 wk=k+11ΣiNN1xi,则可以通过推导推出递推关系式:wk+1=wk−k1(wk−xk)。为什么要这么做呢?因为有时候数据量太大了,要是来一个采样数据就需要重新全部加起来算平均值,对算力要求是很高的。而有了递推式,就可以做到来一个采样,就只要一步计算就能得到加上这个采样后的新平均值,简化运算要求。这是一个特殊的
- :类似于随机梯度下降。其目的是解决一个黑箱函数的解。举个例子,我有一个函数 g(w)=0, 这个函数g是什么我不知道,但是我想要正确的解 w∗,这个就引入了迭代式的RM算法。即: wk+1=wk−akg~(wk,ηk)=wk−ak(g(wk)+η)
- wk+1 是下一步需要输入的输入值
- ak 是正的系数。一般取接近于0的常数。如果 ak=k1,g(w)=w−x,则就转变成了方法计算均值。
- g~(wk,ηk) 这步是输入wk后模型的响应观察量,是包括噪声的,噪声也未知
- 关于这个定理的运用,数学上要求满足一定的条件,太复杂了,暂且不论。
- 对于优化问题: minwJ(w)=E[f(w,X)](w是参数,X是已知概率分布的随机变量,J(w)是求期望),有多种解法
wk+1=wk−ak∇wE[f(wk,X)]
但是这个E[]期望很难求。要么用模型,要么用数据。 wk+1=wk−akn1Σi=1n∇wf(wk,X)
但是每一次计算wk+1,都得采样好多次,这在实际中也不太行 Stochastic Gradient Descent
wk+1=wk−ak∇wf(wk,X)
相当于只采了一次样的
总结
时序差分算法旨在解决没有模型的策略迭代问题,既然没有模型,就需要有相对应的经验数据
- 在已知策略 π,已知经验 {(st,rt+1,st+1)}t 的情况下通过 TD 算法求 vπ(s)
- 在已知策略 π,已知经验 {(st,at,rt+1,st+1,at+1)}t 的情况下通过 TD 算法求 qπ(s,a)
- 用于估计model-free情况下的状态值(state value)
vt+1(st)=vt(st)−αt(st)[vt(st)−[rt+1+γvt(st+1)]]
vt+1(s)=vt(s),∀s=st(所有没被访问的状态,其state value保持不变)
- vt+1(st) 新的估计值
- vt(st) 当前估计值
- rt+1+γvt(st+1) TD目标值 vˉt
为什么这个目标值是 vˉt?
把最原始的公式变换为:vt+1(st)=vt(st)−αt(st)[vt(st)−vˉt]
vt+1(st)−vˉt=vt(st)−vˉt−αt(st)[vt(st)−vˉt]
vt+1(st)−vˉt=(1−αt(st))[vt(st)−vˉt]
∣vt+1(st)−vˉt∣=∣1−αt(st)∣∣vt(st)−vˉt∣
vt+1(st)−vˉt≤[vt(st)−vˉt]
意味着 vt+1(st) 和 vˉt 之间的误差越来越小,也就是说逐渐向着 vˉt 逼近。$
- vt(st)−[rt+1+γvt(st+1)]=vt(st)−vˉt TD误差 δt
注意我们要估计的值是 vπ,误差可以写作 δπ,t≐vπ(st)−[rt+1+γvπ(st+1)]
E[δπ,t∣St=st]=vπ(st)−E[Rt+1+γvπ(St+1)∣St=st]=0
所以能证明这个参数的期望是0,也就可以用于表示误差。
TD误差也可以表示innovation,我们发现新的信息和现在有误差,所以就借用新信息来改进当前策略。
- 如果参考RM算法,时序差分公式的其实是在求解这个方程 w=vt(st)=E[rt+1+γvπ(s′)∣S=st] 而这个其实是
Bellman Expectation Equation
(和贝尔曼公式类似)由此TD算法实现了不用模型的情况求解贝尔曼公式,但是给到相对应的数据(包括了对 R 和 vπ(S′) 的采样)。 - 而现在需要的是 (s,r,s′) 的采样,一般会替换成 (st,rt+1,st+1) 的轨迹,这样访问到哪个s,就可以更新哪个s的采样,而不用反复做某一个s的采样。
-
- 估计 action value
- 再采用 policy improvement 估计最优策略
- action value 估计的算法实现:
- 已知:策略 π,经验(数据): {(st,at,rt+1,st+1,at+1)}t
- qt+1(st,at)=qt(st,at)−αt(st,at)[qt(st,at)−[rt+1+γqt(st+1,at+1)]]
- qt+1(s,a)=qt(s,a),∀(s,a)=(st,at) (对于)所有未遍历到的状态和行动,都不采取更新
和TD算法类似的,其实就是在用RM算法求解 w=E[rt+1+γqπ(st+1,at+1)∣S=st,A=at] 问题
- 已知:策略 π,经验(数据): {(st,at,rt+1,st+1)}t
- qt+1(st,at)=qt(st,at)−αt(st,at)[qt(st,at)−(rt+1+γE[qt(st+1,A)])]
- 其中,E[qt(st+1,A)]=Σaπt(a∣st+1)qt(st+1,a)=vt(st+1)
- qt+1(s,a)=qt(s,a),∀(s,a)=(st,at) (对于)所有未遍历到的状态和行动,都不采取更新
- 相较于 Sarsa 的改动:
- TD的目标值发生改变,不再需要 qt(st+1,at+1),而需要计算 E[qt(st+1,A)],计算量变得更大了
- 由于不再需要 at+1,所以经验数据从 {(st,at,rt+1,st+1,at+1)}t 变为 {(st,at,rt+1,st+1)}t
- qt+1(st,at)=qt(st,at)−αt(st,at)[qt(st,at)−(rt+1+γmaxa∈Aqt(st+1,a))]
- qt+1(s,a)=qt(s,a),∀(s,a)=(st,at) (对于)所有未遍历到的状态和行动,都不采取更新