深度强化学习从入门到秃头--上篇
深度强化学习从入门到秃头–上篇
跟深度强化学习 (Deep Reinforcement Learning, DRL) 相爱相杀已经四年了,如果把本科毕业设计那半年也算上就有四年半了,放在科研这种“长途旅行”上也算是有一段时间了。DRL于我,更多的像是一种解决问题的工具,我在学习这个“工具”的过程中走过弯路踩过坑,也用这个“工具”解决了一些问题,回头望去,还是有些想法的,所以想记录一下,就算是科研回忆录吧。本系列文章计划包含三篇:《上篇》会试图用简洁的语言描述出DRL的轮廓;《中篇》会试图简明扼要地讲述一些重要的DRL算法;《下篇》会分享一些我在实践过程中的“个人经验”。与本系列文章相辅相成的是我站在巨人们 (Cart-Park, MrSyee, ElegantRL“小雅”等) 的肩膀上根据个人需求、习惯写的一个DRL项目,ZRayRL (https://github.com/ZhangRui111/ZRayRL)。最后,欢迎项目共建,欢迎文章讨论,转载请注明出处。
1. 从监督学习到强化学习再到深度强化学习
近十年来,“人工智能” (Artificial Intelligence, AI) 已经从一个有些神秘感的词汇变为随处可见乃至于被滥用的词汇,类似的还有“机器学习” (Machine Learning, ML) 跟“深度学习” (Deep Learning, DL)。在许多不甚严格的语境里不区分这些概念倒也无伤大雅,不过实际上,这几个概念并不是等价的。这里我采用相对主流的方式对这几个概念进行区分,以帮助读者建立一个有层次感的相对准确的认知。“人工智能”也就是为人造物,或者说为机器赋予人类一般的智能。最终极的目标是实现“强人工智能”,又叫“通用人工智能”,“强人工智能”应当可以像人一样进行自主思考,胜任多种任务。目前我们所能看到的成果,无论是图像识别[1][2],游戏AI[3][4],机器翻译[5],都属于“弱人工智能”,可以在某些特定任务上达到人类的水平甚至有着超越人类的表现,但距离“强人工智能”依然很遥远。“机器学习”是实现人工智能的一种方法,言外之意也就是说“机器学习”并不是实现人工智能的唯一一种方法。机器学习的主要特征在于用“算法”来从“数据”中进行学习。而“深度学习”则是实现“机器学习”的一种技术,其主要特征在于利用深度神经网络 (Deep Neural Network, DNN) 来实现对大规模数据的分析和学习。综上,三者的关系是如下图所示的包含关系,即:人工智能 > 机器学习 > 深度学习。

图1. 人工智能,机器学习,深度学习三者的关系
我们从机器学习这一层次讲起,机器学习主要有三大范式:监督学习 (supervised learning)、无监督学习 (unsupervised learning) 和强化学习 (reinforcement learning, RL)。无监督学习有时也叫做“聚类问题”,对其的讨论不在本文范围内。当下来说,监督学习是三大范式中最火热,最成熟,也是成果最多的课题,其在计算机视觉 (Computer Vision, CV),自然语言处理 (Natural Language Processing, NLP),推荐系统 (Recommender System, RS) 等领域有许多成功的应用。监督学习依赖于大量标注过的数据,可以分为训练跟预测两个阶段。在训练阶段,我们要给算法 (比如深度神经网络) 提供数据样本以及对应的标签 (label),算法会通过这些已知的标注过的数据样本来学习并建立数据样本输入跟标签输出之间的映射关系。在预测阶段,算法就可以根据在已知数据上建立的映射关系来对新的没见过的数据样本的标签进行预测。如下图所示,以最常见的基于深度神经网络的图像分类问题为例,在训练阶段,我们会提供给深度神经网络模型许多标注过的有类别标签的图片。训练完成后,在预测阶段,我们向深度神经网络模型展示未被标注的没有类别标签的图片,要求模型对图片的类别标签进行预测。在其他的应用领域,监督学习遵循一样的思路和流程,不同的只是标注数据跟对应的标签的形式发生了变化。比如,在英语到汉语的机器翻译问题中,标注数据变为英文语句,而标签则变成了英文语句意思相同的汉语语句。

图2. 监督学习
大量的标注数据既成就了监督学习又限制了监督学习,首先,大部分数据标注工作是人工完成的,有人参与就有成本,而监督学习的效果往往与标注数据的多少正相关,也就是说“标注数据越多,学习效果越好,但标注成本也越高”。很多专业性很高的任务,比如医疗图像标注,只能由特定领域的经验丰富的专家进行标注,这进一步推高了监督学习的部署成本;其次,监督学习的效果与数据的标注质量息息相关。这里所说的标注质量有两方面的含义,一方面是标签噪声,另一方面在于用于训练的标注数据跟实际测试的数据之间的分布差异 (distribution divergence)。 (1) 标签噪声,即错误标注,比如上图中把“狗”错误标注为“猫”,标签噪声会对监督学习算法造成困扰,当错误标签的数目超过一定比例时,监督学习算法将难以学到正确的映射关系,这一点是不难理解的。考虑到监督学习需要海量的标注数据,在对海量数据样本进行人工标注的过程中,标签噪声是很难完全避免的。即使是在图像分类领域沿用多年的“golden benchmark”,ImageNet也在近年被发现有大量错误标注[6]。 (2) 应用监督学习的一个基本假设是数据满足独立同分布 (idependently and identically distributed, IID),通俗地说,用于训练的标注数据需要有足够好的代表性。举个例子,自动驾驶是一个十分复杂的任务,那么在收集、标注数据的时候就要全面考虑尽可能多的场景,如果只给监督学习算法提供白天的标注数据,那么训练好的算法在夜晚的表现往往不尽如人意。然而,标注数据很难覆盖所有的驾驶场景,晴天/雨天/雪天/雾天,白天/夜晚,城市/乡村,平原/山地等,因此完全基于监督学习的自动驾驶效果不佳。
与监督学习相比,强化学习不依赖于标注数据进行学习。强化学习智能体通过与环境的交互来进行学习,即感知当下的状态并做出行为决策来对环境施加影响,再通过环境给与的反馈来修正自身的行为。强化学习的这种学习方式又被形象地称为“trial and error”,即试错学习。作为机器学习的一种范式,强化学习并没有脱离数据依赖,只是不再依赖于标注过的数据。强化学习与环境的交互过程会产生大量数据,可以认为强化学习智能体一边生成数据,一边利用生成的数据来学习。在强化学习中,指导智能体训练的不再是标签 (label),而是奖励信号 (reward)。与label相比,reward是一种更高维度的指导信号。还是用自动驾驶来举例子,label跟reward都承担了“老师”的功能,但是在基于监督学习的算法里,label会告诉算法在每种情况下要采取的行为,比如往左打方向盘/往右打方向盘/刹车等,而在基于强化学习的算法里,reward这个老师不会直接告诉算法应该怎么做,而是在算法做出某个行为后打一个分数,比如+1/0/-1,而智能体只能通过不断尝试来从reward这个老师手里拿到更高的评分。与label相比,reward更像是一种衡量指标,比如,在自动驾驶这个例子中,reward就可以设置为跟车辆安全行驶的历程成正比例,很明显,相比于监督学习中的label,reward颇有一种“一劳永逸”的优势。通过这种独特的学习方式,强化学习可以避免像监督学习一样依赖于标注数据,但需要注意的是,强化学习并非监督学习的完美替代品,而更像是跟监督学习并列的通向人工智能这一最终目标的不同尝试路径,在当下,它们分别适合解决不同的问题,而没有绝对的优劣之分。比如强化学习虽然摆脱了对标注数据的依赖,但当下的强化学习算法通常需要在编写的模拟环境中进行训练,好的模拟环境的构建也需要成本,而且在模拟环境中训练好的智能体在直接迁移到现实环境中时并不一定能保证相同的效果,这一点也可以是认为上文中分布差异 (distribution divergence) 问题在强化学习领域的不同体现。
经典的强化学习理论并不是近几年的成果,早在上个世纪的1998年,强化学习的两大先驱Richard Sutton 和 Andrew Barto 就发表了有着“强化学习圣经”之称的《Reinforcement Learning: An Introduction》[7],20年后的2018年,该书第二版也问世,是强化学习领域绝对值得一读的经典著作。近年来,好多出圈的科研成果,比如AlphaGo[3],并不是经典的强化学习算法的应用,而是结合了深度学习的强化学习,即深度强化学习,DL+RL=DRL。在我看来,深度学习并没有对强化学习的理论进行明显的革新,深度学习给强化学习带来的巨大推动主要是由于深度神经网络所拥有的对海量数据的拟合、分析能力,从而解放了强化学习的决策能力,实现了从感知到决策的端到端 (end-to-end) 的学习。在本系列文章中,除非特别说明,强化学习即指深度强化学习。
2. 强化学习:在试错中学习 (trial and error)
在强化学习中存在两个主体,智能体 (agent) 和环境 (environment)。其中,智能体表示一个具备执行能力,能够完成某个或某些任务的物体,比如游戏AI,机械臂等。而智能体所能感知到的周围的一切就构成了环境。智能体的目标就是通过对环境的感知做出决策,接收环境的反馈来修正决策,从而完成预定的目标,比如游戏AI通过对游戏屏幕像素点的感知在游戏中做出不同的动作,以达成通关游戏的任务。

图3. 强化学习智能体与环境的交互过程
上面这张出自深度强化学习明星学者David Silver在UCL开设的RL课程[8]的经典图片清晰地展示了智能体跟环境的整个交互过程。在某个时间点,智能体通过对环境状态 的感知做出决策并采取动作,环境会对智能体做出的动作给出反馈,也就是奖励 ,同时,环境也因智能体的行为发生变化,从而进入的新的状态 ,这一过程不断重复就生成了一组时序数据 {},这里的 表示当前序列的终结时刻,即为终结状态,比如游戏AI完成一局游戏,又或者根据游戏规则被淘汰。这样一个完整的序列又被称为episode,智能体正是通过大量episode的数据来进行学习。这一过程可以认为是对人类决策过程的一种近似模拟,实际上,人的大脑是远比计算机更为智能,更为强大的存在,大脑的大部分决策过程就像后台程序一般,在我们有意识的做出思考之前的极短时间就高效完成了。
下面,让我们把这一过程用一种更加严谨的方式呈现出来。对强化学习的建模遵循马尔科夫决策过程 (Markov Decision Process, MDP)。马尔科夫决策过程是离散时间下的时序决策 (sequential decision-making) 问题的数学模型。在马尔科夫决策过程中,系统的下一个状态仅与当前状态有关,而跟之前的状态无关,即。简单来说,未来只取决于当前,与过去无关,做决策只需要考虑当前的状态,因为当前状态某种程度上说已经包含之前的所有必要的历史信息。
一个MDP包含五个基本元素,其中
-
表示状态空间,即所有状态 (state) 的集合;
-
表示动作空间,即所有动作 (action) 的集合;
-
表示奖励函数, 表示智能体处于状态 时采取动作 所能得到的即时奖励 (immediate reward) 的期望,即
-
为状态转移概率矩阵, 表示智能体处于状态 并采取动作 后到达新的状态 的概率,即
-
表示折扣因子 (discount factor),, 用于计算累积奖励时表示我们对未来奖励跟当下奖励的trade-off。
除了MDP,我们还需要了解几个重要概念,策略函数 (policy function) ,回报 (return) 和价值函数 (value function)。策略函数 定义为给定状态下动作的概率分布,即,,策略定义了一个智能体的行为逻辑,是智能体决策的核心。回报 ,也可以叫做“累积奖励”,定义为时刻 之后的所有衰减 (discounted) 的收益之和,即
不难看出,折扣因子 越大, 越看重未来,越小, 越看重当下, 意味着只看中当下的即时奖励而完全不考虑未来的累积奖励。
基于回报的概念,价值函数定义为回报的期望。价值函数分为两种:分别是状态价值函数 和行为价值函数 。
-
状态价值函数 定义为从状态 开始,智能体按照策略进行决策所获得的回报的期望值,即
-
行为价值函数 定义为在状态 时采取动作 所获得的回报的期望值,即
根据价值函数的定义,我们不难得到如下等式,
公式(6)、(7)即贝尔曼 (Bellman) 方程的两种形式,贝尔曼方程把当前状态 的价值、即时奖励 以及后续状态 的价值联系了起来,价值函数这一性质的重要意义将在本文的第三部分予以说明。
至此,我们可以描述强化学习智能体的学习/训练目标,即,找到从状态空间 映射到动作空间 的最优策略,来最大化期望回报。通常,在学习/训练刚开始的时候,智能体的policy表现很差,或者说“频繁犯错”,不过随着训练的进行,在环境反馈reward的指导下,智能体会不断优化自身的policy,最终学会根据感知到的state采取正确的action,从而最大化回报预期,这就是强化学习的独特的学习方式,在试错中学习 (trial and error)。
在MDP的基本元素中,属于环境的固有性质,不受智能体的影响,亦可以看作是环境的准确模型。如果已知,那么环境的变化就是可以预料的,这时,时序决策问题可以采用动态规划 (dynamic programming) 算法来解决。但是在实际问题中,环境的准确模型通常是未知的,这种情况下的时序决策问题便是强化学习大展拳脚的时候了。根据是否对环境建模,强化学习可以分为基于模型的强化学习 (model-based RL) 和无模型的强化学习 (model-free RL)。基于模型的强化学习会先学习一个对环境的建模,再根据学习到的环境模型做策略优化。而无模型的强化学习不会对环境建模,而是根据交互数据直接进行策略优化。本系列文章主要针对后者 (无模型的强化学习) 进行讨论。
3. 殊途同归的两条路线:价值优化和策略优化
正如上文所说,强化学习的核心目标就是找到最优的策略函数policy function,而针对这一目标,强化学习的江湖里主要分为两大流派,“价值流”和“策略流”。“价值流”则讲究借力打力,首先找到最优价值函数,再通过最优价值函数来得到最优的策略函数,这一流派的学名叫做基于价值的强化学习 (value-based RL)。而“策略流”更直接,讲究单刀直入,直接从优化策略函数入手,这一流派的学名叫做基于策略的强化学习 (policy-based RL)。
举个例子,假设我们有一定资金用于投资,可以选择的理财产品有三种,分别是A,B和C。Value-based RL会先学习一个价值函数来告诉我们每个选择的回报预期,比如:
虽然我们没有直接得到策略函数,但是通过最优价值函数也不难间接作出判断,也就是选择回报预期最高的理财产品A。而policy-based RL会学习最优策略函数,然后直接告诉我们投资理财产品A是最佳选择。
科研毕竟是在探索未知,总体趋势是曲折向上的,在到达终点之前没人知道某个路线是不是正确的,也没人知道当前的路线的上限在哪里。强化学习的两大流派虽然路线不同,思路不同,但是殊途同归,最终目标都是相同的,两个流派也都有不错的成果,很难说孰优孰劣。从时间上来说,value-based RL无疑使是发展更早的,“强化学习圣经”《Reinforcement Learning: An Introduction》[7]里的内容以value-based RL为主,开启深度强化学习新时代的研究成果DQN[9]也是value-based RL算法,不过后来policy-based RL也奋起直追,凭借一系列重大成果甚至隐隐有超过value-based RL的趋势。不过总体来说,终点还没达到,盖棺定论为时尚早,就像自监督学习领域,当人们都认为对比学习 (contrastive learning) 才是未来的时候,何凯明大神“啪”的甩出了MAE[10]又把“prior-task”抬起来了,扯远了扯远了。
两大流派都有许多重要的算法,其技术细节各位大可以在相关论文里找到,对两大流派的深入讲解分析也已经有了很多优秀的博客、文章,我也没必要班门弄斧。在了解学习了许多强化学习算法后,我有一种强烈的感觉,那就是各种强化学习算法在思想源头上是极其简洁的,在核心思路上又是极其统一的,只不过在具体的实施细节上有一些差别,本章节的主要目的就是试图呈现这种简洁性跟统一性。我相信如果一开始能理解这种简洁性跟统一性,对于掌握各种强化学习算法都是大有裨益的。
3.1 “价值流”的源头之水
贝尔曼方程指导下的Q-Learning算法
公式(6)、(7)展示了贝尔曼方程的两种形式。贝尔曼方程是value-based RL进行价值函数优化的钥匙,其核心是将某个决策问题在当前状态的价值,通过即时奖励和后续状态的价值来表示。与动态规划的思路类似,贝尔曼方程把一个复杂问题,不断迭代成数个小问题,进而获得“最优化”的解决方案。而value-based RL的源头之水便是贝尔曼方程指导下的Q-Learning算法。Q-Learning算法本身并不复杂,是一种基于表格来进行决策学习的算法,其算法[7]如下所示

图4. Q-Learning算法
算法里的代表学习率 (learning rate),控制每次更新的步长 (学习率通常设置为小于1的值,下文中为了方便演示,我们把学习率设置为1)。 下面我们将通过一个具体的例子过一遍Q-Learning算法。
首先,我们需要构建一个MDP
-
-
-
:
-
:
-
:
Step 1: 在Q-Learning中,通常以表格,或者说矩阵的形式进行记录。横行对应s,纵列对应a,每个单元格对应一个Q值。Q-Learning的第一步就是初始化整个Q表,比如都初始化为0,如下所示:
Q | |||
---|---|---|---|
Step 2: 假设初始状态是,查询Q表可以发现所有动作的Q值都是0,那么随机选取一个动作,假设为。根据奖励函数跟状态转移矩阵可知,,也就是说即时奖励是1,并且进入到状态。查询Q表中对应的行,发现所有动作的最大Q值是0,即,所以,我们可以对$Q(s_1, a_2)进行如下的更新:
然后新的Q表变为:
Q | |||
---|---|---|---|
Step 3: 现在我们处于状态,查询Q表可以发现所有动作的Q值都是0,那么随机选取一个动作,假设为。根据奖励函数跟状态转移矩阵可知,,也就是说即时奖励是0,并且进入到状态。查询Q表中对应的行,发现所有动作的最大Q值是1,即,所以,我们可以对$Q(s_2, a_3)进行如下的更新:
然后新的Q表变为:
Q | |||
---|---|---|---|
Step 4: 现在我们处于状态,查询Q表并按照-贪婪策略 (-greedy policy)选取动作,假设选择。根据奖励函数跟状态转移矩阵可知,,也就是说即时奖励是2,并且进入到状态。查询Q表中对应的行,发现所有动作的最大Q值是0,即,所以,我们可以对$Q(s_1, a_3)进行如下的更新:
然后新的Q表变为:
Q | |||
---|---|---|---|
Step 5: 由于当前状态是终结状态,我们就完成了一次episode。
Step 6: (重复Step 2) 选择新的初始状态,…
不断重复以上步骤并更新Q表里的数值,直到收敛。假设我们最终收敛的Q表如下所示,
Q | |||
---|---|---|---|
那我们就可以在每个状态下选择Q值最大的动作,从而得到最优的策略函数:
Q-Learning的代码实现可以在ZRayRL-Q Learning里找到,有一些本文没有提到的细节。由于篇幅所限,不可能完整呈现Q表收敛的全过程,建议大家自己跑跑看,体会一下整个更新优化至于收敛的过程。
3.2 “策略流”的核心心法
“好”的动作要“发扬”;“坏”的动作要“抑制”

图5. “策略流”的核心心法
上图表示在某一状态时的策略函数,即三个动作的执行概率,不难看出,在最开始时 (左图),,且。此时状态下的预期回报表示为
通过与环境的交互,或者说数据采样,我们知道在状态时采取不同的动作会有不同的“奖励” (注意这里所说的“奖励”不等同于上文中的reward或者value,而是一种抽象的衡量动作好坏的标准,在具体的算法里有不同的形式),正向“奖励”表示动作在当前状态下有“有益”的,需要逐步提高其执行概率,“奖励”越高,提高越多;而负向“奖励”表示动作在当前状态下有“有害”的,需要逐步降低其执行概率,“奖励”越低,降低越多。这样经过多次迭代后,就会形成新的策略函数,,且。此时状态下新的预期“奖励”表示为,
由于策略函数的变化,不难得到,这样,我们就得到了优化的策略函数。
3.3 崛起的“后浪” – Actor-Critic框架
值得注意的是,近年来两大流派相互借鉴融合,诞生出了势头很猛的“后浪”,即Actor-Critic框架。其基本思路是同时学习价值函数跟策略函数,相对于纯粹的“价值流”或者“策略流”,Actor-Critic框架在任务表现跟算法稳定性上都有提升,已经堪称当下最火热的一大流派。
参考 (Reference)
- [1] Deng, Jia, et al. “Imagenet: A large-scale hierarchical image database.” 2009 IEEE conference on computer vision and pattern recognition. Ieee, 2009.
- [2] He, Kaiming, et al. “Deep residual learning for image recognition.” Proceedings of the IEEE conference on computer vision and pattern recognition. 2016.
- [3] Silver, David, et al. “Mastering the game of Go with deep neural networks and tree search.” nature 529.7587 (2016): 484-489.
- [4] Mnih, Volodymyr, et al. “Human-level control through deep reinforcement learning.” nature 518.7540 (2015): 529-533.
- [5] Devlin, Jacob, et al. “Bert: Pre-training of deep bidirectional transformers for language understanding.” arXiv preprint arXiv:1810.04805 (2018).
- [6] Northcutt, Curtis G., Anish Athalye, and Jonas Mueller. “Pervasive label errors in test sets destabilize machine learning benchmarks.” arXiv preprint arXiv:2103.14749 (2021).
- [7] Sutton, Richard S., and Andrew G. Barto. Reinforcement learning: An introduction. MIT press, 2018.
- [8] D. Silver, “Lectures on reinforcement learning,” URL: https://www.davidsilver.uk/teaching/, 2015.
- [9] Mnih, Volodymyr, et al. “Playing atari with deep reinforcement learning.” arXiv preprint arXiv:1312.5602 (2013).
- [10] He, Kaiming, et al. “Masked autoencoders are scalable vision learners.” Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2022.