1.1 什么是强化学习 #
广泛地讲,强化学习是机器通过与环境 (Env
) 交互来实现目标的一种计算方法。机器和 Env
的一轮交互是指,机器在 Env
的一个状态下做一个动作决策,把这个动作作用到 Env
当中,这个 Env
发生相应的改变并且将相应的奖励反馈和下一轮状态传回机器。这种交互是迭代进行的,机器的目标是最大化在多轮交互过程中获得的累积奖励的期望。强化学习用智能体(agent
)这个概念来表示做决策的机器。相比于有监督学习中的 “模型”,强化学习中的 agent
强调机器不但可以感知周围的 Env
信息,还可以通过做决策来直接改变这个 Env
,而不只是给出一些预测信号。
这里,
agent
有 3 种关键要素,即感知、决策和奖励。
1.2 强化学习的环境 #
$$ \text{下一状态} \sim P(\cdot | \text{当前状态}, \text{智能体动作}) $$
1.3 强化学习的目标 #
在上述动态 Env
下,agent
和 Env
每次进行交互时, Env
会产生相应的奖励 (reward
) 信号,其往往由实数标量来表示。这个奖励信号一般是诠释当前状态或动作的好坏的及时反馈信号,好比在玩游戏的过程中某一个操作获得的分数值。整个交互过程的每一轮获得的奖励信号可以进行累加,形成 agent
的整体回报(return
),好比一盘游戏最后的分数值。根据 Env
的动态性我们可以知道,即使 Env
和 agent
策略不变,agent
的初始状态也不变, agent
和 Env
交互产生的结果也很可能是不同的,对应获得的 return
也会不同。因此,在强化学习中,我们关注 return
的期望,并将其定义为价值(value
),这就是强化学习中 agent
学习的优化目标。
1.4 强化学习中的数据 #
有监督学习的任务建立在从给定的数据分布中采样得到的训练数据集上,通过优化在训练数据集中设定的目标函数(如最小化预测误差)来找到模型的最优参数。这里,训练数据集背后的数据分布是完全不变的。
在强化学习中,数据是在 agent
与 Env
交互的过程中得到的。如果 agent
不采取某个决策动作,那么该动作对应的数据就永远无法被观测到,所以当前 agent
的训练数据来自之前 agent
的决策结果。因此, agent
的策略 (policy
) 不同,与 Env
交互所产生的数据分布就不同,如图1-2所示。
具体而言,强化学习中有一个关于数据分布的概念,叫作占用度量(occupancy measure
),其具体的数学定义和性质会在第 3 章讨论,在这里我们只做简要的陈述:归一化的占用度量用于衡量在一个 agent
决策与一个动态 Env
的交互过程中,采样到一个具体的状态动作对(state-action pair
)的概率分布。
占用度量有一个很重要的性质:给定两个 policy
及其与一个动态 Env
交互得到的两个占用度量,那么当且仅当这两个占用度量相同时,这两个 policy
相同。也就是说,如果一个 agent
的 policy
有所改变,那么它和 Env
交互得到的占用度量也会相应改变。
根据占用度量这一重要的性质,我们可以领悟到强化学习本质的思维方式。
- 强化学习的
policy
在训练中会不断更新,其对应的数据分布(即占用度量)也会相应地改变。因此,强化学习的一大难点就在于,agent
看到的数据分布是随着agent
的学习而不断发生改变的。 - 由于奖励建立在
state-action pair
之上,一个policy
对应的价值其实就是一个占用度量下对应的奖励的期望,因此寻找最优策略 (optimal policy
) 对应着寻找最优占用度量。
1.5 强化学习的独特性 #
对于一般的有监督学习任务,我们的目标是找到一个最优的模型函数,使其在训练数据集上最小化一个给定的损失函数。在训练数据独立同分布的假设下,这个优化目标表示最小化模型在整个数据分布上的泛化误差(generalization error
),用简要的公式可以概括为:
$$ \text{最优模型} = \mathcal{arg} \min_{\text{模型}} \mathbb{E}_{(\text{特征,标签}\sim \text{数据分布})}[\text{损失函数(标签, 模型(特征))}] $$
相比之下,强化学习任务的最终优化目标是最大化 agent
的 policy
在和动态 Env
交互过程中的价值。根据 1.4 节的分析,policy
的价值可以等价转换成奖励函数在 policy
的占用度量上的期望,即:
$$ \text{最优策略} = \mathcal{arg} \max_{\text{策略}} \mathbb{E}_{(\text{状态,动作}\sim \text{策略的占用度量})}[\text{奖励函数(状态,动作)}] $$