【更新】LLM Interview (2)

字数溢出,不解释

  • 前文:llm interview (1)

文章目录

  • 强化学习专题
    • 1 什么是RL?
    • 2 RL和监督、非监督、深度学习的区别
    • 3 RL中所谓的损失函数与深度学习中的损失函数有何区别?
    • 4 RL历史
    • 5 RL分类
      • 5.1 分类图示
      • 5.2 根据智能体动作选取方式分类
        • 5.2.1 基于价值的方法
        • 5.2.2 基于策略的方法
        • 5.2.3 结合价值和策略的方法(AC)
      • 5.3 总结
    • 6 马尔可夫决策过程(MDP)的理解
      • 6.1 什么是马尔可夫?
      • 6.2 马尔可夫最重要的性质是什么?
      • 6.3 马尔可夫过程是什么?
      • 6.4 马尔可夫决策过程是什么?
    • 8 贝尔曼方程概述
      • 8.1 核心思想:DP与马尔可夫性
      • 8.2 贝尔曼方程表达
      • 8.3 贝尔曼方程的推导
    • 9 矩阵形式贝尔曼方程的解析解难以求解的原因
      • 9.1 原因一:计算复杂度高
      • 9.2 无折现情况下的不可逆性
    • 10 计算贝尔曼方程的常见方法之间的区别
      • 10.1 动态规划(DP)
      • 10.2 蒙特卡罗法(MC)
      • 10.3 时间差分学习(TD)
      • 10.4 直接解析求解
      • 10.5 总结
    • 11 贝尔曼期望方程与贝尔曼最优方程
      • 11.1 期望方程
      • 11.2 最优方程
      • 11.3 核心区别
    • 12 如果数据流不具备马尔可夫性质时,应当如何处理强化学习任务?
    • 13 手写第n步的价值函数的更新公式,当n越来越大时,价值函数的期望和方差分别变大或是变小?
      • 13.1 第n步价值函数更新公式
      • 13.2 当n越来越大时,价值函数的期望和方差分别变大或是变小?
    • 14 on-policy和off-policy的区别
      • 14.1 为什么需要两个策略?
      • 14.2 On-Policy
      • 14.3 Off-Policy
      • 14.3 总结
    • 15 RL中策略随机探索怎样实现?
      • 15.1 写在开始前
      • 15.2 随机探索怎样实现
        • 15.2.1 确定性策略
        • 15.2.2 确定性策略
      • 15.3 Q函数构造的确定性策略及其增加随机性的方式
    • 16 SARSA概述
      • 16.1 更新公式与算法流程
      • 16.2 SARSA的on-policy性质
      • 16.3 SARSA的特点
    • 17 Q-learning概述
      • 17.1 更新公式和算法流程
      • 17.2 Q-learning的off-policy性质
      • 17.3 Q-learning的特点
    • 18 蒙特卡洛方法和时序差分方法是无偏估计吗?谁的方差更大?
      • 18.1 无偏性分析
      • 18.2 方差比较
    • 19 选择策略梯度最大化期望奖励时,应该使用什么方法?
    • 20 怎么理解策略梯度公式?
    • 21 推导PG公式的计算过程(重要推导)
    • 22 在策略梯度优化中,如果采取每个action的奖励都是正的,只是有大有小,会出现什么问题?
    • 23 整个episode里每个 ( s , a ) (s,a) (s,a)对都使用了同一个total reward合适吗?这样公平吗?一场游戏输了那里面的每个step的操作都是失败的吗?一场游戏赢了,中间就不会有失误吗?
      • 23.1 reward-to-go:未来总回报
      • 23.2 discount:回报折现
      • 23.3 总结
    • 24 REINFORCE算法
      • 24.1 基本流程
      • 24.2 优缺点分析
    • 25 什么是重要性采样,使用重要性采样时需要注意什么问题?
      • 25.1 什么是重要性采样?
      • 25.2 使用重要性采样时需要注意什么问题?
    • 26 PPO算法与TRPO算法对比
      • 26.1 PPO
      • 26.2 TRPO


强化学习专题

参考资料:

  • 西湖大学WINDYLab赵世钰课程:

    • 课件:https://github.com/MathFoundationRL/Book-Mathmatical-Foundation-of-Reinforcement-Learning
    • 视频:https://www.bilibili.com/video/BV1sd4y167NS
  • 刘建平的博客:https://www.cnblogs.com/pinard/p/9385570.html


1 什么是RL?

  • RL讨论的问题是智能体怎么在复杂、不确定的环境里面去最大化它能获得的奖励
  • 强化学习由两部分构成:智能体和环境
  • 在强化学习过程中,智能体和环境一直在交互。
    • 智能体在环境里面获取某个状态(state)后,它会利用该状态输出一个动作(action),这个动作也被称为决策(decision)
    • 然后这个动作会在环境中被执行,环境会根据智能体采取的动作,输出下一个状态以及当前这个动作带来的奖励(reward)
    • 智能体的目的就是尽可能多地从环境中获取奖励
  • 一句话总结:Reinforcement learning is learning what to do – how to map situation to actions – so as to maximize a numerical reward signal
    • 《Reinforcement Learning: An Introduction》
    • 强化学习就是学习做什么(即如何把当前地情境映射成动作)才能使得数值化地收益信号最大。

2 RL和监督、非监督、深度学习的区别

AI总结:强化学习、监督学习和无监督学习三者有什么区别呢?

  • 强化学习和监督学习最大的区别是它没有监督学习已经准备好的训练数据输出值的。强化学习只有奖励值,但是这个奖励值和监督学习的输出值不一样,它不是事先给出的,而是延后给出的。比如下面的例子中,走路摔倒了才得到大脑的奖励值。
  • 强化学习和非监督学习的区别。也还是在奖励值这个地方。非监督学习是没有输出值也没有奖励值的,它只有数据特征。同时和监督学习一样,数据之间也都是独立的,没有强化学习这样的前后依赖关系。
  1. 强化学习中所谓的损失函数与深度学习中的损失函数有什么区别呢?
  • 深度学习中的损失函数的目的是使预测值和真实值之间的差距尽可能小。
  • 强化学习中的损失函数的目的是使总奖励的期望尽可能大。

RL、SFT、USFT并列为三种机器学习方法

  1. RL和SFT

    • RL和SFT最大的区别是RL没有SFL的标注好的标签,RL只有reward,但是这个reward和SFT的标签是不一样的,它不是事先给出的,而是延后给出的(看到结果才给出)。
    • RL的每一步与时间顺序先后关系紧密,而SFT的训练数据一般是独立的,没有前后的依赖关系
  2. RL和USFT

    • RL和USFT的区别,也是在奖励值这个地方,非监督学习是没有输出值也没有奖励的,只有数据特征,同时和SFT一样,数据也是独立的。
维度SFTUSFTRL
数据带标签的静态数据无标签的静态数据动态交互生成数据
反馈即时标签反馈无显式反馈延迟奖励信号
目标预测准确率最大化数据结构发现累积奖励最大化
应用分类、归回聚类、降维决策优化、控制
复杂度中(依赖标注质量)低(无需标注)高(需处理长期依赖)

3 RL中所谓的损失函数与深度学习中的损失函数有何区别?

  • DL中的损失函数的目的是使得预测值和真实值之间的差距尽可能小
  • RL中的损失函数的目的是使得奖励的期望尽可能大
维度DLRL
核心目标最小化预测误差最大化累积奖励
数据性质静态、独立同分布动态生成、时序相关
动态性固定(如交叉熵)随策略或环境变化(如Bellman误差动态更新)
优化对象模型输出(如分类概率)策略、价值函数或其组合
依赖环境无需交互、依赖静态数据需与韩晶交互获取奖励信号

4 RL历史

  • 传统强化学习阶段(1950s-2000s):
    • 动态规划(DP):
      • 原理:通过递归分解问题,计算每个状态的最优价值函数(如价值迭代)或直接优化策略(如策略迭代)
      • 改进点:首次将数学规划引入决策过程,但需要完整的环境模型(即状态转移概率矩阵),且计算复杂度高,仅适用于小规模问题。
    • 蒙特卡罗(MC):
      • 原理:通过随机采样轨迹(如玩完一局游戏)来估计价值函数。无需环境模型
      • 改进点:解决了DP依赖模型的问题,但需要完整轨迹且方差大、收敛慢。例如,MC策略迭代通过经验平均更新策略,但数据利用率低。
    • 时序差分(TD):
      • 代表算法:Q学习(1989)和SARSA(1994)
      • 原理:结合DP和MC,通过单步更新,在线学习
      • 改进点:Q学习是免模型的,且支持在线学习,但需离散状态动作空间,难以处理高维问题
  • 策略优化和深度学习阶段(2000s-2010s):
    • 策略梯度:
      • 原理:直接优化策略(如动作概率分布),通过梯度上升最大化期望奖励
      • 改进点:适用于连续动作空间(如机器人控制),但梯度估计方差大、训练不稳定。REINFOCEMENT算法(策略梯度的早期代表,由Williams于1992年提出),通过整条轨迹更新策略,但样本效率低
    • AC系列方法:
      • 原理:结合策略梯度(Actor)和值函数(Critic),Actor负责生成动作,Critic负责评估动作价值
      • 改进点:通过Critic减少梯度方差,提升训练效率,例如A3C(Asynchronous Advantage Actor-Critic)支持并行训练
    • 深度Q网络(DQN,2013):
      • 原理:利用DL近似Q值函数,结合经验回放(存储历史数据)和固定目标网络(稳定训练)
      • 改进点:首次在Atari游戏中超越人类标新啊,解决了高维状态(如图像输入)的表示问题,但动作空间仍需离散。
  • 深度强化学习扩展(2010s-至今):
    • 改进型DQN(解决Q值高估问题):
      • 代表算法:Double DQN(解决Q值高估问题),Dueling DQN(分离状态价值和动作优势)
      • 改进点:通过结构优化提升稳定性和泛化性
    • 策略优化进阶:
      • 代表算法:TRPO(Trust Region Policy Optimization,信任域策略优化)、PPO(Proximal Policy Optimization,近端策略优化)、GRPO(Group Relative Policy Optimization)
    • 模仿学习与逆强化学习
      • 原理:模仿专家行为(如自动驾驶),或从数据反推奖励函数
      • 改进点:减少探索成本,提升安全性和可解释性。

算法改进的核心逻辑:

  • 从依赖模型到免模型:DP依赖环境,Q学习免模型
  • 从离散到连续空间:Q学习离散,PG连续
  • 从低效到高效采样:MC需完整轨迹,TD和AC实现单步更新,经验回放提升数据利用率
  • 从单一到混合:AC结合值函数与PG,深度RL结合DL的特征挖掘能力

5 RL分类

5.1 分类图示

在这里插入图片描述

5.2 根据智能体动作选取方式分类

  • 根据智能体动作选取方式(学习目标不同,目前最主流的方法)

    • 分类:
      • value-based:Q-learning
      • policy-based:TRPO、PPO
      • actor-critic:A3C
  • 根据是否构建模型(环境是否已知):

    • model-free:绝大多数主流算法,如DQN,PPO
    • model-based:动态规划
  • 根据执行策略与评估策略是否一致(学习方式不同)

    • on-policy:SARSA
    • off-policy:Q-learning
  • 根据算法更新机制

    • 单步更新的时序差分(TD):Q-learning
    • 回合更新的蒙特卡洛(MC):REINFORCEMENT
5.2.1 基于价值的方法
  • 核心思想:通过优化价值函数(如状态值函数 V ( s ) V(s) V(s)或动作值函数 Q ( s , a ) Q(s,a) Q(s,a))来间接推导最优策略。智能体选择动作时倾向于最大化未来的累积奖励
  • 代表算法:
    • Q学习(通过贝尔曼方程迭代更新Q表、适用于离散状态动作空间)
    • DQN(用神经网络拟合Q值函数,引入经验回放和目标网络解决训练不稳定性,适用于高维状态空间)
  • 特点与局限性:
    • 优点:采样效率高,收敛稳定,适合离散动作场景
    • 缺点:无法直接处理连续动作空间,策略依赖价值函数估计精度
    • 数学基础:贝尔曼方程驱动价值迭代
5.2.2 基于策略的方法
  • 核心思想:直接优化策略函数 π ( a ∣ s ) \pi(a|s) π(as),即状态到动作的概率分布,无需显式估计价值函数。通过策略梯度上升最大化长期回报
  • 代表算法:
    • REINFORCEMENT:蒙特卡洛采样估计梯度,但高方差导致收敛慢。
    • PPO:通过剪切目标函数限制策略更新幅度,平衡探索与利用,称为工业界主流(如ChatGPT的训练)
    • TRPO:引入KL三度约束策略更新,确保训练稳定性
  • 特点与局限:
    • 优点:支持连续动作空间,策略表达灵活(如概率分布)
    • 缺点:高方差导致样本效率低,易陷入局部最优
    • 数学基础:策略梯度定理
5.2.3 结合价值和策略的方法(AC)
  • 核心思想:融合价值函数和策略函数的优势,通过Actor生成策略,Critic评估动作价值,协同优化策略
  • 代表算法:
    • A2C/A3C:多线程异步更新加速训练,Critic计算优势函数,指导Actor优化
    • SAC(soft AC):引入熵正则化鼓励坍缩,适合复杂连续控制任务(如机器人行走)
  • 特点与局限:
    • 优点:平衡探索与利用,训练效率高,适合复杂任务
    • 缺点:结构复杂,要同时调优A和C网络
    • 数学基础:TD误差联合优化策略与价值函数

5.3 总结

参考:强化学习算法与应用综述-李茹杨.pdf

维度基于价值基于策略A-C方法
策略生成方式间接(贪心选择Q值最大)直接(输出动作概率)策略与价值函数联合优化
动作空间适用性离散连续/离散连续/离散
训练稳定性高(低方差)低(高方差)中等(需平衡两者)
典型算法Q-learning,DQNREINFORCEMENT,PPOA2C,SAC

6 马尔可夫决策过程(MDP)的理解

  • RL中智能体与环境之间的交互,智能体得到环境的状态后,它会采取动作,并把这个采取的动作返还给环境。环境得到智能体的动作后,它会进入下一个状态,把下一个状态传给智能体。
  • 智能体与环境就是这样进行交互,这个交互过程可以通过MDP表示,所以MDP是RL的基本框架

6.1 什么是马尔可夫?

  • 马尔可夫指的是一种无记忆性(Memoryless Property),即未来状态仅依赖于当前状态,而与过去的历史状态无关。

6.2 马尔可夫最重要的性质是什么?

  • 无记忆性是核心性质
  • 这一性质使得建模和计算复杂度大幅降低,无需维护完整历史状态,只需关注当前状态
  • P ( S t + 1 ∣ S t , S t − 1 , . . . S 0 ) = P ( S t + 1 ∣ S t ) P(S_{t+1}|S_t,S_{t-1},...S_0)=P(S_{t+1}|S_t) P(St+1St,St1,...S0)=P(St+1St)

6.3 马尔可夫过程是什么?

  • MP是一个满足马尔可夫性的随机过程,由以下两部分构成:
    • 状态空间
    • 状态转移矩阵

6.4 马尔可夫决策过程是什么?

  • MDP是MP的扩展,引入了智能体动作和奖励机制,用于建模序贯决策问题,核心元素包括
    < S , A , P , R , γ > \left<S,A,P,R,\gamma\right> S,A,P,R,γ

    • S S S:状态空间, { s 0 , . . . , s n } \{s_0,...,s_n\} {s0,...,sn}
    • A A A:动作空间, { a 0 , . . . , a m } \{a_0,...,a_m\} {a0,...,am},实践中动作可能是绑定状态的,不一定每个状态都能采取所有的动作。
    • P P P:转移矩阵, P ( s ′ ∣ s , a ) P(s'|s,a) P(ss,a),表示在状态 s s s执行动作 a a a后转移到状态 s ′ s' s的概率
    • R R R:奖励函数, R ( s , a , s ′ ) R(s,a,s') R(s,a,s),表示上述转移的即时奖励
    • γ \gamma γ:折现因子,未来奖励折现到当前的一个衰减因子
  • MDP的目标是找到最优策略,即从状态到动作的映射,以最大化长期累积奖励,它是RL的理论基础,通过DP、MC、TD等方法求解


8 贝尔曼方程概述

贝尔曼方程是强化学习中的核心数学工具,用于描述状态或状态状态—动作对的价值与其后续状态价值之间的递归关系。

8.1 核心思想:DP与马尔可夫性

  • 递归分解:将长期回报分解为即时奖励(当前动作的收益)和折现后的未来回报(后续状态的期望值),体现一步前瞻的思想
  • 马尔可夫性:未来状态仅依赖当前状态和动作,与历史无关,使得贝尔曼方程成立

8.2 贝尔曼方程表达

V ( s ) = R ( s ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s ) V ( s ′ ) V(s)=R(s)+\gamma\sum_{s'\in S}p(s'|s)V(s') V(s)=R(s)+γsSp(ss)V(s)

  • 贝尔曼方程定义了当前状态与伟来状态之间的关系。未来奖励的折扣总和和加上即时奖励,就组成了贝尔曼方程。

8.3 贝尔曼方程的推导

V ( s ) = E [ G t ∣ s t = s ] = E [ r t + 1 + γ r t + 2 + γ 2 r t + 3 + . . . ∣ s t = s ] = E [ r t + 1 ∣ s t = s ] + γ E [ r t + 2 + γ r t + 3 + γ 2 r t + 4 + . . . ∣ s t = s ] = R ( s ) + γ E [ G t + 1 ∣ s t = s ] = R ( s ) + γ E [ V ( s t + 1 ∣ s t = s ) ] = R ( s ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s ) V ( s ′ ) \begin{align} V(s)&=\mathbb{E}[G_t|s_t=s]\\ &=\mathbb{E}[r_{t+1}+\gamma r_{t+2}+\gamma^2 r_{t+3}+...|s_t=s]\\ &=\mathbb{E}[r_{t+1}|s_t=s]+\gamma\mathbb{E}[r_{t+2}+\gamma r_{t+3}+\gamma^2r_{t+4}+...|s_t=s]\\ &=R(s)+\gamma \mathbb{E}[G_{t+1}|s_t=s]\\ &=R(s)+\gamma\mathbb{E}[V(s_{t+1}|s_t=s)]\\ &=R(s)+\gamma\sum_{s'\in S}p(s'|s)V(s') \end{align} V(s)=E[Gtst=s]=E[rt+1+γrt+2+γ2rt+3+...∣st=s]=E[rt+1st=s]+γE[rt+2+γrt+3+γ2rt+4+...∣st=s]=R(s)+γE[Gt+1st=s]=R(s)+γE[V(st+1st=s)]=R(s)+γsSp(ss)V(s)

分步解析:

  1. 价值函数定义
  2. 展开期望表达式
  3. 分解期望(关键步骤)
  4. 引入即时奖励函数
  5. 递归表达价值函数
  6. 展开状态转移概率

9 矩阵形式贝尔曼方程的解析解难以求解的原因

矩阵形式的贝尔曼方程:
V = R + γ P V V=R+\gamma PV V=R+γPV

  • 贝尔曼方程的矩阵形式可以写成:
    V = ( I − γ P ) − 1 R V=(I-\gamma P)^{-1}R V=(IγP)1R

9.1 原因一:计算复杂度高

  • 贝尔曼方程的解析涉及矩阵求逆,这是最主要的原因
  • 矩阵求逆的时间复杂度为 O ( n 3 ) O(n^3) O(n3),其中 n n n是状态空间的维度。当状态数量庞大时,矩阵求逆在计算上变得不可行。

9.2 无折现情况下的不可逆性

  • γ = 1 \gamma=1 γ=1时(无折现),矩阵 I − P I-P IP的秩不满(存在平稳分布),导致矩阵不可逆。
  • 此时解析解不存在,必须引入额外约束(如固定某个状态的值)才能求解,但这已超出标准解析解的范畴。

10 计算贝尔曼方程的常见方法之间的区别

  • 计算方法主要有:动态规划、蒙特卡罗法、时间差分学习、直接解析求解
  • 它们的核心qu别在于是否依赖环境、更新方式、计算效率以及适用场景

10.1 动态规划(DP)

  • 核心思想:基于模型(已知状态转移概率和奖励函数),通过迭代求解贝尔曼方程。
  • 典型算法:
    • 策略迭代:交替进行策略评估(通过贝尔曼期望方程迭代计算值函数)和策略改进(选择更优动作)
    • 值迭代:直接迭代最优方程,逐步逼近最优值函数
  • 特点:
    • 需要完整的模型信息(model-based)
    • 每次更新考虑所有可能的后续状态(全备份),计算精确但开销大。
    • 适用于小规模状态空间,理论保证收敛
  • 区别:策略迭代显式维护策略并逐步优化,值迭代隐式优化策略。

10.2 蒙特卡罗法(MC)

  • 核心思想:通过无模型的采样轨迹(完整episode),用经验平均回报估计值函数。
  • 实现:基于贝尔曼方程的期望形式,通过采样替代期望计算。
  • 特点:
    • 无需环境模型(model-free)
    • 需要完整轨迹,更新仅在episode结束时执行。
    • 估计无偏但方差高,收敛速度较慢。
    • 适合回合制任务(如游戏通关)。

10.3 时间差分学习(TD)

  • 核心思想:结合动态规划的自举(bootstrapping)和蒙特卡洛的采样,实现在线学习。
  • 典型算法:
    • TD(0):单步更新,用当前奖励和下一状态估计值调整当前值(贝尔曼方程的增量形式)
    • SARSA/Q-learning:基于贝尔曼方程的动作值函数更新(SARSA用贝尔曼期望方程,Q-learning用贝尔曼最优方程)。
  • 特点:
    • 无模型(model-free):无需完整轨迹。
    • 更新方差低但可能有偏(因自举引入误差)。
    • 适用于连续任务和在线学习。

10.4 直接解析求解

  • 核心思想:将贝尔曼方程转化为线性方程组,通过矩阵求逆求解
  • 公式: V = ( I − γ P ) − 1 R V=(I-\gamma P)^{-1}R V=(IγP)1R
  • 特点:精确,但复杂度高,实际应用受限,多用于理论分析。

10.5 总结

方法依赖模型更新方式计算效率适用场景
DP全备份,批量更新低(小规模)小状态空间,精确计算
MC完整轨迹,延迟更新中等回合制任务,无模型场景
TD单步/多步在线更新连续任务,在线学习
解析解矩阵运算极低(极小)理论验证

11 贝尔曼期望方程与贝尔曼最优方程

通俗理解贝尔曼期望方程和最优方程的用处(假设在一个网格世界中):

  • 期望方程:计算某个固定移动策略(如随机移动)下每个格子的得分。
  • 最优方程:直接找到最快到达终点的路经对应的格子得分。

11.1 期望方程

状态值函数:
V π ( s ) = E π [ R t + 1 + γ V π ( s t + 1 ) ∣ s t = s ] V_{\pi}(s)=\mathbb{E}_{\pi}[R_{t+1}+\gamma V_{\pi}(s_{t+1})|s_t=s] Vπ(s)=Eπ[Rt+1+γVπ(st+1)st=s]
动作值函数:
Q π ( s , a ) = E π [ R t + 1 + γ Q π ( s t + 1 , a t + 1 ) ∣ s t = s , a t = a ] Q_{\pi}(s,a)=\mathbb{E}_{\pi}[R_{t+1}+\gamma Q_{\pi}(s_{t+1},a_{t+1})|s_t=s,a_t=a] Qπ(s,a)=Eπ[Rt+1+γQπ(st+1,at+1)st=s,at=a]
解释:

  • 目的:评估固定策略 π \pi π下的状态或动作的长期期望回报
  • 核心思想:
    • V π ( s ) V_{\pi}(s) Vπ(s):在状态 s s s下遵循策略 π \pi π的期望回报
    • Q π ( s , a ) Q_{\pi}(s,a) Qπ(s,a):在状态 s s s下执行动作 a a a后继续遵循 π \pi π的期望回报
    • 递归分解回报:即时奖励 + 未来折现回报的期望
  • 关键点:适用于策略评估(如策略迭代的第一步)

11.2 最优方程

最优状态值函数:
V ∗ ( s ) = max ⁡ ( R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , a ) V ∗ ( s ′ ) ) V^{*}(s)=\max\left(R(s,a)+\gamma\sum_{s'\in S}p(s'|s,a)V^{*}(s')\right) V(s)=max(R(s,a)+γsSp(ss,a)V(s))

  • V ∗ ( s ) V^*(s) V(s):在状态 s s s下,遵循最优策略时能获得的长期累积奖励的最大期望值
  • R ( s , a ) R(s,a) R(s,a):在状态 s s s下执行动作 a a a后获得的即时奖励
  • p ( s ′ ∣ s , a ) p(s'|s,a) p(ss,a):从状态 s s s执行动作 a a a后,转移到新状态 s ′ s' s的概率
  • V ∗ ( s ′ ) V^*(s') V(s):在转移后的状态 s ′ s' s下继续遵循最优策略的累积奖励

最优动作值函数:
Q ∗ ( s , a ) = R ( s , a ) + γ ∑ s ′ ∈ S p ( s ′ ∣ s , a ) max ⁡ a ′ Q ∗ ( s ′ , a ′ ) Q^*(s,a)=R(s,a)+\gamma \sum_{s'\in S}p(s'|s,a)\max_{a'}Q^*(s',a') Q(s,a)=R(s,a)+γsSp(ss,a)amaxQ(s,a)

  • Q ∗ ( s , a ) Q^*(s,a) Q(s,a):在状态 s s s下执行动作 a a a,并从此之后遵循最优策略时,能获得的长期累积奖励的最大期望值。
  • max ⁡ a ′ Q ∗ ( s ′ , a ′ ) \max_{a'}Q^*(s',a') maxaQ(s,a):在转移后的状态 s ′ s' s下,选择最优动作 a ′ a' a以最大化后续累积奖励。

解释:

  • 目的:直接找到最优策略 π ∗ \pi^* π,最大化长期回报。

  • 核心思想:通过 max ⁡ \max max操作直接选择最优动作

  • 关键点:

    • 无需显式策略:通过最大化隐式策略包含最优策略
    • 适用于策略优化,如值迭代,Q-learning

11.3 核心区别

特性期望方程最优方程
目标评估给定策略 π \pi π的表现找到最优策略 π ∗ \pi^* π
操作符对策略和环境求期望( ∑ \sum 对动作取最大值( max ⁡ \max max
是否依赖策略否(隐式包含最优策略)
应用场景策略评估(如策略迭代的第一步)策略优化(如值迭代、Q-Learning)

12 如果数据流不具备马尔可夫性质时,应当如何处理强化学习任务?

常见的解决方案:

  1. 状态表征增强:通过引入历史信息或时序特征,将非马尔可夫数据转换为近似马尔可夫的状态表征

    • 循环神经网络(RNN,LSTM):利用RNN类模型对历史序列建模,生成包含时序依赖关系的状态表征。例如,用LSTM网络将过去多个时间步的状态压缩为当前状态的补充信息。
    • 注意力机制:动态关注关键历史状态,例如Transformer架构通过自注意力机制捕捉长距离依赖关系,筛选对当前决策重要的历史片段。
    • 滑动窗口拼接:将最近k个时刻的状态、动作、奖励拼接为新的状态向量,适用于短期依赖场景。
  2. 模型结构改进:设计适应非马尔可夫性的强化学习算法

    • 记忆增强网络:引入外部记忆模块(如神经图灵机),使智能体能够存储和检索长期历史信息。
    • 分层强化学习:将任务分解为高层策略(规划长期目标)和底层策略(执行具体动作),高层策略可处理非马尔要可夫性。
  3. 转换马尔可夫决策过程:若环境本身具有马尔可夫性质但数据观测不完整,可通过以下方式重建MDP

    • 延迟奖励分配:将多步动作的延迟奖励拆解到相关状态,例如蒙特卡罗法回溯完整轨迹的奖励影响。
    • 状态聚合:将相似历史轨迹归类为同一抽象状态,例如使用聚类算法合并具有相同转移规律的非马尔可夫状态。

13 手写第n步的价值函数的更新公式,当n越来越大时,价值函数的期望和方差分别变大或是变小?

13.1 第n步价值函数更新公式

  • n n n步TD学习中,价值函数的更新公式为:
    V ( S t ) ← V ( S t ) + α [ G t ( n ) − V ( S t ) ] V(S_t)\leftarrow V(S_t)+\alpha[G_t^{(n)}-V(S_t)] V(St)V(St)+α[Gt(n)V(St)]
    其中:

    • V ( S ) V(S) V(S)是状态价值函数, t t t表示从时刻 t t t开始

    • α \alpha α是学习率

    • G t ( n ) G^{(n)}_t Gt(n) n n n步回报,结合了前 n n n步的实际奖励和后 n n n步的状态价值估计

    • n n n步回报 G t ( n ) G_t^{(n)} Gt(n)定义为:
      G t ( n ) = R t + 1 + γ R t + 2 + ⋅ ⋅ ⋅ + γ n − 1 R t + n + γ n V ( S t + n ) G_t^{(n)}=R_{t+1}+\gamma R_{t+2}+\cdot\cdot\cdot+\gamma^{n-1}R_{t+n}+\gamma^n V(S_{t+n}) Gt(n)=Rt+1+γRt+2++γn1Rt+n+γnV(St+n)

      • γ \gamma γ是折现因子
      • 该公式表示从时刻 t t t开始的 n n n步时序差分(n-step TD)回报,由两部分组成:
        • 实际获得的累积奖励:从 t + 1 t+1 t+1 t + n t+n t+n步的即时奖励
        • 未来状态的估计价值:以 γ n \gamma^n γn折现

13.2 当n越来越大时,价值函数的期望和方差分别变大或是变小?

期望:

  • n n n增大时,价值函数的期望会更接近真实值(偏差减小)
  • 因为 n n n步回报中包含了更多实际奖励的累积,减少了对后续状态估计值的依赖,从而降低了估计的偏差。

方差:

  • n n n增大时,价值函数的方差会变大
  • 因为 n n n步回报需要累加更多随机变量(即每一步的奖励),即使有折现因子衰减,随机性的累积仍会导致方差增大

偏差—方差权衡,这是RL中的典型表现:

  • MC无偏但高方差
  • TD(0)( n = 1 n=1 n=1)有偏但低方差


14 on-policy和off-policy的区别

  • 同策略 v.s. 异策略

  • 同轨策略 v.s. 离轨策略‘

在这之前,先搞清楚一个问题:

  • 什么是行为策略(Behavior Policy)和目标策略(Target Policy)
    • 行为策略是用来与环境互动产生数据的策略,即在训练过程中做决策
    • 目标策略在行为策略产生的数据中不断学习、优化,即学习训练晚比后拿去应用的策略。

14.1 为什么需要两个策略?

因为从人类的直观上来看,为了解决强化学习中的探索与利用(exploration and exploitation),我们可以利用一个策略(行为策略)来保持探索性,提供多样化的数据,而不断地优化另一个策略(目标策略)。

14.2 On-Policy

  • 行为策略与目标策略完全相同,算法通过当前策略生成数据,并直接利用这些数据更新该策略。
  • 特点:
    • 数据生成和策略更新高度耦合,需不断用最新策略采样新数据。
    • 好处是简单粗暴,直接利用数据就可以优化其策略,但这样地处理会导致策略其实是在学习一个局部最优,因为On-policy没办法很好地同时保持既探索又利用。

14.3 Off-Policy

  • 行为策略与目标策略相互独立,算法可利用其他策略(如历史策略、随机策略)生成的数据来优化目标策略。
  • 特点:
    • 数据可复用,允许更高效地探索和样本利用。
    • 而Off-Policy将目标策略和行为策略分开,可以在保持探索的同时,更能求到全局最优值。
    • 难点在于,怎么在一个策略下产生的数据优化另一个策略(解决方案:重要性采样

14.3 总结

维度On-PolicyOff-Policy
策略一致性行为策略与目标策略一致行为策略与目标策略分离
数据生成必须通过当前策略实时生成新数据可复用历史数据或其他策略生成的数据
探索与利用通常结合探索(如ε贪心)直接优化目标策略行为策略负责探索(如随机动作)、目标策略专注利用
样本效率较低(需持续采样新数据)较高(支持经验回放、数据复用)
算法复杂度较简单(无需处理策略差异)较复杂(需处理分布偏移,如重要性采样)
收敛稳定性通常更稳定可能因策略差异导致方差较大

15 RL中策略随机探索怎样实现?

15.1 写在开始前

  • 抛开RL算法的细节,几乎所有RL算法都可以抽象成如下的形式:
    • 收集数据:与环境交互,收集学习样本
    • 学习样本:学习收集到的样本中的信息,提升策略
  • RL算法的最终目的是学习每种状态下的最优动作,而在训练过程中,收敛到最优策略 π ∗ \pi^* π前的当前策略 π \pi π并非最优,所以它提供的动作并非最优
  • 为了找到动作空间里潜在的最优动作,算法必须尝试当前策略 π \pi π认为的非最优的动作,因此RL算法中的策略需要有随机探索的能力

15.2 随机探索怎样实现

主要分为确定性策略随机性策略两种:

15.2.1 确定性策略
  • 数学表达:
    • 确定性策略函数表示为: π : S → A \pi:S\rightarrow A π:SA,直接输出状态 s s s对应的具体动作 a a a,例如 a = π ( s ) a=\pi(s) a=π(s)
    • 这意味着对于同一状态,策略始终选择固定动作。
  • 探索方式:由于缺乏内在随机性,需通过外部方法引入探索:
    • ε贪心:以ε概率随机选择动作,其余时间按确定性策略执行
    • 动作噪声注入:在输出动作上迭加高斯噪声,或通过参数扰动
15.2.2 确定性策略
  • 数学表达:
    • 策略表示为条件概率分布 π ( a ∣ s ) \pi(a|s) π(as),输出动作 a a a的概率
    • 它本身带有随机性,获取动作时只需对概率分布进行采样即可
  • 探索方式:内在随机性支持自然探索,如:
    • 概率采样:按分布直接采样动作(如PPO中的概率比裁剪)

15.3 Q函数构造的确定性策略及其增加随机性的方式

Q函数构造确定性策略是一种常见策略形式,即:
π ( s ) = arg ⁡ max ⁡ a ( Q ( s , a ) ) \pi(s)=\arg\max_a(Q(s,a)) π(s)=argamax(Q(s,a))

  • 即选取Q值最大的动作作为最优动作
    • 注意:一般只在动作空间离散的情况下采用这种策略,若动作空间连续则上式需要经过复杂优化求解过程。
  • 可用ε贪心法将上述确定性策略改造成具有探索能力的策略,即以ε概率随机探索,其余实现选取Q值最大的动作。

16 SARSA概述

  • SARSA(state-action-reward-state-action)是一种基于时序差分(TD)的强化学习算法
  • 其核心是通过与环境的交互迭代更新动作价值函数(Q值),最终学习到最优策略。

16.1 更新公式与算法流程

基于五元组 ( S t , A t , R t + 1 , S t + 1 , A t + 1 ) (S_t,A_t,R_{t+1},S_{t+1},A_{t+1}) (St,At,Rt+1,St+1,At+1)进行Q值更新,更新公式为:
Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ Q ( S t + 1 , A t + 1 ) − Q ( S t , A t ) ] Q(S_t,A_t)\leftarrow Q(S_t,A_t)+\alpha[R_{t+1}+\gamma Q(S_{t+1},A_{t+1})-Q(S_t,A_t)] Q(St,At)Q(St,At)+α[Rt+1+γQ(St+1,At+1)Q(St,At)]
其中 R t + 1 + γ Q ( S t + 1 , A t + 1 ) R_{t+1}+\gamma Q(S_{t+1},A_{t+1}) Rt+1+γQ(St+1,At+1)表示当前奖励与下一动作状态对的Q值加权和, α \alpha α是学习率。

具体更新流程:

  • 选择动作:在当前状态 S t S_t St,根据策略(如ε贪心)选择动作 A t A_t At
  • 执行动作:执行动作 A t A_t At,获得奖励 R t + 1 R_{t+1} Rt+1并转移到新状态 S t + 1 S_{t+1} St+1
  • 选择下一动作:在状态 S t + 1 S_{t+1} St+1中,根据相同策略选择下一动作 A t + 1 A_{t+1} At+1
  • 更新Q值:使用五元组 ( S t , A t , R t + 1 , S t + 1 , A t + 1 ) (S_t,A_t,R_{t+1},S_{t+1},A_{t+1}) (St,At,Rt+1,St+1,At+1)更新Q值

16.2 SARSA的on-policy性质

SARSA是一种on-policy算法,原因在于:

  • 行为策略与目标策略一致:
    • 算法在更新Q值时使用的下一动作 A t + 1 A_{t+1} At+1必须基于当前策略(如ε贪心)选择,而非最优动作。
    • 这意味着SARSA的探索(如随机动作)与利用(如选择最大Q值动作)均受同一策略控制。

16.3 SARSA的特点

优点:适应随机环境(因更新依赖实际动作,对随机环境更鲁棒),在线学习(每一步交互后即时更新,无需完整轨迹),安全性(探索与利用的平衡使其在路经规划等任务中更保守可靠)

缺点:收敛速度慢(因兼顾策略的随机性),学习过程较Q-learning保守;且无法应对高维状态(Q表)。


17 Q-learning概述

  • Q-learning是经典的时序差分算法,与SARSA几乎完全相同,只在更新公式上有所区别。
  • 但它具有根本的差异,Q-learning是off-policy算法

17.1 更新公式和算法流程

更新公式为:
Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ max ⁡ A t + 1 Q ( S t + 1 , A t + 1 ) − Q ( S t , A t ) ] Q(S_t,A_t)\leftarrow Q(S_t,A_t)+\alpha[R_{t+1}+\gamma \max_{A_{t+1}} Q(S_{t+1},A_{t+1})-Q(S_t,A_t)] Q(St,At)Q(St,At)+α[Rt+1+γAt+1maxQ(St+1,At+1)Q(St,At)]
这里跟16节中的SARSA更新公式的关键差异就是这里选取的下一步动作是严格使得Q值最大的Q值,这就是完全

具体更新流程:

  • 选择动作:在当前状态 S t S_t St,根据策略(如ε贪心)选择动作 A t A_t At
  • 执行动作:执行动作 A t A_t At,获得奖励 R t + 1 R_{t+1} Rt+1并转移到新状态 S t + 1 S_{t+1} St+1
  • 选择下一动作:在状态 S t + 1 S_{t+1} St+1中,根据相同策略选择下一动作 A t + 1 A_{t+1} At+1
  • 更新Q值:使用四元组 ( S t , A t , R t + 1 , S t + 1 ) (S_t,A_t,R_{t+1},S_{t+1}) (St,At,Rt+1,St+1)更新Q值

和SARSA的区别在于:

  • 步骤3中,目标策略直接选取下一状态 S t + 1 S_{t+1} St+1中所有动作的Q值最大值(贪心),无需实际执行该动作
  • 步骤4中,无需下一动作 A t + 1 A_{t+1} At+1,直接基于理论最优动作更新Q值。

17.2 Q-learning的off-policy性质

Q-learning是典型的off-policy算法,原因如下:

  • 目标策略与行为策略分离:
    • 目标策略:采用贪心策略(最大Q值),即 π ( s ) = arg ⁡ max ⁡ a ( Q ( s , a ) ) \pi(s)=\arg\max_a(Q(s,a)) π(s)=argmaxa(Q(s,a))
    • 行为策略:通常采用以概率 ϵ \epsilon ϵ随机探索, 1 − ϵ 1-\epsilon 1ϵ概率选择最优动作

17.3 Q-learning的特点

优点:

  • 理论收敛性:在满足条件下可保证收敛到最优策略
  • 高效利用探索数据:off-policy允许重用历史经验

缺点:

  • 高估风险:max操作可能导致Q值高估
  • 高维挑战:同SARSA,适合处理离散状态

18 蒙特卡洛方法和时序差分方法是无偏估计吗?谁的方差更大?

蒙特卡罗跟时序差分的区别在于:

  • MC是等待一个完整的episode结束,才开始进行学习
  • TD是在一个episode更新的过程中每一步都会进行学习

18.1 无偏性分析

  • MC:
    • MC通过完整的回合采样计算回报的均值来估计值函数
    • 由于回报 G t G^t Gt是真实价值 V π ( s t ) V^{\pi}(s_t) Vπ(st)的无偏估计(期望等于真实值),因此MC是无偏的
    • 其无偏性依赖于采样足够多的完整轨迹以覆盖所有可能的随机性
  • TD:
    • TD通过单步奖励和后续状态的估计值(自举)更新当前值,例如 TD(0) 的目标为 r t + 1 + γ V ( s t + 1 ) r_{t+1}+\gamma V(s_{t+1}) rt+1+γV(st+1)
    • 由于 V ( s t + 1 ) V(s_{t+1}) V(st+1)本身是估计值且可能包含误差,因此TD的目标会引入误差
    • 即使在收敛后,TD的渐进解也可能因函数近似或环境特定(如非马尔可夫性)存在偏差,因此TD是有偏的。

18.2 方差比较

MC方差更大,时序差分方差更小,这是很直观的事情。MC回合结束才学习,累积的波动就大,TD一步一学,方差自然小。


19 选择策略梯度最大化期望奖励时,应该使用什么方法?

  • 应该使用梯度上升法,因为要让期望奖励越大越好。

  • 梯度上升法在更新参数的时候要添加梯度信息。

  • 直接通过计算策略的期望奖励梯度,沿梯度方向更新参数。

  • 核心公式:
    θ ∗ = θ + α ∇ θ J ( θ ) \theta^*=\theta+\alpha\nabla_\theta J(\theta) θ=θ+αθJ(θ)

  • 其中, ∇ θ J ^ ( θ t ) \nabla_{\theta}\hat J(\theta_t) θJ^(θt)通过MC采样估计,适用于连续动作空间和随机策略。


20 怎么理解策略梯度公式?

策略梯度的公式:
E τ ∼ p θ ( τ ) [ R ( τ ) ∇ log ⁡ p θ ( τ ) ] ≈ 1 N ∑ n = 1 N R ( τ n ) ∇ log ⁡ p θ ( τ n ) = 1 N ∑ n = 1 N ∑ t = 1 T n R ( τ n ) ∇ log ⁡ p θ ( a t n ∣ s t n ) \begin{aligned} &\mathbb{E}_{\tau\sim p_\theta(\tau)}[R(\tau)\nabla\log p_\theta(\tau)]\\ &\approx \frac1N\sum_{n=1}^N R(\tau^n)\nabla\log p_\theta(\tau^n)\\ &=\frac1N\sum_{n=1}^N\sum_{t=1}^{T_n}R(\tau^n)\nabla \log p_\theta(a_t^n|s_t^n) \end{aligned} Eτpθ(τ)[R(τ)logpθ(τ)]N1n=1NR(τn)logpθ(τn)=N1n=1Nt=1TnR(τn)logpθ(atnstn)

  • 其中 τ \tau τ就是一个完整的回合轨迹(如一盘棋的进程)。
  • 实际上期望值 E τ ∼ p θ ( τ ) [ R ( τ ) ∇ log ⁡ p θ ( τ ) ] \mathbb{E}_{\tau\sim p_\theta(\tau)}[R(\tau)\nabla \log p_\theta(\tau)] Eτpθ(τ)[R(τ)logpθ(τ)]无法计算,所以我们用采样的方式采样 N N N τ \tau τ并计算每一个的值,把每一个值加起来,即可得到梯度。
  • p θ ( τ ) p_\theta(\tau) pθ(τ)里面有两项, p ( s t + 1 ∣ s t , a t ) p(s_{t+1}|s_t,a_t) p(st+1st,at)来自环境, p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst)来自智能体
  • p ( s t + 1 ∣ s t , a t ) p(s_{t+1}|s_t,a_t) p(st+1st,at)由环境决定,从而与 θ \theta θ无关,因此 ∇ p ( s t + 1 ∣ s t , a t ) = 0 \nabla p(s_{t+1}|s_t,a_t)=0 p(st+1st,at)=0 ∇ p θ ( τ ) = ∇ log ⁡ p θ ( a t n ∣ s t n ) \nabla p_\theta(\tau)=\nabla \log p_\theta(a_t^n|s_t^n) pθ(τ)=logpθ(atnstn)

进一步解释:

  • 假设在状态 s t s_t st时执行动作 a t a_t at,最后发现轨迹 τ \tau τ的奖励是正的,那我们就要增大这一项的概率,即增大在状态 s t s_t st时执行 a t a_t at的概率。
  • 反之,就要减小这一项的概率。

21 推导PG公式的计算过程(重要推导)

假设智能体与环境交互一次的经验轨迹为 τ \tau τ T T T为终止时刻,即:
τ = s 0 , a 0 , r 1 , s 1 , . . . , a T − 1 , r T , s T \tau = s_0,a_0,r_1,s_1,...,a_{T-1},r_{T},s_T τ=s0,a0,r1,s1,...,aT1,rT,sT
本次交互的累积回报为:
R ( τ ) = r 1 + r 2 + . . . + r T − 1 + r T = ∑ t = 1 T r t R(\tau)=r_1+r_2+...+r_{T-1}+r_T=\sum_{t=1}^Tr_t R(τ)=r1+r2+...+rT1+rT=t=1Trt
本次经验轨迹出现的概率为两部分,来自环境与智能体:
P θ ( τ ) = p ( s 0 ) ⋅ π θ ( a 0 ∣ s 0 ) ⋅ p ( s 1 ∣ s 0 , a 0 ) ⋅ π θ ( a 1 ∣ s 1 ) . . . π θ ( a T − 1 ∣ s T − 1 ) ⋅ p ( s T ∣ s T − 1 , a T − 1 ) = p ( s 0 ) ∏ i = 0 T − 1 π θ ( a i ∣ s i ) ⋅ p ( s i + 1 ∣ s i , a i ) P_\theta(\tau)=p(s_0)\cdot \pi_\theta(a_0|s_0)\cdot p(s_1|s_0,a_0)\cdot\pi_\theta(a_1|s_1)...\pi_\theta(a_{T-1}|s_{T-1})\cdot p(s_T|s_{T-1},a_{T-1})\\ =p(s_0)\prod_{i=0}^{T-1}\pi_\theta(a_i|s_i)\cdot p(s_{i+1}|s_i,a_i) Pθ(τ)=p(s0)πθ(a0s0)p(s1s0,a0)πθ(a1s1)...πθ(aT1sT1)p(sTsT1,aT1)=p(s0)i=0T1πθ(aisi)p(si+1si,ai)
其中 p ( s 0 ) p(s_0) p(s0) p ( s ′ ∣ s , a ) p(s'|s,a) p(ss,a)由环境决定,与 θ \theta θ无关。

真实的累积回报为采样得到累积回报的期望,即累积期望回报为:
R ˉ θ = E τ ∼ P θ ( τ ) [ R τ ] = ∑ τ R ( τ ) P θ ( τ ) \bar R_\theta = \mathbb{E}_{\tau\sim P_\theta(\tau)}[R_\tau]=\sum_\tau R(\tau)P_\theta(\tau) Rˉθ=EτPθ(τ)[Rτ]=τR(τ)Pθ(τ)
R ˉ θ \bar R_\theta Rˉθ关于 θ \theta θ求梯度,得到:
∇ R ˉ θ = ∑ τ R ( τ ) ∇ P θ ( τ ) = ∑ τ R ( τ ) P θ ( τ ) ∇ P θ ( τ ) P θ ( τ ) \nabla \bar R_\theta =\sum_\tau R(\tau)\nabla P_\theta(\tau)=\sum_\tau R(\tau)P_\theta(\tau)\frac{\nabla P_\theta(\tau)}{P_\theta(\tau)} Rˉθ=τR(τ)Pθ(τ)=τR(τ)Pθ(τ)Pθ(τ)Pθ(τ)

由于:
∇ log ⁡ y = ∇ y y \nabla \log y = \frac{\nabla y}{y} logy=yy
之所以用 log ⁡ \log log,是因为连乘很难求解,但是改为 log ⁡ \log log就可以写成连加,就会更便于求解

上面期望符号可以通过采样消除,即 N N N次采样后,得到:
∇ R ˉ θ = 1 N ∑ n = 1 N R ( τ n ) ∇ log ⁡ P θ ( τ n ) \nabla \bar R_\theta = \frac 1N\sum_{n=1}^N R(\tau^n)\nabla \log P_\theta(\tau^n) Rˉθ=N1n=1NR(τn)logPθ(τn)
P θ ( τ ) P_\theta(\tau) Pθ(τ)求对数,得到:
log ⁡ P θ ( τ ) = log ⁡ p ( s 0 ) + log ⁡ π θ ( a 0 ∣ s 0 ) + log ⁡ π θ ( s 1 ∣ s 0 , a 0 ) + log ⁡ π θ ( a 1 ∣ s 1 ) + . . . + log ⁡ π θ ( a T − 1 ∣ s T − 1 ) + log ⁡ p ( s T ∣ s T − 1 , a T − 1 ) = log ⁡ p ( s 0 ) + ∑ t = 0 T − 1 [ log ⁡ π θ ( a t ∣ s t ) + log ⁡ p ( s t + 1 ∣ s t , a T ) ] \log P_\theta(\tau)=\log p(s_0)+\log \pi_\theta(a_0|s_0)+\log \pi_\theta(s_1|s_0,a_0)+\log \pi_\theta(a_1|s_1)+...\\+\log \pi_\theta(a_{T-1}|s_{T-1})+\log p(s_T|s_{T-1},a_{T-1})\\ =\log p(s_0) + \sum_{t=0}^{T-1}[\log \pi_\theta(a_t|s_t)+\log p(s_{t+1}|s_t,a_T)] logPθ(τ)=logp(s0)+logπθ(a0s0)+logπθ(s1s0,a0)+logπθ(a1s1)+...+logπθ(aT1sT1)+logp(sTsT1,aT1)=logp(s0)+t=0T1[logπθ(atst)+logp(st+1st,aT)]
log ⁡ P θ ( τ ) \log P_\theta(\tau) logPθ(τ)关于 θ \theta θ求梯度,由于 p ( s ′ ∣ s , a ) p(s'|s,a) p(ss,a) θ \theta θ无关,因此全部被消掉,得到:
∇ log ⁡ P θ ( τ ) = ∑ t = 0 T − 1 ∇ log ⁡ π θ ( a t ∣ s t ) \nabla \log P_\theta(\tau)=\sum_{t=0}^{T-1}\nabla \log \pi_\theta(a_t|s_t) logPθ(τ)=t=0T1logπθ(atst)
∇ log ⁡ P θ ( τ ) \nabla \log P_\theta(\tau) logPθ(τ)代入 ∇ R ˉ θ \nabla \bar R_{\theta} Rˉθ,得到策略梯度:
∇ R ˉ θ = 1 N ∑ n = 1 N R ( τ n ) ∑ t = 0 T − 1 ∇ log ⁡ π θ ( a t n ∣ s t n ) = 1 N ∑ n = 1 N ∑ t = 0 T − 1 R ( τ n ) ∇ log ⁡ π θ ( a t n ∣ s t n ) \nabla \bar R_\theta = \frac 1N\sum_{n=1}^N R(\tau^n)\sum_{t=0}^{T-1}\nabla\log \pi_\theta(a_t^n|s_t^n)=\frac1N\sum_{n=1}^N\sum_{t=0}^{T-1}R(\tau^n)\nabla\log\pi_\theta(a_t^n|s_t^n) Rˉθ=N1n=1NR(τn)t=0T1logπθ(atnstn)=N1n=1Nt=0T1R(τn)logπθ(atnstn)
至此,我们完成了策略梯度算法的推导,沿着 ∇ R ˉ θ \nabla \bar R_\theta Rˉθ的方向改变策略参数 θ \theta θ,就有机会增加累积期望回报。

注意, R ( τ n ) R(\tau^n) R(τn)表示的是整条轨迹的累积回报,而非即时回报。


22 在策略梯度优化中,如果采取每个action的奖励都是正的,只是有大有小,会出现什么问题?

  • 出现的问题:奖励都为正,每个变换都会概率上升。

  • 为了防止所有奖励都为正,从而导致每一个状态和动作的变换,都会使得每一个变换的概率上升,可以把奖励减去一项 b b b,称 b b b为基线。

  • 当减去 b b b以后,就可以让奖励 R ( τ n ) − b R(\tau^n)-b R(τn)b有正有负

    • 如果总奖励 R ( τ n ) > b R(\tau^n)>b R(τn)>b,就让它的概率上升。
    • 如果总奖励 R ( τ n ) < b R(\tau^n)<b R(τn)<b,就算它是正的,值很小也是很不好的,就需要让它的概率下降,让采取这个动作的奖励下降,这样也是符合常理的。使用基线会让本来奖励很大的动作奖励变小,降低更新速率。
  • 公式变化:
    ∇ R ˉ θ = 1 N ∑ n = 1 N ∑ t = 0 T − 1 [ R ( τ n ) − b ] ∇ log ⁡ π θ ( a t n ∣ s t n ) \nabla \bar R_\theta =\frac 1N\sum_{n=1}^N\sum_{t=0}^{T-1}[R(\tau^n)-b]\nabla \log \pi_\theta(a_t^n|s_t^n) Rˉθ=N1n=1Nt=0T1[R(τn)b]logπθ(atnstn)


23 整个episode里每个 ( s , a ) (s,a) (s,a)对都使用了同一个total reward合适吗?这样公平吗?一场游戏输了那里面的每个step的操作都是失败的吗?一场游戏赢了,中间就不会有失误吗?

23.1 reward-to-go:未来总回报

  • ∇ log ⁡ π θ ( a t n ∣ s t n ) \nabla \log \pi_\theta(a_t^n|s_t^n) logπθ(atnstn)前面的 ( R ( τ ) − b ) (R(\tau)-b) (R(τ)b)看作是它的权重,表征了动作 a a a的好坏

  • 这个权重原先是整个轨迹上奖励的总和,现在改成从某个时刻 t t t开始,一直到游戏结束得到的所有奖励的总和。

  • 也就是说计算某个 ( s , a ) (s,a) (s,a)对的奖励时,不再是把正常游戏得到的奖励全部加起来,而是之计算从这个动作执行以后得到的奖励。

  • 直观上也比较容易理解:

    • 因为这场游戏在执行这个动作之前发生的事情是与执行这个动作没有关系的;
    • 所以在执行这个动作之前得到的奖励都不能算是这个动作的贡献(MC);
    • 我们把执行这个动作以后发生的所有奖励加起来,才是这个动作真正的贡献;

    ∇ R ˉ θ ≈ 1 N ∑ n = 1 N ∑ t = 0 T − 1 ( ∑ t ′ = t T − 1 r t ′ n − b ) ∇ log ⁡ π θ ( a t n ∣ s t n ) \nabla \bar R_\theta \approx\frac 1N\sum_{n=1}^N\sum_{t=0}^{T-1}\left(\sum_{t'=t}^{T-1}r_{t'}^n-b\right)\nabla \log \pi_\theta(a_t^n|s_t^n) RˉθN1n=1Nt=0T1(t=tT1rtnb)logπθ(atnstn)

23.2 discount:回报折现

  • 进一步,在未来的奖励中引入折现因子。

  • 为什么要把未来的奖励做折现:

    • 因为虽然在某一时刻,执行某一动作,会影响接下来所有的结果(有可能在某一个时刻执行的动作,接下来得到的奖励都是这个动作的功劳),但一般情况下,时间拖得越久,该动作的影响力就越小。

    ∇ R ˉ θ ≈ 1 N ∑ n = 1 N ∑ t = 0 T − 1 ( ∑ t ′ = t T − 1 γ t ′ − t r t ′ n − b ) ∇ log ⁡ π θ ( a t n ∣ s t n ) \nabla \bar R_\theta \approx\frac 1N\sum_{n=1}^N\sum_{t=0}^{T-1}\left(\sum_{t'=t}^{T-1}\gamma^{t'-t}r_{t'}^n-b\right)\nabla \log \pi_\theta(a_t^n|s_t^n) RˉθN1n=1Nt=0T1(t=tT1γttrtnb)logπθ(atnstn)

  • 折现因子 γ \gamma γ一般取0.9或者0.99


23.3 总结

上面两个问题,其实是策略梯度优化的技巧:

  1. 给策略梯度增加baseline
  2. 给策略梯度分配合适的分数

同时还引出一个核心知识点:优势函数 A A A

  • 优势函数取决于状态和动作,即我们需计算的是在某一状态 s s s采取某一个动作 a a a的时候,优势函数有多大
  • 优势函数通过量化动作的相对价值,成为RL算法的核心组件
  • 它在降低方差、指导策略优化及适应复杂环境等方面很重要

24 REINFORCE算法

策略梯度定理是REINFORCEMENT的理论基础,梯度为:
∇ R ˉ θ = 1 N ∑ n = 1 N R ( τ n ) ∑ t = 0 T − 1 ∇ log ⁡ π θ ( a t n ∣ s t n ) = 1 N ∑ n = 1 N ∑ t = 0 T − 1 R ( τ n ) ∇ log ⁡ π θ ( a t n ∣ s t n ) \nabla \bar R_\theta = \frac1N\sum_{n=1}^N R(\tau^n)\sum_{t=0}^{T-1}\nabla\log\pi_\theta(a_t^n|s_t^n)=\frac1N\sum_{n=1}^N\sum_{t=0}^{T-1}R(\tau^n)\nabla\log\pi_\theta(a_t^n|s_t^n) Rˉθ=N1n=1NR(τn)t=0T1logπθ(atnstn)=N1n=1Nt=0T1R(τn)logπθ(atnstn)

24.1 基本流程

  • 首先需要一个策略模型来输出动作概率
  • 输出动作概率后,通过sample()函数得到一个具体的动作
  • 与环境交互后,可以得到整个回合的数据
  • 得到回合数据后,再去执行learn()函数
  • learn()函数里面,就可以用这些数据去构造损失函数,“扔”给优化器优化,更新策略模型。

24.2 优缺点分析

优点:

  • 简单易实现:无需环境模型,适合离散和连续动作空间。
  • 无偏估计:蒙特卡罗法提供理论上的无偏梯度。

缺点:

  • 高方差:依赖完整轨迹的回报,导致梯度估计方差大,收敛慢。
  • 在线策略限制:每次更新需重新采样数据,样本效率低。

25 什么是重要性采样,使用重要性采样时需要注意什么问题?

  • 在强化学习中,重要性采样(Importance Sampling)是一种通过调整样本权重来修正不同策略分布差异的技术。它主要用于解决异策略(off-policy)学习中的核心问题:如何利用行为策略(Behavior Policy)采集的数据,准确估计目标策略(Target)的性能?

25.1 什么是重要性采样?

  1. 基本概念:

    • 在异策略学习中,行为策略 b ( a ∣ s ) b(a|s) b(as)用于生成动作样本,而目标策略 π ( a ∣ s ) \pi(a|s) π(as)需要被评估或优化。
    • 重要性采样通过计算重要性权重(即概率比率 π ( a ∣ s ) b ( a ∣ s ) \frac{\pi(a|s)}{b(a|s)} b(as)π(as)),调整样本权重,使行为策略的样本能够用于估计目标策略的期望值。
  2. 数学形式:

    • 单步重要性权重:
      ρ t = π ( a t ∣ s t ) b ( a t ∣ s t ) \rho_t=\frac{\pi(a_t|s_t)}{b(a_t|s_t)} ρt=b(atst)π(atst)

    • 多步轨迹的权重为各步权重的乘积:
      ρ 0 : T = ∏ t = 0 T π ( a t ∣ s t ) b ( a t ∣ s t ) \rho_{0:T}=\prod_{t=0}^T\frac{\pi(a_t|s_t)}{b(a_t|s_t)} ρ0:T=t=0Tb(atst)π(atst)

  3. 重要性采样的两种形式:

    • 普通重要性采样(Ordinary IS):即除以 n n n
      V π ( s ) ≈ 1 n ∑ i = 1 n ρ 0 : T ( i ) G ( i ) V^\pi(s)\approx \frac1n\sum_{i=1}^n\rho_{0:T}^{(i)}G^{(i)} Vπ(s)n1i=1nρ0:T(i)G(i)

    • 加权重要性采样(Weighted IS):即除以每一次重要性采样的求和
      V π ( s ) ≈ ∑ i = 1 n ρ 0 : T ( i ) G ( i ) ∑ i = 1 n ρ 0 : T ( i ) V^\pi(s)\approx \frac{\sum_{i=1}^n\rho_{0:T}^{(i)}G^{(i)}}{\sum_{i=1}^n\rho_{0:T}^{(i)}} Vπ(s)i=1nρ0:T(i)i=1nρ0:T(i)G(i)

25.2 使用重要性采样时需要注意什么问题?

在重要性采样中将 b b b替换为任意的 π \pi π,但是本质上要求两者的分布不能差得太多,即使我们补偿了不同数据分布的权重 π ( x ) b ( x ) \frac{\pi(x)}{b(x)} b(x)π(x)。数学期望转换公式为:
E x ∼ π [ f ( x ) ] = E x ∼ b [ f ( x ) π ( x ) b ( x ) ] \mathbb{E}_{x\sim\pi}[f(x)]=\mathbb{E}_{x\sim b}\left[f(x)\frac{\pi(x)}{b(x)}\right] Exπ[f(x)]=Exb[f(x)b(x)π(x)]

  • 当采样次数足够多且分布相差不大时,最终的结果会是较为接近的
  • 但是通常我们不会取理想数量的采样数据,所以如果两者的分布相差较大,最后的结果的方差将会很大
  • 解决方法:
    • 使用加权重要性采样降低方差
    • 截断权重(如PPO中的clip机制)
    • 限制轨迹长度(减少多步乘积的影响)

26 PPO算法与TRPO算法对比

  • 我们可以通过重要性采样把同策略换成异策略
  • 但重要性采样有一个问题
    • 如果目标策略行为策略相差太多,即这两个分布相差太多,重要性采样的结果就不会很好
  • PPO和TRPO都是为了解决这个问题

26.1 PPO

paper

作者:John Schulman,主页在http://joschu.net

TRPO和PPO都是他提出的,Proximal policy optimization algorithm 和 Trust region policy Optimization,论文名称也是如此,分别在2015和2017年

  • PPO是OpenAI在2017年提出的一种RL算法,旨在解决传统策略梯度方法中因更新步长不当导致的训练不稳定问题

  • 其核心是通过限制策略更新的幅度,确保新策略和旧策略之间的差异不会过大,从而平衡探索与利用

  • PPO公式:
    J θ ′ ( θ ) = E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] J^{\theta'}(\theta)=\mathbb{E}_{(s_t,a_t)\sim\pi_{\theta'}}\left[\frac{p_\theta(a_t|s_t)}{p_{\theta'}(a_t|s_t)}A^{\theta'}(s_t,a_t)\right] Jθ(θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)]

    • J θ ′ ( θ ) J^{\theta'}(\theta) Jθ(θ)括号里的 θ \theta θ代表我们要去优化的参数, θ ′ \theta' θ是指我们用 θ ′ \theta' θ做示范,就是现在真正在环境交互的是 θ ′ \theta' θ

    • θ ′ \theta' θ与环境交互,采样出 s t , a t s_t,a_t st,at后,去计算 s t , a t s_t,a_t st,at的优势 A θ ′ ( s t , a t ) A^{\theta'}(s_t,a_t) Aθ(st,at)(即从采样的结果来估测 A θ ′ ( s t , a t ) A^{\theta'}(s_t,a_t) Aθ(st,at)

    • 最后用它乘以重要性采样比 p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) \frac{p_\theta(a_t|s_t)}{p_{\theta'}(a_t|s_t)} pθ(atst)pθ(atst)
      J P P O θ ′ ( θ ) = J θ ′ ( θ ) − β K L ( θ , θ ′ ) J^{\theta'}_{PPO}(\theta)=J^{\theta'}(\theta)-\beta KL(\theta,\theta') JPPOθ(θ)=Jθ(θ)βKL(θ,θ)

  • PPO需要优化目标函数 J θ ′ ( θ ) J^{\theta'}(\theta) Jθ(θ),但是这个目标函数又牵涉到重要性采样

  • 在做重要性采样时, p θ ( a t ∣ s t ) p_\theta(a_t|s_t) pθ(atst)不能与 p θ ′ ( a t , s t ) p_{\theta'}(a_t,s_t) pθ(at,st)相差太多,否则效果不好

  • 所以在训练时,多加一个约束,KL散度用于衡量两者相似度

  • 我们希望在训练过程中,学习出的 θ \theta θ θ ′ \theta' θ越相似越好

  • 注意:虽然PPO的优化目标涉及到IS,但其只用到了上一轮策略 θ ′ \theta' θ的数据,PPO目标函数中加入了KL散度约束,行为策略 θ ′ \theta' θ和目标策略 θ \theta θ非常接近,PPO的行为策略和目标策略可以认为是同一策略,因此PPO是同策略算法(???)


26.2 TRPO

paper

PPO的前身TRPO公式:
J T R P O θ ′ ( θ ) = E ( s t , a t ) ∼ π θ ′ [ p θ ( a t ∣ s t ) p θ ′ ( a t ∣ s t ) A θ ′ ( s t , a t ) ] s . t . K L ( θ , θ ′ ) < δ J^{\theta'}_{TRPO}(\theta)=\mathbb{E}_{(s_t,a_t)\sim\pi_{\theta'}}\left[\frac{p_\theta(a_t|s_t)}{p_{\theta'}(a_t|s_t)}A^{\theta'}(s_t,a_t)\right]\\ s.t. KL(\theta,\theta')<\delta JTRPOθ(θ)=E(st,at)πθ[pθ(atst)pθ(atst)Aθ(st,at)]s.t.KL(θ,θ)<δ

  • TRPO与PPO的区别在于约束写在外面了
  • 这样是难以求解的
  • 一般用PPO而非TRPO,因为前者在实现上更为简单

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/903301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高性价比手机如何挑选?

这四个关键点&#xff0c;助你找到心仪机~ 一、性能强者&#xff1a;游戏娱乐畅快到底 处理器相当于手机的 “大脑”&#xff0c;处理速度快、能力强&#xff0c;运行大型游戏毫无压力。 搭配上大容量运存&#xff0c;多任务切换也能秒速完成&#xff0c;再也不怕游戏卡顿啦。…

测试—概念篇

1. 什么是需求 在多数软件公司&#xff0c;会有两部分需求&#xff0c;⼀部分是用户需求&#xff0c;⼀部分是软件需求。 1.1 用户需求 用户需求&#xff1a;可以简单理解为甲方提出的需求&#xff0c;如果没有甲方&#xff0c;那么就是终端用户使⽤产品时必须要完成的任务。…

HTML5好看的水果蔬菜在线商城网站源码系列模板7

文章目录 1.设计来源1.1 主界面1.2 关于我们界面1.3 商城界面1.4 商品信息界面1.5 我的账户界面1.6 联系我们界面 2.效果和源码2.1 动态效果2.2 源代码 源码下载万套模板&#xff0c;程序开发&#xff0c;在线开发&#xff0c;在线沟通 作者&#xff1a;xcLeigh 文章地址&#…

Atcoder Help 有关Atcoder 的介绍-1 涨分规则

AtCoder 的 Rating 计算系统基于改进的 Elo 算法&#xff0c;主要包含以下核心机制&#xff1a; 一、基础计算公式 Rating 是「表现分(Performance)」的加权平均值减去衰减函数 f ( n ) f(n) f(n)&#xff0c;其中&#xff1a; 新用户初始 f ( 1 ) 1200 f(1)1200 f(1)120…

设置右键打开VSCode

在日常的开发工作中&#xff0c;VSCode 是一款非常受欢迎的代码编辑器。为了更加便捷地使用它&#xff0c;我们可以将 VSCode 添加到右键菜单中&#xff0c;这样只需右键点击文件或文件夹&#xff0c;就能快速用 VSCode 打开&#xff0c;极大地提高工作效率。下面我就来介绍一下…

python密码学之密钥HSM硬件抽象层(HAL)

目录 摘要1. 项目背景与总体架构1.1 HSM 与 HAL 的必要性1.2 本项目目标1.3 模块化设计2. 自研轻量对称加密算法 SSC(SimpleSecureCipher)2.1 算法原理2.2 轮密钥扩展3. HAL 接口与安全内存模拟3.1 HAL 接口定义3.2 安全内存 SecureMemory4. PyQt6 GUI 设计与功能模块4.1 界面…

机器学习分类模型性能评估:应对类别不平衡的策略与指标

在机器学习的世界里&#xff0c;模型们就像一群努力破案的侦探&#xff0c;而数据就是它们的“犯罪现场”。今天&#xff0c;咱们的主角——一个自命不凡的分类模型&#xff0c;接到了一个看似简单的任务&#xff1a;揪出那些患有罕见疾病的患者。这听起来是不是很容易&#xf…

vue3代码规范管理;基于vite和vue3、 eslint、prettier、stylelint、husky规范;git触发eslint校验

前言 为提高前端代码格式化和规范开发。主要使用eslint、prettier、husky完成对git提交commit信息校验和代码eslint格式化校验&#xff0c;不符合要求的代码&#xff0c;提交不到仓库。 参考链接1 参考链接2 文章目录 前言一、效果图1.git提交触发eslint规范校验2.版本与分支名…

GCC 内建函数汇编展开详解

1. 引言 GNU 编译器集合&#xff08;GCC&#xff09;是广泛使用的开源编译器套件&#xff0c;支持多种编程语言&#xff0c;其中 C 语言编译器是其核心组件之一。在 C 语言编译过程中&#xff0c;GCC 不仅处理用户编写的标准 C 代码&#xff0c;还提供了一类特殊的函数——内建…

uniapp利用生命周期函数实现后台常驻示例

在 Uniapp 中&#xff0c;利用生命周期函数实现“后台常驻”主要是通过监听应用的前后台状态变化&#xff08; onHide 和 onShow &#xff09;&#xff0c;并结合 定时器、后台任务或状态保持逻辑 来实现。但需注意&#xff1a; 纯前端 JS 代码无法突破系统对后台应用的限制&am…

layui时间范围

//时间范围String time_range para.getString("time_range", "");if (!StrUtil.isEmpty(time_range)) {String dateArr[] time_range.split("-");if (dateArr.length 2) {para.put("start_date", dateArr[0].trim().replace("…

入门版 鸿蒙 组件导航 (Navigation)

入门版 鸿蒙 组件导航 (Navigation) 注意&#xff1a;使用 DevEco Studio 运行本案例&#xff0c;要使用模拟器&#xff0c;千万不要用预览器&#xff0c;预览器看看 Navigation 布局还是可以的 效果&#xff1a;点击首页&#xff08;Index&#xff09;跳转到页面&#xff08…

VUE3:封装一个评论回复组件

之前用React封装的评论回复组件&#xff0c;里面有三个主要部分&#xff1a;CommentComponent作为主组件&#xff0c;CommentItem处理单个评论项&#xff0c;CommentInput负责输入框。现在需要将这些转换为Vue3的组件。 Vue3和React在状态管理上有所不同&#xff0c;Vue3使用r…

制作一款打飞机游戏27:精灵编辑器UI

继续开发我们的编辑器——Sprit Edit。我们已经创建了这个小编辑器&#xff0c;它可以显示很多精灵&#xff08;sprites&#xff09;&#xff0c;并且我们可以遍历所有精灵。这真的很棒&#xff0c;我们可以创建新的精灵&#xff0c;这也不错。但是&#xff0c;唉&#xff0c;我…

k8s(9) — zookeeper集群部署(亲和性、污点与容忍测试)

一、部署思路 1、前期设想 zookeeper集群至少需要运行3个pod集群才能够正常运行&#xff0c;考虑到节点会有故障的风险这个3个pod最好分别运行在&#xff13;个不同的节点上(为了实现这一需要用到亲和性和反亲和性概念)&#xff0c;在部署的时候对zookeeper运行的pod打标签加…

WXT+Vue3+sass+antd+vite搭建项目开发chrome插件

WXTVue3sassantdvite搭建项目开发chrome插件 前言一、初始化项目二、项目配置调整三、options页面配置四、集成antd五、集成sass六、环境配置七、代码注入 vue3&#xff1a;https://cn.vuejs.org/ axios&#xff1a;https://www.axios-http.cn/docs/api_intro antd&#xff1a;…

JSAPI2.4——正则表达式

一、语法 const str 一二三四五六七八九十 //判断内容 const reg /二/ //判断条件 console.log(reg.test(str)); //检查 二、test与exec方法的区别 test方法&#xff1a;用于判断是否符合规则的字符串&#xff0c;返回值是布尔值 exec方法&…

燃气用户检修工考试精选题

燃气用户检修工考试精选题&#xff1a; 我国国家标准规定民用天然气中硫化氢含量最高允许浓度是&#xff08; &#xff09;。 A. 20mg/m B. 15mg/m C. 5mg/m D. 50mg/m 答案&#xff1a;A 城市燃气应具有可以察觉的臭味&#xff0c;当无毒燃气泄漏到空气中&#xff0c;达到爆炸…

【前端】1h 搞定 TypeScript 教程_只说重点

不定期更新&#xff0c;建议关注收藏点赞。 目录 简介使用基本类型、类型推断和类型注解接口、类型别名、联合类型类与继承泛型GenericsReact 与 TS 进阶高级类型装饰器Decorators模块系统TypeScript 编译选项 简介 TypeScript&#xff08;简称 TS&#xff09;是一种由微软开发…

MyBatis 参数绑定

一、MyBatis 参数绑定机制 1.1 核心概念 当 Mapper 接口方法接收多个参数时&#xff0c;MyBatis 提供三种参数绑定方式&#xff1a; 默认参数名&#xff1a;arg0、arg1&#xff08;Java 8&#xff09;或 param1、param2Param 注解&#xff1a;显式指定参数名称POJO/DTO 对象…