强化学习——策略学习
给定策略\(\pi\),状态估值函数的贝尔曼方程: \[v_{\pi}(s) = \sum_a \pi(a|s) \sum_{s',r} p(s',r|s,a) \Big[ r+\gamma v_{\pi}(s') \Big], \quad \text{for all} \; s \in S\]
状态估值函数的贝尔曼最优性方程: \[\begin{align} v_*(s) &= \max_a E \Big[ R_{t+1} + \gamma v_*(S_{t+1}) \Big| S_t=s,A_t=a \Big] \nonumber \\ &= \max_a \sum_{s',r} p(s',r|s,a) \Big[ r+\gamma v_*(s') \Big] \nonumber \end{align}\]
1. 动态规划方法
给定策略下状态估值函数的更新规则: \[v_{\pi}(s) = \sum_a \pi(a|s) \sum_{s',r} p(s',r|s,a) \Big[ r+\gamma v_{\pi}(s') \Big], \quad \text{for all} \; s \in S\] 上式为策略迭代的基础。
最优状态估值函数的更新规则: \[\begin{align} v_*(s) &= \max_a E \Big[ R_{t+1} + \gamma v_*(S_{t+1}) \Big| S_t=s,A_t=a \Big] \nonumber \\ &= \max_a \sum_{s',r} p(s',r|s,a) \Big[ r+\gamma v_*(s') \Big] \nonumber \end{align}\] 上式是估值迭代的基础。
注意:上述两个公式中的等号表示“赋值”,不是贝尔曼方程中的“相等”。
1.1. 策略估值
给定策略\(\pi\),该策略下的状态估值函数满足 \[v_{\pi}(s) \doteq \sum_a \pi(a|s) \sum_{s',r} p(s',r|s,a) \Big[ r+\gamma v_{\pi}(s') \Big]\]
假如环境\(p(s',r|s,a)\)已知,状态估值函数的求解方式有:
- 求解线性方程组(计算开销大);
- 寻找不动点——迭代策略估值。
1.2. 迭代策略估值
迭代策略估值的更新规则: \[\begin{align} v_{k+1}(s) & \doteq E_{\pi} \Big[ R_{t+1} + \gamma v_k(S_{t+1}) \Big| S_t=s \Big] \nonumber \\ &= \sum_a \pi(a|s) \sum_{s',r} p(s',r|s,a) \Big[ r+\gamma v_k (s') \Big] \nonumber \end{align}\] 也被称为“期望更新”。
Tip:状态\(s\)新一轮的估值是基于\(s\)所有可能的下一状态\(s'\)的期望计算得到的。
1.3. 迭代策略估值的实现
两种实现方式: * 同步更新:两个数组存放“新”和“旧”的状态估值; * 异步更新:收敛速度快一些,今早利用了新信息(只存放一个数组)。
迭代策略估值示例:
从上述示例中可以看出到\(k=3\)时其对应的贪心策略已经收敛,但是状态估值函数还没收敛。强化学习的目的是寻找最优策略,遍历所有的策略并计算其估值函数来寻找最优策略的计算量过大,所以提出策略提升的方法。
1.4. 策略提升
策略估值的目标是为了寻找更优的策略(策略提升):
- 策略\(\pi\)到估值函数\(v\)。
策略提升:
- 根据当前策略的估值函数,寻找更优的策略(如果存在),逐步寻找到最优策略;
- 根据策略\(\pi\)的估值函数\(v\)到更优策略\(\pi'\);
- 提升方法:
- 给定一个确定策略\(\pi\),在状态\(s\)下选择行动\(a\),后续按照策略\(\pi\)进行所得的估值\(q_{\pi}(s,a)\)是否高于完全按照策略\(\pi\)得到的估值\(v_{\pi}(s)\): \[\begin{align} q_{\pi}(s,a) & \doteq E \Big[ R_{t+1} + \gamma v_{\pi} (S_{t+1}) \Big| S_t=s,A_t=a \Big] \nonumber \\ &= \sum_{s',r} p(s',r|s,a) \Big[ r + \gamma v_{\pi} (s') \Big] \nonumber \end{align}\]
策略提升定理:
对于两个确定式策略\(\pi\)和\(\pi'\),如果对于所有状态\(s\)均满足 \[q_{\pi}(s,\pi'(s)) \geqslant v_{\pi}(s)\] 则策略\(\pi'\)优于策略\(\pi\),即 \[v_{\pi'}(s) \geqslant v_{\pi}(s)\]
给定策略\(\pi\),按照贪心方式得到更优策略\(\pi'\): \[\begin{align} \pi'(s) & \doteq \mathop{\arg \max}_a q_{\pi}(s,a) \nonumber \\ &= \mathop{\arg \max}_a E \Big[ R_{t+1} + \gamma v_{\pi}(S_{t+1}) \Big|S_t=s,A_t=a \Big] \nonumber \\ &= \mathop{\arg \max}_a \sum_{s',r} p(s',r|s,a) \Big[ r + \gamma v_{\pi}(s') \Big] \nonumber \end{align}\]
对于策略\(\pi'\),进行策略估值: \[\begin{align} v_{\pi'}(s) &= \max_a E \Big[ R_{t+1} + \gamma v_{\pi'}(s_{t+1}) \Big| S_t=s, A_t=a \Big] \nonumber \\ &= \max_a \sum_{s',r} p(s',r|s,a) \Big[ r+ \gamma v_{\pi'} (s') \Big] \nonumber \end{align}\]
1.5. 策略迭代
分析:策略迭代过程中,策略估值需要多次扫描更新状态估值,精确估计当前策略的状态估值耗费了大量计算时间,是否可以在不精确的状态估值下,进行策略提升。
1.6. 估值迭代
从初始策略\(v_0\)开始,进行估值迭代,找到最优状态估值\(v_*\),进而根据\(v_*\)按照贪心方式得到最优策略\(\pi_*\):
1.7. 广义策略迭代
迭代进行两个阶段:
- 策略估值:让新的估值和当前的策略保持一致;
- 策略提升:根据当前估值,得到相应的贪心策略。
1.8 动态规划小结
- 动态规划方法只不过是把贝尔曼方程转变为更新规则;
- 四个贝尔曼方程对应着四个更新规则(\(v_{\pi},v_*,q_{\pi},q_*\));
- 动态规划方法是一种“自举”(bootstrapping)方法;
- 优势:动态规划方法计算效率高;
- 缺点:动态规划方法需要知道关于环境的完整模型。
2. 蒙特卡洛方法
2.1. 动机
- 动态规划方法需要知道关于环境的完整模型;
- 大部分情况下没有关于环境的完整模型,或模型过于复杂。
蒙特卡洛方法:
- 从真实或者模拟的经验(experience)中计算状态(行动)估值函数;
- 不需要关于环境的完整模型。
2.2. 蒙特卡洛方法
状态估值:从某个状态\(s\)出发,使用当前策略\(\pi\)通过蒙特卡洛模拟的方式生成多个episode,使用这些episode的平均回报值近似状态估值函数\(v_{\pi}(s)\)。
收敛速度大约为:\(\frac{1}{\sqrt{n}}\)(\(n\)表示蒙特卡洛模拟次数)。
2.3. 优势
- 直接根据真实经验或模拟经验计算状态估值函数;
- 不同状态的估值在计算时是独立的。
2.4. 基于蒙特卡洛方法的策略迭代
- 在完整的环境模型未知时,仅有状态估值\(v_{\pi}(s)\)无法得出策略\(\pi\);
- 大多数情况下,直接使用蒙特卡洛方法计算行为估值函数\(q_{\pi}(s,a)\),进而采用贪心方法得到策略\(\pi\)。
2.5. 面临的问题
问题:部分“状态-行为”在蒙特卡洛模拟中可能不出现。
解决:Exploring Start:每个“状态-行为”对都以一定的概率作为蒙特卡洛模拟的起始点。
2.6. 摒弃Exploring Start
- On-policy方法:
- 在每个状态\(s\)下保持对所有行为\(A(s)\)进行探索的可能性(\(\varepsilon\)贪心):
- 以\(1- \varepsilon + \frac{\varepsilon}{A(s)}\)选择贪心行为,以\(\frac{\varepsilon}{A(s)}\)的概率选择任意非贪心行为;
- 缺点:最终得到的最优策略仅仅是\(\varepsilon\)最优策略(\(\varepsilon\)-soft policy)。
- 在每个状态\(s\)下保持对所有行为\(A(s)\)进行探索的可能性(\(\varepsilon\)贪心):
- Off-policy方法:
- 使用两个策略:目标策略\(\pi\)和行为策略\(b\);
- 目标策略是待优化的策略,以贪心方式进行;
- 探索策略保证在每个状态下对所有行为进行探索的可能性。
2.7. On-policy蒙特卡洛方法
On-policy方式部分放弃了最优性来换取对策略的探索:
2.8. Off-policy蒙特卡洛方法
保证寻找最优策略,在优化目标策略\(\pi\)时,用行为策略\(b\)进行策略探索:
- 行为策略需要确保对行为的覆盖度(coverage);
- 对于所有\(\pi(a|s)>0\),需要有\(b(a|s)>0\);
- 缺点:方差比较大,收敛慢;
- 行为策略的选择影响收敛速度和方差;
- 通过重要度采样方式对蒙特卡洛模拟结果进行加权。
2.9. 小结
- 从经验中学习,不需要知道完整的环境模型;
- 适用于环境模型未知或者环境模型复杂的情形;
- 收敛性由大数定理保证;
- On-policy和Off-policy两种实现;
- 平衡exploitation和exploration。
3. 时序差分方法
非平稳情形下的蒙特卡洛方法(恒定步长): \[V(S_t) \gets V(S_t) + \alpha [G_t - V(S_t)]\] 其中\(G_t\)表示第\(t\)轮蒙特卡洛模拟的回报,\(V(S_t)\)表示第\(t\)轮对状态\(S_t\)的估值。
时序差分方法(Temporal Difference:TD): \[V(S_t) \gets V(S_t) + \alpha [R_{t+1} + \gamma V(S_{t+1}) - V(S_t)]\]
不需要根据完整的episode计算\(G_t\),只需要模拟几步(此处为1步)之后更新状态估值。
3.1. 实现
一步时序差分方法\(TD(0)\)的实现
3.2. 分析
时序差分方法是强化学习中最核心的策略学习方法。
- TD和蒙特卡洛方法的联系和区别:
- 联系:都是从经验中学习;
- 非平稳情形下的蒙特卡洛方法是TD的特例;
- 区别:蒙特卡洛方法需要episode完整的信息,TD只需要episode的部分信息;
- 联系:都是从经验中学习;
- TD和动态规划方法的联系和区别:
- 联系:TD和动态规划方法都采用自举的方法;
- 区别:动态规划方法依赖于完整的环境模型进行估计,TD依赖于经验进行估计。
时序差分方法是“learn a guess from a guess”。
时序差分方法的收敛性并没有理论证明,只是经验收敛。
3.3. 基于时序差分方法的On-policy策略优化
Sarsa:估计行为估值函数
3.4. 基于时序差分方法的Off-policy策略优化
Q-Learning(Watkins,1989):
On-policy和Off-policy的区别:
- On-policy:优化和探索的为同一函数;
- Off-policy:优化和探索的为不同函数。
3.5. 小结
- 一种在线的从经验中进行策略学习的方法;
- 一般直接学习行为估值函数完成策略学习;
- 适用于状态和行为空间比较小的问题。
动态规划/蒙特卡洛/时序差分对比:
4. 参数近似方法
当状态空间或行为空间比较大时,采用表格方式存放状态估值或行为估值不可行。需要对状态估值或行为估值进行参数化近似(parameterized approximation)。
4.1. 参数化近似方法
参数化的函数形式:
- 广义线性模型
- 参数是特征的权重
- 决策树
- 参数是叶子节点的取值,和树节点分裂的阈值
- 神经网络
- 每层的连接圈中
一般要求:参数个数要小于状态(或状态-行为)的个数。
4.2. 参数学习
训练样本形式:
- 动态规划方法:\(s \rightarrowtail E_{\pi}[R_{t+1} + \gamma \hat{v}(S_{t+1},\pmb{w_t})|S_t=s]\);
- 蒙特卡洛方法:\(S_t \rightarrowtail G_t\);
- 时序差分方法:\(S_t \rightarrowtail R_{t+1} + \gamma \hat{v} (S_{t+1},\pmb{w}_t)\);
适合强化学习参数学习的监督学习方法:
- 能够进行在线训练,应对目标函数的不平稳或训练样本标注的不平稳;
- 不能依赖于对训练样本的多次扫描。
4.3. 损失函数
平均平方估值误差(Mean Squared Value Error): \[\overline{VE}(\pmb{w}) \doteq \sum_{s \in S} \mu(s) [v_{\pi}(s) - \hat{v}(s,\pmb{w})]^2 \]
\(\mu(s)\)刻画状态\(s\)的重要程度(如状态被访问到的次数)。
4.4. 模型训练
随机梯度下降(SGD): \[\begin{align} \pmb{w}_{t+1} & \doteq \pmb{w}_t - \frac{1}{2} \alpha \nabla[v_{\pi}(S_t) - \hat{v}(S_t,\pmb{w}_t)]^2 \nonumber \\ & = \pmb{w}_t + \alpha [v_{\pi} (S_t) - \hat{v}(S_t,\pmb{w}_t)] \nabla \hat{v}(S_t,\pmb{w}_t) \nonumber \end{align}\]
\(\alpha\)是学习步长。
当目标值\(v_{\pi}(S_t)\)观测不到、只观测到其近似值\(U_t\)时 \[\pmb{w}_{t+1} \doteq \pmb{w}_t + \alpha [U_t - \hat{v}(S_t,\pmb{w}_t)] \nabla \hat{v}(S_t,\pmb{w}_t)\]
示例:
4.5. “半”随机梯度下降
在“自举”式观测值情况下:
- 以时序差分方法TD(0)为例,此时的观测值为 \[U_t \doteq R_{t+1} + \gamma \hat{v}(S_{t+1},\pmb{w})\] 此时观测值也是关于参数\(\pmb{w}\)的函数。
半随机梯度不保障收敛,在线性函数下收敛性尚好。
4.6. 参数近似Q
半梯度Sarsa:一种On-policy的TD(0);
- 目标: \[\hat{q}(s,a,\pmb{w}) \approx q_*(s,a)\]
- 参数学习过程: \[\begin{align} \pmb{w}_{t+1} & \doteq \pmb{w}_t + \alpha [U_t - \hat{q}(S_t,A_t,\pmb{w}_t)] \nabla \hat{q} (S_t,A_t,\pmb{w}_t) \nonumber \\ &= \pmb{w}_t + \alpha [R_{t+1} + \gamma \hat{q} (S_{t+1},A_{t+1},\pmb{w}_t) - \hat{q} (S_t,A_t,\pmb{w}_t)] \nabla \hat{q} (S_t,A_t,\pmb{w}_t) \nonumber \end{align}\]
4.7. 策略梯度
- 策略梯度(policy gradient) \[\pi(a|s,\pmb{\theta}) = Pr\{A_t=a|S_t=s, \theta_t=\theta \}\]
- 一般情况下目标函数\(J(\pmb{\theta)}\)定义为策略的表现性能
- 采用随机梯度上升法进行优化 \[\pmb{\theta}_{t+1} = \pmb{\theta}_t + \alpha \widehat{\nabla j(\pmb{\theta}_t)} \]
- Actor-Critic方法
- 同时学习参数化的状态估值函数\(v(s,w)\)和策略\(\pi(a|s,\pmb{\theta})\)