而在大规模的MDPs中,有过多的状态或动作需要存储,独立地学习每个状态的值所需的时间也过多,所以表格型算法无法解决。
问:如何避免为每个状态显式学习或存储以下内容呢?
解:用函数近似来估计 \(\begin{aligned} \hat{v}(s,\mathbf{w}) & \approx v_{\pi}(s) \\ \hat{q}(s,a,\mathbf{w}) & \approx q_{\pi}(s,a) \\ \hat{\pi}(a,s,\mathbf{w}) & \approx \pi(a \vert s) \\ \end{aligned}\) ,从可见状态推广到不可见状态,用MC或TD学习来更新参数\(w\)。
有很多可行的function approximators:
本课程将聚焦可微的函数逼近器:linear feature representations和neural networks。
首先,我们来回顾一下梯度下降。函数\(J(\mathbf{w})\)是对参数向量\(\mathbf{w}\)可微,目标是找到能最小化\(J\)的参数\(\mathbf{w}^*\)。定义\(J(\mathbf{w})\)的梯度为
\[\nabla_{\mathbf{w}} J(\mathbf{w}) = \left[ \frac{\partial J(\mathbf{w})}{\partial w_1}, \frac{\partial J(\mathbf{w})}{\partial w_2}, \cdots, \frac{\partial J(\mathbf{w})}{\partial w_n} \right]^T\]向负梯度方向调整\(\mathbf{w}\),其\(\alpha\)为步长
\[\Delta \mathbf{w} = -\frac{1}{2} \alpha \nabla_{\mathbf{w}} J(\mathbf{w})\]Value Function Approximation with an Oracle:假设我们有一个预言可以知道任何给定状态\(s\)的真实价值\(v_{\pi}(s)\),目标是找到与\(v_{\pi}(s)\)最近似的表达。因此,使用均方误差并将损失函数定义为
\[J(\mathbf{w}) = \mathbb{E}_{\pi} \big[ (v_{\pi}(s) - \hat{v}(s,\mathbf{w}))^2 \big]\]沿着梯度下降找到一个局部最小值
\[\begin{aligned} \Delta \mathbf{w} &= -\frac{1}{2} \alpha \nabla_{\mathbf{w}} J(\mathbf{w}) \\ \mathbf{w}_{t+1} &= \mathbf{w}_t + \Delta \mathbf{w} \end{aligned}\]用一个特征向量\(\mathbf{x}(s) = (x_1(s), \ldots, x_n(s))^T\)来表示状态
用特征的线性组合来表示价值函数
\[\hat{v}(s, \mathbf{w}) = \mathbf{x}(s)^T \mathbf{w} = \sum_{j=1}^n x_j(s) w_j\]目标函数中含\(\mathbf{w}\)的项是二次的
\[J(\mathbf{w}) = \mathbb{E}_{\pi} \big[ (v_{\pi}(s) - \mathbf{x}(s)^T \mathbf{w})^2 \big]\]因此更新规则很简单,\(\color{green}{\text{update} = \text{step size} \times \text{prediction error} \times \text{feature value}}\)
\[\Delta \mathbf{w} = \alpha[v_{\pi}(s) - \hat{v}(s,\mathbf{w})] \mathbf{x}(s)\]随机梯度下降会收敛到全局最优。因为在线性情况下,只有一个最优值,因此局部最优值会自动收敛到或接近全局最优值。
具有查表功能的线性值函数逼近:查表是线性值函数逼近的一种特殊情况。查表特征是one-hot vector(独热编码)
\[\mathbf{x}^{\text{table}}(s) = [1(s=s_1), \ldots, 1(s=s_n)]^T\]可以看到参数向量\(\mathbf{w}\)上的每个元素表示每个单独状态的值
\[\hat{v}(s, \mathbf{w}) = [1(s=s_1), \ldots, 1(s=s_n)][w_1, \ldots, w_n]^T\]因此,\(\hat{v}(s_k, \mathbf{w}) = w_k\)。
实际上,对于任何状态\(s\),都无法获得关于\(v_{\pi}(s)\)真值的预言。
回顾一下无模型预测:
因此,我们可以在循环中包含函数逼近步骤。
假设实际的价值函数\(v_{\pi}(s)\)由某个监督者/预言给出
\[\Delta \mathbf{w} = \alpha[v_{\pi}(s) - \hat{v}(s,\mathbf{w})] \nabla_{\mathbf{w}} \hat{v}(s,\mathbf{w})\]但是,在强化学习中没有监督,只有奖励,所以在实际操作过程中,把\(v_{\pi}(s)\)替换成target。
对于MC,目标为实际return\(G_t\)
\[\Delta \mathbf{w} = \alpha[G_t - \hat{v}(s_t,\mathbf{w})] \nabla_{\mathbf{w}} \hat{v}(s_t,\mathbf{w})\]对于TD(0),目标为TD target \(R_{t+1} + \gamma \hat{v}(s_{t+1},\mathbf{w})\)
\[\Delta \mathbf{w} = \alpha[R_{t+1} + \gamma \hat{v}(s_{t+1},\mathbf{w}) - \hat{v}(s_t,\mathbf{w})] \nabla_{\mathbf{w}} \hat{v}(s_t,\mathbf{w})\]Return \(G_t\)是无偏的,而真值\(v_{\pi}(s_t)\)的采样是有噪声的。
问:为什么是无偏的?
因为\(\mathbb{E}[G_t] = v_{\pi}(s_t)\)
所以,我们有可用于VFA中监督学习的训练数据: \(<S_1,G_1>, <S_2,G_2>, \ldots <S_1,G_1>\)
利用线性Monte-Carlo策略评估
\[\begin{aligned} \Delta \mathbf{w} &= \alpha[G_t - \hat{v}(s_t,\mathbf{w})] \nabla_{\mathbf{w}} \hat{v}(s_t,\mathbf{w}) \\ &= \alpha[G_t - \hat{v}(s_t,\mathbf{w})] \mathbf{x}(s_t) \end{aligned}\]Monte-Carlo预测在线性和非线性价值函数近似中都是收敛的。
TD target \(R_{t+1} + \gamma \hat{v}(s_{t+1},\mathbf{w})\)是真值\(v_{\pi}(s_t)\)的有偏采样。
问:为什么有偏?
因为它来自之前的估计,而不是真值。\(\mathbb{E}[R_{t+1} + \gamma \hat{v}(s_{t+1},\mathbf{w})] \neq v_{\pi}(s_t)\)
所以,我们有可用于VFA中监督学习的训练数据: \(<S_1, R_2 + \gamma \hat{v}(s_2,\mathbf{w})>, <S_2, R_3 + \gamma \hat{v}(s_3,\mathbf{w})>, \ldots <S_{T-1}, R_T>\)
利用线性TD(0),随机梯度下降更新为
\[\begin{aligned} \Delta \mathbf{w} &= \alpha[R + \gamma \hat{v}(s',\mathbf{w}) - \hat{v}(s,\mathbf{w})] \nabla_{\mathbf{w}} \hat{v}(s_t,\mathbf{w}) \\ &= \alpha[R + \gamma \hat{v}(s',\mathbf{w}) - \hat{v}(s,\mathbf{w})] \mathbf{x}(s) \end{aligned}\]这也称为semi-gradient,因为忽略了改变权重向量\(\mathbf{w}\)对目标的影响。
线性TD(0)会收敛(靠近)全局最优。
广义策略迭代(GPI)
近似动作-价值函数
\[\hat{q}(s, a, \mathbf{w}) \approx q_{\pi}(s, a)\]最小化近似动作价值与真实动作价值之间的均方误差(mean-square error, MSE)
\[J(\mathbf{w}) = \mathbb{E}_{\pi} [(q_{\pi}(s, a) - \hat{q}(s, a, \mathbf{w}))^2]\]通过随机梯度下降,找到一个局部极小值
\[\Delta \mathbf{w} = \alpha[q_{\pi}(s, a) - \hat{q}(s, a, \mathbf{w})] \nabla_{\mathbf{w}} \hat{q}(s, a, \mathbf{w})\]进一步地,考虑线性动作-价值函数近似。用特征向量表示状态和动作
\[\mathbf{x}(s, a) = \big( x_1(s, a), \ldots, x_n(s, a) \big)^T\]用特征的线性组合表示动作-价值函数
\[\hat{q}(s, a, \mathbf{w}) = \mathbf{x}(s, a)^T \mathbf{w} = \sum_{j=1}^n x_j(s,a) w_j\]因此,随机梯度下降更新为
\[\Delta \mathbf{w} = \alpha[q_{\pi}(s, a) - \hat{q}(s, a, \mathbf{w})] \mathbf{x}(s, a)\]与预测一样,关于\(q_{\pi}(s,a)\)真值的预言是不存在的,所以把它换成target
对于MC,目标为实际return\(G_t\)
\[\Delta \mathbf{w} = \alpha[G_t - \hat{q}(s_t, a_t, \mathbf{w})] \nabla_{\mathbf{w}} \hat{q}(s_t, a_t, \mathbf{w})\]对于Sarsa,目标为TD target \(R_{t+1} + \gamma \hat{q}(s_{t+1}, a_{t+1}, \mathbf{w})\)
\[\Delta \mathbf{w} = \alpha \big[R_{t+1} + \gamma \hat{q}(s_{t+1}, a_{t+1}, \mathbf{w}) - \hat{q}(s_t, a_t, \mathbf{w}) \big] \nabla_{\mathbf{w}} \hat{q}(s_t, a_t \mathbf{w})\]对于Q-learning,目标为TD target \(R_{t+1} + \gamma \max_a \hat{q}(s_{t+1}, a, \mathbf{w})\)
\[\Delta \mathbf{w} = \alpha \big[R_{t+1} + \gamma \max_a \hat{q}(s_{t+1}, a_{t+1}, \mathbf{w}) - \hat{q}(s_t, a_t, \mathbf{w}) \big] \nabla_{\mathbf{w}} \hat{q}(s_t, a_t \mathbf{w})\]采用VFA的TD没有沿着任何一个目标函数的梯度,更新过程通过通过拟合底层价值函数包含了近似Bellman回溯过程。因此,TD在使用离轨策略或者非线性函数近似时会发散。离轨控制的挑战性在于行为策略和目标策略不相同,因此价值函数近似会发散。
导致不稳定和发散的三个致命要素:(详见课本11.3节)
增量梯度更新易于实现,但是不能有效采样。基于批量的方法试图为大量的agent的经验找到最贴合的价值函数。
给定价值函数近似\(\hat{v}(s, \mathbf{w}) \approx v_{\pi}(s)\)。经验\(\mathcal{D}\)由<状态,价值>组成(可能从一次episode或很多先前的episodes得来),\(\mathcal{D} = \{ <s_1, v_1^{\pi}>, \ldots, <s_t, v_T^{\pi}> \}\)
目标:优化参数\(\mathbf{w}\)来更好地符合经验\(\mathcal{D}\)
采用最小二乘算法最小化\(\hat{v}(s_t, \mathbf{w})\)与目标值\(v^{\pi}_t\)之间的平方和误差\(\begin{aligned} \mathbf{w}^* =& \text{arg} \min_{\mathbf{w}} \mathbb{E}_{\mathcal{D}} [(v_{\pi} - \hat{v}(s, \mathbf{w}))^2] \\=& \text{arg} \min_{\mathbf{w}} \sum_{t=1}^T (v^{\pi}_t - \hat{v}(s_t, \mathbf{w}))^2\end{aligned}\)
给定由<状态,价值>组成的经验\(\mathcal{D} = \{ <s_1, v_1^{\pi}>, \ldots, <s_t, v_T^{\pi}> \}\),迭代解为以下两个步骤的重复
梯度下降法的解收敛于最小二乘解\(\mathbf{w}^{LS} = \text{arg}\min_{\mathbf{w}} \sum_{t=1}^T (v^{\pi}_t - \hat{v}(s_t, \mathbf{w}))^2\)
将强化学习推广到解决实际问题,如自动驾驶汽车、雅达利、消费者营销、医疗保健、教育……这些实际问题大多有非常大的状态和/或操作空间,需要能够将模型/价值/策略概括在状态和/或动作内的表示方法。解决方案:用参数函数来表示一个值函数,而不是一个查找表。
\[\begin{aligned} \hat{v}(s, \mathbf{w}) & \approx v_{\pi}(s) \\ \hat{q}(s, a, \mathbf{w}) & \approx q_{\pi}(s, a) \end{aligned}\] 用特征的线性组合来表示价值函数\(\hat{v}(s, \mathbf{w}) = \mathbf{x}(s)^T \mathbf{w} = \sum_{j=1}^n x_j(s) w_j\),目标函数为\(J(\mathbf{w}) = \mathbb{E}_{\pi} \big[ (v_{\pi}(s) - \mathbf{x}(s)^T \mathbf{w})^2 \big]\)。更新规则很简单,\(\Delta \mathbf{w} = \alpha[v_{\pi}(s) - \hat{v}(s,\mathbf{w})] \mathbf{x}(s)\)。但是,实际上并不存在关于真值\(v_{\pi}(s)\)的预言,所以用MC或TD的target来替代。
对于MC策略评估,\(\Delta \mathbf{w} = \alpha[G_t - \hat{v}(s_t,\mathbf{w})] \mathbf{x}(s_t)\)
对于TD策略评估,\(\Delta \mathbf{w} = \alpha [R_{t+1} + \gamma \hat{v}(s_{t+1},\mathbf{w}) - \hat{v}(s_t,\mathbf{w})] \mathbf{x}(s_t)\)
Linear vs nonlinear VFA:
深度神经网络有多层线性函数,层与层之间有非线性算子
\[f(\mathbf{x}; \theta) = \mathbf{W}_{L+1}^T \sigma \big( \mathbf{W}_L^T \sigma \big( \ldots \sigma \mathbf{W}_1^T \mathbf{x} + \mathbf{b}_1) + \ldots + \mathbf{b}_{L-1} \big) + \mathbf{b}_L \big) \mathbf{b}_{L+1}\]根据链式法则,进行梯度反向传播来更新权重,利用loss function \(L(\theta) = \frac{1}{n} \sum_{i=1}^n [(y^{(i)} - f(\mathbf{x}; \theta)]^2\)。
深度强化学习处于机器学习和人工智能的前沿。深度神经网络可以用来表示价值函数、策略函数(后面将介绍策略梯度方法)、世界模型等。损失函数是用随机梯度下降(SGD)优化的。
存在的挑战有:
DeepMind's Nature paper: Mnih, Volodymyr; et al. (2015). Human-level control through deep reinforcement learning. DQN利用神经网络近似器来表示动作价值函数。DQN使用相同的网络和超参数,在许多雅达利游戏中达到了专业的人类游戏水平。 、
用于雅达利游戏的DQN
利用价值函数近似的Q-learning有两点可能引发问题:
DQN解决这些问题的方法:1. 经验回放 2. 固定Q targets
为了减弱样本之间的相关性,将转移过程\((s_t, a_t, r_t, s_{t+1})\)存储到经验池\(\mathcal{D}\)中
重复以下步骤,实现经验回放: