RL
符号表
\[\mathop{argmax}\limits_{ \alpha}f(\alpha) \qquad f(\alpha)取最大值时\alpha的值\\ s \qquad 状态 \\a\qquad 动作 \\r \qquad 奖励 \\ \pi \qquad 策略 \\G_t \qquad t的回报 \] # 类比视觉领域 ## 传统cv 1. 给定图片,提取特征 2. HOG,histogram of oriental gradient(方向梯度直方图) 3. DPM,deformable part model (可变现的组件模型) 4. 分类器SVM,support vector machine(支持向量机)或者boosting ## 深度cv - End to End - 合并提取特征和分类
知乎
强化学习:通过智能体试错求解最优策略。智能体探索各种好的、坏的动作,并根据环境反馈的奖励去优化选择动作,最终学出一个奖励和最大的最优策略(状态-动作序列)。 但是训练中,智能体经常会探索一些不安全的动作,比如碰撞。对于一些高安全领域,比如机器人、自动驾驶,这就很危险。因此,需要限制避免这些不安全的动作。 传统方法如:设置惩罚负奖励,限制动作空间,遇到不安全的动作或状态直接终止等,虽能避免一些不安全的动作,但仍没有很好的解决安全性问题。比如,惩罚设置过小,智能体容易忽视惩罚;惩罚设置过大或遇到不安全直接终止,智能体容易表现保守;限制动作空间,可能错过最优解。因此,传统方法导致智能体都不能平衡好任务性能和安全性(奖励和代价)。 因此,我们需要提高安全性的强化学习,最大化奖励的同时满足安全约束,这就是安全强化学习。 ## CMDP 安全强化学习建模为约束马尔可夫决策过程(Constrained Markov Decision Process,CMDP),用七元组 \[(S,A,p,r,c,d,\gamma)\] 表示,即状态空间、动作空间、状态转移函数、奖励、代价、代价阈值和折扣因子。
\[\begin{cases} \mathop{max}\limits_{\pi}&\mathop{E}\limits_{(s_t,a_t)\sim\rho_{\pi}} \left[\sum\limits_t\gamma^tr(s_t,a_t)\right]\\ s.t. &\mathop{E}\limits_{(s_t,a_t)\sim\rho_{\pi}} \left[\sum\limits_t\gamma^tr(s_t,a_t)\right]\le {d}\end{cases}\]
智能体每一步会收到一个奖励\[r\] 和代价 \[c\] ,策略目标是在不超过代价阈值的约束条件下最大化长期奖励。因此,这是一个约束优化问题,通过最优化满足安全下的奖励目标函数,可以较好地取得奖励和安全的折中。 Key Papers in Deep RL ‒ Spinning Up documentation # 分类 ## MDP,马尔可夫决策过程 问题 贝尔曼方程 算法 预测 贝尔曼方程 迭代策略评估 控制 贝尔曼期望方程 策略迭代 控制 贝尔曼最优化方程 价值迭代picture? (markov decision position) \[需要<S,A,P,R>建模\\o_t=s^e_t=s^a_t\] - 通过环境更新状态 - 通过内部更新状态 ## MRP,马尔可夫奖励过程 ### Monte Carlo 随波逐流 \[要知道S_4的价值,就生成很多从S_4开始的轨迹,求其平均。\] ## Bell贝尔曼方程 \[V(S)=R(S)+\gamma \sum_{s'\in S}p(s'|s)V(s')\] 只往前一步,V等于即时奖励加折扣因子乘下一个 ## bootstapping自举 有点像数列前后项 ## 策略评估 DP,动态规划 MC,蒙特卡洛 TD,时序差分 策略迭代vs价值迭代 - 在Policy Iteration中 - 第一步 Policy Eval:一直迭代至收敛,获得准确的V(s) - 第二步 Policy Improvement:根据准确的V(s),求解最好的Action - 对比之下,在Value Iteration中 - 第一步 "Policy Eval":迭代只做一步,获得不太准确的V(s) - 第二步 "Policy Improvement":根据不太准确的V(s),求解最好的Action - 核心是不断迭代Bellman Optimality Equation [图片] POMDP部分可观测马尔可夫决策过程 (partially observable Markov space) ### 免模型预测 1. 蒙特卡洛 2. 动态规划 3. 时序差分
免模型控制
当我们不知道R和P怎么做出策略优化? \[与蒙特卡洛方法相比,时序差分方法有如下几个优势:\\\qquad 低方差,能够在线学习,能够从不完整的序列中学习。\\ 所以我们可以把时序差分方法也放到控制循环(control loop)里面去估计Q表格,再采取 ε-贪心,这样就可以在回合没结束的时候更新已经采集到的状态价值。\] ### Sarsa
Q学习
在异策略学习的过程中,轨迹都是行为策略与环境交互产生的,产生这些轨迹后,我们使用这些轨迹来更新目标策略
。异策略学习有很多好处。首先,我们可以利用探索策略来学到最佳的策略,学习效率高;其次,异策略学习可以让我们学习其他智能体的动作,进行模仿学习,学习人或者其他智能体产生的轨迹;最后,异策略学习可以让我们重用旧的策略产生的轨迹,探索过程需要很多计算资源,这样可以节省资源。
## Value-based agent 只能应用在不连续的环境(下棋 不需要显式策略
## Q学习 ### Sarsa ### DQN ## Policy-based agent 制定显式策略 PG,policy
Gradient 策略梯度 MC,蒙特卡洛 Monte Carlo: \[要知道S_4的价值,就生成很多从S_4开始的轨迹,求其平均。\]
TD,时序差分 ## Actor-Critic agent 同时使用策略和价值 在PG基础上更加快速
一些简单常识 1. environment、goal、agent 2. state、action、reward 3.
policy、value(all the reward you can get in the future Trial and Error
Delayed Reward(下棋时可能没有reward,但是有value ##
如何学习过去行为的价值:(类似复盘 - Credit Assignment - Backpropagation
## Exploration vs Exploitation 权衡探索和利用 ## K-armed Bandit
多臂老虎机 - 只有一个state - 没有延时奖励
- Finite Markov Decision Process
- Dynamic Programming
- Monte Carlo Methods
- Temporal-Difference Learning # 第一个项目-tic tac toe ## Sample-average \[\\Q(s_t,a_t)+\frac{1}{n}\cdot Error=Q(s_{t+1},a_{t+1})\] 学习率(步长)越来越小 \[Q(s_{t+1},a_{t+1})=\frac{1}{n} \sum_{i=1}^nr_i\\与Q_1无关\] 如果有初值微调即可 固定学习率 \[\\Q(s_t,a_t)+\alpha\cdot Error=Q(s_{t+1},a_{t+1})\\ Q(s_{t+1},a_{t+1})=(1-\alpha)Q_1+\sum_{i=1}^n\alpha (1-\alpha)^{n-i}r_i\]
P
roximal policy
Optimization(ppo
)就是一种策略优化算法,在该算法中,为了相对保险地提高策略网络(policy
)的性能,在一定的优化轮数(K_epochs)内,通过计算旧策略网络(policy_old
)与当前策略网络(policy
)间新权重和旧权重之间的距离来限制每次更新策略时的改变量。在每轮优化结束后,通过将权重从策略网络(policy
)复制到旧策略网络(policy_old
)中,就可以保证旧策略和新策略之间的状态保持同步,同时避免训练过程中梯度更新过于剧烈的情况,给训练带来稳定性。
因此,在ppo
算法中,需要维护两个相同的策略网络,即当前策略(policy
)和旧策略(policy_old
),并在每次优化后将当前策略网络的权重复制到旧策略网络中,以确保两者状态同步,并且避免权重更新过于剧烈,从而使训练过程更加稳定。
我只用一个策略不行吗
在理论上,只使用一个策略网络进行训练是可行的,但在实践中,使用两个策略网络(policy
和policy_old
)可以提高ppo
算法的训练稳定性,防止梯度更新过于过分,从而提高算法的收敛性能。
当只使用一个策略网络时,梯度的更新可能会导致策略网络进入局部最优状态,并且难以跳出该局部最优状态。相反,使用两个策略网络可以确保具有与当前策略相同的架构和参数的旧策略网络在整个训练过程中都具有与当前策略相同的性能,并且可以在训练期间监测和比较它们的表现,从而更好地控制策略学习的稳定性。因此,尽管只使用一个策略网络也是可行的,但使用两个策略网络(当前策略和旧策略)是ppo
算法的一项重要策略,有助于提高算法的表现和稳定性。
ppo
算法中使用两个策略网络可以提高算法的训练稳定性主要有以下几个原因:
防止忘记性(forgetting):当只有一个策略网络时,随着每个新样本进入训练,策略网络的参数会不断发生更新,因此网络可能会「忘记」先前学到的知识或技巧,导致策略网络的性能出现不稳定或下降。而通过使用两个策略网络,即当前策略(
policy
)和旧策略(policy_old
),策略迭代会在两个策略网络之间轮流,从而确保策略网络的状态和性能保持同步,减缓网络性能因过度迭代而降低的情况。使策略网络收敛更稳定:在强化学习任务中,优化哪个策略可以非常复杂,一个过于灵活的策略很可能会在学习过程中出现不稳定的行为。使用两个策略网络可以使训练更加可控,迫使策略向相同的方向变化,进而提高收敛性能。
提供安全界限:在
ppo
算法中,限制每次更新策略时的距离(KL散度或者clip),以防止更新过大而不安全,导致策略网络的性能下降,使用两个策略网络可以在安全界限内进行更新,避免策略网络性能不稳定。
policy_old
在ppo
算法的训练中,旧策略(policy_old
)不会进行更新,而是在每次优化之后将当前策略(policy
)的权重复制到旧策略(policy_old
)中。旧策略仅用于评估策略的性能以及计算计算新策略与旧策略之间的距离,在ppo
算法的策略迭代中并不直接参与训练过程。
当采用ppo
算法训练强化学习agent
时,在每个训练轮次完成之后,会比较当前策略网络(policy
)和旧策略网络(policy_old
)之间的差异,并应用近似优化理论的方法确保对新策略的优化是相对充分而且能保证策略稳定性的。因为新的策略网络的性能未知,所以ppo
算法通过用旧的策略网络的性能和更新后的新策略网络的性能来比较两个策略网络的不同点。如果新的策略网络的性能更差,则会拒绝对此策略网络的更新,反之则接受。
因此,旧策略网络在ppo
算法中主要用于评估策略的性能并计算新策略与旧策略之间的差异,旧策略网络不会直接进行更新,只是用于在训练过程中提高策略的性能和稳定性。