Code
def soft_value(q1, q2, log_prob, alpha):
"""返回 min-Q 减 alpha*log_prob。"""
# TODO:只补齐下面这个表达式。
return ______
assert abs(soft_value(4., 3., -.5, .2) - 3.1) < 1e-12学完后你应能:解释最大熵目标、重参数化和温度 α,并实现 soft value 目标。
通过必须同时满足:
软策略演员-评论家(Soft Actor-Critic, SAC)由加州大学伯克利分校(Tuomas Haarnoja 等人,2018)提出,是连续动作空间与机器人强化学习中常用的 Off-Policy 算法,样本效率和稳定性较好。 传统强化学习(如 DDPG 或标准 Actor-Critic)以累积折现回报的最大化为单一目标:。这种设定在复杂的高维连续控制中存在显著弊端:
SAC 建立在最大熵强化学习(Maximum Entropy RL)框架之上,其将优化目标拓展为在最大化回报的同时最大化策略的信息熵: 其中 为温度系数(Temperature Parameter),动态权衡探索多样性与奖励利用率。 它解决的核心工程问题是:在 Off-Policy 高样本利用率的前提下,消除确定性策略容易早熟收敛的缺陷,使策略在获得同等高奖励的前提下,尽可能保留多样化的探索选项(Multi-modal Policy),对扰动的鲁棒性通常更好。
SAC 双 Q 架构、重参数化采样与温度自适应调节如图 8-1 与图 8-2 所示:
图 8-1:Soft Actor-Critic (SAC) 最大熵与双 Q 网络架构模型
为了抑制连续控制中的 Q 值过估计偏置,SAC 维护两套完全独立的 Critic 估值网络 与 。在构造软 Bellman 目标时,选取双网络预测的极小值,并扣除熵惩罚项: 其中下一时刻动作 必须由当前最新的 Actor 策略网络在后继状态上采样得到。
图 8-2:SAC 连续动作空间三方网络交替优化与自适应温度调节时序
连续控制中的梯度如果使用传统似然比公式,方差极其巨大。SAC 采用重参数化路径导数(Pathwise Derivative): - 策略网络输出高斯分布的均值 与对数标准差 ; - 引入独立标准高斯白噪声 ,构造无界潜变量:; - 通过双曲正切函数实现物理动作有界限制:。 这种变换使得整个从策略参数 到具体动作 的生成过程完全光滑可微,反向传播可以直接沿着 Critic 价值面对 Actor 参数求偏导,梯度方差大幅削减。
双曲正切变量代换的雅可比行列式修正(The Tanh-Jacobian Bug): 在计算动作对数概率 时,由于 是非线性映射,根据概率密度转换定理,必须加上雅可比变换的对数行列式惩罚: 若漏掉这一项(直接将 当作动作概率),会导致越靠近边界()的状态熵被极度高估,策略会病态地把动作概率全部死锁在边界极值上。
目标后继动作的采样源混淆: 计算 中的 时,绝对不能从 Replay Buffer 中直接读取该转移当时存储的历史动作。因为经验池中存储的是历史旧策略采样的动作,而 Soft Bellman 目标评估的是当前在线策略 的软期望价值。必须在计算目标时将 重新喂入当前 Actor 进行动态采样。
Critic 权重必须冻结反传: 在更新 Actor 损失 时,虽然计算图中包含了 ,但 Critic 网络的权重 必须被冻结梯度,只能允许梯度穿透 传递回 Actor 的参数 。
多网络并行显存与计算开销: SAC 需要同时常驻 5 个深度神经网络(Actor、2 个在线 Critic、2 个目标 Critic)。为了降低前向反向的内存占用与 Kernel 启动开销,一些实现会把两个 Critic 堆叠成一个批量化网络一次前向(如 JAX 中用 vmap),减少 kernel 启动次数;Stable-Baselines3 等库则仍使用两个独立的 Critic 模块。
目标熵 的先验设置: 标准经验法则是令 。但在某些动作自由度受限或关节阻尼极大的复杂机械控制场景中,若严格按照动作维度设置可能导致动作方差过大。此时可以把目标熵设得更低(更负,如 ),允许策略更确定,以提高精细定位精度;注意 比 更高,会要求更大的方差。
假定对于某个后继状态 和采样的后继动作 ,模型输出的分量数据如下:
代入 SAC 软状态价值(Soft Value)公式: 计算推导:
注意符号因果律:因为 ,其取负数后为正,熵的奖励在数学上等价于为探索动作提供额外的正向价值补偿。如果误算为 ,说明写成了惩罚高熵动作的错误逻辑。
补齐 SAC soft value。
规则:只能修改 TODO/______ 所在位置;不要删除断言或放宽误差。代码注释说明了每个边界条件。
运行本单元格;所有 assert 必须通过。另手工构造一个边界输入,解释预期结果。
提交时请给出:补齐后的代码、实际运行输出(环境不可用时注明“仅静态审查”)以及对失败用例的解释。
不要背定义:请从输入、状态变化和输出三个阶段解释“SAC:最大熵与温度”的工作机制。
你的答案:
忘记 tanh 变换的 log-det Jacobian 会让 entropy 估计如何偏?
你的答案:
动作维数翻倍后目标熵通常如何调整?为什么?
你的答案:
需要提示时按四级机制请求:概念区域 → 具体方向 → 关键局部 → 完整答案。
先完成题目再核对。即使代码一致,也要能解释关键步骤,并尝试更换一个输入规模。
输入:状态 、策略输出的 与对数标准差 、噪声 生成的动作 、两个 Critic 的 与温度 。
状态变化(详见第 2 节):
输出:更新后的 Actor、双 Critic 与 Polyak 平滑的目标网络。策略在提高回报的同时把熵维持在目标附近。
若在对高斯潜变量实施 压缩后,忘记在计算对数概率时加上变量代换的对数行列式惩罚(),会导致动作边缘区域的概率密度被极度低估,从而引起策略熵的严重系统性虚假高估(Spurious Entropy Overestimation):
数学代换公式本质:由于 ,真实动作空间的对数概率密度严格遵循:
忽略雅可比项的数值后果:当潜变量 较大(例如 )时,。此时导数项 ,导致真实的修正项 。真实的 实际上被大幅推高(概率密度极度集中在边界)。若遗漏这一项,直接使用 ,计算出的 会显得极小(例如负很多);
恶性控制后果:算法会误以为“策略在边界附近非常分散、熵非常大”,因此在自适应温度调节中错误地过早降低探索温度 ;同时由于 Actor 误以为边界动作的负对数概率很划算,会诱导策略病态地将所有动作概率压在 的物理死限极限位置(Saturating at Actuator Limits),破坏连续控制的平滑度。
动作空间维数翻倍(例如从 维扩展到 维机械臂关节控制)时,目标熵 必须成比例同向线性缩放(通常设为负的动作维度,即从 同步调整为 ):
微分熵的维度线性可加性:假设各动作维度在探索初期服从条件独立同分布的高斯分布,多元高斯分布的微分熵公式为 。当动作维度从 翻倍为 时,若维持单维度的标准探索方差不变,总空间的微分熵数值自然会随之翻倍(绝对值线性翻倍);
若保持原目标熵不动的后果:若维度翻倍后仍维持原有的 (而不是 ),平摊到每一维的目标熵从 变为 ,即每一维要求的熵更高(以未压缩高斯为例,每维标准差约变为原来的 倍)。温度 会被推高,策略在每一维上都更随机,难以收敛到精确动作。反过来,目标设得过低(过负)才会让策略过早失去探索;
工程标准规范:在所有工业级实现(如 Softlearning / SB3)中,默认的目标熵统一定义为 target_entropy = -float(np.prod(action_space.shape)),严格保证了单位动作维度的基础探索裕量不随系统维度的扩增而萎缩。
资料用于建立事实基线;面试回答仍需用自己的语言组织。
---
title: "第 8 课:SAC:最大熵与温度"
jupyter: python3
---
## 本课目标与完成标准
学完后你应能:解释最大熵目标、重参数化和温度 α,并实现 soft value 目标。
通过必须同时满足:
- 独立补齐本课唯一的代码填空题,并通过给定检查;
- 三个问答题均说明因果链,而不是只报术语;
- 能指出至少一个正确性边界和一个性能取舍;
- 总分不低于 8/10,且没有一票否决级概念错误。
## 前置关系
- 课程前置:Python、概率期望、基本深度学习
- 本课在路线中的作用:SAC 在回报之外奖励策略熵,连续控制中通常用重参数化采样得到低方差梯度。
## 核心心智模型
### 1. 它是什么,解决什么问题
**软策略演员-评论家(Soft Actor-Critic, SAC)**由加州大学伯克利分校(Tuomas Haarnoja 等人,2018)提出,是连续动作空间与机器人强化学习中常用的 Off-Policy 算法,样本效率和稳定性较好。
传统强化学习(如 DDPG 或标准 Actor-Critic)以累积折现回报的最大化为单一目标:$\max_\pi \sum_t \mathbb{E}[r_t]$。这种设定在复杂的高维连续控制中存在显著弊端:
- 策略极易陷入确定性的局部极值点(Local Optima),无法探索到更优的动作模态;
- 策略对环境扰动极度脆弱,稍微改变初始状态或增加控制噪声,性能就会大幅坍塌。
SAC 建立在**最大熵强化学习(Maximum Entropy RL)框架**之上,其将优化目标拓展为在**最大化回报的同时最大化策略的信息熵**:
$$ \mathcal{J}(\pi) = \sum_{t=0}^T \mathbb{E}_{(s_t, a_t) \sim \rho_\pi} \left[ r(s_t, a_t) + \alpha \mathcal{H}(\pi(\cdot \mid s_t)) \right] $$
其中 $\alpha$ 为温度系数(Temperature Parameter),动态权衡探索多样性与奖励利用率。
它解决的核心工程问题是:**在 Off-Policy 高样本利用率的前提下,消除确定性策略容易早熟收敛的缺陷,使策略在获得同等高奖励的前提下,尽可能保留多样化的探索选项(Multi-modal Policy),对扰动的鲁棒性通常更好**。
### 2. 它如何工作
SAC 双 Q 架构、重参数化采样与温度自适应调节如图 8-1 与图 8-2 所示:
1. **双 Q 网络(Twin Q-Networks)与软状态价值(图 8-1)**:
```{=html}
<div class="fd fd-flow" role="img"><div class="fd-stack"><div class="fd-comp fd-td"><div class="fd-rank"><div class="fd-sg" data-nid="MaxEntropy" data-depth="0"><div class="fd-sg-title">最大熵目标</div><div class="fd-stack"><div class="fd-comp fd-td"><div class="fd-node fd-box" data-nid="J">目标: E[∑ r(s,a) + α H(π(·|s))]</div></div></div></div></div><div class="fd-gap" style="--gl:44px;--gt:38px"></div><div class="fd-rank"><div class="fd-sg" data-nid="DualQ" data-depth="0"><div class="fd-sg-title">Twin Q-Networks (抑制定量偏差)</div><div class="fd-stack"><div class="fd-comp fd-td"><div class="fd-rank fd-few"><div class="fd-node fd-box" data-nid="Q1">Q_1(s, a)</div><div class="fd-node fd-box" data-nid="Q2">Q_2(s, a)</div></div><div class="fd-gap" style="--gl:44px;--gt:38px"></div><div class="fd-rank"><div class="fd-node fd-box" data-nid="MinQ">min(Q_1, Q_2) - α log π(a|s)</div></div></div></div></div></div></div></div><i class="fd-e" data-s="J" data-t="MinQ" data-k="solid" data-h="1" data-b="0"></i><i class="fd-e" data-s="Q1" data-t="MinQ" data-k="solid" data-h="1" data-b="0"></i><i class="fd-e" data-s="Q2" data-t="MinQ" data-k="solid" data-h="1" data-b="0"></i></div>
```
<p class="caption" align="center"><em>图 8-1:Soft Actor-Critic (SAC) 最大熵与双 Q 网络架构模型</em></p>
为了抑制连续控制中的 Q 值过估计偏置,SAC 维护两套完全独立的 Critic 估值网络 $Q_{\phi_1}$ 与 $Q_{\phi_2}$。在构造软 Bellman 目标时,选取双网络预测的极小值,并扣除熵惩罚项:
$$ y_t^{\text{SAC}} = r_t + \gamma (1 - \text{terminated}_t) \left[ \min(Q_{\phi_1^-}(s_{t+1}, a'), Q_{\phi_2^-}(s_{t+1}, a')) - \alpha \log \pi_\theta(a' \mid s_{t+1}) \right] $$
其中下一时刻动作 $a' \sim \pi_\theta(\cdot \mid s_{t+1})$ 必须由**当前最新的 Actor 策略网络**在后继状态上采样得到。
2. **重参数化技巧(Reparameterization Trick)与有界映射(图 8-2)**:
```{=html}
<div class="fd fd-flow" role="img"><div class="fd-stack"><div class="fd-comp fd-lr" data-minw="1302"><div class="fd-rank"><div class="fd-node fd-box" data-nid="State">状态输入 s</div></div><div class="fd-gap" style="--gl:44px;--gt:38px"></div><div class="fd-rank"><div class="fd-node fd-box" data-nid="Policy">重参数化采样: a = tanh(μ + σ ⊙ ε)</div></div><div class="fd-gap" style="--gl:44px;--gt:38px"></div><div class="fd-rank"><div class="fd-node fd-box" data-nid="MinQ">双 Q 网络评估当前动作价值</div></div><div class="fd-gap" style="--gl:44px;--gt:38px"></div><div class="fd-rank"><div class="fd-node fd-box" data-nid="ActorLoss">更新 Actor 策略: ∇_θ [α log π_θ(a|s) - Q_min(s, a)]</div></div><div class="fd-gap" style="--gl:44px;--gt:38px"></div><div class="fd-rank"><div class="fd-node fd-box" data-nid="TempLoss">自适应更新温度 α: ∇_α [-α (log π(a|s) + H_target)]</div></div><div class="fd-gap" style="--gl:44px;--gt:38px"></div><div class="fd-rank"><div class="fd-node fd-box" data-nid="Polyak">软更新 (Polyak) 目标网络: θ^- ← τθ + (1-τ)θ^-</div></div></div></div><i class="fd-e" data-s="State" data-t="Policy" data-k="solid" data-h="1" data-b="0"></i><i class="fd-e" data-s="Policy" data-t="MinQ" data-k="solid" data-h="1" data-b="0"></i><i class="fd-e" data-s="MinQ" data-t="ActorLoss" data-k="solid" data-h="1" data-b="0"></i><i class="fd-e" data-s="ActorLoss" data-t="TempLoss" data-k="solid" data-h="1" data-b="0"></i><i class="fd-e" data-s="TempLoss" data-t="Polyak" data-k="solid" data-h="1" data-b="0"></i></div>
```
<p class="caption" align="center"><em>图 8-2:SAC 连续动作空间三方网络交替优化与自适应温度调节时序</em></p>
连续控制中的梯度如果使用传统似然比公式,方差极其巨大。SAC 采用重参数化路径导数(Pathwise Derivative):
- 策略网络输出高斯分布的均值 $\mu_\theta(s)$ 与对数标准差 $\log \sigma_\theta(s)$;
- 引入独立标准高斯白噪声 $\epsilon \sim \mathcal{N}(0, I)$,构造无界潜变量:$u = \mu_\theta(s) + \sigma_\theta(s) \odot \epsilon$;
- 通过双曲正切函数实现物理动作有界限制:$a = \tanh(u) \in (-1, 1)$。
这种变换使得整个从策略参数 $\theta$ 到具体动作 $a$ 的生成过程完全光滑可微,反向传播可以直接沿着 Critic 价值面对 Actor 参数求偏导,梯度方差大幅削减。
3. **Actor 策略与温度 $\alpha$ 的自适应拉格朗日调节(图 8-2)**:
- **策略损失函数**:直接最大化软 Q 价值:
$$ \mathcal{L}_{\text{actor}}(\theta) = \mathbb{E}_{s \sim \mathcal{D}, \epsilon \sim \mathcal{N}} \left[ \alpha \log \pi_\theta(a \mid s) - \min(Q_{\phi_1}(s, a), Q_{\phi_2}(s, a)) \right] $$
- **温度损失函数(自动化熵约束)**:设定目标期望熵 $\bar{\mathcal{H}} = -\dim(\mathcal{A})$(负动作维度),通过双对偶变量梯度更新温度 $\alpha$:
$$ \mathcal{L}(\alpha) = \mathbb{E}_{s \sim \mathcal{D}, a \sim \pi_\theta} \left[ -\alpha \left( \log \pi_\theta(a \mid s) + \bar{\mathcal{H}} \right) \right] $$
当策略分布由于收缩导致熵过低($-\log \pi < \bar{\mathcal{H}}$)时,$\alpha$ 被自动推高强行激活探索;当策略在未知区域充分散开后,$\alpha$ 自动回落加速收敛。
4. **软更新(Polyak Averaging)**:
目标网络每步以滑动平均 $\phi_i^- \leftarrow \tau \phi_i + (1 - \tau) \phi_i^-$ 平滑推进,杜绝硬拷贝带来的价值震荡。
### 3. 正确性条件与常见误区
- **双曲正切变量代换的雅可比行列式修正(The Tanh-Jacobian Bug)**:
在计算动作对数概率 $\log \pi(a \mid s)$ 时,由于 $a = \tanh(u)$ 是非线性映射,根据概率密度转换定理,必须加上雅可比变换的对数行列式惩罚:
$$ \log \pi(a \mid s) = \log p(u \mid s) - \sum_{i=1}^d \log \left( 1 - \tanh^2(u_i) + 10^{-6} \right) $$
若漏掉这一项(直接将 $\log p(u \mid s)$ 当作动作概率),会导致越靠近边界($a \to \pm 1$)的状态熵被极度高估,策略会病态地把动作概率全部死锁在边界极值上。
- **目标后继动作的采样源混淆**:
计算 $y_t$ 中的 $a'$ 时,**绝对不能从 Replay Buffer 中直接读取该转移当时存储的历史动作**。因为经验池中存储的是历史旧策略采样的动作,而 Soft Bellman 目标评估的是当前在线策略 $\pi_\theta$ 的软期望价值。必须在计算目标时将 $s_{t+1}$ 重新喂入当前 Actor 进行动态采样。
- **Critic 权重必须冻结反传**:
在更新 Actor 损失 $\mathcal{L}_{\text{actor}}$ 时,虽然计算图中包含了 $\min(Q_1(s, a), Q_2(s, a))$,但 Critic 网络的权重 $\phi_1, \phi_2$ 必须被冻结梯度,只能允许梯度穿透 $a$ 传递回 Actor 的参数 $\theta$。
### 4. 性能与工程取舍
- **多网络并行显存与计算开销**:
SAC 需要同时常驻 5 个深度神经网络(Actor、2 个在线 Critic、2 个目标 Critic)。为了降低前向反向的内存占用与 Kernel 启动开销,一些实现会把两个 Critic 堆叠成一个批量化网络一次前向(如 JAX 中用 vmap),减少 kernel 启动次数;Stable-Baselines3 等库则仍使用两个独立的 Critic 模块。
- **目标熵 $\bar{\mathcal{H}}$ 的先验设置**:
标准经验法则是令 $\bar{\mathcal{H}} = -\prod \text{shape}(A)$。但在某些动作自由度受限或关节阻尼极大的复杂机械控制场景中,若严格按照动作维度设置可能导致动作方差过大。此时可以把目标熵设得更低(更负,如 $-1.5 \times \dim(A)$),允许策略更确定,以提高精细定位精度;注意 $-0.5 \times \dim(A)$ 比 $-\dim(A)$ 更高,会要求更大的方差。
## 具体演示:SAC Soft Value 计算数值演算
假定对于某个后继状态 $s'$ 和采样的后继动作 $a'$,模型输出的分量数据如下:
- 双 Critic 估值:$Q_1 = 4.0$,$Q_2 = 3.0$
- 采样的动作对数概率:$\log \pi(a' \mid s') = -0.5$(对应一个具有一定随机性的探索动作)
- 当前自适应温度系数:$\alpha = 0.2$
代入 SAC 软状态价值(Soft Value)公式:
$$ V_{\text{soft}}(s') = \min(Q_1, Q_2) - \alpha \log \pi(a' \mid s') $$
计算推导:
- 抑制过估计的极小值取值:$\min(4.0, 3.0) = 3.0$;
- 加上最大熵探索红利:$- \alpha \log \pi = -0.2 \times (-0.5) = +0.1$;
- 最终软价值:$V_{\text{soft}}(s') = 3.0 + 0.1 = 3.1$。
注意符号因果律:因为 $\log \pi \le 0$,其取负数后为正,熵的奖励在数学上等价于为探索动作提供额外的正向价值补偿。如果误算为 $3.0 - 0.1 = 2.9$,说明写成了惩罚高熵动作的错误逻辑。
## 实践任务:唯一代码填空题
补齐 SAC soft value。
规则:只能修改 `TODO`/`______` 所在位置;不要删除断言或放宽误差。代码注释说明了每个边界条件。
```{python}
#| course_role: exercise
def soft_value(q1, q2, log_prob, alpha):
"""返回 min-Q 减 alpha*log_prob。"""
# TODO:只补齐下面这个表达式。
return ______
assert abs(soft_value(4., 3., -.5, .2) - 3.1) < 1e-12
```
### 检查方法
运行本单元格;所有 `assert` 必须通过。另手工构造一个边界输入,解释预期结果。
提交时请给出:补齐后的代码、实际运行输出(环境不可用时注明“仅静态审查”)以及对失败用例的解释。
### Q1
不要背定义:请从输入、状态变化和输出三个阶段解释“SAC:最大熵与温度”的工作机制。
**你的答案:**
### Q2
忘记 tanh 变换的 log-det Jacobian 会让 entropy 估计如何偏?
**你的答案:**
### Q3
动作维数翻倍后目标熵通常如何调整?为什么?
**你的答案:**
## 评分与通过规则
- 代码 4 分:正常输入 2 分,边界输入 1 分,解释实现 1 分;
- Q1~Q3 各 2 分;
- 一票否决:结果碰巧正确但核心因果链错误、删除边界检查、把未运行结果说成实测。
需要提示时按四级机制请求:概念区域 → 具体方向 → 关键局部 → 完整答案。
::: {.callout-tip collapse="true" title="💡 点击展开参考答案与详细代码实现" icon="false"}
## 参考答案(仅 answer 分支)
先完成题目再核对。即使代码一致,也要能解释关键步骤,并尝试更换一个输入规模。
```{python}
#| course_role: solution
def soft_value(q1, q2, log_prob, alpha):
"""返回 min-Q 减 alpha*log_prob。"""
# 参考实现:表达式直接对应上文不变量。
return min(q1, q2) - alpha * log_prob
assert abs(soft_value(4., 3., -.5, .2) - 3.1) < 1e-12
```
### Q1 参考答案
1. **输入**:状态 $s$、策略输出的 $\mu_\theta(s)$ 与对数标准差 $\log \sigma_\theta(s)$、噪声 $\epsilon \sim \mathcal{N}(0, I)$ 生成的动作 $a = \tanh(\mu + \sigma \epsilon)$、两个 Critic 的 $Q_{\phi_1}, Q_{\phi_2}$ 与温度 $\alpha$。
2. **状态变化**(详见第 2 节):
- Critic:用当前 Actor 在 $s'$ 上重新采样 $a'$(带 tanh 雅可比修正),目标 $y = r + \gamma (1 - d) [\min(Q_1^-, Q_2^-)(s', a') - \alpha \log \pi(a' \mid s')]$;
- Actor:沿重参数化路径最小化 $\alpha \log \pi - \min(Q_1, Q_2)$;
- 温度:最小化 $-\alpha (\log \pi + \bar{\mathcal{H}})$,熵低于目标时 $\alpha$ 上升,高于目标时下降。
3. **输出**:更新后的 Actor、双 Critic 与 Polyak 平滑的目标网络。策略在提高回报的同时把熵维持在目标附近。
### Q2 参考答案
若在对高斯潜变量实施 $a = \tanh(u)$ 压缩后,**忘记在计算对数概率时加上变量代换的对数行列式惩罚($\sum \log(1 - \tanh^2(u))$)**,会导致**动作边缘区域的概率密度被极度低估,从而引起策略熵的严重系统性虚假高估(Spurious Entropy Overestimation)**:
1. **数学代换公式本质**:由于 $\frac{da}{du} = 1 - \tanh^2(u)$,真实动作空间的对数概率密度严格遵循:
$$ \log \pi(a \mid s) = \log p(u \mid s) - \sum_{i=1}^d \log (1 - a_i^2) $$
2. **忽略雅可比项的数值后果**:当潜变量 $|u|$ 较大(例如 $u = 3.0$)时,$a = \tanh(3.0) \approx 0.995$。此时导数项 $1 - a^2 \approx 0.01$,导致真实的修正项 $-\log(1 - a^2) \approx -\log(0.01) \approx +4.6$。真实的 $\log \pi$ 实际上被大幅推高(概率密度极度集中在边界)。若遗漏这一项,直接使用 $\log p(u)$,计算出的 $\log \pi$ 会显得极小(例如负很多);
3. **恶性控制后果**:算法会误以为“策略在边界附近非常分散、熵非常大”,因此在自适应温度调节中错误地过早降低探索温度 $\alpha$;同时由于 Actor 误以为边界动作的负对数概率很划算,会诱导策略病态地将所有动作概率压在 $\pm 1$ 的物理死限极限位置(Saturating at Actuator Limits),破坏连续控制的平滑度。
### Q3 参考答案
动作空间维数翻倍(例如从 $d$ 维扩展到 $2d$ 维机械臂关节控制)时,目标熵 $\bar{\mathcal{H}}$ 必须**成比例同向线性缩放(通常设为负的动作维度,即从 $-d$ 同步调整为 $-2d$)**:
1. **微分熵的维度线性可加性**:假设各动作维度在探索初期服从条件独立同分布的高斯分布,多元高斯分布的微分熵公式为 $\mathcal{H}(a) = \sum_{i=1}^d \mathcal{H}(a_i)$。当动作维度从 $d$ 翻倍为 $2d$ 时,若维持单维度的标准探索方差不变,总空间的微分熵数值自然会随之翻倍(绝对值线性翻倍);
2. **若保持原目标熵不动的后果**:若维度翻倍后仍维持原有的 $-d$(而不是 $-2d$),平摊到每一维的目标熵从 $-1$ 变为 $-0.5$,即每一维要求的熵更高(以未压缩高斯为例,每维标准差约变为原来的 $e^{0.5} \approx 1.65$ 倍)。温度 $\alpha$ 会被推高,策略在每一维上都更随机,难以收敛到精确动作。反过来,目标设得过低(过负)才会让策略过早失去探索;
3. **工程标准规范**:在所有工业级实现(如 Softlearning / SB3)中,默认的目标熵统一定义为 `target_entropy = -float(np.prod(action_space.shape))`,严格保证了单位动作维度的基础探索裕量不随系统维度的扩增而萎缩。
## 参考资料
- [SAC paper](https://arxiv.org/abs/1801.01290)
资料用于建立事实基线;面试回答仍需用自己的语言组织。
:::
::: {.course-pagination}
[**← 上一课**<br>第 7 课:DQN](lesson07_dqn.qmd){.pagination-link .pagination-prev}
[**下一课 →**<br>第 9 课:离线 RL 与分布外动作](lesson09_offline_rl.qmd){.pagination-link .pagination-next}
:::