value iteration和Q-learning算法

Value iterationQ-learning 构成了强化学习 (Reinforcement Learning, RL) 的两个基本算法。 过去 10 年 RL 中的许多惊人壮举,例如 Atari 的 Deep Q-Learning 或 AlphaGo,都植根于这些基础。 在这篇博客中,我们将介绍 RL 用来描述世界的基础模型,即马尔可夫决策过程 (Markov decision process, MDP),以及执行 RL 的两种算法:value iteration 和 Q-learning。 在这篇博文结束时,您应该能够理解 value iteration 和 Q-learning 之间的联系,以及如何使用这些算法中的任何一种来学习最优策略。

这篇文章分为三个部分:

  • Markov decision processes
  • Value functions and Value iteration
  • Q-learning and Deep Q-learning

Markov Decision Processes

MDP 是一个 5 元组,描述由以下五个元素组成的环境:

  • States: State (通常表示为 s s s,译为状态) 是agent (一般译为智能体) 可以存在的世界上任何预定义的瞬时实例。在本文的其余部分,我们将使用变量 S S S 来表示世界上所有可能状态的集合,其中 s ∈ S s\in S sS 指的是单个状态。
  • Actions: Action (通常表示为 a a a,译为动作)是由agent促成的事件,它可以将其从一种状态转换到另一种状态,前提是这种转换是可能的MDP。 我们将使用 A A A 来表示世界上所有可能的动作的集合,其中 a ∈ A a\in A aA 指的是单个动作。 我们注意到,动作可能没有确定性的后果。 例如,掷硬币可能不会每次都给您相同的结果! 动作具有确定性效果的程度由转移函数 (transition function) 描述。
  • Transition function: Transition function (通常表示为 P P P T T T,译为转移函数) 是一个函数,它定义了在给定当前状态和有动作的情况下移动到特定下一个状态的概率。 转移函数在数学上定义如下, T : S × A × S ′ → [ 0 , 1 ] T:S\times A\times S' \rightarrow [0,1] T:S×A×S[0,1].
  • Reward: Reward function (通常表示为 R R R,译为奖励函数) 指定了一个实数值,该数值定义了处于某个状态、采取一个动作并转移在下一个状态的功效或“好”的衡量标准。 与转移函数类似,奖励定义如下, R : S × A × S ′ → R R:S\times A\times S' \rightarrow \mathbb{R} R:S×A×SR. 请注意,您最终进入的状态可能是无法控制的,因为状态转换可以是动态的。
  • Discount Factor: 可以使用 γ \gamma γ 指定折扣因子 (discount factor),其中 γ ∈ [ 0 , 1 ) \gamma\in [0,1) γ[0,1)。 注意折扣因子非包含上限(即 γ ≠ 1 \gamma\neq 1 γ=1)。 不允许 γ = 1 \gamma = 1 γ=1允许 MDP 在数学上更加稳健。 具体来说,RL 算法的目标通常是随着时间的推移最大化折扣奖励。 考虑无限时间(infinite horizon) MDP(即 MDP 永远不会结束)的情况,其中奖励总是正的。 如果折扣因子 γ \gamma γ 等于 1,那么未来折扣奖励的总和将是无限的,这使得 RL 算法难以收敛(即,知道它们何时可以停止确定在每个状态下应该采取哪些动作)。 因此, g a m m a gamma gamma 的选择对于 RL 算法的成功至关重要,例如 Q-learningvalue iteration

您可能已经阅读过一个称为马尔可夫链(Markov chains)的概念。 虽然本文不会涉及马尔可夫链,但了解马尔可夫链和马尔可夫决策过程之间的区别很重要,因为这两个概念共享马尔可夫属性(markov property)。

从根本上说,马尔可夫链由除了动作、奖励和折扣因子的马尔可夫决策过程的组成部分组成。 马尔可夫链中的agent无法控制他们的动作,是由世界在控制agent的行动。 在马尔可夫决策过程中,agent对结果有影响。 因此,马尔可夫链的转移函数被简单地定义为, T : S × S ′ → [ 0 , 1 ] T:S \times S' \rightarrow [0,1] T:S×S[0,1].

Markov Property: 当下一个状态仅取决于当前状态和当前动作并且独立于之前的状态和动作的历史时,马尔可夫属性成立。

Nota bene: 在某些 MDP 中,您可能会看到初始状态分布 (initial state distribution) 包含在 MDP 中。 虽然这仍然是一个有效的表示,但在本博客中,我们将保持对初始状态分布的不可知论。

Value functions 和 Value Iteration

Value function (通常表示为 V ( s ) V(s) V(s),译为值函数) 是对给定 MDP 和策略 (policy, 描述agent在每个状态中采取哪些动作) 的任何给定状态 s s s 可以收到的预期奖励的度量。正式地,一个策略 (表示为 π : S → [ 0 , 1 ] ∣ A ∣ \pi : S \to [0,1]^{|A|} π:S[0,1]A) 是以状态 s s s 为条件的动作 a ∈ A a\in A aA 的概率分布。这个博客中,我们将考虑确定性的策略 (即对于单个动作 a a a π ( s , a ) = 1 \pi(s,a)=1 π(s,a)=1;而对于其他动作 a ′ ≠ a a'\neq a a=a π ( s , a ′ ) = 0 \pi(s,a')=0 π(s,a)=0)。定义了策略后,我们现在可以在数学上定义策略的值函数:

V π ( s ) = E [ ∑ t = 0 ∞ γ t r t ∣ π , s 0 = s ] V^\pi(s)=E \left[ \sum_{t=0}^{\infty}\gamma^t r_t \vert \pi, s_0=s \right] Vπ(s)=E[t=0γtrtπ,s0=s]

在确定性世界中,这种期望 (expectation) 可以忽略不计。 然而,一般来说,我们将期望包括在内,因为策略(例如,一个agent并不总是喜欢早餐吃同样的东西)和转移函数(例如,交通有多糟糕)可以描述非确定性属性我们要建模的问题。

值迭代 (Value Iteration) 的目标是找到最大化值函数的策略:

π ∗ ( s ) = arg max ⁡ π ∈ Π V π ( s ) , ∀ s ∈ S \pi^*(s)=\argmax_{\pi\in \Pi} V^\pi(s), \forall s\in S π(s)=πΠargmaxVπ(s),sS

在这个方程中 Π \Pi Π 表示 MDP 内所有可能策略的集合, π ∗ ( s ) \pi^*(s) π(s) 是最优策略 (optimal policy) 。值函数方程 (即 V π ( s ) = E [ ∑ t = 0 ∞ γ t r t ∣ π , s 0 = s ] V^\pi(s)=E \left[ \sum_{t=0}^{\infty}\gamma^t r_t \vert \pi, s_0=s \right] Vπ(s)=E[t=0γtrtπ,s0=s]) 是遵循从状态 s s s 开始的策略 π \pi π,直到沿着轨迹 (trajectory) 从 t = 0 t=0 t=0 t = ∞ t=\infty t= 前进无限数量的时间步长 t t t(即,一系列 状态-动作对, ( < s 1 , a 1 > , < s 2 , a 2 > , …   ) (,,\dots) (<s1,a1>,<s2,a2>,)) ,其中累积的奖励 r t r_t rt 通过乘以 γ t \gamma_t γt 进行折扣。 这种折扣奖励的过程意味着,您越往未来走,奖励对处于状态 s s s 的价值或“好”的影响就会越来越小。 调整 γ \gamma γ 允许您定义您的偏好,以优化短期和长期收益 (gain)。期望很重要,因为如前一段所述,转移可能是不确定的,因此期望提供了折扣奖励的标准化估计。

值迭代是一种计算算法,它提供了一种寻找最优策略的方法。 该算法通过迭代确定处于每个状态 s s s 的值来工作,假设agent在该状态下在值函数的当前估计下采取最佳可能行动。 值迭代算法如下图所示。

value iteration和Q-learning算法_第1张图片
该算法迭代地更新每个状态 s s s 的值 V ( s ) V(s) V(s),直到达到一个值的变化可以忽略不计的点,如阈值 Δ 0 \Delta_0 Δ0 所定义的。 请注意该算法中的第 7 行,其中我们考虑状态 s s s、动作 a a a 和结果状态 s ′ s' s,序列为 < s , a , s ′ > <s,a,s>。 第 7 行通过更新给定状态的值来工作,称为值更新,让人想起贝尔曼的最优条件 (Bellman’s optimality condition)。 这个条件说

V ( s ) = max ⁡ a ∈ A E [ R ( s , a , s ′ ) + γ max ⁡ a ′ V ( s ′ ) ] = max ⁡ a ∈ A ∑ s ′ ∈ S T ( s , a , s ′ ) [ R ( s , a , s ′ ) + γ V ( s ′ ) ] V(s)=\max_{a\in A} E \left[ R(s,a,s') + \gamma \max_{a'} V(s') \right] = \max_{a\in A}\sum_{s'\in S}T(s,a,s') \left[ R(s,a,s') + \gamma V(s') \right] V(s)=aAmaxE[R(s,a,s)+γamaxV(s)]=aAmaxsST(s,a,s)[R(s,a,s)+γV(s)]

当这个条件对给定状态 s s s 成立时,我们会在第 8 行发现 t e m p − V ( s ) = 0 temp-V(s)=0 tempV(s)=0。 如果条件对所有状态 s s s 都成立,则值函数已经收敛到最优值函数 V ∗ = V π ∗ V^*=V^{\pi *} V=Vπ,并且可以通过第 11 行简单地提取最优策略 π ∗ \pi^* π 。从某种意义上说,值迭代通过迭代地假装或强制执行(第 7 行)贝尔曼最优条件成立,测量条件是否不成立(第 8 行),并在条件保持在可接受的误差范围内时终止(第 3 行)。

收敛后(即达到可接受的误差水平 Δ < Δ 0 \Delta < \Delta_0 Δ<Δ0),此值迭代返回一个值函数 V ∗ V^* V,它提供对未来预期奖励的估计,当遵循最优策略 π ∗ \pi ^ * π,以及最优策略本身。 为了完全清楚,我们应该注意到返回的实际值函数和策略只是近似最优的,在技术上将它们称为 V ≈ V ∗ V \approx V^* VV π ≈ π ∗ \pi \approx \pi^* ππ 会更准确 。

Nota Bene: 在一些教科书中,贝尔曼的更新方程可能会被另外定义,考虑到奖励函数独立于下一个状态 s ′ s' s,即
V ( s ) ← max ⁡ a R ( s , a ) + ∑ s ′ T ( s , a , s ′ ) γ V ( s ′ ) V(s) \leftarrow \max_a R(s,a)+\sum_{s'} T(s,a,s') \gamma V(s') V(s)amaxR(s,a)+sT(s,a,s)γV(s)

现在让我们定义 Q-value (Q值) 和 Q-function (Q函数)。 与值函数类似,Q 函数是一种价值度量。 然而,与值函数不同的是,Q 函数测量在给定状态下采取特定动作的预期折扣奖励,即 R : S × A → R R:S\times A\rightarrow\mathbb{R} R:S×AR。 我们将 Q-value 称为 Q 函数返回的值。

尽管 Q-learning 是用于估计 Q 值并因此从这些 Q 值优化策略的首选算法,但您也可以修改值迭代算法来求解 Q 值。

value iteration和Q-learning算法_第2张图片

由于引入了 Q 函数,两种算法之间存在两个主要区别。 首先,由于 Q 函数依赖于状态和动作,我们需要遍历所有可能的动作(第 6 行)以及所有状态的集合。 其次,您会注意到更新规则(第 8 行)在合并 Q 函数后发生了变化。 由于对下一个状态 s ′ s' s 的最优 Q 值 Q ( s ′ , a ′ ) Q(s',a') Q(s,a) 的估计取决于下一个动作 a ′ a' a,我们需要替换来自算法 1 的第 7 行的 V ( s ′ ) V(s') V(s) ,替换成算法 2 第 8 行中的 max ⁡ a ′ Q ( s ′ , a ′ ) \max_{a'}Q(s',a') maxaQ(s,a)

我们注意到算法 1 和 2 通常被称为“精确强化学习” (exact RL) 的风格,因为与强化学习中常用的函数逼近算法(即基于深度学习的强化学习)不同,在这里,我们保证能够解决真的、在误差 Δ \Delta Δ 范围内、并且给定足够的计算资源 的最优 Q 值。 “近似”强化学习技术(例如深度强化学习)通常没有这样的保证。

那么,一个需要回答的重要问题是,“为什么我们不在实践中这样做而不是 Q-learning?” 不幸的是,RL 的大多数实际应用都包含太多的状态,甚至无法迭代一次,更不用说算法收敛到可接受的错误阈值所需的大量时间了。 因此,首选函数逼近算法,例如Deep Q-learning。

Q-Learning 和 Deep Q-learning

在讨论 Q-learning 本身之前,让我们定义一个称为贝尔曼残差 (Bellman Residual) 的术语。

δ ( s , a , s ′ ) = [ R ( s , a , s ′ ) + γ max ⁡ a ′ Q ( s ′ , a ′ ) ] − [ Q ( s , a ) ] \delta(s,a,s')=\left[ R(s,a,s') + \gamma\max_{a'}Q(s',a') \right] - \left[ Q(s,a) \right] δ(s,a,s)=[R(s,a,s)+γamaxQ(s,a)][Q(s,a)]

δ \delta δ 表示的贝尔曼残差计算 Q-learning 的测量误差,以描述给定转换序列 < s , a , s ′ > <s,a,s> 时 Q 函数的当前估计有多错误。 当 Q 函数最优时,我们应该发现 Bellman 最优条件的修正形式成立:

Q ( s , a ) = E [ R ( s , a , s ′ ) + γ max ⁡ a ′ ∈ A Q ( s ′ , a ′ ) ] = ∑ s ′ T ( s , a , s ′ ) [ R ( s , a , s ′ ) + γ max ⁡ a ′ ∈ A Q ( s ′ , a ′ ) ] Q(s,a)=E\left[ R(s,a,s')+\gamma \max_{a'\in A} Q(s',a') \right]=\sum_{s'}T(s,a,s')\left[ R(s,a,s') + \gamma\max_{a'\in A} Q(s',a') \right] Q(s,a)=E[R(s,a,s)+γaAmaxQ(s,a)]=sT(s,a,s)[R(s,a,s)+γaAmaxQ(s,a)]

当这个条件成立时,我们应该发现对于所有可能的转换序列 δ ( s , a , s ′ ) = 0 \delta(s,a,s')=0 δ(s,a,s)=0 。 然而,当我们第一次初始化 Q 函数时,就像我们在算法 3 的第 2 行中所做的那样,我们的 Q 函数几乎肯定会出错,并且 δ ( s , a , s ′ ) \delta(s,a,s') δ(s,a,s) 不会等于零。 那么,我们如何改进我们的 Q 函数以使其正确呢?

Q-learning 的工作方式是将我们当前对 Q 函数 Q ( s , a ) Q(s,a) Q(s,a) 的估计与 Q 函数应该是什么的“点估计”“混合”,即 R ( s , a , s ′ ) + γ max ⁡ a ′ Q ( s ′ , a ′ ) R(s, a,s')+\gamma\max_{a'}Q(s',a') R(s,a,s)+γmaxaQ(s,a)。 混合程度由以下等式中的超参数 α \alpha α 控制:

Q ( s , a ) = ( 1 − α ) Q ( s , a ) + α [ R ( s , a , s ′ ) + γ max ⁡ a ′ Q ( s ′ , a ′ ) ] Q(s,a)=(1-\alpha)Q(s,a)+\alpha \left[ R(s,a,s')+\gamma\max_{a'}Q(s',a') \right] Q(s,a)=(1α)Q(s,a)+α[R(s,a,s)+γamaxQ(s,a)]

如果 α = 1 \alpha=1 α=1,那么我们将完全忽略当前对 Q 函数的估计。 如果 α = 0 \alpha=0 α=0,那么我们完全忽略新信息。 在实践中设置 α \alpha α 的一个不错的起点是选择 α = 0.99 \alpha=0.99 α=0.99,这将大部分重点放在 Q 函数的当前估计上。 但是,我们鼓励您尝试实验此参数!

Q-learning 的完整算法如下图所示。

value iteration和Q-learning算法_第3张图片

重要的是要注意,与前面描述的贝尔曼方程版本不同,Q-learning 在其贝尔曼更新方程中不包括转移函数!在 Q-learning 中,我们改为模拟环境中的动作,并利用模拟期间访问的状态(即轨迹)来应用贝尔曼方程。算法中的模拟函数显示了在 Q-learning 中如何对轨迹进行采样。在轨迹的每个时间步中,我们使用 epsilon-greedy 采样策略来选择一个动作。如果随机采样的概率大于预定义的 ϵ \epsilon ϵ 值,则我们贪婪地采样该动作,否则我们从所有动作的空间中随机采样一个动作。选择后,我们模拟该动作并观察该动作的下一个状态和收到的奖励。最后,我们将所有观察到的信息存储到内存缓冲区中,更新当前状态并重复此过程,直到达到最终状态。然后使用从每个模拟计算的轨迹通过 Bellman 更新方程(Q-learning 中的第 6 行)更新 Q 值。

没有转移函数使得 Q-learning 成为一种无模型 (model-free) 的 RL 算法,因为它不需要任何“世界”的先验知识来学习最优策略。 这种无模型特性很重要,因为在实践中,您很少能够访问实际应用程序中所有状态动作对的转移概率。

有了足够的时间和采样轨迹,Q-learning 将能够估计每个状态动作对的最优 Q 值。 然而,按照目前的构造,Q-learning 算法需要一个查找表来查找每个可能的状态动作对,并填写这些值。 现实世界任务中状态动作空间的大小使得维护 Q 值查找表是不可行的。 计算能力不足的一种可能解决方案是使用函数逼近技术,例如 Deep Q-learning。 术语“深度”来自使用神经网络参数化 Q 值。 因此,我们的目标不是学习 Q 值的表,而是转向学习可以为任何给定状态动作对输出 Q 值的神经网络的权重。 使用 Bellman 残差的平方作为我们的损失函数,我们可以应用反向传播算法 (backpropagation)(第 2 周介绍)来学习 Q 网络的权重。

value iteration和Q-learning算法_第4张图片

与 Q-learning 相比,Deep Q-learning 更适合实际应用的三个主要原因是:

  • 内存不足:Q-learning 需要存储所有状态和动作的查找表,导致大多数现实应用对 RAM 的需求不可行。

  • 时间不够:Deep Q-learning 的训练速度通常要快得多,因为它能够结合批量梯度下降 (batched gradient descent) 和自适应优化 (adaptive optimization) 等技术。除此之外,Deep Q-learning 不需要收敛每个状态动作对的 Q 值。

  • 插值:Deep Q-learning 是一种函数逼近算法。因为 Q 网络近似于状态和动作的 Q 值,我们可以假设网络可以对相似的状态和动作对插入 q 值,即 Q ( s , a ) ≈ Q ( s ′ , a ′ ) Q(s,a)\approx Q(s',a') Q(s,a)Q(s,a) 如果 ( s , a ) ≈ ( s ′ , a ′ ) (s,a)\approx (s',a') (s,a)(s,a)。在实践中,Deep Q-learning 比为每个单独的状态-动作对寻求收敛更有效。但是,在某些病理情况 (pathological cases) 下,这可能不是真的,例如,当状态或行为的最轻微变化可能导致截然不同的结果时。

参考资源

[1] Bootcamp Summer 2020 Week 3 – Value Iteration and Q-learning

你可能感兴趣的:(强化学习及深度强化学习,人工智能)