一、Value-based 学习方式
基于价值的强化学习方式,我们的目标是学习一个价值函数,能够根据状态 $s$ 映射到对应状态期望的价值,策略 policy 是一个人为设定的基于价值的函数。
1.1 两个价值函数
价值函数的定义:从状态 $s$ 开始,agent 按设定的 policy 执行,它所能取得折扣代价的期望。
$$ V_{\pi}(s)=E_{\pi}[R_{t+1}+\gamma R_{t+2} +...|S_t=s] $$
简化一下表达如下,称为状态价值函数 (State-value function):
$$ V_{\pi}(s)=E_{\pi}[G_t|S_t=s] $$
其中 $G_t=R_{t+1}+\gamma R_{t+2} +...$,代表 agent 按 policy 执行取得的折扣代价函数。
另一个常用到的函数是动作价值函数 (Action-value function):
$$ Q_{\pi}(s,a)=E_{\pi}[G_t|S_t=s,A_t=a] $$
表示在状态$s$执行动作$a$后的最大价值。
1.2 Bellman equation
Bellman equation 可以简化价值函数的估计
$$ V_{\pi}(s)=E_{\pi}[R_{t+1}+\gamma \times V_{\pi}(S_{t+1})|S_t=s] $$
为什么要做这样的替换?原始公式中,我们需要计算一系列动作之后对应的奖惩,通过 Bellman 等式, 我们可以将其替换为下一个状态的价值函数,这个价值函数的计算可以通过历史的价值函数直接计算得到。
1.3 两种学习策略
基于以上的价值函数定义,我们怎么优化对应的目标函数呢?我们发现这不是一个有解析解或者可微分的问题,对于这类问题相应的解法更多的是基于采样等方式。具体到这个问题有以下两种学习策略:
- Monte Carlo:在学习时,使用整个序列 episode 得到的奖惩 $G_t$;
- Temporal difference:只使用一步 $(S_t, A_t, R_{t+1}, S_{t+1})$ 得到的奖惩进行学习
Monte Carlo 定义如下:
$$ V(S_t) \gets V(S_t) + \alpha [G_t - V(S_t)] $$
上式中 $G_t$ 是按当前策略执行多步,取得折扣累计奖励。
Temporal difference:
$$ V(S_t) \gets V(S_t) + \alpha [R_{t+1} + \gamma V(S_{t+1}) - V(S_t)] $$
在 TD 策略中,每一次函数值的迭代只依赖一次动作得到的即使奖励和后续状态的价值。
1.4 Q-learning
Q-Learning 是一个离线策略(off-policy)基于价值的强化学习方法,使用 TD 来训练得到动作价值函数(action-value function)。
实际上 Q-Learning 通过维护一个 Q-table (状态-动作)来实现 Q-function。
for i in range(num_episodes):
observe s_0
t = 0
while
choose action using e-policy
take action and observe R_{t+1}, S_{t+1}
Q(s, a) = update()
until s_t is terminated
如果基于不同的 t、不同的 a 以及环境的随机变化,可能状态 s 数量级会非常大,维护一个 Q-table 不现实了,需要引入 Deep Q-Learning。
on-policy vs off-policy
- off-policy: 指 choose action 所使用的策略与 task update 时不同
- on-policy: 指上面两个步骤策略相同
二、参考链接
- Hugging Face: https://huggingface.co/learn/deep-rl-course/unit2/two-types-value-based-methods
- 如何学习蒙特卡洛搜索: https://zhuanlan.zhihu.com/p/30458774