news 2026/10/2 3:45:37

Learned Preconditioning:为内点法装上AI动态导航

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Learned Preconditioning:为内点法装上AI动态导航

1. 这不是“调参”,而是给优化算法装上动态导航系统

你有没有试过在复杂地形里开车,却只有一张静态纸质地图?地图本身没错,但车速、天气、实时拥堵、弯道摩擦系数全靠猜——这就是传统**Primal-Dual Interior-Point Method(原对偶内点法)在处理大规模非线性优化问题时的真实处境。它依赖一个固定、预设的preconditioner(预条件子)**来加速线性方程组求解,就像给引擎配了一副永远不变的火花塞。可现实中的优化问题千差万别:有的约束像毛细血管般密集缠绕,有的目标函数曲面陡峭如断崖,有的Hessian矩阵病态得像一叠湿透的纸牌——用同一副“火花塞”,轻则收敛慢得像爬坡,重则直接发散、崩溃。

而这篇标题里的“Learned Preconditioning”,本质上是在做一件颠覆性的事:把预条件子从一个手工调校的静态参数,变成一个能实时感知问题结构、自主学习最优变换策略的神经网络模块。它不取代内点法框架,而是像给老司机加装一套融合激光雷达、高精地图和驾驶习惯学习的ADAS系统——方向盘还是你握着,但每一次转向修正、每一次油门响应,都由AI根据当前路况动态优化。这不是黑箱替代,而是可解释、可嵌入、可验证的增强型基础设施升级。

我第一次在电力系统最优潮流(OPF)问题上实测这个方案时,最震撼的不是速度提升——虽然3.7倍加速很实在——而是它的鲁棒性跃迁。传统方法在负荷突变5%时就得重启迭代,而Learned Preconditioner自动识别出约束边界扰动模式,仅用2次额外迭代就稳住了轨迹。后来在芯片设计中的布局布线优化场景里,它甚至能区分“金属层密度约束”和“时序路径延迟约束”的数学特征差异,为两类约束生成完全不同的预处理方向。这背后没有魔法,只有对内点法底层线性代数瓶颈的深刻理解,以及对神经网络如何编码数值优化先验知识的精准设计。

如果你正被以下问题困扰,这篇内容就是为你写的:

  • 每次换一个新优化问题,都要花半天时间调试预条件子参数;
  • 程序跑着跑着突然“NaN”,回溯发现是KKT系统求解失败;
  • 用现成求解器(如IPOPT、SCIP)时,明明硬件没满载,CPU利用率却卡在30%不动——其实是线性求解器成了木桶短板;
  • 需要部署到边缘设备,但传统自适应预条件子(如ILU、SSOR)计算开销太大。

它不承诺“一键解决所有优化问题”,但它提供了一套可复现、可调试、可移植的工程化路径——从如何构造训练数据集,到怎样避免神经网络输出破坏KKT系统的对称正定性,再到如何用不到200行PyTorch代码完成核心模块集成。接下来,我会带你一层层拆开这个“动态导航系统”的齿轮组。

2. 为什么必须放弃手工预条件子?内点法的三大死穴与学习式破局逻辑

要真正吃透Learned Preconditioning的价值,得先看清传统内点法在真实工业场景中卡在哪几个关键节点上。这不是理论缺陷,而是工程落地时反复撞墙的硬伤。

2.1 死穴一:KKT系统的病态性随问题动态漂移,静态预条件子必然失效

内点法每一步迭代的核心,是求解形如
$$ \begin{bmatrix} H + \Sigma & A^T \ A & -\Theta \end{bmatrix} \begin{bmatrix} \Delta x \ \Delta \lambda \end{bmatrix}

\begin{bmatrix} r_c \ r_p \end{bmatrix} $$
的KKT线性系统。其中 $ H $ 是目标函数Hessian矩阵,$ A $ 是约束雅可比,$ \Sigma $ 和 $ \Theta $ 是对角缩放矩阵,随迭代进程动态变化。关键在于:这个矩阵的条件数(condition number)不是常量,而是一条剧烈波动的曲线。

我做过一组实测:在同一个电网OPF问题中,从初始点迭代到收敛,KKT矩阵的条件数从 $ 10^3 $ 峰值飙升至 $ 10^8 $,再回落到 $ 10^4 $。传统预条件子(如对角预条件、不完全Cholesky分解)在训练时只针对某个“典型状态”优化,一旦进入高病态区域,其逆矩阵近似误差爆炸,导致搜索方向严重失真。更糟的是,不同问题的病态演化模式完全不同——金融风险模型的条件数可能缓慢爬升,而机器人运动规划的条件数会在关节极限位置突跳3个数量级。手工设计一个普适预条件子,相当于想用同一把钥匙打开所有锁芯结构各异的保险柜。

2.2 死穴二:预条件子计算开销吞噬并行红利,GPU加速成摆设

很多人以为换上GPU就能加速内点法,结果发现GPU利用率常年低于20%。根源在于:预条件子应用(Preconditioner Application)是内存带宽敏感型操作,而非计算密集型。以最常用的Incomplete LU(ILU)为例,其核心是稀疏矩阵向量乘(SpMV),但ILU分解本身需要大量不规则内存访问和条件分支,GPU的SIMT架构对此极度不友好。我们对比过:在NVIDIA A100上,对一个10万维KKT矩阵,ILU分解耗时占单步迭代的68%,且无法有效并行化;而同样规模的矩阵向量乘,在GPU上能跑出CPU的12倍吞吐。

Learned Preconditioning的破局点在于将高成本的在线分解,转移到离线的神经网络前向传播。神经网络的权重矩阵是稠密小矩阵(通常<1024×1024),其乘法完全适配GPU的Tensor Core。更重要的是,网络结构可设计为纯逐元素运算(如GELU激活)+ 小规模矩阵乘,彻底规避稀疏访存瓶颈。我们在实际部署中,将预条件子应用阶段的GPU利用率从23%拉升至91%,这才是真正的硬件红利释放。

2.3 死穴三:领域知识与数值稳定性难以兼顾,工程师陷入两难

资深优化工程师都知道:一个“好”的预条件子,必须同时满足三个矛盾目标:

  1. 数值稳定性:保证预处理后的矩阵仍保持对称正定(SPD),否则共轭梯度法(CG)会发散;
  2. 领域适配性:在电力系统中需强化潮流方程的耦合结构,在CV中需保留图像梯度的各向异性;
  3. 计算可行性:分解/求逆不能比原问题还慢。

手工设计本质是在三者间做粗糙折衷。比如为保稳定性,常强制使用对角预条件子,但牺牲了90%的加速潜力;为提速度,用多级ILU,又得手动调参防止数值溢出。Learned Preconditioning通过将领域知识编码为网络结构先验来破解这一僵局:在电力系统任务中,网络输入层显式接入节点导纳矩阵的拓扑图谱(Graph Laplacian),迫使网络学习到物理连接关系;在损失函数中加入SPD正则项(如 $ |\text{eig}(M)_{\text{neg}}|^2 $),让网络自发规避负特征值。这不再是“调参”,而是用可微分编程把工程师的经验转化为网络的归纳偏置。

提示:不要试图用通用Transformer直接拟合预条件子——KKT矩阵的尺度变化跨越10个数量级,注意力机制在此类数值任务中极易失效。成功方案都采用多尺度卷积+谱归一化+物理引导嵌入的混合架构,下文会详解。

3. 核心实现:从数据构造到网络嵌入,手把手搭建可验证的Learned Preconditioner

现在进入实操环节。我会以电力系统最优潮流(OPF)为具体案例,展示如何从零构建一个可投入生产的Learned Preconditioning模块。所有代码基于PyTorch 2.0+,兼容CUDA 12.x,重点在于每一步设计都有明确的数值意义,而非盲目堆砌深度学习组件。

3.1 数据构造:不是“喂数据”,而是构建问题结构的数字孪生

训练数据的质量直接决定预条件子的泛化能力。这里的关键认知是:我们不是在学习“如何解一个OPF问题”,而是在学习“如何快速解这一类OPF问题的KKT系统”。因此数据集必须覆盖问题结构的多样性,而非单纯增加样本量。

我们采集了来自IEEE 118节点、300节点、1354节点标准测试系统的127个不同运行工况(含负荷随机扰动±15%、发电机出力调整、线路开断等),对每个工况执行标准IPOPT求解,记录下每一步迭代的KKT矩阵及其对应的最优预条件子(通过高精度SVD分解获得)。但注意:我们不直接用SVD结果当标签——那会导致网络过拟合于特定分解算法。真正的标签是预条件子作用后的残差缩减率:

$$ \text{Label} = \frac{|r^{(k+1)}|_2}{|r^{(k)}|_2} \quad \text{for } k=1,2,\dots,5 $$

即网络的目标是预测:给定当前KKT矩阵 $ K $,应用预条件子 $ M $ 后,CG迭代5步能将残差降低多少倍。这样设计的好处是:

  • 标签具有明确的数值优化意义,且对预条件子的具体形式无偏见;
  • 自动隐含了“好预条件子”的定义——它必须使残差快速衰减;
  • 避免网络学习到与求解器强耦合的伪影(如IPOPT内部的缩放策略)。

数据预处理采用三重标准化:

  1. 矩阵元素归一化:对KKT矩阵 $ K $ 的每一行,除以其L2范数,消除量纲差异;
  2. 图结构编码:将节点导纳矩阵 $ Y_{bus} $ 转为图信号,用GCN提取拓扑特征,拼接到矩阵向量表示后;
  3. 病态性提示:显式计算并输入当前迭代的条件数估计值 $ \kappa(K) $(用幂迭代法快速估算),作为网络的“情境感知”通道。

最终输入张量维度为 $ [batch, 2 \times n, n] $,其中 $ n $ 是KKT系统维度(对118节点系统约为500),第一维是原始KKT矩阵,第二维是其图结构增强版本。

3.2 网络架构:物理引导的轻量级CNN,拒绝参数黑洞

我们摒弃了参数量动辄百万的Transformer或ResNet,采用定制化的Multi-Scale Spectral CNN(MSS-CNN),核心思想是:KKT矩阵的病态性主要源于其特征谱分布,而CNN天然擅长捕捉频域模式。

网络结构如下:

  • 输入层:接收 $ [2n, n] $ 张量,经1×1卷积映射到64通道;
  • 多尺度卷积块(3层):每层包含3个并行分支,卷积核尺寸分别为 $ 3\times3 $、$ 5\times5 $、$ 7\times7 $,捕获不同粒度的矩阵局部相关性;
  • 谱注意力模块:在每个卷积块后,对特征图沿通道维度做FFT,用可学习权重加权高频/低频分量,强制网络关注影响条件数的谱特性;
  • SPD保障头:最终输出一个 $ n \times n $ 矩阵 $ M $,但不直接输出,而是输出其Cholesky因子 $ L $(下三角),再通过 $ M = LL^T $ 构造,从源头保证SPD性质;
  • 轻量化设计:总参数量仅12.7万,推理延迟<0.8ms(A100),远低于传统ILU分解的15ms。

注意:切勿省略SPD保障头!我们曾因直接输出 $ M $ 导致CG在第17步发散,调试三天才发现是网络输出了微小负特征值。用Cholesky参数化是数值稳定性的底线。

3.3 训练策略:用优化器思维设计损失函数,而非通用交叉熵

损失函数设计是成败关键。我们采用三元组混合损失:

  1. 主损失(残差缩减率匹配):
    $$ \mathcal{L}1 = \left| \log{10}(\text{PredRate}) - \log_{10}(\text{TrueRate}) \right|_2^2 $$
    使用对数空间,因为缩减率跨度常达 $ 10^{-1} $ 到 $ 10^{-5} $;
  2. 稳定性正则项:
    $$ \mathcal{L}_2 = \alpha \cdot \left| \min(\text{eig}(M), 0) \right|_2^2 $$
    其中 $ \alpha=0.01 $,惩罚负特征值;
  3. 结构一致性损失:
    $$ \mathcal{L}_3 = \beta \cdot \left| M - \text{diag}(M) \right|_F^2 $$
    强制网络学习稀疏预条件子($ \beta=0.005 $),避免过度拟合稠密结构。

训练采用分阶段策略:

  • 第1-50轮:冻结CNN主干,只训练SPD头,建立基础稳定性;
  • 第51-200轮:联合训练,学习率从1e-4线性衰减至1e-5;
  • 第201-300轮:启用梯度裁剪(max norm=1.0),防止KKT矩阵梯度爆炸。

实测表明,该策略使训练收敛速度提升3倍,且验证集上的残差缩减率预测误差稳定在±0.15(log10尺度),足够支撑实际求解。

3.4 内点法嵌入:无缝对接现有求解器,不碰核心逻辑

Learned Preconditioner的价值在于即插即用。我们以IPOPT为宿主,修改仅涉及其线性求解器接口:

# IPOPT源码中LinearSolver类的修改点 class LearnedPrecondSolver: def __init__(self, model_path): self.model = torch.jit.load(model_path) # 预编译模型 self.model.eval() def Solve(self, KKT_matrix): # 1. 数据预处理(同训练时) X = preprocess(KKT_matrix) # 返回[2n, n]张量 # 2. 网络推理(GPU加速) with torch.no_grad(): L_pred = self.model(X.cuda()) # 输出下三角Cholesky因子 M = torch.mm(L_pred, L_pred.t()) # 构造SPD预条件子 # 3. 应用预条件子:求解 M^{-1} * KKT * v = M^{-1} * rhs # 实际调用cuSPARSE的sparse-dense multiply return apply_precond(M.cpu().numpy(), KKT_matrix, rhs)

关键细节:

  • 预编译(torch.jit):避免Python解释器开销,推理延迟降至0.3ms;
  • CPU/GPU协同:KKT矩阵通常在CPU内存,网络在GPU,但预条件子应用(SpMV)在GPU完成,通过Unified Memory自动管理;
  • 热启动缓存:对相同拓扑的连续迭代,复用前一步的 $ L $ 因子作为初始化,减少重复计算。

在1354节点系统上,单步迭代时间从182ms降至49ms,且收敛步数从47步减至32步——这是双重加速:既快又少。

4. 实战避坑指南:那些论文里不会写的血泪教训与调试技巧

即使按上述流程走,实际部署时仍会遭遇一系列“意料之中、文档之外”的陷阱。这些经验全部来自我们踩过的坑,有些甚至让项目延期两周。现在毫无保留分享给你。

4.1 数据陷阱:KKT矩阵的“隐形病灶”与采样偏差

你以为采集127个工况就够了?错。我们最初训练的模型在测试集上表现完美,但一上真实电网调度平台就频繁崩溃。根因是:训练数据未覆盖“临界病态”状态。

具体问题:标准测试系统工况多处于正常运行区间,KKT矩阵条件数峰值约 $ 10^7 $;而真实调度中,当系统接近电压稳定极限时,条件数可达 $ 10^{10} $ 以上。网络从未见过这种极端谱分布,输出的 $ L $ 因子在Cholesky分解时直接报错“矩阵非正定”。

解决方案:

  • 主动构造病态样本:在训练集中注入人工扰动,如将某条线路阻抗设为理论最小值(0.001p.u.),或令负荷功率因数趋近0,强制生成条件数 $ >10^9 $ 的KKT矩阵;
  • 分层采样策略:按条件数将数据分为3档($ <10^5 $, $ 10^5\sim10^8 $, $ >10^8 $),确保每档样本占比不低于25%;
  • 在线检测机制:部署时,若检测到当前KKT矩阵条件数超出训练范围,自动降级为对角预条件子,并触发告警。

实操心得:用scipy.sparse.linalg.arpack.eigs计算部分特征值比完整SVD快100倍,适合在线监控。但注意:只取最大/最小特征值即可,无需全谱。

4.2 网络训练陷阱:梯度消失与数值溢出的双重绞杀

KKT矩阵元素跨度极大(从 $ 10^{-3} $ 到 $ 10^6 $),直接输入网络会导致前几层梯度迅速归零。我们试过LayerNorm、BatchNorm,均无效——因为BatchNorm在小批量(batch=1)时失效,而KKT矩阵无法做大batch(内存爆炸)。

破局方案:在输入端引入可学习的仿射变换(Learnable Affine Transform):

class InputScaler(nn.Module): def __init__(self, n): super().__init__() self.scale = nn.Parameter(torch.ones(n)) self.shift = nn.Parameter(torch.zeros(n)) def forward(self, X): # X: [2n, n] # 对每行做独立缩放 scale_mat = torch.diag(self.scale) return torch.mm(scale_mat, X) + self.shift.unsqueeze(1)

该模块参数量仅2n,却能自适应地对每行KKT矩阵进行归一化,训练初期学习率设为其他层的10倍,3轮内即可稳定梯度流。

另一个致命问题是:网络输出的 $ L $ 因子在Cholesky重构时,因浮点误差产生微小负数,导致torch.cholesky报错。解决方案不是简单加epsilon,而是在损失函数中显式惩罚L的对角元:
$$ \mathcal{L}_{\text{diag}} = \gamma \cdot \left| \min(\text{diag}(L), 0) \right|_2^2 $$
因为Cholesky分解要求对角元严格为正,此损失项让网络从训练伊始就学会“敬畏对角线”。

4.3 部署陷阱:GPU-CPU数据搬运成新瓶颈

我们曾天真地认为“GPU推理一定快”,结果发现:将KKT矩阵从CPU拷贝到GPU耗时占整体推理的73%!尤其当矩阵稀疏度高时,torch.tensor()构造开销巨大。

终极优化方案:

  • 内存池预分配:为不同规模KKT矩阵(如500×500, 1000×1000)分别创建GPU内存池,避免重复分配;
  • 零拷贝共享内存:使用torch.cuda.UVMSpace(CUDA Unified Virtual Memory),让CPU和GPU共享同一地址空间,X.cuda()变为指针传递;
  • 批处理伪装:即使单样本,也包装为batch=1的tensor,触发cuBLAS的批处理优化。

经此优化,数据搬运时间从21ms降至0.9ms,GPU利用率从65%升至94%。

4.4 验证陷阱:如何证明“学出来的预条件子真的更好”?

不能只看平均加速比。我们建立了四维验证体系:

维度测试方法合格标准
收敛性在100个随机工况上运行,记录是否全部收敛100%收敛,无NaN/Inf
加速比对比IPOPT原生求解器,统计单步迭代时间≥2.5倍加速(中等规模)
鲁棒性注入1%高斯噪声到KKT矩阵,测试性能衰减加速比下降≤15%
可解释性可视化网络对不同矩阵块的注意力权重高权重区域与物理约束强相关(如潮流方程块)

特别强调“可解释性”验证:我们用Grad-CAM技术反向追踪,发现网络在处理IEEE 118节点系统时,对“有功平衡方程”所在矩阵块的注意力权重是其他块的3.2倍——这与电力工程师凭经验判断的“有功约束主导病态性”完全一致,证明网络学到了真实的物理规律,而非数据噪声。

5. 扩展可能性:从单任务预条件子到优化求解器的操作系统

Learned Preconditioning绝非终点,而是开启新一代优化基础设施的钥匙。基于当前实践,我们已验证了三条可行的扩展路径,每一条都直击工业痛点。

5.1 多任务联合学习:一个网络,多种预条件子

当前模型专精于OPF,但电网中还有状态估计(SE)、故障分析(FA)等任务,它们的KKT系统结构迥异。与其训练N个独立网络,不如构建统一预条件子骨干网(Unified Precond Backbone)。

实现方式:

  • 输入端增加任务标识符(Task Token),如[OPF]、[SE];
  • 主干网络(Shared CNN)提取通用矩阵特征;
  • 任务特定头(Task-Specific Head)负责最终Cholesky因子生成;
  • 共享参数占比85%,总参数量仅增加12%,但跨任务泛化能力提升40%。

实测显示:在OPF任务上,多任务模型性能与单任务持平;而在冷启动的SE任务上,仅需1/5数据量即可达到单任务模型90%精度——这正是迁移学习在数值优化领域的价值。

5.2 在线自适应:让预条件子具备“边跑边学”能力

当前模型是离线训练、在线推理。但在长期运行的调度系统中,电网拓扑会变化(新线路投运、旧设备退役),静态模型会逐渐失效。我们实现了轻量级在线微调(Online Fine-tuning):

  • 每100次迭代,收集当前KKT矩阵及实际残差缩减率;
  • 用小学习率(1e-6)更新网络最后两层,冻结主干;
  • 更新过程在后台线程进行,不影响主求解循环;
  • 设置性能监控:若微调后连续5步加速比下降,则回滚权重。

在某省级调度中心三个月实测中,模型自动适应了3次拓扑变更,全程无需人工干预,平均加速比维持在3.1倍以上。

5.3 硬件协同设计:为ASIC/FPGA定制的预条件子引擎

当算法成熟后,下一步是硬件卸载。我们与芯片团队合作,将MSS-CNN的核心算子(多尺度卷积+谱注意力)映射到FPGA:

  • 卷积核用Block RAM实现,避免外部DDR访问;
  • FFT模块复用Xilinx DSP48E2 slice,单周期完成128点FFT;
  • Cholesky重构用流水线化CORDIC算法,精度达FP32。

最终芯片面积仅12mm²,功耗3.2W,单次预条件子生成延迟0.18ms——比GPU方案再快1.7倍,且可嵌入保护装置等边缘设备。这印证了一个事实:Learned Preconditioning不仅是算法创新,更是软硬协同的新范式起点。

我在去年某能源峰会的闭门讨论中听到一句很实在的话:“别再问‘AI能不能解决优化问题’,要问‘优化问题怎么用AI重新定义’。” 这句话一直记着。Learned Preconditioning不是给老方法贴金,而是把内点法从“手工精密仪器”升级为“智能机电系统”——它依然遵循牛顿法的数学灵魂,但感知、决策、执行的每一个环节,都注入了数据驱动的进化能力。下次当你再看到一个收敛缓慢的优化问题,不妨想想:也许缺的不是更好的数学,而是一个懂得倾听问题心跳的预条件子。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 3:44:38

彻底搞懂Python的if __name__ == ‘__main__‘:从原理到工程实践

1. 这行代码到底是什么&#xff1a;先从一个新手最常见的问题聊起如果你学过几天Python&#xff0c;一定见过或者亲手写过这样一段代码&#xff1a;if __name__ "__main__":main()刚开始学的时候&#xff0c;网上所有教程都会告诉你"这么写就对了"&#x…

作者头像 李华
网站建设 2026/10/2 3:44:16

RTX3060跑H3漫剧生产流水线实战指南

1. 这不是“AI视频课”&#xff0c;而是一套可落地的漫剧生产流水线我第一次用 MiniMax H3 做出第一支 30 秒漫剧片段时&#xff0c;没敢发朋友圈——因为太像真人动画了。主角是只穿蓝背带裤的鹈鹕&#xff0c;骑着老式自行车穿过梧桐街&#xff0c;车轮转动、影子拉长、风吹动…

作者头像 李华
网站建设 2026/10/2 3:41:42

企业级AI交付实战:FDE工作流与Agent工程化落地

1. 项目概述&#xff1a;这不是又一个AI概念课&#xff0c;而是一份企业现场交付的“施工图纸”FDE、Agent、企业级AI落地——这三个词堆在一起&#xff0c;不是PPT里的漂亮气泡图&#xff0c;而是客户会议室里拍在桌上的三份文件&#xff1a;一份是IT部门发来的《系统集成接口…

作者头像 李华
网站建设 2026/10/2 3:41:37

Win11右键菜单回归经典:注册表、进程劫持与自动化三路径详解

1. 为什么Win11的右键菜单让人“闻着就腻”&#xff1f;——从“咖喱味”到经典回归的真实动因你点开资源管理器&#xff0c;右键一下&#xff0c;弹出来的不是熟悉的“新建文件夹”“复制”“粘贴”&#xff0c;而是一堆带图标、分组折叠、还带动画的“显示更多选项”按钮——…

作者头像 李华
网站建设 2026/10/2 3:41:29

VR产品总监实战指南:流程搭建、沟通换挡与避坑策略

VR产品总监这个岗位&#xff0c;听起来很风光&#xff0c;其实每天三分之二的时间都在处理两件事&#xff1a;流程漏洞和沟通扯皮。我接手过一个VR一体机项目&#xff0c;版本迭代排期已经定死了&#xff0c;结果美术说程序给的交互反馈不对&#xff0c;程序说硬件适配SDK更新导…

作者头像 李华
网站建设 2026/10/2 3:41:27

HER算法实战:用后见经验回放破解稀疏奖励强化学习难题

做强化学习这几年&#xff0c;我最大的感受是&#xff1a;环境给出的奖励&#xff0c;大多数时候是沉默的。你训练一个七自由度机械臂去抓取桌上的红色方块&#xff0c;跑完整个下午的仿真&#xff0c;奖励曲线纹丝不动——因为“成功抓取”这个事件在随机探索下发生的概率几乎…

作者头像 李华