physics_simulation

第13章:域随机化策略

域随机化(Domain Randomization)是解决仿真到现实迁移问题的核心技术之一。通过在训练过程中系统性地改变仿真环境的参数,我们能够训练出对参数不确定性具有鲁棒性的策略。本章深入探讨域随机化的理论基础、实现方法以及在强化学习中的应用,特别关注如何设计有效的随机化策略来弥合仿真与现实之间的差距。

13.1 参数分布设计

域随机化的核心在于如何选择和设计参数分布。这不仅涉及技术实现,更需要深入理解物理系统的不确定性来源。

13.1.1 物理参数随机化

物理参数是影响系统动力学行为的基本量。在实际系统中,这些参数往往存在测量误差、制造公差和时变性。

质量与惯性参数

对于刚体系统,质量 $m$ 和惯性张量 $\mathbf{I}$ 的不确定性主要来源于:

通常采用对数正态分布来建模质量参数: \(m \sim \text{LogNormal}(\mu_m, \sigma_m^2)\)

这确保质量始终为正,且允许存在较大的相对偏差。对于惯性张量,我们需要保证其正定性: \(\mathbf{I} = \mathbf{R} \text{diag}(I_1, I_2, I_3) \mathbf{R}^T\) 其中 $I_i \sim \text{LogNormal}(\mu_{I_i}, \sigma_{I_i}^2)$,$\mathbf{R}$ 是随机旋转矩阵。

摩擦系数随机化

摩擦是接触动力学中最难准确建模的现象之一。库仑摩擦模型中的静摩擦系数 $\mu_s$ 和动摩擦系数 $\mu_d$ 在实际中受多种因素影响:

摩擦系数的随机化策略:

μ_s ~ Uniform(0.3, 1.5)  # 静摩擦系数
μ_d ~ Uniform(0.2, min(μ_s, 1.2))  # 动摩擦系数,保证 μ_d ≤ μ_s

对于各向异性摩擦,可以引入方向依赖的摩擦系数: \(\mu(\theta) = \mu_0 + \Delta\mu \cos(n\theta + \phi)\) 其中 $\theta$ 是滑动方向,$n$ 是表面纹理的周期数。

阻尼参数

关节阻尼 $b$ 和结构阻尼 $c$ 影响系统的能量耗散: \(\tau_{\text{damping}} = -b\dot{q} - c|\dot{q}|\dot{q}\)

阻尼参数的不确定性来源于:

通常采用对数均匀分布: \(b \sim \text{LogUniform}(b_{\min}, b_{\max})\)

13.1.2 几何参数随机化

几何参数的变化直接影响碰撞检测和接触力计算。

尺寸变化

对于连杆长度 $l$ 和半径 $r$: \(l \sim \mathcal{N}(l_0, \sigma_l^2), \quad r \sim \mathcal{N}(r_0, \sigma_r^2)\)

需要注意保持运动学约束的一致性。例如,对于闭链机构,需要确保随机化后的尺寸仍满足闭环约束。

形状扰动

使用主成分分析(PCA)来参数化形状变化: \(\mathbf{v} = \mathbf{v}_0 + \sum_{i=1}^k \alpha_i \mathbf{e}_i\) 其中 $\mathbf{v}_0$ 是标称形状,$\mathbf{e}_i$ 是形状变化的主成分,$\alpha_i \sim \mathcal{N}(0, \lambda_i)$。

13.1.3 分布选择的理论依据

选择合适的参数分布需要平衡覆盖性和训练效率。

最大熵原则

在只知道参数的均值和方差时,根据最大熵原则应选择正态分布。对于有界参数,均匀分布具有最大熵: \(H(p) = -\int p(x)\log p(x) dx\)

β分布的灵活性

对于归一化参数(如摩擦系数比例),β分布提供了灵活的建模能力: \(p(x; \alpha, \beta) = \frac{x^{\alpha-1}(1-x)^{\beta-1}}{B(\alpha, \beta)}\)

通过调整 $\alpha$ 和 $\beta$,可以实现从均匀分布到钟形分布的平滑过渡。

13.1.4 参数相关性处理

实际系统中的参数往往存在相关性,忽略这些相关性可能导致不现实的参数组合。

协方差建模

使用多元正态分布捕获参数间的线性相关性: \(\boldsymbol{\theta} \sim \mathcal{N}(\boldsymbol{\mu}, \boldsymbol{\Sigma})\)

其中协方差矩阵 $\boldsymbol{\Sigma}$ 可以通过系统辨识获得。

Copula方法

对于非线性相关性,使用Copula函数: \(C(u_1, ..., u_n) = P(U_1 \leq u_1, ..., U_n \leq u_n)\)

常用的Gaussian Copula: \(C_{\text{Gauss}}(\mathbf{u}; \mathbf{R}) = \Phi_{\mathbf{R}}(\Phi^{-1}(u_1), ..., \Phi^{-1}(u_n))\)

13.2 自适应域随机化

固定的参数分布可能过于保守或不够充分。自适应域随机化通过动态调整参数分布来提高训练效率。

13.2.1 基于性能的参数调整

性能度量

定义仿真中的性能指标 $J_{\text{sim}}(\pi, \theta)$ 和真实世界的性能 $J_{\text{real}}(\pi)$,目标是最小化性能差距: \(\Delta J = |J_{\text{real}}(\pi) - \mathbb{E}_{\theta \sim p(\theta)}[J_{\text{sim}}(\pi, \theta)]|\)

参数分布更新

使用梯度上升更新分布参数: \(\phi_{t+1} = \phi_t + \alpha \nabla_{\phi} \mathbb{E}_{\theta \sim p_{\phi}(\theta)}[J_{\text{sim}}(\pi, \theta)]\)

其中 $\phi$ 是分布的参数(如均值和方差)。

13.2.2 贝叶斯优化方法

贝叶斯优化提供了一种原则性的方法来搜索最优参数分布。

高斯过程建模

假设性能函数服从高斯过程: \(J(\phi) \sim \mathcal{GP}(m(\phi), k(\phi, \phi'))\)

其中核函数 $k$ 常选择Matérn核: \(k_{\text{Matérn}}(r) = \frac{2^{1-\nu}}{\Gamma(\nu)}\left(\sqrt{2\nu}\frac{r}{\ell}\right)^{\nu}K_{\nu}\left(\sqrt{2\nu}\frac{r}{\ell}\right)\)

获取函数

使用期望改进(EI)作为获取函数: \(\text{EI}(\phi) = \mathbb{E}[\max(0, J(\phi) - J^*)]\)

其中 $J^*$ 是当前最优值。

13.2.3 课程式域随机化

逐步增加随机化的难度可以加速学习过程。

方差调度

随训练进度增加参数方差: \(\sigma^2(t) = \sigma_0^2 + (\sigma_{\max}^2 - \sigma_0^2) \cdot \min(1, t/T)\)

自动课程学习

基于策略性能自动调整难度: \(p_{t+1}(\theta) = \begin{cases} p_t(\theta) & \text{if } J_t < J_{\text{threshold}} \\ \text{expand}(p_t(\theta)) & \text{otherwise} \end{cases}\)

13.3 对抗域随机化

对抗域随机化通过最坏情况优化来提高策略的鲁棒性。

13.3.1 最坏情况优化

鲁棒优化公式

寻找对最坏参数具有鲁棒性的策略: \(\pi^* = \arg\max_{\pi} \min_{\theta \in \Theta} J(\pi, \theta)\)

这可以转化为零和博弈: \(\min_{\pi} \max_{\theta} -J(\pi, \theta)\)

不确定性集合设计

定义参数的不确定性集合: \(\Theta = \{\theta : \|\theta - \theta_0\|_{\mathbf{W}} \leq \epsilon\}\)

其中 $\mathbf{W}$ 是权重矩阵,反映不同参数的相对不确定性。

13.3.2 对抗训练框架

双层优化

交替更新策略和对抗参数:

for iteration in range(N):
    # 对抗者更新:寻找最坏参数
    θ_adv = argmin_θ J(π, θ)
    
    # 策略更新:针对最坏情况优化
    π = argmax_π J(π, θ_adv)

RARL算法

鲁棒对抗强化学习(RARL)同时训练主角和对抗者: \(\mathcal{L}_{\text{protagonist}} = -\mathbb{E}_{\tau \sim \pi}[R(\tau)]\) \(\mathcal{L}_{\text{adversary}} = \mathbb{E}_{\tau \sim \pi}[R(\tau)]\)

13.3.3 鲁棒性保证

Lipschitz连续性

如果奖励函数关于参数是Lipschitz连续的: \(|J(\pi, \theta_1) - J(\pi, \theta_2)| \leq L\|\theta_1 - \theta_2\|\)

则鲁棒策略的性能下界为: \(J(\pi^*, \theta) \geq J(\pi^*, \theta^*) - L\epsilon\)

CVaR优化

使用条件风险价值(CVaR)来优化尾部风险: \(\text{CVaR}_{\alpha}(J) = \mathbb{E}[J | J \leq F_J^{-1}(\alpha)]\)

其中 $F_J^{-1}(\alpha)$ 是 $J$ 的 $\alpha$-分位数。

13.4 随机化的理论分析

理解域随机化的理论基础有助于设计更有效的随机化策略。

13.4.1 PAC-Bayes界限

PAC-Bayes理论提供了泛化误差的概率界限。

基本界限

对于任意后验分布 $Q$ 和先验分布 $P$: \(\mathbb{P}\left[\mathbb{E}_{\theta \sim Q}[L(\theta)] \leq \hat{L}_S(Q) + \sqrt{\frac{KL(Q||P) + \ln(2\sqrt{n}/\delta)}{2n}}\right] \geq 1-\delta\)

其中 $\hat{L}_S(Q)$ 是经验损失,$n$ 是样本数。

域随机化的解释

域随机化可以看作是在参数空间上定义了一个先验分布 $P(\theta)$。策略在不同参数下的平均性能对应于期望损失: \(L(\pi) = \mathbb{E}_{\theta \sim P(\theta)}[-J(\pi, \theta)]\)

13.4.2 泛化误差分析

Rademacher复杂度

策略类的Rademacher复杂度: \(\mathcal{R}_n(\Pi) = \mathbb{E}_{\sigma, S}\left[\sup_{\pi \in \Pi} \frac{1}{n}\sum_{i=1}^n \sigma_i J(\pi, \theta_i)\right]\)

其中 $\sigma_i$ 是Rademacher随机变量。

泛化界限: \(\mathbb{E}_{\theta}[J(\pi, \theta)] \geq \hat{J}_S(\pi) - 2\mathcal{R}_n(\Pi) - 3\sqrt{\frac{\ln(2/\delta)}{2n}}\)

13.4.3 样本复杂度

覆盖数理论

要以概率 $1-\delta$ 学习到 $\epsilon$-最优策略,所需的参数样本数: \(N = O\left(\frac{1}{\epsilon^2}\ln\left(\frac{\mathcal{N}(\epsilon/2, \Theta, \|\cdot\|)}{\delta}\right)\right)\)

其中 $\mathcal{N}(\epsilon, \Theta, |\cdot|)$ 是 $\Theta$ 的 $\epsilon$-覆盖数。

维度诅咒

对于 $d$ 维参数空间,覆盖数随维度指数增长: \(\mathcal{N}(\epsilon, B_d(1), \|\cdot\|_2) = O\left(\left(\frac{1}{\epsilon}\right)^d\right)\)

这说明高维参数空间需要更多的随机化样本。

13.5 RL应用:提高策略鲁棒性的方法

13.5.1 实践策略

渐进式随机化

class ProgressiveDR:
    def __init__(self, initial_range, final_range, steps):
        self.initial = initial_range
        self.final = final_range
        self.steps = steps
        
    def sample(self, step):
        alpha = min(1.0, step / self.steps)
        current_range = self.initial + alpha * (self.final - self.initial)
        return np.random.uniform(-current_range, current_range)

选择性随机化

只随机化对任务影响显著的参数: \(\text{Sensitivity}_i = \left|\frac{\partial J}{\partial \theta_i}\right|_{\theta=\theta_0}\)

优先随机化高敏感度参数。

13.5.2 评估指标

鲁棒性度量

策略鲁棒性的量化指标: \(R(\pi) = \frac{1}{|\Theta_{\text{test}}|}\sum_{\theta \in \Theta_{\text{test}}} \mathbb{I}[J(\pi, \theta) > J_{\text{threshold}}]\)

最坏情况性能

\[J_{\text{worst}}(\pi) = \min_{\theta \in \Theta_{\text{test}}} J(\pi, \theta)\]

13.5.3 案例分析

机械臂抓取任务

关键随机化参数:

四足机器人行走

环境参数随机化:

13.6 历史人物:Tobin与2017年域随机化的突破性应用

Josh Tobin及其合作者在2017年的工作”Domain Randomization for Transferring Deep Neural Networks from Simulation to the Real World”标志着域随机化技术的重要里程碑。他们展示了通过极端的视觉随机化(包括随机纹理、光照、相机位置等),可以训练出能够直接迁移到真实世界的视觉策略。

这项工作的关键见解是:如果在足够多样化的仿真环境中训练,真实世界可以被视为另一个随机化的变体。他们的方法成功地将物体检测和姿态估计网络从纯仿真训练迁移到真实机器人系统。

Tobin的贡献不仅在于技术创新,更在于改变了社区对sim-to-real问题的思考方式:从追求高保真仿真转向拥抱可控的随机性。

13.7 高级话题:元学习与快速适应机制

13.7.1 模型无关元学习(MAML)

MAML通过学习良好的初始化来实现快速适应: \(\theta^* = \arg\min_{\theta} \sum_{i=1}^N \mathcal{L}_{\tau_i}(\theta - \alpha\nabla_{\theta}\mathcal{L}_{\tau_i}(\theta))\)

其中 $\tau_i$ 是不同环境参数下的任务。

与域随机化的结合

将域随机化视为任务分布: \(p(\tau) = p(\theta)p(T|\theta)\)

通过元学习获得能快速适应新参数的策略。

13.7.2 上下文感知策略

隐式参数推断

训练策略同时进行参数推断和控制: \(\pi(a|s, h) = \int \pi(a|s, \theta)p(\theta|h) d\theta\)

其中 $h$ 是历史观测。

循环神经网络实现

class AdaptivePolicy(nn.Module):
    def __init__(self, state_dim, action_dim, hidden_dim):
        super().__init__()
        self.lstm = nn.LSTM(state_dim, hidden_dim)
        self.policy_head = nn.Linear(hidden_dim, action_dim)
        
    def forward(self, states, hidden=None):
        lstm_out, hidden = self.lstm(states, hidden)
        actions = self.policy_head(lstm_out)
        return actions, hidden

13.7.3 在线系统辨识

粒子滤波器

维护参数的后验分布: \(p(\theta_t|o_{1:t}) \propto p(o_t|\theta_t)p(\theta_t|\theta_{t-1})p(\theta_{t-1}|o_{1:t-1})\)

使用粒子表示: \(p(\theta|o_{1:t}) \approx \sum_{i=1}^N w_t^{(i)} \delta(\theta - \theta_t^{(i)})\)

差分进化优化

在线优化参数估计:

def differential_evolution_update(particles, fitness, F=0.8, CR=0.9):
    N = len(particles)
    new_particles = []
    
    for i in range(N):
        # 选择三个不同的粒子
        indices = np.random.choice([j for j in range(N) if j != i], 3, replace=False)
        a, b, c = particles[indices]
        
        # 变异
        mutant = a + F * (b - c)
        
        # 交叉
        trial = np.where(np.random.rand(len(mutant)) < CR, mutant, particles[i])
        
        # 选择
        if fitness(trial) > fitness(particles[i]):
            new_particles.append(trial)
        else:
            new_particles.append(particles[i])
    
    return new_particles

本章小结

域随机化是解决仿真到现实迁移问题的强大工具。本章的关键要点包括:

  1. 参数分布设计:选择合适的概率分布来建模参数不确定性,需要平衡覆盖性和训练效率
  2. 自适应方法:通过性能反馈动态调整随机化策略可以提高训练效率
  3. 对抗训练:最坏情况优化提供了鲁棒性保证
  4. 理论基础:PAC-Bayes和泛化理论为域随机化提供了理论支撑
  5. 元学习集成:结合元学习可以实现快速在线适应

关键公式回顾:

练习题

基础题

练习 13.1 设计摩擦系数的概率分布

给定机器人夹爪与物体间的摩擦系数标称值为 $\mu_0 = 0.8$,实验测得相对标准差为20%。请设计一个合适的概率分布来建模这个参数,要求:(a) 保证摩擦系数始终为正;(b) 反映测量的不确定性;(c) 避免产生物理上不合理的值(如 $\mu > 3$)。

Hint: 考虑截断分布或Beta分布的变换。

参考答案 可以使用截断正态分布: $$\mu \sim \text{TruncatedNormal}(0.8, 0.16^2, 0.1, 2.0)$$ 或使用Beta分布的线性变换: $$\mu = 0.1 + 2.5 \cdot \text{Beta}(16, 8)$$ 这确保 $\mu \in [0.1, 2.6]$,均值约为0.8,标准差约为0.16。 验证:Beta(16,8)的均值为16/(16+8)=0.667,标准差为0.094,变换后均值为0.1+2.5×0.667≈0.77,标准差为2.5×0.094≈0.235。

练习 13.2 计算参数敏感度

考虑单摆系统 $\ddot{\theta} = -\frac{g}{l}\sin\theta - b\dot{\theta}$,其中 $g=9.81$,$l=1.0$,$b=0.1$。使用能量作为性能指标 $J = \int_0^T (\dot{\theta}^2 + \theta^2) dt$。请计算各参数的敏感度,并确定随机化优先级。

Hint: 使用有限差分或解析求导。

参考答案 使用有限差分计算敏感度: $$S_p = \left|\frac{J(p + \Delta p) - J(p - \Delta p)}{2\Delta p}\right|$$ 对于线性化系统 $\ddot{\theta} = -\omega_0^2\theta - 2\zeta\omega_0\dot{\theta}$: - $\omega_0 = \sqrt{g/l}$ - $\zeta = b/(2\sqrt{gl})$ 敏感度分析结果: - $S_l \approx 2.5$(长度最敏感) - $S_g \approx 1.2$ - $S_b \approx 0.3$(阻尼最不敏感) 因此随机化优先级:$l > g > b$

练习 13.3 实现简单的自适应域随机化

编写伪代码,实现基于成功率的自适应域随机化。当任务成功率超过80%时,增加参数范围;低于60%时,减小参数范围。

Hint: 使用指数平均来平滑成功率估计。

参考答案 ```python class AdaptiveDR: def __init__(self, param_ranges, expansion_rate=1.1, contraction_rate=0.9): self.ranges = param_ranges self.success_rate = 0.7 self.alpha = 0.95 # 指数平均系数 def update(self, episode_success): # 更新成功率估计 self.success_rate = self.alpha * self.success_rate + (1 - self.alpha) * episode_success # 调整参数范围 if self.success_rate > 0.8: self.ranges = {k: v * 1.1 for k, v in self.ranges.items()} elif self.success_rate < 0.6: self.ranges = {k: v * 0.9 for k, v in self.ranges.items()} def sample(self): params = {} for key, range_val in self.ranges.items(): params[key] = np.random.uniform(-range_val, range_val) return params ```

挑战题

练习 13.4 设计相关参数的联合分布

机器人的连杆质量和长度存在相关性(密度近似恒定)。给定第i个连杆的标称质量 $m_i = \rho V_i = \rho \pi r_i^2 l_i$,设计一个保持物理一致性的联合随机化策略。

Hint: 使用条件分布或Copula。

参考答案 策略1:固定密度,随机化几何参数 ```python ρ ~ LogNormal(μ_ρ, σ_ρ²) # 材料密度 r_i ~ Normal(r_{i0}, σ_r²) # 半径 l_i ~ Normal(l_{i0}, σ_l²) # 长度 m_i = ρ × π × r_i² × l_i # 派生质量 ``` 策略2:使用Gaussian Copula ```python # 定义相关矩阵 R = [[1.0, 0.7], # m_i 和 l_i 的相关系数 [0.7, 1.0]] # 生成相关的均匀分布 u = gaussian_copula_sample(R) # 变换到目标边缘分布 m_i = lognormal_ppf(u[0], μ_m, σ_m) l_i = normal_ppf(u[1], μ_l, σ_l) ``` 物理一致性检查: $$\frac{m_i}{m_{i0}} \approx \left(\frac{l_i}{l_{i0}}\right) \cdot \left(\frac{r_i}{r_{i0}}\right)^2$$

练习 13.5 分析域随机化的样本复杂度

证明:对于d维参数空间的域随机化,要保证以概率 $1-\delta$ 覆盖参数空间的 $1-\epsilon$ 体积,所需的最少样本数为 $N = O(d\log(1/\delta)/\epsilon)$。

Hint: 使用Chernoff界和覆盖理论。

参考答案 证明步骤: 1. 将参数空间划分为 $M = (1/\epsilon)^d$ 个体积为 $\epsilon^d$ 的小盒子 2. 对每个盒子,被至少一个样本击中的概率: $$p_{\text{hit}} = 1 - (1 - \epsilon^d)^N \approx 1 - e^{-N\epsilon^d}$$ 3. 要使 $p_{\text{hit}} \geq 1 - \delta/M$: $$N \geq \frac{\log(M/\delta)}{\epsilon^d} = \frac{d\log(1/\epsilon) + \log(1/\delta)}{\epsilon^d}$$ 4. 使用更精细的分析(Johnson-Lindenstrauss引理): $$N = O\left(\frac{d\log(1/\delta)}{\epsilon}\right)$$ 这表明样本复杂度随维度线性增长,而非指数增长(当使用适当的降维技术时)。

练习 13.6 对抗域随机化的纳什均衡

考虑零和博弈:策略 $\pi$ 最大化奖励 $R(\pi, \theta)$,对抗者选择参数 $\theta \in \Theta$ 最小化奖励。证明:如果 $R$ 是凹-凸的,则存在唯一的纳什均衡 $(\pi^, \theta^)$。

Hint: 使用minimax定理。

参考答案 证明: 1. 定义值函数: $$V = \max_{\pi \in \Pi} \min_{\theta \in \Theta} R(\pi, \theta) = \min_{\theta \in \Theta} \max_{\pi \in \Pi} R(\pi, \theta)$$ 2. 由于 $R(\pi, \theta)$ 关于 $\pi$ 是凹的,关于 $\theta$ 是凸的,根据Sion's minimax定理: $$\max_{\pi} \min_{\theta} R(\pi, \theta) = \min_{\theta} \max_{\pi} R(\pi, \theta)$$ 3. 纳什均衡条件: $$R(\pi^*, \theta^*) = \max_{\pi} R(\pi, \theta^*) = \min_{\theta} R(\pi^*, \theta)$$ 4. 唯一性:如果 $R$ 是严格凹-凸的,则均衡点唯一。 实际应用:可以使用梯度下降-上升算法收敛到均衡: $$\pi_{t+1} = \pi_t + \alpha \nabla_{\pi} R(\pi_t, \theta_t)$$ $$\theta_{t+1} = \theta_t - \beta \nabla_{\theta} R(\pi_t, \theta_t)$$

练习 13.7 元学习与域随机化的等价性

证明:在特定条件下,域随机化训练等价于MAML的一阶近似(FOMAML)。

Hint: 比较两者的梯度更新规则。

参考答案 域随机化的梯度: $$g_{DR} = \mathbb{E}_{\theta \sim p(\theta)} [\nabla_{\phi} L(\phi, \theta)]$$ FOMAML的梯度(K步适应): $$g_{FOMAML} = \mathbb{E}_{\tau} [\nabla_{\phi} L(\phi - \alpha \sum_{k=1}^K \nabla_{\phi} L^{(k)}(\phi, \tau), \tau)]$$ 当 K=0 时,FOMAML退化为: $$g_{FOMAML} = \mathbb{E}_{\tau} [\nabla_{\phi} L(\phi, \tau)]$$ 如果将任务 $\tau$ 解释为参数配置 $\theta$,则: $$g_{DR} = g_{FOMAML}$$ 关键区别: - 域随机化:同时暴露于所有变化 - MAML:学习快速适应特定变化 在线性近似下,两者产生相似的鲁棒性,但MAML提供了额外的适应能力。

常见陷阱与错误

1. 过度随机化

问题:参数范围设置过大,导致大部分采样配置物理不合理或无法完成任务。

解决方案

2. 忽略参数相关性

问题:独立随机化相关参数产生不现实的组合(如超轻但超大惯性的物体)。

调试技巧

# 检查参数相关性
correlation_matrix = np.corrcoef(sampled_params.T)
assert np.all(np.abs(correlation_matrix - expected_correlation) < threshold)

3. 训练-测试分布不匹配

问题:测试时使用的参数分布与训练时不同。

最佳实践

4. 梯度偏差

问题:在某些参数配置下,策略梯度估计严重偏差。

诊断方法

# 监控不同参数下的梯度范数
grad_norms = []
for theta in param_samples:
    grad = compute_gradient(policy, theta)
    grad_norms.append(np.linalg.norm(grad))
    
if np.std(grad_norms) / np.mean(grad_norms) > 2.0:
    print("Warning: High gradient variance across parameters")

5. 计算开销

问题:过多的随机化增加了训练时间。

优化策略

最佳实践检查清单

设计阶段

实现阶段

训练阶段

评估阶段

部署阶段