强化学习笔记(赵世钰)

⚪DQN 算法简洁总结

初始化

  • 经验缓冲区 D,容量 N

  • 在线网络 Q,参数 theta(随机初始化)

  • 目标网络 Q_hat,参数 theta_minus = theta


每一步做四件事

1. 选动作

以概率 epsilon 随机选动作,否则选 a_t = argmax_a Q(s_t, a; theta)

Epsilon-Greedy 策略就是"大部分时间选最优,偶尔随机试试"

假设 epsilon = 0.1(10%):

情况 概率 做什么
探索 10% 随机选一个动作(可能选到好的也可能选到差的)
利用 90% 选Q值最大的动作

2. 执行动作,存数据

执行 a_t → 环境返回 r_t 和 s_{t+1} → 存 (s_t, a_t, r_t, s_{t+1}) 到 D

3. 训练网络

从 D 随机抽一批数据,对每条数据:

造标签:

y_j = r_j (如果回合结束)

y_j = r_j + gamma * max_{a'} Q_hat(s_{j+1}, a'; theta_minus) (如果没结束)

算 Loss:

L = (y_j - Q(s_j, a_j; theta))^2

反向传播更新 theta

4. 同步目标网络

每隔 C 步:theta_minus = theta


核心公式总结

公式 含义
a_t = argmax_a Q(s_t, a; theta) 选Q值最大的动作
y = r + gamma * max_{a'} Q_hat(s', a'; theta_minus) 用目标网络造标签
L = (y - Q(s, a; theta))^2 预测值和标签的差距
theta = theta - alpha * nabla_theta L 反向传播更新在线网络
theta_minus = theta (every C steps) 定期同步目标网络

每个符号含义

符号 含义
s_t 当前状态
a_t 选的动作
r_t 拿到的奖励
s_{t+1} 下一状态
Q(s, a; theta) 在线网络输出的Q值(预测值)
Q_hat(s, a; theta_minus) 目标网络输出的Q值(用于造标签)
theta 在线网络参数(每步更新)
theta_minus 目标网络参数(每C步同步)
gamma 折扣因子
epsilon 探索概率
alpha 学习率
D 经验缓冲区
y 标签(自己造的)
L 损失函数

一句话总结

在线网络选动作 → 和环境交互拿奖励存入缓冲区 → 随机抽一批 → 目标网络造标签 → 算Loss更新在线网络 → 每C步同步目标网络 → 重复。

⚪第一部分:Q表是什么

你已经理解了。就是一张表,每个格子存一个分数:

向左 向右
A -2 8
B 3 10
C 5 15

选动作时查表,选Q值最大的。


第二部分:Q表的问题

4个房间,5个动作 → Q表有 4×5=20 个格子,没问题。

但如果状态是一张图片呢?比如玩 Atari 游戏,屏幕是 84×84 像素,每个像素256种颜色。可能的状态数是天文数字,不可能建一张这么大的表


第三部分:用神经网络代替Q表

这就是 DQN 的核心想法。

Q表 Q网络(DQN)
存储方式 一张表,每个格子一个数 一个神经网络
输入 查表:Q[B][右] 输入状态B到网络
输出 一个数:10 所有动作的Q值:[左=3, 右=10, 上=-2, 下=1]
更新方式 直接改格子里的数 反向传播更新网络参数theta
⚪没理解为什么需要两个网络预测,为什么需要标签,标签的作用是什么,以及为什么需要(A, 右, -1, B),这代表什么意思,是不是代表一个训练数据

(A, 右, -1, B) 就是一条训练数据。标签是训练任何神经网络都必须有的东西,DQN 的标签用"真实奖励 + 对未来的估计"自己造出来。两个网络是为了让标签稳定------如果只用一个网络,每次更新参数后标签也跟着变,网络追着一个移动的目标学,永远学不好。

用在线网络选动作 → 和环境交互拿奖励 → 存入缓冲区 → 随机抽一批 → 用目标网络造标签 → 算Loss更新在线网络 → 每隔C步同步目标网络 → 重复。

⚪​​​​​​​存入缓冲区 → 随机抽一批,为什么需要缓冲区,连续不可以吗

连续数据的两个问题

问题1:数据高度相关

复制代码
连续数据:
  第1步:在B向右到C
  第2步:在C向右到D
  第3步:在D不动还是D
  第4步:在D不动还是D
  第5步:在D不动还是D

连续5步全是B→C→D→D→D,状态高度相关

用这些数据训练,网络只学到了"B→C→D这条路"的Q值,对其他状态一无所知。

问题2:灾难性遗忘

复制代码
第1-100步:在左半边房间活动 → 网络学好了左半边的Q值
第101-200步:在右半边房间活动 → 网络学好了右半边,但左半边忘了
第201-300步:又回到左半边 → 左半边重新学,右半边又忘了
⚪请问这里有什么正确的约束,是不是奖励r?Q网络随时都能输出Q值,刚初始化时输出的分割结果一塌糊涂

​​​​​​​缓冲区每一步都有奖励,只是大小不同:

复制代码
(A, 右, -1, B)    ← r = -1,走一步扣1分,这也是真实奖励
(B, 右, -1, C)    ← r = -1,走一步扣1分,这也是真实奖励
(C, 右, +10, D)   ← r = +10,到终点拿10分
(B, 左, -1, A)    ← r = -1,走错方向扣1分
(D, 不动, +10, D) ← r = +10,在终点待着拿10分

每条数据都自带 r。 存入缓冲区时,r 已经跟着存进去了。随机抽取时,r 没有丢失

复制代码
缓冲区里存的每条数据:(状态, 动作, 奖励, 下一状态)
                                    ↑
                              r 已经在里面了

随机抽出来的一个 batch:
  (A, 右, -1, B)     ← 标签 y = -1 + 0.9 × max Q_hat(B)
  (C, 右, +10, D)    ← 标签 y = +10(终点,游戏结束)
  (B, 左, -1, A)     ← 标签 y = -1 + 0.9 × max Q_hat(A)
  (D, 不动, +10, D)  ← 标签 y = +10 + 0.9 × max Q_hat(D)

每条数据造标签时,r 就在那里,从来没有丢掉。

你的困惑可能是这个

你觉得"只有到终点的 r=+10 才是有用的信号,中间的 r=-1 没什么用"。

但实际上 每一步的 r 都是真实信号

数据 r 这个 r 告诉网络什么
(A, 右, -1, B) -1 "从A向右走会扣1分"------这是真的
(B, 左, -1, A) -1 "从B向左走会扣1分"------这是真的
(C, 右, +10, D) +10 "从C向右走能拿10分"------这是真的

r=-1 虽然不如 r=+10 那么"关键",但它也是真实的约束信号。

信息扩散的过程在缓冲区里照样发生

复制代码
第1000步时缓冲区里有1000条数据:
  大部分是 r=-1 的普通步骤
  少数是 r=+10 的到终点步骤

随机抽一个batch(32条):
  可能抽到 2 条 r=+10 的
  可能抽到 30 条 r=-1 的

训练这个batch:
  r=+10 的数据让 Q(C,右) 变准
  r=-1 的数据里,Q(B,右) 的标签用到了 max Q_hat(C)
  因为 Q(C) 已经比较准了,所以 Q(B) 的标签也比较准
  → Q(B) 跟着变准

不需要每次都抽到 r=+10 的数据。 只要 r=+10 的数据之前被训练过,让 Q(C) 变准了,那后续抽到 (B, 右, -1, C) 这条数据时,标签 y = -1 + 0.9 × Q_hat(C) 就是比较准的。

⚪为什么q选动作,不是给状态动作后给价值?以及max Q_hat(next state)如何得到表达式,不是没有q吗,以及dqn得到网络是不是为了预测每个状态的以后价值,这个网络训练完之后的输入和输出是什么

第一步(网络做的):输入状态B → 输出每个动作的Q值

Q(B, 左) = 3

Q(B, 右) = 10

Q(B, 上) = -2

Q(B, 下) = 1

第二步(不是网络做的,是你自己比大小):

10最大 → 选"向右"

问题2:max Q_hat(next state) 怎么得到?不是没有Q值吗?

Q值不是"没有",而是一开始不准,然后慢慢变准。

整个过程是这样的:

最开始: 网络参数随机初始化,输出的Q值全是随机

复制代码
Q_hat输入状态C → 输出:
  Q(C, 左) = 0.3(随机的,不准)
  Q(C, 右) = -0.1(随机的,不准)
  Q(C, 上) = 0.5(随机的,不准)

max = 0.5(虽然不准,但有个数可以用)

训练100步后: 网络学到了一些东西,输出稍微准了

关键理解:Q网络随时都能输出Q值,只是一开始不准。 就像你的分割网络,刚初始化时输出的分割结果一塌糊涂,但网络随时都能输出一个预测结果,只不过需要训练才能变准

⚪Q-Learning一直选择最优动作的奖励,不按照实际动作来更新,这样会不会导致更新没有目的性,完全错开

先搞清楚 Q-Learning 更新的到底是什么

复制代码
你在B,实际选了"向右",到了C,奖励-1

Q(B, 右) ← Q(B, 右) + alpha × [-1 + gamma × max Q(C,·) - Q(B, 右)]
 ↑                                                        
更新的是Q(B,右)

关键点:Q-Learning 更新的是你实际走的那个动作的Q值,不是最优动作的Q值。

你在B实际选了"向右" → 更新 Q(B, 右) 你在B实际选了"向左" → 更新 Q(B, 左)

"实际选了什么动作"决定更新Q表的哪个格子。


用具体例子看不会错开

Q 表初始:

向左 向右
B 0 0
C 0 0

假设 Q(C, 右) 已经通过之前的学习变成了 15,Q(C, 左) = 5。

场景1:你在B实际选了"向右"

复制代码
Q(B, 右) ← 0 + 0.1 × [-1 + 0.9 × max(5,15) - 0]
Q(B, 右) ← 0 + 0.1 × [-1 + 13.5]
Q(B, 右) = 1.25

更新的是 Q(B, 右) 这个格子

场景2:你在B实际选了"向左"(探索)

复制代码
走到了A,奖励-1,Q(A)的max假设是2

Q(B, 左) ← 0 + 0.1 × [-1 + 0.9 × 2 - 0]
Q(B, 左) = 0.08

更新的是 Q(B, 左) 这个格子

经过两次之后Q表变成:

向左 向右
B 0.08 1.25

Q(B,右) = 1.25 远大于 Q(B,左) = 0.08。 网络已经学到了"在B向右远比向左好"。


为什么不会错开?逐层拆解

Q-Learning 的更新公式里其实有两个部分各管各的事

部分 由什么决定 做什么
更新哪个格子 实际选的动作 在B选了右 → 更新 Q(B,右)
更新成多少 下一状态的max Q 用C的最好Q值来估算"从B向右走的未来价值"

这两部分没有错开

"我实际走了B向右,到了C。C最好能拿15分。所以B向右的价值大约是 -1 + 0.9×15 = 12.5。"

这个逻辑完全合理------你走了这条路,然后用"这条路后面最好能怎样"来评估这条路的价值。

⚪SARSA 必须知道下一个动作才能更新

这也是 SARSA 名字的由来------它需要五样东西才能做一次更新:

字母 含义 什么时候知道
S 当前状态(B) 现在就知道
A 当前动作(向右) 现在就知道
R 拿到的奖励(-1) 走完这一步就知道
S' 下一状态(C) 走完这一步就知道
A' 在下一状态实际选的动作(向左) 必须在C实际选了动作之后才知道
复制代码
时间线:

在B选了"右" → 到了C,拿了-1 → 在C选了"左" → 这时候才能更新Q(B,右)
     S    A              S'    R         A'
                                          ↑
                                   必须等这一步完成

Q-Learning 不需要等

字母 含义 什么时候知道
S 当前状态(B) 现在就知道
A 当前动作(向右) 现在就知道
R 拿到的奖励(-1) 走完这一步就知道
S' 下一状态(C) 走完这一步就知道
max Q(S') C的最大Q值 查Q表就行,不用等实际选动作
⚪1. "策略转移矩阵"到底在说什么?

下一步不是应该根据策略转移矩阵走吗?

这里其实有两个不同的东西:

① 环境转移(最重要)

这个才是:

👉 P(s' | s, a)

意思是:

在状态 s 执行动作 a,会到哪个下一个状态 s'

这个是环境决定的,不是你决定的


② 策略(policy)

这个是:

👉 π(a | s)

意思是:

在状态 s,你选择动作 a 的概率是多少

三者的完整对比

MC Control SARSA Q-Learning
什么时候更新 回合结束后 每走一步 每走一步
用什么算未来 真实G Q(s',a')实际动作 max Q(s')最优动作
需要回合结束吗 需要 不需要 不需要
On/Off-policy On-policy On-policy Off-policy
偏差 无偏 有偏 有偏
方差
学到的Q值代表 当前策略的真实价值 当前策略(含探索)的价值 最优策略的价值
探索的影响 G里包含了探索的后果 Q值偏保守(探索拉低了Q) Q值不受探索影响

第一个混淆:谁决定"到哪个下一状态"?

是环境决定的,不是策略决定的。

谁决定 决定什么
策略 pi(a|s) 你自己 选什么动作(向左还是向右)
环境 P(s'|s,a) 环境 做了这个动作后到哪个状态
复制代码
你在房间B:
  策略决定:选"向右"这个动作
  环境决定:向右之后到房间C

策略不决定"去哪",策略只决定"做什么"。
去哪是环境规则说了算。

所以不存在"策略转移矩阵只有一个结果到下一个状态"这个说法。策略选动作,环境决定去哪。


第二个混淆:SARSA 和 Q-Learning 的区别不在于"去哪"

到了下一状态 s' 之后,两者的区别是在 s' 选哪个动作的Q值来更新

复制代码
你在B,选了向右,环境把你送到了C。

到了C之后:
  SARSA:你在C实际选了什么动作,就用那个动作的Q值
  Q-Learning:不管你在C实际选了什么,直接用C所有动作里Q值最大的那个

两者到达的下一状态是一样的(都是C),区别只在于用C的哪个Q值来更新B的Q值。


第三个混淆:刚开始不知道最优是多少,怎么用max?

Q表一开始全是0,max也是0,没关系。随着训练慢慢变准。

看一个完整过程,初始Q表全为0:

第1轮:

复制代码
你在C,向右到D,奖励+10

Q-Learning更新:
  Q(C,右) ← 0 + 0.1 × [10 + 0.9 × max Q(D,·) - 0]
                                         ↑
                                    Q(D)全是0,max=0
  Q(C,右) ← 0 + 0.1 × 10 = 1.0

现在Q表:Q(C,右)=1.0,其他全是0

第2轮:

复制代码
你在B,向右到C,奖励-1

Q-Learning更新:
  Q(B,右) ← 0 + 0.1 × [-1 + 0.9 × max Q(C,·) - 0]
                                          ↑
                                     max Q(C,·) = max(0, 1.0, 0, 0) = 1.0
                                     现在不是0了!因为上一轮学到了Q(C,右)=1.0
  Q(B,右) ← 0 + 0.1 × [-1 + 0.9] = -0.01

第3轮: D的Q值也学到了,C的max变大了,B的也跟着变大......

价值像波浪一样从终点向起点扩散 ,每轮 max 都用的是当前Q表里的最大值,虽然一开始不准,但每轮都在变准。


用考试类比来理解"一开始不知道最优"

你第一次参加考试,不知道满分答案是什么。

轮次 你知道什么 max是什么
第1次 什么都不知道 随便猜的最好答案(不准)
第10次 知道一些题的正确答案了 已知答案里最好的(稍微准了)
第100次 大部分题都做过了 几乎就是真正的最优答案

Q-Learning 不需要一开始就知道最优。 它用的 max 是"当前Q表里的最大值",随着训练次数增加,Q表越来越准,max也越来越接近真正的最优。


最终对比

复制代码
你在B选了向右,到了C。到了C之后:

SARSA(On-policy):
  你在C实际用epsilon-greedy选了一个动作a'
  用Q(C, a')来更新Q(B,右)
  如果碰巧随机探索选了差动作,Q(B,右)就被拉低

Q-Learning(Off-policy):
  不管你在C实际选了什么
  直接用max Q(C,·)来更新Q(B,右)
  max是当前Q表里C的最大Q值,一开始不准,但会越来越准

一句话总结

策略决定"做什么动作",环境决定"去哪个状态",这是两件事。Q-Learning 的 max 不需要一开始就知道最优------它用的是当前Q表里的最大值,虽然一开始全是0不准,但随着训练推进,Q值从终点向起点像波浪一样传播,max 会越来越接近真正的最优值。

⚪期望表示随机变量的平均水平 ,方差表示随机变量围绕期望值的波动大小 ,标准差表示方差开平方后、用原单位衡量的实际离散程度

强化学习的目标是面向结果,不在乎环境的复杂度,与传统编程与环境复杂度有关系不同。

Q1:什么是"大数定理"?

A:

你这里大概率想问的是 大数定律,不是"大树定理"。

大数定律的意思是:

单次结果可能很随机,但如果重复很多次,平均结果会越来越接近真实的期望值。

比如抛硬币:

  • 抛 10 次,正面比例可能很不稳定

  • 抛 10000 次,正面比例会越来越接近 0.5


Q2:MC 方法是什么?

A:

MC(Monte Carlo)方法的核心思想是:

先把一整局走完,再回头计算每一步真实的累计回报,然后用这个真实回报去更新 Q。

也就是说:

  • 输入:一整局完整经历

  • 输出:更新后的 Q 表

MC 的更新思想是:

Q(s, a) = old Q(s, a) + alpha * (G - old Q(s, a))

其中:

  • G 是从当前时刻开始一直到结束的真实累计折扣回报

  • old Q(s, a) 是之前对这个状态动作对的估计


Q3:MC 和 TD 的区别是什么?

A:

MC:

  • 走完整个回合后再更新

  • 用真实的完整回报 G

  • 无偏,但方差大

TD:

  • 每走一步就可以更新

  • 用"一步真实奖励 + 后续估计值"

  • 有偏,但方差更小

一句话说:

MC 用整段真实结果更新,TD 用部分真实结果加部分估计更新。


Q4:为什么无模型方法常用 Q 表,而不是 V 表?

A:

因为 Q 表可以直接告诉你:

在状态 s 下,动作 a 值多少。

也就是:

  • Q(s, left)

  • Q(s, right)

  • Q(s, up)

你直接比较大小就能选动作。

而 V 表只告诉你:

状态 s 本身值多少。

也就是:

  • V(s)

如果你只有 V(s),你还得知道:

"做这个动作以后会到哪个下一个状态"

这就需要环境模型。

所以更准确地说:

在无模型场景下,如果你希望只靠一个价值函数直接选动作,那么 Q 比 V 更直接。


Q5:模型到底是什么意思?

A:

这里的"模型"不是神经网络模型,而是 环境模型

环境模型回答两个问题:

  1. 在状态 s 做动作 a,会转移到哪个下一状态 s'

  2. 在状态 s 做动作 a,会得到多少奖励 r

也就是环境规则说明书。

所以:

  • V 是状态评分

  • Q 是状态动作评分

  • 模型是动作后果说明书

这三者不是一回事。


Q6:Q 函数为什么会考虑后面所有步?它不是只考虑下一个状态吗?

A:

Q 函数本质上衡量的是:

从当前状态 s、当前动作 a 开始,未来所有奖励的折扣和的期望。

也就是说,Q 看的不是"当前这一步爽不爽",而是:

这个动作会不会让未来整体更好。

Q 的定义可以理解为:

Q(s_t, a_t) = expectation of U_t

其中:

  • U_t 是从 t 时刻开始,后面所有奖励的折扣和

也就是:

U_t = R_t + gamma * R_(t+1) + gamma^2 * R_(t+2) + ...


Q7:那为什么很多公式只写"下一步"?

A:

因为那是 递推写法,不是说 Q 只看一步。

Q 常写成:

Q(s_t, a_t) = expectation of [ R_t + gamma * future value ]

如果是 SARSA 风格,就是:

Q(s_t, a_t) approximately equals R_t + gamma * Q(s_(t+1), a_(t+1))

如果是 Q-learning 风格,就是:

Q(s_t, a_t) approximately equals R_t + gamma * max over a' of Q(s_(t+1), a')

这里虽然只写了下一步,但那个下一步的 Q 本身又已经包含更后面的所有未来回报。

所以你可以理解成:

表面上只写一步,实际上是把后面所有步打包进下一状态的 Q 里面了。


Q8:图里说 Q 是 U 的期望,这是什么意思?

A:

意思是:

  • U_t:某一次具体轨迹中,从时刻 t 开始真实拿到的总回报

  • Q(s_t, a_t):很多次类似经历的平均值,也就是期望

写成字母形式是:

Q(s_t, a_t) = E[ U_t | S_t = s_t, A_t = a_t ]

所以:

  • U 是一次实际样本值

  • Q 是样本值的平均规律


Q9:为什么会有 target?强化学习不是随机走路吗?

A:

这里要分清楚两件事:

随机走路

说的是:你怎么选动作

比如探索时可能随机选

target

说的是:走完这一步以后,你拿什么来更新 Q

即使你是随机选动作,只要你真的执行了动作,环境就会给你实际反馈。

比如:

  • 你在状态 s_t

  • 做了动作 a_t

  • 到了 s_(t+1)

  • 环境返回奖励 r_t

这个 r_t 就是真实奖励。


Q10:为什么"走一步"会有真实奖励?

A:

因为动作一旦执行,环境就会真的发生变化,并返回一个实际奖励。

比如:

  • 撞墙,奖励是 -5

  • 正常走一步,奖励是 -1

  • 走到终点,奖励是 +10

你虽然是随机选动作,但动作执行后的结果是真实发生的。

所以:

随机的是动作选择,不是环境反馈。


Q11:target 到底是什么?

A:

target 不是"已知标准答案",而是:

为了更新当前 Q,临时构造出来的一个更可信的参考值。

因为真正的 Q(s, a) 你并不知道,所以不能直接拿真值来监督。

于是只能用当前经验构造一个"更新目标"。


Q12:为什么 target 会写成 r_t + gamma * Q(s_(t+1), a_(t+1))?

A:

因为长期回报满足递推关系:

U_t = R_t + gamma * U_(t+1)

但你并不知道完整的 U_(t+1),所以只能先用 Q(s_(t+1), a_(t+1)) 去估计。

于是构造:

target = r_t + gamma * Q(s_(t+1), a_(t+1))

意思是:

  • 前面第一步奖励 r_t 是刚刚真实观察到的

  • 后面的长期回报还不知道,先用当前 Q 估计

所以 target 是:

一步真实数据 + 后面估计值


Q13:value 是什么?

A:

value 指的是:

当前 Q 表或者 Q 网络,对当前状态动作对的旧估计。

也就是:

value = Q(s_t, a_t)

它不是新经验带来的,而是你原来就存着的旧看法。

所以:

  • value = 旧估计

  • target = 带有新信息的新参考值


Q14:为什么要用 target - value?

A:

因为你想知道:

旧估计和新参考值差了多少。

这个差值就是 TD error。

写成字母形式是:

TD error = target - value

也就是:

TD error = [ r_t + gamma * Q(s_(t+1), a_(t+1)) ] - Q(s_t, a_t)

然后让当前 Q 朝 target 靠近:

Q(s_t, a_t) = Q(s_t, a_t) + alpha * TD error


Q15:下一状态的 Q,我怎么知道?

A:

不是"知道真值",而是:

从当前 Q 表或者当前 Q 网络里查出来的估计值。

比如表格法中:

  • Q(s1, left) = 3.1

  • Q(s1, right) = 2.7

如果下一状态是 s1,下一动作是 left,那么就直接取:

Q(s1, left)

如果是神经网络法,就是把下一状态输入网络,让网络输出各动作的 Q。

所以:

下一状态的 Q,是当前模型给出的预测,不是真实答案。


Q16:那一开始什么都不知道,Q 怎么办?

A:

一开始通常会把所有 Q 初始化成:

  • 0

  • 或者随机小数

  • 或者乐观初值

然后通过不断和环境交互,一点一点改。

所以强化学习一开始不是"知道答案",而是:

先瞎猜一个初值,然后越学越准。


Q17:这里的"估计值"是不是 V?

A:

不一定,要看你学的是 V 还是 Q。

如果你学的是 Q:

估计值就是 Q(s, a)

如果你学的是 V:

估计值就是 V(s)

所以"估计值"只是泛称,不等于一定是 V。

你图里写的是:

Q(s_0, a_0)

所以这里的估计值是 Q 值,不是 V 值。


Q18:V 和 Q 的区别是什么?

A:

V(s)

表示:

状态 s 本身值多少

Q(s, a)

表示:

在状态 s 下执行动作 a 值多少

所以:

  • V 不区分动作

  • Q 区分动作

如果目标是直接选动作,那么 Q 更直接。


Q19:我例子里只更新了 s0,那 s1、s2 怎么更新?

A:

不是只更新 s0,而是:

每走一步,就更新当前这一步对应的状态动作对。

如果一条轨迹是:

s0 --a0,r0--> s1 --a1,r1--> s2 --a2,r2--> s3

那么:

在 t = 0 时更新:

Q(s0, a0)

在 t = 1 时更新:

Q(s1, a1)

在 t = 2 时更新:

Q(s2, a2)

也就是说:

走到哪一步,就更新哪一步。


Q20:是不是到了 s2 又从头开始?

A:

不是。

如果 s2 不是终止状态,那环境会继续走到 s3、s4......

只有当到达终止状态 terminal 时,这一局才结束。

然后新一局才重新 reset 到初始状态。

所以:

  • 没结束:继续往后走

  • 到终点:这一局结束,下一局重新开始


Q21:终点状态怎么更新?

A:

如果下一状态是终点,那么后面没有未来价值了,可以把未来部分看成 0。

所以:

target = r_t

更新变成:

Q(s_t, a_t) = Q(s_t, a_t) + alpha * [ r_t - Q(s_t, a_t) ]


Q22:TD 是怎么把终点奖励往前传的?

A:

TD 的核心优势之一就是:

后面的价值会一层层往前传播。

比如终点附近先学到"这里值很高",

然后前一个状态更新时,会用到后一个状态的 Q,

于是价值继续往前传。

所以终点奖励会慢慢影响:

  • s2

  • 再影响 s1

  • 再影响 s0

这就像接力一样,一步步传回来。


Q23:MC 和 TD 在"更新 s0、s1、s2"这件事上有什么区别?

A:

TD:

每走一步就更新当前一步

也就是在线更新

MC:

必须等整局结束后,先算出:

  • G0

  • G1

  • G2

再把这一局经过的状态动作统一更新

所以:

  • TD:边走边学

  • MC:走完再学

  1. Q(s, a) 表示在状态 s 下执行动作 a 后,未来长期累计回报的期望。

  2. Q 不只是看下一步,而是看整个未来;只是很多公式用递推形式写成"当前奖励 + 下一状态价值"。

  3. U_t 是某次具体轨迹上的真实累计回报,Q 是它的期望。

  4. target 不是现成标准答案,而是用"真实的一步奖励 + 后续估计值"构造出来的更新目标。

  5. value 是当前 Q 表或 Q 网络给出的旧估计。

  6. 学习就是让旧估计朝新 target 靠近。

  7. 强化学习虽然会随机探索,但动作执行后环境反馈是真实的,所以仍然可以构造 target。

  8. TD 方法是一步一步更新当前状态动作对,MC 方法是等整局结束再统一更新。

  9. Q 和 V 不同,Q 直接对应动作价值,V 只对应状态价值。

  10. 无模型场景下,如果你想直接靠价值函数选动作,Q 更直接。


如果你愿意,我下一条可以继续帮你整理成一个 "适合背诵的精简版 Q&A" ,或者整理成 考试答题版

相关推荐
鸽子一号3 小时前
c#笔记之泛型和结构体、枚举
笔记
墨^O^4 小时前
进程与线程的核心区别及 Linux 启动全过程解析
linux·c++·笔记·学习
寒秋花开曾相惜4 小时前
(学习笔记)3.9 异质的数据结构(3.9.1 结构)
c语言·网络·数据结构·数据库·笔记·学习
猹叉叉(学习版)4 小时前
【系统分析师_知识点整理】 10.软件需求工程
笔记·需求分析·软考·系统分析师
LuminousCPP4 小时前
C语言自定义类型全解析
c语言·笔记·枚举·结构体·联合体
深蓝海拓5 小时前
西门子S7-1500PLC的常用Area地址以及网络读写
笔记·学习·plc
一轮弯弯的明月5 小时前
博弈论-Nim游戏
笔记·蓝桥杯·学习心得
Hello_Embed5 小时前
嵌入式上位机开发入门(五):UDP 编程 —— Server 端实现
笔记·单片机·网络协议·udp·嵌入式
热水过敏5 小时前
前路迷茫,再次起航
笔记·程序人生·职场和发展