本文简要介绍了强化学习及其重要概念和术语,并着重介绍了Q-Learning算法、SARSA、DQN和DDPG算法。
1.强化学习入门
通常,强化学习的设置由两部分组成,一个是智能体(agent),另一个是环境(environment)。
强化学习图示
环境指的是智能体执行动作时所处的场景(例如雅达利游戏中的游戏本身),而智能体则表示强化学习算法。环境首先向智能体发送一个状态,然后智能体基于其知识采取动作来响应该状态。之后,环境发送下一个状态,并把奖励返回给智能体。智能体用环境所返回的奖励来更新其知识,对上一个动作进行评估。这个循环一直持续,直到环境发送终止状态来结束这个事件。
大多数强化学习算法遵循这一模式。下面我将简要介绍强化学习中的一些术语,以方便下一节的讨论。
定义
1.动作(A):智能体可以采取的所有可能的行动。
2.状态(S):环境返回的当前情况。
3.奖励(R):环境的即时返回值,以评估智能体的上一个动作。
4.策略(π):智能体根据当前状态决定下一步动作的策略。
5.价值(V):折扣(discount)下的长期期望返回,与R代表的短期返回相区分。Vπ(s)则被定义为策略π下当前状态**s**的期望长期返回值。
6.Q值或行动值(Q):Q值与价值相似,不同点在于它还多一个参数,也就是当前动作a。Qπ(s,a)指当前状态**s**在策略π下采取动作a的长期回报。
无模型(Model-free)vs.基于模型(Model-based)
这里的模型指的是环境的动态模拟,即模型学习从当前状态s0和动作a到下一个状态s1的转移概率T(s1|(s0,a))。如果成功地学习了转移概率,那么智能体将知道给定当前状态和动作时,进入特定状态的可能性。然而,当状态空间和动作空间增长(S×S×A,用于表格设置)时,基于模型的算法就变得不切实际了。
另一方面,无模型算法依赖试错来更新知识。因此,它不需要空间来存储所有状态和动作的组合。下一节讨论的所有算法都属于这一类。
在策略(on-policy)vs.离策略(off-policy)
在策略智能体基于当前动作a学习价值,而离策略智能体基于局部最优的贪心行为(greedyaction)a*学习价值。(我们将在Q-Learning和SARSA算法部分进一步讨论这个问题)
2.各种算法的说明
2.1Q-learning算法
Q-Learning是基于贝尔曼方程(BellmanEquation)的离策略、无模型强化学习算法:
贝尔曼方程
其中,E代表期望,是折扣因子(discountfactor)。我们可以将它重写成Q值的形式:
Q值形式的贝尔曼方程
最优的Q值Q*,可以表示为:
最优Q值
策略迭代法
策略迭代法交替使用策略评估和策略改进。
策略评估会评估从上次策略改进中获得的贪心策略的价值函数V。另一方面,策略改进通过使每个状态的V值最大化的动作来更新策略。更新方程以贝尔曼方程为基础。它不断迭代直到收敛。
策略迭代的伪代码
价值迭代
价值迭代只包含一个部分。它基于最优贝尔曼方程来更新值函数V。
最优贝尔曼方程
价值迭代的伪代码
在迭代收敛之后,通过对所有状态应用最大值函数直接导出最优策略。
注意,这两种方法都需要知道转移概率p,这表明它是一个基于模型的算法。但是,正如我前面提到的,基于模型的算法存在可扩展性问题。那么Q-learning如何解决这个问题呢?
Q-Learning更新方程
α指学习速率(即我们接近目标的速度)。Q-learning背后的思想高度依赖于价值迭代。然而,更新方程被上述公式所取代。因此,我们不再需要担心转移概率。
Q-learning的伪代码
注意,下一个动作a』的选择标准是要能够最大化下一个状态的Q值,而不是遵循当前的策略。因此,Q-Learning属于离策略算法。
2.2状态-动作-奖励-状态-动作(State-Action-Reward-State-Action,SARSA)
SARSA很像Q-learning。SARSA和Q-learning之间的关键区别是SARSA是一种在策略算法。这意味着SARSA根据当前策略执行的动作而不是贪心策略来学习Q值。
SARSA的更新方程
动作a_(t+1)是在当前策略下的下一个状态s_(t+1)执行的动作。
SARSA的伪代码
从上面的伪代码中,你可能会注意到执行了两个动作选择,它们始终遵循当前策略。相比之下,Q-learning对下一个动作没有约束,只要它能最大化下一个状态的Q值就行了。因此,SARSA是一种在策略算法。
2.3深度Q网络(DeepQNetwork,DQN)
Q-learning是一种非常强大的算法,但它的主要缺点是缺乏通用性。如果你将Q-learning理解为在二维数组(动作空间×状态空间)中更新数字,那么它实际上类似于动态规划。这表明Q-learning智能体不知道要对未见过的状态采取什么动作。换句话说,Q-learning智能体没有能力对未见过的状态进行估值。为了解决这个问题,DQN引入神经网络来摆脱二维数组。
DQN利用神经网络来估计Q值函数。网络的输入是当前的动作,而输出是每个动作对应的Q值。
用DQN玩雅达利游戏
2013年,DeepMind将DQN应用于雅达利游戏,如上图所示。输入是当前游戏场景的原始图像,经过包括卷积层和全连接层的多个层,输出智能体可执行的每个动作的Q值。
问题归结为:我们如何训练网络?
答案是基于Q-learning更新方程来训练网络。回想一下Q-learning的目标Q值是:
目标Q值
相当于状态s,代表神经网络里的参数。因此,网络的损失函数可定义为目标Q值与网络Q值输出之间的平方误差。
DQN的伪代码
另外两种技术对于训练DQN也很重要:
2.分离目标网络(SeparateTargetNetwork):目标Q网络与用来估值的网络结构相同。根据上面的伪代码,在每个C步骤,目标网络都被重置为另一个。因此,波动变得不那么严重,带来了更稳定的训练。
2.4深度确定性策略梯度(DeepDeterministicPolicyGradient,DDPG)
虽然DQN在高维问题上取得了巨大的成功,例如雅达利游戏,但动作空间仍然是离散的。然而,许多有趣的任务,特别是物理控制任务,动作空间是连续的。而如果你把动作空间分离得太细来趋近连续空间,你的动作空间就太大了。例如,假设自由随机系统的自由度为10。对于每一个自由度,你把空间分成4个部分,你最终就会有有4=1,048,576个动作。对于这么大的动作空间来说,收敛也是极其困难的。
策略函数
在这里,小写的v表示行动者已经确定的策略。看起来很熟悉对吗?看着像Q-learning的更新方程!TD学习是一种学习如何根据给定状态的未来值来预测价值的方法。Q-learning是TD学习的一种特殊类型,用于学习Q值。
DDPG还从DQN借鉴了经验回放和分离目标网络的思想。DDPG的另一个问题是它很少对动作进行探索。一个解决方案是在参数空间或动作空间中添加噪声。
动作噪声(左),参数噪声(右)
OpenAI这篇博客认为在参数空间上添加噪声比在动作空间上添加要好得多。一个常用的噪声是Ornstein-Uhlenbeck随机过程。