梯度下降

3.7k 词

Gradient Descent ,Stochastic Gradient Descent 和Adaptive Moment Estimation

Gradient Descent

我们来一步一步推导前两轮(epoch)梯度下降更新过程,以你提供的代码为基础,展示每轮如何更新参数 ,​。我们使用如下训练集:

$$
初始化:

θ_0=0 \quad
θ_1​=0
学习率: \quad η=0.0001$$

每个样本的损失函数为:

对参数求导得:

GD:

image.png
image.png

image.png
image.png

Stochastic Gradient Descent

image.png

SGD 省略了因子 2,直接用:

每个样本更新时立即使用该梯度进行参数调整:

Adaptive Moment Estimation

Adam = 动量 + 自适应学习率

Adam 优化器非常聪明地将这两个想法结合了起来。它同时做了两件事:

  1. 它像 Momentum 一样,计算梯度的一阶矩估计(就是梯度的平均值,可以理解为速度)。
  2. 它像 RMSProp 一样,计算梯度的二阶矩估计(就是梯度平方的平均值,可以理解为颠簸程度或速度的变化)。

然后,它用这两个值来动态地、为每一个参数计算出独立的、最合适的更新步长。

最终效果:Adam 这辆智能小车,既有方向感(动量),又能感知地形(自适应学习率),所以它在绝大多数情况下都能又快又稳地找到山谷的最低点。

Warm Restarts (in SGD) 热重启

这是一种学习率调整策略,全称是 Stochastic Gradient Descent with Warm Restarts (SGDR)。传统的学习率调整策略通常是单调递减的。而 Warm Restarts 策略则是周期性地“重启”学习率

具体来说,学习率会从一个较高的初始值开始,按照一个预设的函数(如余弦函数)逐渐下降。当下降到最低点后,它会突然被重置回较高的初始值,然后开始下一轮的下降。这个过程就像在模型训练陷入一个局部最优点时,通过突然增大学习率来“踢它一脚”,帮助它跳出当前的局部最小值,去探索更广阔的参数空间,从而有机会找到一个更好的全局最优解。

GA遗传算法

场景:小偷的烦恼

想象一个小偷进入一个珠宝店,他有一个背包,最大承重是 10 公斤。店里有四件宝物,每件宝物的重量和价值如下:

宝物 重量 (kg) 价值 (元)
A (钻石) 5 12
B (黄金) 4 10
C (画作) 3 8
D (花瓶) 2 5

目标: 小偷应该如何选择宝物放入背包,才能在不超过背包承重(10kg)的前提下,让总价值最高

这个问题如果用暴力破解,需要计算 24=16 种组合。当宝物有几十件时,暴力破解就不可行了。这时,遗传算法就派上用场了。


遗传算法的解决步骤

第1步:基因编码 (Encoding)

首先,我们需要把一个“解决方案”(即一种拿宝物的组合)表示成一串“基因”,也就是染色体 (Chromosome)

最简单的方法是用一个长度为4的二进制字符串,每一位对应一件宝物。

  • 1 代表“拿这件宝物”

  • 0 代表“不拿这件宝物”

例如:

  • [1, 0, 1, 0] 代表:拿A(钻石)和C(画作),不拿B和D。

  • [0, 1, 1, 1] 代表:拿B(黄金)、C(画作)和D(花瓶)。

第2步:初始化种群 (Initialization)

遗传算法不是从一个解开始,而是从一个种群 (Population) 开始。我们随机生成一组初始的染色体(解决方案)。假设我们随机生成了下面4个个体组成了我们的初始种群:

  • 个体1: [1, 1, 0, 0]

  • 个体2: [0, 1, 1, 1]

  • 个体3: [1, 0, 1, 0]

  • 个体4: [0, 0, 1, 1]

第3步:适应度评估 (Fitness Evaluation)

现在,我们需要一个函数来评估每个个体(解决方案)的好坏,这就是适应度函数 (Fitness Function)

在这个问题里,适应度就是所选宝物的总价值。但有一个关键规则:

如果总重量超过背包承重(10kg),那么这个方案是无效的,适应度为 0。

我们来计算一下初始种群的适应度:

  • 个体1 [1,1,0,0]:

    • 重量: 5 + 4 = 9kg (≤ 10kg) -> 有效

    • 价值: 12 + 10 = 22

    • 适应度 = 22

  • 个体2 [0,1,1,1]:

    • 重量: 4 + 3 + 2 = 9kg (≤ 10kg) -> 有效

    • 价值: 10 + 8 + 5 = 23

    • 适应度 = 23

  • 个体3 [1,0,1,0]:

    • 重量: 5 + 3 = 8kg (≤ 10kg) -> 有效

    • 价值: 12 + 8 = 20

    • 适应度 = 20

  • 个体4 [0,0,1,1]:

    • 重量: 3 + 2 = 5kg (≤ 10kg) -> 有效

    • 价值: 8 + 5 = 13

    • 适应度 = 13

目前来看,个体2 [0,1,1,1] 是当前种群中最好的解决方案

第4步:选择 (Selection)

遵循“优胜劣汰”的自然法则,适应度越高的个体,越有可能被选中作为“父母”来繁衍下一代。

常见的选择方法是轮盘赌选择法。想象一个轮盘,每个个体的扇区大小与它的适应度成正比。适应度为23的个体2,扇区最大,最容易被指针选到。

假设经过选择,我们选中了个体2个体1作为父母进行繁殖。

第5步:交叉 (Crossover)

交叉是模拟生物繁殖,父母双方交换部分基因,产生全新的后代。

我们随机选择一个交叉点,比如在第2位基因后面。然后将两个父代染色体的后半部分进行交换。

  • 父代1: [0, 1 | 1, 1] (来自个体2)

  • 父代2: [1, 1 | 0, 0] (来自个体1)

交换|后面的部分,产生两个新的子代:

  • 子代1: [0, 1, 0, 0]

  • 子代2: [1, 1, 1, 1]

第6步:变异 (Mutation)

为了防止算法陷入局部最优(比如所有个体都长得差不多),我们需要引入变异,以一个很小的概率随机改变基因。

比如,我们对子代1进行变异:

  • 变异前: [0, 1, 0, 0]

  • 随机选择第4位进行变异(0 -> 1)

  • 变异后: [0, 1, 0, 1]

这个变异后的新个体 [0,1,0,1] 代表拿B和D,总重6kg,价值15,这是一个全新的、可能不错的解决方案!

第7步:新一代与循环

通过交叉和变异产生的新个体(子代)将组成新一代的种群。然后,算法回到第3步(适应度评估),对新种群进行评估,然后再次进行选择、交叉、变异。

这个过程周而复始,一代又一代地“进化”。


最终结果

经过很多代的进化后,种群中适应度最高的个体将趋于稳定。最终,算法可能会收敛到 [0,1,1,1] (价值23) 或者 [1,1,0,0] (价值22) 或者其他更好的解。在这个简单例子里,最优解就是 [0,1,1,1],总价值23。遗传算法通过模仿进化,很有可能找到这个最优解。

AHP和TOPSIS

  • AHP 是基于人的主观判断,核心在于“比较重要性”,强调结构化思考 + 权重提取
  • TOPSIS 是基于数据的客观距离计算,核心在于“谁更接近理想”,强调最优解的几何逼近
维度 AHP(层次分析法) TOPSIS(理想解法)
输入依赖 依赖专家主观判断(两两比较) 依赖方案原始数据矩阵(如成本、评分等)
核心思想 通过成对比较提取每个准则的重要性权重 选出离正理想解最近、离负理想解最远的方案
数学依据 特征值理论(判断矩阵的主特征向量) 欧几里得距离(几何空间距离)
输出结果 准则权重、方案得分 方案的贴近度 Ci,排序
数据需求 需要构建判断矩阵,规模太大效率低 只需标准化原始数据,不需要主观比较
一致性检验 需进行一致性比率 CR 检验 不需要一致性检验
适用场景 人工可比主观偏好强的情境(战略、政策等) 有客观指标、数据齐全,需数值化评估的情境(选产品)
优点 可量化主观偏好,结构清晰 简单直观、计算快速,适用性广
缺点 主观性强,维度多时构建判断矩阵困难 忽略指标之间可能的权重差异或相关性

TOPSIS(原始决策矩阵+每个指标的权重)
返回参数的排序

方案 价格(万元) 性能(分) 重量(kg) 续航(小时)
A 5 80 1.5 8
B 6 90 1.2 10
C 4.5 70 1.8 6
这反映了决策者对各个指标“重要程度”的主观或客观判断:

权重向量 ,

比如:

  • 价格 0.3(越低越好)
  • 性能 0.4(越高越好)
  • 重量 0.1(越低越好)
  • 续航 0.2(越高越好)