基于值和基于策略的强化学习
- 基于值
- 学习到的值函数
- 隐式的策略(如 $\epsilon$-贪婪)
- 基于策略
- 不使用值函数
- 学习到的策略
- Actor-Critic
- 学习到的值函数
- 学习到的策略
优势:
- 更好的收敛属性
- 高维或者连续行动空间
- 可以学习随机策略
劣势: - 通常会收敛于一个局部最优点(而非全局最优)
- 衡量策略通常低效和高方差
策略目标函数
- 目的:给定策略 $\pi_\theta(s,a)$ 参数为 $\theta$,找到最优 $\theta$
- 但是我们如何衡量策略 $\pi_\theta$ 的质量?
- 在片段式环境中,我们使用开始值
$$J_1(\theta) = V^{\pi_\theta}(s_1) = \mathbb{E}_{\pi_\theta}[v_1]$$ - 在持续式环境我们可以使用平均值
$$J_{avV}(\theta) = \sum_{s}d^{\pi_\theta}(s)V^{\pi_\theta}(s)$$ - 或者使用每时间步的平均奖励
$$J_{avR}(\theta) = \sum_{s}d^{\pi_\theta}(s) \sum_{a} \pi_\theta(s,a) \mathcal{R}_{s}^{a}$$ - 其中 $d^{\pi_\theta}(s)$ 是 $\pi_\theta$ 的马尔科夫链的稳定分布
策略优化
- 基于策略的强化学习其实就变成了优化问题
- 找到 $\theta$ 最大化 $J(\theta)$
- 存在一些不用梯度的方法
- Hill climbing
- Simplex / amoeba / Nelder Mead
- Genetic algorithms
- 使用梯度常会提升效率
- 梯度下降
- 共轭梯度
- Quasi-newton
- 我们主要讲梯度下降,可以有很多扩展
- 并且只针对开发序列结构的方法
策略梯度
- 令 $J(\theta)$ 为任意策略目标函数
- 策略梯度算法通过上升策略关于参数 $\theta$ 的梯度来搜索其一个局部最大值
$$\Delta\theta = \alpha \nabla_\theta J(\theta)$$ - 其中 $\nabla_\theta J(\theta)$ 是策略梯度
$$\nabla_\theta J(\theta) = \begin{pmatrix} \frac{\partial J(\theta)}{\partial \theta_1} \\
\vdots \\
\frac{\partial J(\theta)}{\partial \theta_n}
\end{pmatrix}$$ - 其中 $\alpha$ 是步长参数
使用有限差异(Finite Differences)计算梯度
- 来衡量 $\pi_\theta(s,a)$ 的策略梯度
- 对每个维度 $k \in [1,n]$
- 估计目标函数关于 $\theta$ 的第 $k$ 个偏导数
- 在第 $k$ 维以小的量 $\epsilon$ 微调 $\theta$
$$\frac{\partial J(\theta)}{\partial \theta_k} \approx \frac{J(\theta + \epsilon u_k) - J(\theta)}{\epsilon}$$
其中 $u_k$ 是单位向量,第 $k$ 维元素为 $1$,其他为 $0$
- 使用 $n$ 个评估来计算 $n$ 个维度的策略梯度
- 简单、有噪声、低效 - 但有时候实用
- 对任意策略有效,甚至不可微的策略
计分函数
- 我们现在解析的方式来计算策略梯度
- 假设策略 $\pi_\theta$ 在非零处可微分
- 我们知道梯度 $\nabla_\theta \pi_{\theta}(s,a)$
- 似然比例利用了下面的等式
\begin{array} {lcl} \nabla_\theta \pi_{\theta}(s,a) & = & \pi_{\theta}(s,a) \frac{\nabla_\theta \pi_{\theta}(s,a)}{\pi_\theta(s,a)} \\ & = & \pi_{\theta}(s,a) \nabla_\theta \log \pi_{\theta}(s,a)
\end{array}
- 计分函数为 $\nabla_\theta \log \pi_\theta(s,a)$