因为这个网站全的,所以这里只整理关键部分
| 马尔可夫性质:当且仅当某时刻的状态只取决于上一时刻的状态时,一个随机过程被称为具有马尔可夫性质(Markov property),写作$P(S_{t+1} | S_t,S_{t-1},…,S_0) = P(S_{t+1} | S_t)$。 |
MP:只有状态和转移概率 -> MRP:状态,转移概率,和转移之后获得的奖励 ->MDP
MDP引入了动作的概念,让S之间的转换不仅仅是随机的,而是可以通过Agent选择动作来影响的。 因此一个MDP可以用一个五元组$(S,A,P,R,\gamma)$来表示,其中S为状态空间,A为动作空间,P为状态转移概率,R为奖励函数,$\gamma$为折扣因子。
价值函数:
$ V(s) = E[G_t|S_t = s] = E[R_t+ {\gamma}R_{t+1} + {\gamma}^2 R_{t+2}… |S_t = s] $
$ = E[R_t+ {\gamma}R_{t+1} + {\gamma}^2 R_{t+2}… |S_t = s] $
$ = E[R_t+ {\gamma}G_{t+1}|S_t = s] = E[R_t+ {\gamma}V(S_{t+1})|S_t = s] $
于是可以得到t时刻s状态下的价值 = t时刻回报的期望 + 折扣后的,已知s状态发生的,下一个状态的价值期望。
$ V(s) = r(s) + \gamma \sum_{s’ \in S}p(s’|s)V(s’) $
即 在状态s下得到的期望回报 + 未来整个采样轨迹下的折扣值的期望回报。
状态价值函数:$V^{\pi}(s) = E_{\pi}[G_t|S_t = s]$,即在状态s下,按照策略$\pi$执行动作,得到的期望回报。
动作价值函数/Q函数:$Q^{\pi}(s,a) = E_{\pi}[G_t|S_t = s, A_t = a]$,即在状态s下,执行动作a,得到的期望回报。
很容易发现其实它们的关系:s状态的$V^{\pi}(s)$等于s状态下所有动作的Q值的加权平均,权重为策略$\pi$:
$V^{\pi}(s) = \sum_{a \in A} \pi(a|s)Q^{\pi}(s,a)$
Bellman方程:一个状态的价值函数等于该状态的立即回报加上下一个状态的价值函数的折扣值。
$V^{\pi}(s) = E_{\pi}[R_{t+1} + \gamma V^{\pi}(S_{t+1})|S_t = s]$
可以写作矩阵形式:$V^{\pi} = R^{\pi} + \gamma P^{\pi}V^{\pi}$,其中$R^{\pi}$为立即回报,$P^{\pi}$为状态转移概率。
由矩阵形式可以得到Bellman方程的解,在小范围的时候可以这样直接求解,复杂度是O(n2),大规模求解参见下一节三类方法:
$V^{\pi} = (I - \gamma P^{\pi})^{-1}R^{\pi}$
价值函数和的Bellman期望方程:
$V^{\pi}(s) = E_{\pi}[R_{t+1} + \gamma V^{\pi}(S_{t+1})|S_t = s] = \sum_{a} \pi(a|s) \sum_{s’,r} p(s’,r|s,a)[r + \gamma V^{\pi}(s’)]$
Q函数的Bellman方程:
$Q^{\pi}(s,a) = E_{\pi}[R_{t+1} + \gamma Q^{\pi}(S_{t+1},A_{t+1})|S_t = s, A_t = a] = \sum_{s’,r} p(s’,r|s,a)[r + \gamma \sum_{a’} \pi(a’|s’)Q^{\pi}(s’,a’)]$
V 的贝尔曼方程推导,常看,容易被拷打
这三种方法是简单的价值函数估计方法(不算穷举的话),它们本质都是为了计算出$V(s)$ 和$Q(s,a),一样的,下面我只写V的
蒙特卡洛法:通过采样的方法,估计状态的价值函数。通过采样轨迹,计算每个状态的回报,然后求平均值。
动态规划法:通过Bellman方程迭代求解价值函数。利用动态规划的思想,将问题分解为子问题,逐步求解。动态规划包括策略迭代和价值迭代。
时序差分法:通过采样的方法,估计状态的价值函数。通过采样轨迹,计算每个状态的回报,然后用下一个状态的价值函数估计值替代。
三种方法都是为了解决Bellman方程的求解问题,其中动态规划法需要知道环境的完全信息(状态转移概率和回报),蒙特卡洛法和时序差分法只需要Agent和环境的交互数据,前者是纯采样估算,后者相当于下探一步。
从状态转移树的角度看,在$s_t$状态节点,动态规划法完整地计算出下一层的所有节点,蒙特卡洛法选中一个节点并且下探到最底层,时序差分法选中一个节点并且下探一层。三种方法在更新价值函数时的对应更新策略如下:
$V^{\pi}(s) = E_{\pi}[G_t|S_t = s]$ 直接采样N条轨迹,那么 $V^{\pi}(s) = 1/N \sum_{i=1}^{N} G_t^i$
当然也可以用增量式更新:$N(t) += 1; V(s_t) = V(s_t) + 1/N(t)(G_t - V(s_t))$ 其中Nt是当前采样条数
蒙特卡洛法的更新方式是免模型的,因为它不需要知道状态转移概率和回报函数,只需要采样轨迹;对于陌生的环境,在不知道状态转移概率和回报函数的情况下,蒙特卡洛法是最简单的价值函数估计方法。
动态规划法是一类强化学习方法,和算法里的DP很像,都是解决问题首先要解决子问题。动态规划分为策略迭代和价值迭代。
(1)策略迭代:
策略迭代会交替进行策略评估和策略提升,其中策略评估会用到动态规划的思想来估算价值函数,策略提升则是通过贪婪策略来更新策略。
策略评估 Policy Evaluation: 根据Bellmann方程$V^{\pi}(s) = \sum_{a} \pi(a|s) \sum_{s’,r} p(s’,r|s,a)[r + \gamma V^{\pi}(s’)]$,若已知状态转移函数p(s’,r|s,a)和下一个状态的价值函数V(s’),则可以计算出当前状态的价值函数V(s)。
| (如果环境完全已知(已知P和R),那么上式有 | S | 个线性方程,解 | S | 个未知数V(s),理论上是可以直接求解的。) |
因此可以将计算V(s’)看作子问题,V(s)看作原问题,当然V(s’)的计算又依赖于更下一级的状态价值函数V(s’’),因此可以递归地计算V(s)直到收敛。
在实际操作的时候这样会造成巨大时间开销,因此可以使用迭代的方式,对于每个状态S,选定任意初始值 $V_0$,不断迭代更新 $V_{k+1}(s) = \sum_{a} \pi(a|s) \sum_{s’,r} p(s’,r|s,a)[r + \gamma V_k(s’)]$ 直到收敛,即每一步k+1都用上一步k计算得到的V来更新当前的V(收敛到不动点就是$V_{\pi}(s)$)。
策略提升 Policy Improvement: 根据当前的价值函数V(s),更新策略$\pi$,使得在每个状态s下选择的动作a是贪婪的,即选择使得Q(s,a)最大的动作。
策略提升之所以可以确保收敛是因为 策略提升定理
(2)价值迭代
时序差分法是一种在线学习方法,不需要等到一个完整的轨迹结束,就可以更新价值函数,如上所述时序差分的更新目标为:$V(s_t) = V(s_t) + \alpha(R_{t+1} + \gamma V(s_{t+1}) - V(s_t))$
其中$(R_{t+1} + \gamma V(s_{t+1}) - V(s_t))$被称为TD Error,表示当前状态的估计值和下一个状态的估计值之间的差异。 这个要记住,因为后面一堆算法本质就是在改来改去这个TDE。
Sarsa:在线,更新目标为:$Q(s_t,a_t) = Q(s_t,a_t) + \alpha(R_{t+1} + \gamma Q(s_{t+1},a_{t+1}) - Q(s_t,a_t))$
Q-learning:离线,更新目标为:$Q(s_t,a_t) = Q(s_t,a_t) + \alpha(R_{t+1} + \gamma \max_{a}Q(s_{t+1},a) - Q(s_t,a_t))$
从更新目标看出,在t时刻,两者更新TD Error方式不同,本质是两者对于t+1状态的Q估计不同。Sarsa是用下一个状态的动作a’的Q值来更新,Q-learning是用下一个状态的最大Q值来更新。Sarsa用了a’更新,在下一个阶段一定会用a’来采样;Q-learning更新用的a和下一步选择的a无关,选择动作是根据argmax Q来选择的。
Q-learning的更新方式是离线的,因为它不需要等到下一个状态的动作,而Sarsa是在线的,因为它需要等到下一个状态的动作,sarsa的更新需要<s,a,r,s’,a’>, Q-learning只需要<s,a,r,s’>。
D3QN是Q-learning的一步到位版本,Double Dueling DQN,目前解决离散问题的sota。这里简介其中的思路。
机遇价值的方法通过学习价值函数,再根据价值函数选择argmaxQ的动作,这种方法称为基于价值的方法,不存在一个显式的策略。而基于策略的方法直接学习策略。
考虑一个策略$\pi(a|s;\theta)$,其中$\theta$为策略参数,表示在状态s下选择动作a的概率。策略梯度的目标是最大化回报的期望,即最大化$J(\theta) = E_{\pi}[G_t]$。
为了最大化这个目标,可以使用梯度上升法,即$\theta = \theta + \alpha \nabla_{\theta}J(\theta)$,其中$\nabla_{\theta}J(\theta) = E_{\pi}[\nabla_{\theta} \log \pi(a|s;\theta) Q(s,a)]$。
策略梯度优化目标的证明,观察上式,可以看出策略梯度的更新修改方向是尽可能选取回报高的动作,这样可以提高回报的期望。同时策略更新使用的数据来自于本轮的交互数据,因此策略梯度是在线学习方法。
Initialize $\theta$
for each episode {
Generate an episode ${s_0,a_0,r_1,s_1,a_1,r_2,…,s_T}$ using $\pi(\cdot|\cdot;\theta)$
for t = 0 to T-1 {
$\theta = \theta + \alpha \nabla_{\theta} \log \pi(a_t|s_t;\theta) G_t$
其中$G_t = \sum_{k=t}^{T-1} \gamma^{k-t}r_{k+1}$ 即当前时刻向后的回报
}
}
AC算法融合了基于价值和基于策略的方法,同时学习价值函数和策略函数。在前述的计算Policy Gradient过程中,使用了价值函数的估计值,即$\nabla_{\theta}J(\theta) = E_{\pi}[\nabla_{\theta} \log \pi(a|s;\theta) G_t]$。
这里的$G_t$可以有多种形式,REINFORCE中是:$G_t = \sum_{k=t}^{T-1} \gamma^{k-t}r_{k+1}$ 即当前时刻向后的回报。可以使用各种版本:
PG和AC方法在更新策略时,使用的是梯度上升法,当网络深度增加,这样的方法在更新时可能不稳定,Trust Region Policy Optimization(TRPO)则限制策略在“信任区间”内更新,在此区间内的更新可以保证策略稳定改善。
TRPO的推导过程:
| 但是直接用旧策略是有估计误差的,在计算$E_{\pi_{\theta}}(A^{\pi_{\theta}}(s,a))$时,会有估计误差,因此需要引入KL散度,限制新策略和旧策略的差异,EA被改写为$E_{s_V^{\pi_\theta}}E_{a_{\pi_\theta}}(A^{\pi_{\theta}}(s,a)) \approx E_{s_V^{\pi_\theta}}E_{a_{\pi_\theta}}(KL(\pi_{\theta}(\cdot | s),\pi_{\theta’}(\cdot | s))$,其中$KL(P,Q)$表示P和Q的KL散度,即两个分布的相对熵,等于P和Q的交叉熵减去P的熵,计算方式为$KL(P,Q) = \sum_x P(x) \log \frac{P(x)}{Q(x)}$ |
| TRPO的优化目标为$J(\theta’) = J(\theta) + E_{s_V^{\pi_\theta}}E_{a_{\pi_\theta}}(KL(\pi_{\theta}(\cdot | s),\pi_{\theta’}(\cdot | s))$,约束条件为:$E_{s_V^{\pi_\theta}}E_{a_{\pi_\theta}}(KL(\pi_{\theta}(\cdot | s),\pi_{\theta’}(\cdot | s)) \leq \delta$. |