深度学习--优化算法
可供参考
Momentum
Momentum 并不是单独看当前梯度,而是把之前的梯度按指数衰减加权平均,形成“惯性”。这就像物理中物体的动量一样,方向不会轻易改变。
Momentum 算法通过加权结合历史梯度,使得参数更新既考虑当前梯度,又受先前梯度方向的影响,从而在震荡方向上抑制更新,在一致方向上加速前进。
NSGA-II(带精英策略的非支配排序遗传算法)
多目标优化算法,主要用于解决存在多个(通常是相互冲突的)优化目标的问题。这些目标往往相互矛盾的(提高一个会导致另一个降低),不存在唯一“最优解”,而是存在一组“最优折衷解”,这组解被称为 帕累托最优解集。
帕累托最优:在不使至少一个其他目标变差的情况下,无法再改进任何一个目标。
帕累托前沿:这些帕累托最优解在目标函数空间中形成的曲面或曲线。
NSGA-II目的是寻找一个尽可能接近真实帕累托前沿的、分布均匀的解集,为决策者提供多种可行的选择方案。
NSGA-II的核心思想在于其独特的选择机制,它通过两个关键步骤非支配排序(将种群中的解进行分层,优先选择好的“层级”)和拥挤度计算(同一层级内,优先选择能增加种群多样性的解)来决定哪些个体(解决方案)能够进入下一代
详细工作流程
假设有一个初始种群 P_t(第t代)。
- 创建子代
使用遗传算法的选择、交叉、变异算子,从父代种群 P_t 生成一个同样大小的子代种群 Q_t。 - 合并种群
将父代 P_t 和子代 Q_t 合并成一个更大的种群 R_t(大小为 2N)。 - 非支配排序
对合并后的种群 R_t 进行非支配排序。
非支配即:解A支配解B,当且仅当:在所有目标上,解A都不差于解B,并且至少在一个目标上严格优于解B。
例如:有两个目标和两个解。解1:(成本=10万,性能=90分),解2:(成本=12万,性能=85分)。那么解1就支配解2,因为它的成本更低、性能更高。
排序过程:
找出 R_t 中所有不被任何其他解支配的解,将它们标记为第一非支配层(F1)。这是最好的层级。
暂时移除F1层,再从剩下的解中找出所有不被支配的解,标记为第二非支配层(F2)。
重复此过程,直到所有解都被划分到某一层(F1, F2, F3, …)。 - 拥挤度计算
对于同一非支配层内的解,计算每个解的拥挤度。
拥挤度:表示一个解在目标空间中与其相邻解之间的密度。简单来说,它衡量一个解周围有多“拥挤”。
计算方法:对于每个目标函数,对该层内的解进行排序,计算某个解与其前后两个解在每个目标上的距离差,并将这些距离差相加。拥挤度越大,说明该解所在区域越“稀疏”。 - 精英选择
现在从大小为2N的 R_t 中,选出N个最好的解作为新的父代 P_{t+1}。
选择方法:
首先,将第一非支配层F1的全部个体加入新种群。
如果还没凑够N个,再加入第二非支配层F2的全部个体。
以此类推,当加入第Fk层时,如果加入后总数量超过N了,那么就需要对Fk层内的解进行筛选。
筛选依据:保留Fk层中拥挤度较大的解。因为拥挤度大意味着分布稀疏,这样做可以保证种群的多样性,使最终得到的帕累托前沿分布更均匀。 - 循环
用新选出的种群 P_{t+1} 替换原来的 P_t,重复步骤一至五,直到满足终止条件(如达到最大迭代次数)。
NSGA-II的优势(为什么它如此成功?)
快速非支配排序算法: 采用了高效的排序策略,降低了计算复杂度。
精英保留策略: 将父代和子代合并竞争,保证了好的个体不会丢失,从而加速了优化过程并保证了收敛性。
拥挤度比较算子: 无需指定共享参数,就能自动维持种群的多样性,使解在帕累托前沿上均匀分布。
简单有效: 概念清晰,实现相对简单,且在众多问题上表现优异。
NSGA-II通过其核心的 “非支配排序” 和 “拥挤度计算” 机制,巧妙地平衡了多目标优化中的两个核心任务:
收敛性: 迫使种群向帕累托前沿逼近。(通过非支配排序保证)
多样性: 迫使种群在帕累托前沿上均匀分布。(通过拥挤度计算保证)
MOEA/D(多目标进化算法分解法, Multi-Objective Evolutionary Algorithm based on Decomposition)
用于解决三目标优化问题(能量、成本、时间)。
它不是直接通过 Pareto 支配关系比较个体优劣,而是将多目标问题分解成多个加权子问题,在每个子问题邻域内协同进化。
将三目标问题分解为多个线性加权的标量优化子问题。每个权重向量相加为1。权重用于在每一代中指导个体朝不同目标方向优化,保证目标空间的均匀覆盖。
通过启发式方法生成初始可行解,而非纯随机初始化,提高初始质量。
每个权重向量代表一个“子问题”,通过欧式距离找到与其相似的权重向量,组成邻域。
neighborhoods[i] 存储了与第 i 个权重向量最相似的 T 个子问题索引。
后续每个子问题只与其邻域内的解进行交叉与替换,提升局部收敛与并行性。
标量化函数(Tchebycheff 函数)衡量解 x 在某一子问题方向(由权重向量决定)上的适应度。值越小表示越好。
主循环逻辑每一代包含以下步骤:
- 选择父代(邻域内选择)每个子问题 i 从其邻域中随机选出两个父母个体。
- 使用自适应交叉与自适应变异(来自 ToolsLib),根据种群分布自动调整交叉概率与变异强度;增强局部搜索与多样性平衡。
- 理想点更新z_star[j] 保存当前种群中第 j 个目标的最小值(即理论最优点)。
- 邻域更新,对于子问题 i 的邻域内的每个子问题 j:如果新个体 c 在 j 的加权标量化值更小;则用 c 替换邻域中的原解。每个解同时参与若干邻域的改进,使解之间协同进化。
