2024-09-19
深度学习
00

目录

什么是强化学习?
强化学习的基础知识
智能体与环境
马尔可夫过程(Markov Process)
马尔可夫奖励过程(Markov Reward Process)
马尔可夫决策过程(Markov Decision Process, MDP)
策略(Policy,$\pi$)
价值函数(Value Function)
贝尔曼方程(Bellman Equation)
状态价值函数的贝尔曼方程
定义
贝尔曼方程
公式解析
直观理解
示例
动作价值函数的贝尔曼方程
定义
贝尔曼方程
公式解析
直观理解
示例
状态价值函数与动作价值函数的关系
最优价值函数与最优策略
强化学习的关键算法
动态规划(Dynamic Programming)
蒙特卡洛方法(Monte Carlo Methods)
时序差分学习(Temporal Difference Learning)
深度强化学习与损失函数
深度Q网络(Deep Q-Network, DQN)
损失函数的定义
改进的损失函数
损失函数代码实现
马尔可夫链详解
马尔可夫链(Markov Chain)
马尔可夫性质
状态转移矩阵
应用
强化学习在游戏中的应用
AlphaGo
OpenAI Five
Atari 游戏
参考资料
结论
参考代码

什么是强化学习?

强化学习(Reinforcement Learning,RL)是一种机器学习范式,旨在研究智能体(Agent)如何在环境(Environment)中通过试错(Trial and Error)学习策略,以最大化累积奖励(Cumulative Reward)。与监督学习和无监督学习不同,强化学习强调通过序列决策实现长期目标。

强化学习的基础知识

智能体与环境

  • 智能体(Agent):在环境中执行动作的实体,学习如何选择最优动作。
  • 环境(Environment):智能体交互的外部系统,提供状态和奖励反馈。
  • 状态(State,SS:环境在某一时刻的具体情况,描述当前情境。
  • 动作(Action,AA:智能体在给定状态下可以采取的行为集合。
  • 奖励(Reward,RR:环境对智能体动作的反馈信号,用于指导学习过程。

马尔可夫过程(Markov Process)

马尔可夫过程是一种具有马尔可夫性质的随机过程,即当前状态完全决定未来状态,与过去状态无关。形式化定义为状态序列 {St}\{S_t\} 满足:

P(St+1=sSt=s)=P(St+1=sSt=s,St1,,S0)P(S_{t+1} = s' | S_t = s) = P(S_{t+1} = s' | S_t = s, S_{t-1}, \dots, S_0)

马尔可夫奖励过程(Markov Reward Process)

在马尔可夫过程的基础上添加奖励函数,形成马尔可夫奖励过程,定义为五元组 S,P,R,γ\langle S, P, R, \gamma \rangle,其中:

  • SS:状态空间
  • PP:状态转移概率矩阵
  • RR:奖励函数,R(s)=E[Rt+1St=s]R(s) = \mathbb{E}[R_{t+1} | S_t = s]
  • γ\gamma:折扣因子,0γ10 \leq \gamma \leq 1

马尔可夫决策过程(Markov Decision Process, MDP)

强化学习通常通过马尔可夫决策过程来建模,MDP 是一个五元组 S,A,P,R,γ\langle S, A, P, R, \gamma \rangle,其中:

  1. 状态空间(State Space,SS:所有可能状态的集合。
  2. 动作空间(Action Space,AA:所有可能动作的集合。
  3. 转移概率(Transition Probability,PP:在状态 ss 下采取动作 aa 后转移到状态 ss' 的概率,表示为 P(ss,a)P(s' | s, a)
  4. 奖励函数(Reward Function,RR:在状态 ss 下采取动作 aa 所获得的即时奖励,表示为 R(s,a)R(s, a)
  5. 折扣因子(Discount Factor,γ\gamma:衡量未来奖励的重要性,取值范围为 0γ10 \leq \gamma \leq 1

策略(Policy,π\pi

策略是智能体在给定状态下选择动作的规则,定义为从状态到动作的映射:

  • 确定性策略(Deterministic Policy)π(s)=a\pi(s) = a,在状态 ss 下总是选择动作 aa
  • 随机性策略(Stochastic Policy)π(as)=P(At=aSt=s)\pi(a|s) = P(A_t = a | S_t = s),在状态 ss 下以概率 π(as)\pi(a|s) 选择动作 aa

价值函数(Value Function)

价值函数评估在某一状态或状态-动作对下,智能体能够获得的期望累积奖励。

  • 状态价值函数(State Value Function,Vπ(s)V^\pi(s)

    Vπ(s)=Eπ[k=0γkRt+k+1St=s]V^\pi(s) = \mathbb{E}_\pi \left[ \sum_{k=0}^{\infty} \gamma^k R_{t+k+1} \Big| S_t = s \right]
  • 动作价值函数(Action Value Function,Qπ(s,a)Q^\pi(s, a)

    Qπ(s,a)=Eπ[k=0γkRt+k+1St=s,At=a]Q^\pi(s, a) = \mathbb{E}_\pi \left[ \sum_{k=0}^{\infty} \gamma^k R_{t+k+1} \Big| S_t = s, A_t = a \right]

贝尔曼方程(Bellman Equation)

贝尔曼方程描述了价值函数的递归性质。

  • 状态价值函数的贝尔曼方程

    Vπ(s)=aAπ(as)[R(s,a)+γsSP(ss,a)Vπ(s)]V^\pi(s) = \sum_{a \in A} \pi(a|s) \left[ R(s, a) + \gamma \sum_{s' \in S} P(s'|s, a) V^\pi(s') \right]
  • 动作价值函数的贝尔曼方程

    Qπ(s,a)=R(s,a)+γsSP(ss,a)aAπ(as)Qπ(s,a)Q^\pi(s, a) = R(s, a) + \gamma \sum_{s' \in S} P(s'|s, a) \sum_{a' \in A} \pi(a'|s') Q^\pi(s', a')

状态价值函数的贝尔曼方程

定义

状态价值函数 ( V^\pi(s) ) 表示在策略 ( \pi ) 下,智能体从状态 ( s ) 开始所能获得的期望累积奖励。贝尔曼方程为状态价值函数提供了一种递归的计算方法。

贝尔曼方程

状态价值函数的贝尔曼方程定义如下:

Vπ(s)=aAπ(as)[R(s,a)+γsSP(ss,a)Vπ(s)]V^\pi(s) = \sum_{a \in A} \pi(a|s) \left[ R(s, a) + \gamma \sum_{s' \in S} P(s'|s, a) V^\pi(s') \right]

公式解析

重写后的公式使用Markdown公式样式如下:

  • Vπ(s)V^\pi(s):在策略 π\pi 下,状态 ss 的价值,即从 ss 开始,遵循策略 π\pi 所能获得的期望累积奖励。
  • aAπ(as)\sum_{a \in A} \pi(a|s):对所有可能的动作 aa 进行加权求和,权重是策略 π\pi 在状态 ss 下选择动作 aa 的概率。
  • R(s,a)R(s, a):在状态 ss 下采取动作 aa 所获得的即时奖励。
  • γ\gamma:折扣因子,介于 0 和 1 之间,用于衡量未来奖励的重要性。较大的 γ\gamma 强调长期奖励,较小的 γ\gamma 强调短期奖励。
  • sSP(ss,a)Vπ(s)\sum_{s' \in S} P(s'|s, a) V^\pi(s'):在状态 ss 下采取动作 aa 后,转移到下一个状态 ss' 的概率 P(ss,a)P(s'|s, a) 与该状态的价值 Vπ(s)V^\pi(s') 的加权和。

直观理解

贝尔曼方程表明,当前状态 ( s ) 的价值等于在该状态下,所有可能动作的预期价值之和。每个动作的预期价值由以下两部分组成:

  1. 即时奖励 ( R(s, a) ):执行动作 ( a ) 后立即获得的奖励。
  2. 未来状态的价值 γsP(ss,a)Vπ(s)\gamma \sum_{s'} P(s'|s, a) V^\pi(s'):执行动作 aa 后,转移到下一个状态 ss' 并继续按照策略 π\pi 行动,所能获得的折扣累积奖励的期望值。

示例

假设有一个简单的迷宫环境,状态空间 S={s1,s2}S = \{s_1, s_2\},动作空间 A={a1,a2}A = \{a_1, a_2\},策略 π\pi 在每个状态下均匀随机选择动作,即 π(a1s)=π(a2s)=0.5\pi(a_1|s) = \pi(a_2|s) = 0.5

假设奖励函数和转移概率如下:

  • R(s1,a1)=5R(s_1, a_1) = 5P(s2s1,a1)=1P(s_2|s_1, a_1) = 1
  • R(s1,a2)=10R(s_1, a_2) = 10P(s2s1,a2)=1P(s_2|s_1, a_2) = 1
  • R(s2,a1)=0R(s_2, a_1) = 0P(s1s2,a1)=1P(s_1|s_2, a_1) = 1
  • R(s2,a2)=0R(s_2, a_2) = 0P(s1s2,a2)=1P(s_1|s_2, a_2) = 1

设折扣因子 γ=0.9\gamma = 0.9,则贝尔曼方程可表示为:

对于状态 s1s_1

Vπ(s1)=0.5[5+0.9Vπ(s2)]+0.5[10+0.9Vπ(s2)]V^\pi(s_1) = 0.5 \cdot [5 + 0.9 \cdot V^\pi(s_2)] + 0.5 \cdot [10 + 0.9 \cdot V^\pi(s_2)]

简化后:

Vπ(s1)=7.5+0.9Vπ(s2)V^\pi(s_1) = 7.5 + 0.9 \cdot V^\pi(s_2)

对于状态 s2s_2

Vπ(s2)=0.5[0+0.9Vπ(s1)]+0.5[0+0.9Vπ(s1)]V^\pi(s_2) = 0.5 \cdot [0 + 0.9 \cdot V^\pi(s_1)] + 0.5 \cdot [0 + 0.9 \cdot V^\pi(s_1)]

简化后:

Vπ(s2)=0.9Vπ(s1)V^\pi(s_2) = 0.9 \cdot V^\pi(s_1)
Vπ(s1)=0.5[5+0.9Vπ(s2)]+0.5[10+0.9Vπ(s2)]V^\pi(s_1) = 0.5 \left[ 5 + 0.9 V^\pi(s_2) \right] + 0.5 \left[ 10 + 0.9 V^\pi(s_2) \right]
Vπ(s2)=0.5[0+0.9Vπ(s1)]+0.5[0+0.9Vπ(s1)]=0.9Vπ(s1)V^\pi(s_2) = 0.5 \left[ 0 + 0.9 V^\pi(s_1) \right] + 0.5 \left[ 0 + 0.9 V^\pi(s_1) \right] = 0.9 V^\pi(s_1)

通过联立方程,可以解得:

Vπ(s1)=0.5×5+0.5×10+0.9×0.9Vπ(s1)V^\pi(s_1) = 0.5 \times 5 + 0.5 \times 10 + 0.9 \times 0.9 V^\pi(s_1)
Vπ(s1)=2.5+5+0.81Vπ(s1)V^\pi(s_1) = 2.5 + 5 + 0.81 V^\pi(s_1)
Vπ(s1)0.81Vπ(s1)=7.5V^\pi(s_1) - 0.81 V^\pi(s_1) = 7.5
0.19Vπ(s1)=7.5Vπ(s1)=39.470.19 V^\pi(s_1) = 7.5 \Rightarrow V^\pi(s_1) = 39.47
Vπ(s2)=0.9×39.47=35.52V^\pi(s_2) = 0.9 \times 39.47 = 35.52

动作价值函数的贝尔曼方程

定义

动作价值函数 Qπ(s,a)Q^\pi(s, a) 表示在策略 π\pi 下,从状态 ss 开始,采取动作 aa 后所能获得的期望累积奖励。贝尔曼方程为动作价值函数提供了一种递归的计算方法。

贝尔曼方程

动作价值函数的贝尔曼方程定义如下:

Qπ(s,a)=R(s,a)+γsSP(ss,a)aAπ(as)Qπ(s,a)Q^\pi(s, a) = R(s, a) + \gamma \sum_{s' \in S} P(s'|s, a) \sum_{a' \in A} \pi(a'|s') Q^\pi(s', a')

公式解析

  • Qπ(s,a)Q^\pi(s, a):在策略 π\pi 下,状态 ss 采取动作 aa 后的价值,即从 ss 开始,首先采取动作 aa,然后遵循策略 π\pi 所能获得的期望累积奖励。
  • R(s,a)R(s, a):在状态 ss 下采取动作 aa 所获得的即时奖励。
  • γ\gamma:折扣因子,介于 0 和 1 之间,用于衡量未来奖励的重要性。
  • sSP(ss,a)\sum_{s' \in S} P(s'|s, a):在状态 ss 下采取动作 aa 后,转移到下一个状态 ss' 的概率。
  • aAπ(as)Qπ(s,a)\sum_{a' \in A} \pi(a'|s') Q^\pi(s', a'):在新状态 ss' 下,按照策略 π\pi 选择动作 aa' 并获得相应价值的期望值。

直观理解

贝尔曼方程表明,动作 aa 在状态 ss 下的价值等于:

  1. 即时奖励 R(s,a)R(s, a):执行动作 aa 后立即获得的奖励。
  2. 未来价值 γsP(ss,a)aπ(as)Qπ(s,a)\gamma \sum_{s'} P(s'|s, a) \sum_{a'} \pi(a'|s') Q^\pi(s', a'):执行动作 aa 后,转移到下一个状态 ss',并按照策略 π\pi 继续行动,所能获得的折扣累积奖励的期望值。

示例

继续使用前面的迷宫环境示例,状态空间 S={s1,s2}S = \{s_1, s_2\},动作空间 A={a1,a2}A = \{a_1, a_2\},策略 π\pi 均匀随机选择动作,即 π(a1s)=π(a2s)=0.5\pi(a_1|s) = \pi(a_2|s) = 0.5

贝尔曼方程为动作价值函数:

Qπ(s1,a1)=5+0.9×sP(ss1,a1)aπ(as)Qπ(s,a)Q^\pi(s_1, a_1) = 5 + 0.9 \times \sum_{s'} P(s'|s_1, a_1) \sum_{a'} \pi(a'|s') Q^\pi(s', a')
Qπ(s1,a1)=5+0.9×1×[0.5Qπ(s2,a1)+0.5Qπ(s2,a2)]Q^\pi(s_1, a_1) = 5 + 0.9 \times 1 \times \left[ 0.5 Q^\pi(s_2, a_1) + 0.5 Q^\pi(s_2, a_2) \right]
Qπ(s1,a2)=10+0.9×1×[0.5Qπ(s2,a1)+0.5Qπ(s2,a2)]Q^\pi(s_1, a_2) = 10 + 0.9 \times 1 \times \left[ 0.5 Q^\pi(s_2, a_1) + 0.5 Q^\pi(s_2, a_2) \right]
Qπ(s2,a1)=0+0.9×1×[0.5Qπ(s1,a1)+0.5Qπ(s1,a2)]Q^\pi(s_2, a_1) = 0 + 0.9 \times 1 \times \left[ 0.5 Q^\pi(s_1, a_1) + 0.5 Q^\pi(s_1, a_2) \right]
Qπ(s2,a2)=0+0.9×1×[0.5Qπ(s1,a1)+0.5Qπ(s1,a2)]Q^\pi(s_2, a_2) = 0 + 0.9 \times 1 \times \left[ 0.5 Q^\pi(s_1, a_1) + 0.5 Q^\pi(s_1, a_2) \right]

通过联立上述方程,可以求解 Qπ(s,a)Q^\pi(s, a) 的值。


状态价值函数与动作价值函数的关系

贝尔曼方程展示了状态价值函数和动作价值函数之间的内在联系。具体而言:

  • 状态价值函数 是在给定策略 π\pi 下,对状态的期望价值评估,它是动作价值函数的加权和:
Vπ(s)=aAπ(as)Qπ(s,a)V^\pi(s) = \sum_{a \in A} \pi(a|s) Q^\pi(s, a)
  • 动作价值函数 提供了在特定状态下采取特定动作的期望价值评估,可以看作是对状态价值函数的进一步细化。

这种关系使得我们可以通过优化动作价值函数来间接优化状态价值函数,进而优化策略 π\pi

最优价值函数与最优策略

  • 最优状态价值函数

    V(s)=maxπVπ(s)V^*(s) = \max_\pi V^\pi(s)
  • 最优动作价值函数

    Q(s,a)=maxπQπ(s,a)Q^*(s, a) = \max_\pi Q^\pi(s, a)

最优策略 π\pi^* 满足:

π(s)=argmaxaQ(s,a)\pi^*(s) = \arg\max_a Q^*(s, a)

强化学习的关键算法

动态规划(Dynamic Programming)

动态规划利用贝尔曼方程,通过迭代计算价值函数和策略,适用于已知环境模型的情况。

蒙特卡洛方法(Monte Carlo Methods)

蒙特卡洛方法基于模拟多个完整的序列(Episode),通过平均化累积奖励来估计价值函数。

时序差分学习(Temporal Difference Learning)

时序差分结合了动态规划和蒙特卡洛方法的特点,通过单步更新来估计价值函数。

  • TD(0) 更新规则

    V(St)V(St)+α[Rt+1+γV(St+1)V(St)]V(S_t) \leftarrow V(S_t) + \alpha [R_{t+1} + \gamma V(S_{t+1}) - V(S_t)]

深度强化学习与损失函数

深度Q网络(Deep Q-Network, DQN)

DQN 使用神经网络近似 Q 函数,解决了高维状态空间下的 Q 学习问题。

损失函数的定义

在深度强化学习中,损失函数用于衡量当前 Q 网络与目标 Q 网络之间的差距,从而指导网络参数的更新。

  • DQN 的均方误差损失函数

    L(θ)=E(s,a,r,s)D[(yQ(s,a;θ))2]L(\theta) = \mathbb{E}_{(s,a,r,s') \sim \mathcal{D}} \left[ \left( y - Q(s, a; \theta) \right)^2 \right]

    其中,目标值 yy 定义为:

    y=r+γmaxaQ(s,a;θ)y = r + \gamma \max_{a'} Q(s', a'; \theta^-)
    • θ\theta:当前 Q 网络的参数。
    • θ\theta^-:目标 Q 网络的参数,定期更新为 θ\theta 的副本。
    • D\mathcal{D}:经验回放缓冲区,存储过往的交互数据。

改进的损失函数

  • 双重 DQN(Double DQN)

    解决 DQN 中的过度估计问题,损失函数的目标值修改为:

    y=r+γQ(s,argmaxaQ(s,a;θ);θ)y = r + \gamma Q(s', \arg\max_{a'} Q(s', a'; \theta); \theta^-)
  • 优先经验回放(Prioritized Experience Replay)

    根据 TD 误差对样本进行加权,提高学习效率。

  • 策略梯度方法的损失函数

    在策略梯度方法中,优化的目标是最大化策略的期望回报,其损失函数通常定义为负的期望回报:

    L(θ)=Eπθ[t=0γtRt+1]L(\theta) = -\mathbb{E}_{\pi_\theta} \left[ \sum_{t=0}^{\infty} \gamma^t R_{t+1} \right]

    使用梯度上升更新参数:

    θθ+αθL(θ)\theta \leftarrow \theta + \alpha \nabla_\theta L(\theta)

损失函数代码实现

以下是 DQN 损失函数的 PyTorch 实现示例,包含了双重 DQN 的改进:

python
import torch import torch.nn as nn import torch.optim as optim # 假设 Q 网络和目标网络已经定义 policy_net = QNetwork(state_size, action_size) target_net = QNetwork(state_size, action_size) optimizer = optim.Adam(policy_net.parameters(), lr=1e-3) criterion = nn.MSELoss() def compute_loss(batch, gamma): states, actions, rewards, next_states, dones = batch # 当前 Q 值 q_values = policy_net(states).gather(1, actions.unsqueeze(1)).squeeze(1) # 使用策略网络选择下一个动作 next_actions = policy_net(next_states).max(1)[1].unsqueeze(1) # 使用目标网络评估下一个状态的 Q 值 next_q_values = target_net(next_states).gather(1, next_actions).squeeze(1) # 目标 Q 值 target_q_values = rewards + gamma * next_q_values * (1 - dones) # 计算损失 loss = criterion(q_values, target_q_values.detach()) return loss # 训练步骤示例 def train_step(batch, gamma): optimizer.zero_grad() loss = compute_loss(batch, gamma) loss.backward() optimizer.step()

马尔可夫链详解

马尔可夫链(Markov Chain)

马尔可夫链是最简单的马尔可夫过程,状态和转移概率构成了整个过程,没有奖励和动作的概念。其定义为二元组 S,P\langle S, P \rangle,其中:

  • SS:有限的状态空间。
  • PP:状态转移概率矩阵,P(ss)P(s'|s) 表示从状态 ss 转移到状态 ss' 的概率。

马尔可夫性质

马尔可夫链满足无记忆性,即未来状态只依赖于当前状态,与过去的状态无关。

状态转移矩阵

状态转移矩阵 PP 是一个 S×S|S| \times |S| 的矩阵,元素 PijP_{ij} 表示从状态 sis_i 转移到状态 sjs_j 的概率。

应用

马尔可夫链被广泛应用于随机过程的建模,如天气预测、股市分析和页面排名算法(如 PageRank)。

强化学习在游戏中的应用

AlphaGo

由 DeepMind 开发的 AlphaGo 通过结合深度神经网络和蒙特卡洛树搜索,成功击败了世界顶级围棋选手。其主要技术亮点包括:

  • 策略网络:预测下一步最有可能的动作。
  • 价值网络:评估当前局面的胜率。
  • 自我对弈:通过与自身对弈生成大量高质量数据。

OpenAI Five

OpenAI Five 是一个能够在《Dota 2》中与人类专业玩家对抗的 AI 系统。其特点包括:

  • 多智能体协作:需要五个智能体协同作战。
  • 长时间序列决策:游戏时间长,状态空间巨大。
  • 策略优化:使用了 PPO(Proximal Policy Optimization)算法。

Atari 游戏

DeepMind 使用 DQN 在多款 Atari 2600 游戏中达到了超越人类的表现。关键技术包括:

  • 像素输入:直接从原始像素图像学习。
  • 经验回放:打破数据相关性,提升学习稳定性。
  • 目标网络:稳定 Q 值的估计,防止震荡。

参考资料

结论

强化学习作为机器学习的重要分支,融合了控制理论、神经网络和优化等多个领域的知识。通过对马尔可夫决策过程、价值函数和策略的深入理解,结合深度学习技术,强化学习在游戏、机器人控制和自动驾驶等领域取得了显著成果。希望本文能帮助读者全面了解强化学习的核心概念和前沿应用,激发进一步探索的兴趣。

参考代码

以下是一个基于策略梯度方法的强化学习算法(REINFORCE)的实现示例:

python
import torch import torch.nn as nn import torch.optim as optim import torch.nn.functional as F class PolicyNetwork(nn.Module): def __init__(self, state_size, action_size): super(PolicyNetwork, self).__init__() self.fc1 = nn.Linear(state_size, 128) self.fc2 = nn.Linear(128, action_size) def forward(self, x): x = F.relu(self.fc1(x)) x = F.softmax(self.fc2(x), dim=1) return x policy_net = PolicyNetwork(state_size, action_size) optimizer = optim.Adam(policy_net.parameters(), lr=1e-3) def select_action(state): state = torch.from_numpy(state).float().unsqueeze(0) probs = policy_net(state) m = torch.distributions.Categorical(probs) action = m.sample() return action.item(), m.log_prob(action) # 存储一次完整的回合 saved_log_probs = [] rewards = [] def finish_episode(gamma): R = 0 policy_loss = [] returns = [] # 计算折扣回报 for r in rewards[::-1]: R = r + gamma * R returns.insert(0, R) returns = torch.tensor(returns) # 标准化 returns = (returns - returns.mean()) / (returns.std() + 1e-5) # 计算损失 for log_prob, R in zip(saved_log_probs, returns): policy_loss.append(-log_prob * R) optimizer.zero_grad() policy_loss = torch.cat(policy_loss).sum() policy_loss.backward() optimizer.step() # 清空存储 del rewards[:] del saved_log_probs[:]
如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:Dong

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC。本作品采用《知识共享署名-非商业性使用 4.0 国际许可协议》进行许可。您可以在非商业用途下自由转载和修改,但必须注明出处并提供原作者链接。 许可协议。转载请注明出处!