优化算法解决的是“怎样找到更好的解”,评价指标回答的是“什么样的结果才算好”。二者需要配合,却不能混为一谈:训练损失下降,不一定意味着泛化能力提高;一次运行找到较低的目标值,也不足以说明一种算法普遍优于另一种。
本文根据原稿《EA Method》整理。原稿署名魏晓辰,日期为 2025 年 11 月 23 日;本文为校订后的博客版。内容围绕连续优化展开,保留 BFGS、Adam、PSO、DE 与 CMA-ES 的核心原理,并补齐评价指标的适用条件。
阅读导航: 算法地图 · BFGS · Adam · PSO · DE · CMA-ES · 分类指标 · 回归指标 · 排序与聚类 · 实验比较 · 校订说明。
一、算法地图:先识别问题,再选择工具
1. 优化问题的基本组成
以最小化问题为例:
其中, 是决策变量, 是目标函数, 是可行域。最大化问题可以改写为最小化 。选算法前,应先明确:
- 变量类型: 连续、离散,还是混合变量?各维的尺度是否相近?
- 可用信息: 能否计算可靠梯度?一次函数评估有多昂贵?是否有噪声?
- 约束与目标: 是否有边界、等式或不等式约束?是单目标还是多个相互冲突的目标?
- 计算预算: 能进行多少次评估?能否并行?需要多快给出结果?
下面的分类按主要机制组织,同一种方法也可能同时属于其他维度的分类。例如,CMA-ES 既是进化策略,也是无导数随机搜索方法。
| 方法家族 | 代表方法 | 主要信息与机制 | 需要注意 |
|---|---|---|---|
| 一阶梯度法 | GD、SGD、Momentum、Adam | 利用梯度或随机梯度更新参数 | 梯度质量、学习率与随机噪声 |
| 二阶与拟牛顿法 | Newton、BFGS、L-BFGS | 利用曲率或曲率近似改善方向 | 正定性、线搜索、存储成本 |
| 无导数局部搜索 | Nelder–Mead、模式搜索 | 用函数值比较更新搜索结构 | Nelder–Mead 不属于梯度法 |
| 群智能 | PSO、ACO | 个体通过记忆或共享信息搜索 | 编码、拓扑与停滞;不同方法适用变量不同 |
| 进化计算 | GA、DE、ES、CMA-ES | 选择、变异、重组或分布更新 | 评估预算、种群多样性与约束处理 |
| 随机单轨迹搜索 | 模拟退火 | 随温度变化接受部分较差移动 | 不宜直接归为进化算法 |
| 多目标优化 | NSGA-II、MOEA/D、GDE3 | 近似 Pareto 前沿或分解子问题 | 目标数量与决策维度是两个概念 |
| 代理辅助与贝叶斯优化 | GP 代理、采集函数方法 | 在昂贵评估之间利用预测模型选点 | 代理误差、噪声及高维困难 |
| 约束优化 | SQP、内点法 | 利用约束结构求可行改进 | SQP 面向非线性约束问题,不等同于线性规划 |
强化学习通常研究序列决策中的策略学习。它可以调用优化器,也可以辅助选择优化动作,但不应仅因“能够寻找策略”就与上述连续黑箱优化器视为同一层级的可互换工具。SciPy 的优化分类可作为查找具体求解器的入口。
2. 五种核心方法如何分工
| 方法 | 是否使用梯度 | 维护的主要状态 | 较合适的起点场景 |
|---|---|---|---|
| BFGS / L-BFGS | 是 | 曲率近似或少量历史向量 | 光滑、梯度可靠的局部优化 |
| Adam | 是,允许随机梯度 | 一阶矩与二阶原点矩 | 小批量神经网络训练 |
| PSO | 否 | 粒子位置、速度、历史最好位置 | 有限维连续黑箱搜索的基线 |
| DE | 否 | 实数种群与差分变异 | 有界连续黑箱优化 |
| CMA-ES | 否 | 均值、步长、协方差与演化路径 | 存在变量相关性的连续黑箱问题 |
学习时可先理解梯度下降与线搜索,再读 BFGS 和 Adam;随后用 PSO、DE 理解群体搜索,最后进入 CMA-ES 的分布自适应。这里的顺序是学习建议,不是性能排名。高维梯度训练、昂贵仿真和多目标搜索的评价标准不同,不存在脱离任务条件的“最佳五种算法”。
二、BFGS:用梯度变化估计曲率
1. 从牛顿方向到拟牛顿方向
记 。牛顿法通过求解线性方程得到方向:
当 Hessian 可逆时可以形式化地写成逆矩阵乘梯度,但实现通常求解方程而不显式求逆。非凸问题中的 Hessian 可能不正定,此时牛顿方向也未必是下降方向。
BFGS 不直接计算 Hessian,而是维护一个近似。本文统一记 为 Hessian 近似, 为逆 Hessian 近似,避免与真实 Hessian 混用:
若 正定且 ,则 ,因此该方向为下降方向。
2. 割线条件与更新公式
定义位置变化和梯度变化:
拟牛顿割线条件要求新近似解释最近一次变化:
一种向量关系不足以唯一确定矩阵。BFGS 在满足割线条件的同时,以秩二修正保留原有曲率信息:
实际采用逆近似时,令 ,则
这是矩阵公式,不意味着应使用通用矩阵乘法直接计算两个括号;利用秩更新结构可将更新成本控制在 。
3. 为什么曲率条件重要
当 正定且 时,标准 BFGS 更新保持正定性。线搜索不仅决定步长,也帮助满足这一条件。Wolfe 条件为
由于 ,下降方向下有
强 Wolfe 条件将第二个条件替换为梯度方向导数的绝对值约束。面对舍入误差、噪声或过小的曲率内积,实现还需采用跳过更新或阻尼等保护,不能直接除以接近零的量。SciPy BFGS 文档提供了相应策略。
4. 实现流程与停止条件
- 选择初值 ,设置正定 (例如单位矩阵),计算 。
- 检查梯度范数、评估预算和数值状态;满足停止条件则返回当前解。
- 计算 ,通过线搜索得到 。
- 计算新位置、新梯度及 。
- 检查曲率条件,进行 BFGS 更新或执行约定的数值保护。
- 重复上述过程,并记录终止原因。
表示近似一阶驻点条件;在非凸问题中不能据此宣称已找到全局最小值,甚至不能排除鞍点。BFGS 的收敛结论依赖函数性质和线搜索等假设,不能仅凭“光滑且有下界”就承诺任意非凸问题的全局收敛。
5. L-BFGS 与适用边界
完整 BFGS 存储 矩阵,空间成本为 。L-BFGS 仅保留最近 组 ,通过两层循环计算方向,存储与主要向量运算成本约为 。有边界约束时,应考虑支持边界的 L-BFGS-B,而不是直接把无约束 BFGS 的结果裁进可行域。
L-BFGS 常使用最近曲率对确定初始逆近似的尺度,例如 。这需要先获得曲率对,不能在首次迭代前引用尚不存在的 。
三、Adam:对随机梯度做逐坐标自适应更新
1. 一阶矩与二阶原点矩
设 是参数 处的当前小批量梯度。初始化 ,时间索引从 开始,每次更新只递增一次:
表示逐元素乘法。 平滑梯度方向, 平滑梯度平方;后者是二阶原点矩估计,不是方差,也不是 Hessian 估计。
2. 初始偏差修正与参数更新
零初始化会使早期矩估计偏小。Adam 使用
在相应矩保持不变的假设下,这一修正消除零初始化造成的期望偏差;实际训练中的梯度分布在变化,不能把它理解为任意时刻都无偏地估计当前梯度统计量。
原始 Adam 的更新为
除法与平方根都逐坐标进行, 位于根号外。将其放入根号属于不同数值约定,比较实现时应检查清楚。原始 Adam 论文给出了算法定义。
3. 怎样理解自适应步长
分母对不同坐标的历史梯度尺度进行归一化,但“大梯度坐标的实际更新一定更小”并不成立,因为分子 也随梯度变化。 接近 1 意味着更长的平方梯度记忆,并不自动令分母成为常数或使 Adam 等价于 SGD。
常用起点是 、、、。这些不是所有模型的最优配置;学习率调度、批量大小、精度、梯度裁剪和正则化都会影响训练。
4. AdamW、收敛与泛化
对 Adam 而言,把 加进梯度的 L2 正则化,与参数独立衰减通常不等价。AdamW 将权重衰减从自适应梯度更新中分离,其简化形式为
这里的矩估计使用未加入 L2 项的损失梯度;哪些参数应用衰减还取决于训练配置。AdamW 论文解释了这一差别。
Adam 不具有不附条件的收敛保证。Reddi 等人的研究给出了原算法不收敛的反例,并提出 AMSGrad 等修正。训练速度、最终训练损失和测试表现应分别比较;不能预先断言 Adam 或 SGD 总有更好的泛化能力,也不应把“后期切换 SGD”当作普适规则。
四、PSO:位置、速度与群体记忆
1. 个体最优是位置,不是索引
粒子 在第 代的位置和速度为 。为避免记号歧义,先定义历史最优时刻,再取出对应位置:
全局最优记忆为
若目标值相同,可固定采用保留旧记忆的规则。直接把对时间或粒子编号的 写成位置向量,会造成类型错误。
2. 全局最优惯性权重版本
惯性项延续运动,认知项吸引粒子回到自身较好位置,社会项吸引粒子靠近群体记忆。随机向量各分量从 抽样,并在粒子、坐标和迭代间独立更新。这是常见的 global-best 版本;邻域拓扑版本共享的信息不同。
3. 同步更新流程
- 在可行域内初始化位置,设置速度,评估所有粒子并建立 。
- 冻结本代 和各粒子的旧状态,计算所有新速度与候选位置。
- 执行边界处理后再评估目标函数。边界规则应明确,例如位置截断,并将越界坐标的速度置零。
- 用新评估更新每个粒子的历史最优,再统一更新群体最优。
- 根据评估预算、目标阈值或停滞条件停止,返回实际保存的历史最佳可行解。
逐粒子立即更新并共享新的全局最优也可以形成异步变体,但结果可能受处理顺序影响,不能与上述同步流程混写。提前终止时应返回当前历史最优,而不是并未运行到的最后一代变量。
4. 收缩因子与参数边界
收缩因子版本常写为
例如 时,。展开括号后,对应的惯性系数为 ,两项加速系数约为 ;不能把括号内参数与展开后的参数直接混用。收缩分析约束运动稳定性,不等于证明找到了目标函数的全局最优。Clerc 与 Kennedy 的论文讨论了该构造。
PSO 可能发生群体过度集中和停滞。改变拓扑、重启或调整参数都是待实验验证的策略;“增大某个参数必然增强全局搜索”过于简单。
五、DE:用种群差分产生候选解
1. DE/rand/1/bin 的基本设定
考虑盒约束 。种群大小为 ,至少需要 ,才能为每个目标个体选择三个互不相同且不同于自身的索引。
对目标向量 ,选择 ,构造供体向量
差分来自当前种群,因此搜索尺度会随种群分布改变。供体是一个候选位置向量,不是只有方向意义的单位向量。
2. 二项式交叉与一对一选择
随机指定坐标 ,然后对每个坐标抽取 :
这里的 binomial crossover 应译作二项式交叉,并不意味着变量是二进制编码。强制坐标保证至少采用一个供体分量,但若该分量数值与父代相同,仍不能保证试验向量与父代数值不同。
对越界候选执行预先约定的修复,得到 ,再选择
无噪声且评估一致时,这个选择保证每个槽位保存的目标值不升高;有噪声时,单次测量上的改进并不保证真实期望目标改进。
3. 一代内使用同一个父代种群
- 初始化可行种群并缓存各自目标值。
- 冻结父代种群,对每个个体生成差分供体。
- 交叉、修复越界、评估试验个体,进行一对一选择。
- 所有个体处理完成后,将新种群整体替换父代。
- 在评估预算或停止条件满足时返回历史最佳可行解。
“立即更新”与“整代更新”是不同变体;使用并行评估时尤其要明确。SciPy 的 DE 文档区分了这些行为,并列出边界与约束相关参数。
4. 常见变体与调参
| 变体 | 供体构造 | 主要差异 |
|---|---|---|
| DE/rand/1 | 随机基向量,一组差分 | |
| DE/best/1 | 最佳个体作为基向量 | |
| DE/current-to-best/1 | 在当前个体上加入朝向最佳的项 | |
| DE/rand/2 | 两组差分,需要更多不同索引 |
指数交叉复制一段连续坐标,并按维度循环回绕;至少复制首个坐标,后续是否延长由交叉率决定。它与逐坐标独立选择的二项式交叉不同。
、、种群规模和评估预算相互影响。较大的种群会消耗更多评估,较低的交叉率会改变变量间联动。发现早熟后不应机械地减小 ;先检查多样性、变量尺度、边界修复和预算,再比较重启或自适应参数方案。
六、CMA-ES:学习搜索分布的尺度与形状
1. 基本版本与采样分布
本节采用正重组权重的基本 CMA-ES,不包含 active CMA-ES 的负权重更新。记维度为 ,第 代的分布为
是均值, 是全局步长, 是正定的形状矩阵;实际采样协方差是 。若 ,可采样 ,再令 。
2. 选择与均值更新
将候选按目标值升序排列, 表示第 名。选择前 个,令 且 :
衡量权重的有效平均规模,不是实际入选个体数。常见起点是 、,并对随排名递减的对数权重归一化。具体默认值应与所用实现保持一致。
3. 步长演化路径
初始化 。使用当前分布的逆平方根对均值移动进行白化:
令 ,可用近似 。更新步长:
路径比随机游走基准更长,通常意味着连续选择的方向具有相关性,从而倾向扩大步长;这里比较的是白化路径统计量,不是直接比较原坐标中的移动速度。
4. 协方差路径与漏项修正
先计算指示量
再从 更新协方差路径:
正权重版本的协方差更新为
原稿保留了 门控,却漏掉与门控对应的协方差补偿项。上式中的 用于补偿关闭路径累积时的方差损失,不能与带门控的其他公式随意拆开。Hansen 教程与参考实现可用于核对更新顺序。
5. 参数、流程与数值实现
学习率与阻尼需成套使用。以下为一组常用的基本设置,不等同于每个库的默认值:
一代的顺序是:从旧分布采样 → 评估并排序 → 计算归一化位移与新均值 → 更新两条路径、步长和协方差 → 为下一代准备分解。所有归一化位移使用旧 ,白化使用旧 ;提前覆盖这些量会改变算法。
完整协方差需要 存储;普通密集特征分解一次为 。延迟分解可摊薄成本,但不能将所有操作一概写成 。实现还需维护对称性、检查特征值和条件数,并明确边界与噪声处理。
6. 不变性与能力边界
CMA-ES 根据排名更新,因此对严格递增的目标值变换具有排序不变性。适当对应初始状态时,它对平移、旋转等坐标变化具有有用的不变性;但不应把标准步长自适应与任意边界处理一并宣称为无条件的任意仿射不变。
协方差学习有助于适应变量相关性和狭长谷地,并不保证所有非凸、多峰或有噪声问题都能求得全局最优。实际使用应设定合理的变量尺度、初始均值与步长,必要时比较重启、对角或有限记忆版本。返回值应是已评估的最佳可行解;未经评估的最终均值不能直接称为历史最佳。作者维护的实现说明列出了边界、噪声和重启等扩展。
七、分类与概率预测:先约定正类
1. 混淆矩阵与阈值指标
约定行表示预测、列表示真实标签:
| 预测 / 真实 | 正类 | 负类 |
|---|---|---|
| 正类 | TP | FP |
| 负类 | FN | TN |
TP 为正确识别的正类,FP 为误报,FN 为漏报,TN 为正确识别的负类。所有基于类别标签的指标都依赖阈值或决策规则。
| 指标 | 定义 | 解释 |
|---|---|---|
| Accuracy | 全部预测中正确的比例 | |
| Precision | 预测为正的样本有多少是真正类 | |
| Recall / TPR | 真实正类有多少被检出 | |
| Specificity / TNR | 真实负类有多少被正确排除 | |
| FPR | 真实负类中的误报率 | |
| FNR | 真实正类中的漏报率 | |
| Balanced Accuracy | 二分类两类召回率的平均 | |
| IoU / Jaccard | 正类集合的交并比 |
任何分母为零的情形都需要约定。数学上的未定义值,与库选择返回 0、1、NaN 或发出警告,是不同层面的处理;报告中应注明缺失类别和零除策略。
2. F 分数与 MCC
增强对召回的偏重, 更偏重精确率。F 分数不使用 TN,因此不能完整表达所有错误成本。
MCC 在非退化情形中取值于 ,可视为二元预测标签与真实标签的相关系数。零相关不等于证明预测机制“随机”;分母为零时仍需声明处理规则。
3. 概率损失
二分类中,, 为预测正类概率:
多分类中, 为 one-hot 标签, 为归一化预测概率:
错误且完全确信的预测会产生无穷损失。数值实现通常使用稳定的 logits 形式,或按明确的精度策略裁剪概率;不要在手写计算中忽略 。
二分类 Brier 分数为
它评价概率预测的平方误差,越小越好;它同时受到校准与区分能力等因素影响,不是只测校准的单一指标。
4. ROC-AUC:同分样本计半分
设 为越大越偏向正类的分数, 为正负样本数。当两类都存在时,经验 AUC 可写成
原稿漏掉了同分项。若所有样本分数相同,标准 AUC 应为 ,而不是 。AUC 衡量排序区分能力,不直接评价概率校准或某个业务阈值下的效果;只有一个真实类别时,该定义不成立。
5. 多分类平均方式
先对每一类进行 one-vs-rest 统计,再聚合:
Micro-F1 先汇总 TP、FP、FN,再计算 F1。在包含全部类别的单标签多分类任务中,它等于 Accuracy,容易由多数类主导,不能称为“尤其适合极不平衡数据”。Macro-F1 对类别等权,Weighted-F1 按真实类别支持数加权;多标签任务下,上述等式不再普遍成立。实现细节可对照 scikit-learn 指标文档。
八、回归指标:量纲、零值与基线
令真实值、预测值分别为 ,样本均值为 。
MSE 的单位是目标量纲的平方;RMSE、MAE 与目标量纲相同。平方误差对大误差施加更强惩罚,MAE 对极端误差的惩罚增长较慢,但不能据此断言某个指标总是更好。
1. 百分比误差的陷阱
当 时未定义,接近零时会放大误差;不同库的缩放约定也可能不同。本文使用百分数形式,不能把小数比例输出直接当成百分数数值。
采用绝对值分母的一种 sMAPE 定义为
按此定义,每项至多为 ;真实与预测同时为零时,需要约定该项为零或采取其他明确策略。sMAPE 存在不同定义,比较实验必须写出公式。
2. 决定系数与调整决定系数
可以为负,表示在该数据集上比恒定预测其真实均值更差。真实值恒定时分母为零,不能直接套用普通解释。高训练集 不证明测试集预测有效,更不表示因果解释成立。
在线性回归等适当语境中,含截距、 个解释变量且 时常用
调整 对变量数作惩罚,但不能把神经网络参数量随意代入,替代交叉验证或独立测试。
九、排序、推荐与聚类指标
1. DCG 与 NDCG
采用指数增益的定义,排名位置 的非负相关性等级为 :
IDCG 使用相同候选集合、增益函数和截断位置下的理想排序。在非负增益且 IDCG 大于零时,NDCG 位于 。没有相关文档时需另定规则。还有使用线性增益的版本,因此仅写“NDCG”而不交代增益定义可能造成比较歧义。
2. AP 与 MAP
对一个查询,设 为评估集合中的相关文档总数, 为截至位置 的精确率,:
这里是基于相关文档排名的 AP。截断 AP、插值 AP 与部分检测任务中的 mAP 另有约定; 的查询是排除还是记零,也必须说明。不要只凭名称相同就直接比较数值。
3. 簇内平方和与轮廓系数
SSE 衡量簇内紧凑程度,但增加簇数通常就能降低它,不能单独用于比较不同 的聚类质量。特征尺度与距离度量也会改变结果。
对非单点簇样本, 是与同簇其他样本的平均距离; 是到各其他簇的平均距离中的最小值:
轮廓系数通常要求至少两个簇且簇数少于样本数。单点簇一般约定该样本得分为零, 也要处理。更高的分数表示按所选距离得到的分离更好,不保证符合领域语义。
4. Rand Index 不等于 MCC
比较两种划分时,可对所有无序样本对统计:两种划分都认为同簇记作 TP,都认为异簇记作 TN,只在一种划分中同簇记作 FP 或 FN。于是
这是样本对层面的 Rand Index;将这些计数代入 MCC 得到的是另一种相关性度量,不能继续称为 RI。Adjusted Rand Index 进一步校正偶然一致性,也不是简单地把 RI 减去一个固定常数。
十、怎样比较优化算法
前面的分类、回归和排序指标评价预测结果;比较优化器还需要说明搜索过程。不同方法每一代的成本不同,所以只比较迭代次数会失真。
| 比较维度 | 应记录的信息 |
|---|---|
| 目标质量 | 最佳可行目标值;已知最优值时的误差或差距 |
| 计算预算 | 函数评估次数、梯度评估次数、墙钟时间、硬件与并行度 |
| 随机性 | 多个随机种子的分布、中位数、离散程度与失败比例 |
| 可行性 | 约束违反量、可行率与边界处理规则 |
| 终止原因 | 达到预算、满足阈值、停滞,还是数值失败 |
| 预测任务 | 相同数据划分;调参使用验证集,测试集用于最终评估 |
公平比较应固定任务、预算与评价协议。对随机方法报告多次运行;有噪声的目标最好对候选解独立复评,避免把偶然低估当成算法进步。曲线横轴优先使用评估次数或实际耗时,并说明调参成本是否计入预算。
十一、原稿末尾的光伏场景生成片段
原稿末尾另附“数值天气预报(NWP)外生修正的状态—分位混合场景生成”伪代码。它与前面的优化算法综述没有建立完整联系,且引用的初始分布公式不存在,Softmax-NHMC 转移模型、特征向量和辐照度换算算子也未定义。因此这里保留其研究思路摘要,将其标为未完成附录,不作为可复现算法发布。
这段流程的意图是:根据天气特征生成状态转移概率,采样状态轨迹;在状态条件下抽取分位数得到辐照度场景;经过外生修正、倾斜面辐照度换算和温度修正后得到功率场景,再统计经验分位数。
要形成独立文章,至少需要补充以下内容:转移概率和初始分布的定义与估计;条件分位函数的单调性及物理边界;辐照度与温度参数的单位;夜间处理;GHI 到 POA 所需的太阳位置、直散分量或分解模型;额定功率属于直流还是交流侧;以及参数在训练集上的拟合方式。
此外,逐时独立抽取分位随机数,仅通过状态链引入时间相关性,不能自动保证状态之外的连续残差相关性或合理的爬坡分布。这是建模假设,需要用实际数据验证,不能由伪代码本身证明。
十二、校订说明与延伸阅读
本次整理不是将 LaTeX 原样转成网页,主要改动包括:
- 将算法分类与适用性合并,移除无来源的星级排名和缩写堆叠,纠正 Nelder–Mead、SQP、模拟退火等归类。
- 统一 BFGS 的 Hessian 与逆近似记号,补充曲率条件、初始化时序和驻点的解释。
- 修正 Adam 的时间索引、二阶矩解释,以及 L2 正则化与 AdamW 的区别。
- 修正 PSO 最优位置的索引写法,明确 PSO、DE 的同步更新和边界处理。
- 补全 CMA-ES 门控对应的协方差修正项,区分形状矩阵与实际协方差,收紧复杂度和不变性表述。
- 为 AUC 加入同分项,纠正 Micro-F1、RI 的解释,补充零分母、量纲、截断和平均方式等评价条件。
- 将缺失定义的光伏片段单列为未完成附录,保留研究线索,避免补造结论。
本文覆盖原稿中的核心主题,不声称穷尽所有变体或收敛定理。公式均对应文中声明的版本;实现时应继续核对所选库的参数约定。原始文档与图片保持不变,封面取自指定的东方图片目录并按页面比例裁切展示。
