This commit is contained in:
2026-02-04 16:49:52 +08:00
commit 428016ade9
13 changed files with 1296 additions and 0 deletions

160
README.md Normal file
View File

@@ -0,0 +1,160 @@
# Benchmark 函数收敛性实验
## 优化器
| 优化器 | 类型 | 线型 | 颜色 |
|--------|------|------|------|
| SGD | 无动量 | 点线 | 红色 |
| Adagrad | 自适应 | 点线 | 橙色 |
| SGDM | 动量 | 虚线 | 绿色 |
| Adam | 自适应+动量 | 虚线 | 蓝色 |
| DMAdam | 自适应+动量 | 实线 | 黑色 |
DMAdam优化器代码实现见 `dmadam.py`。算法流程如下:
> **Algorithm 1: DMAdam**
>
> **Require:** $\eta_k > 0, \alpha_k>0,\beta_k\in(0,1),\epsilon>0,$
> Ensure: $x^1\in\R^d, m^0=0, v^0=0$
>
> 1. **while** k=1 to K **do**
> 2.   $g^k = \nabla f(x^k)$
> 3.   $m^k = \frac{m^{k-1} + \lambda_k \cdot g^k}{\sqrt{k+1}}$,   where $\lambda_k = \alpha_k \cdot \sqrt{k+1}$
> 4.   $v^k = \beta_k \cdot v^{k-1} + (1-\beta_k) \cdot ((g^k)^2 + \varepsilon_0)$,   where $\varepsilon_0 = \frac{\varepsilon}{1-\beta_k}$
> 5.   $x^{k+1} = x^k - \eta_k \cdot \frac{m^k}{\sqrt{v^k + \varepsilon}}$
> 6. **end while**
## 实验设置
- 迭代次数: 2000
- 其余优化器参数见各小节表格
- DMAdam优化器中:
$$
\begin{align*}
\eta_k &= \frac{\eta_0}{\sqrt{k}} \\
\beta_k &= 1-\frac{1}{\sqrt{k}}
\end{align*}
$$
---
## 1. Sphere 函数
$$f(x, y) = x^2 + y^2$$
- **全局最优**: $(0, 0)$,函数值 $0$
- **起始点**: $(-3, 4)$
### 优化器参数
| 优化器 | lr | beta1 | beta2 | momentum | eta0 |
|--------|-----|-------|-------|----------|------|
| SGD | 0.01 | - | - | - | - |
| Adagrad | 0.1 | - | - | - | - |
| SGDM | 0.01 | - | - | 0.9 | - |
| Adam | 0.1 | 0.9 | 0.999 | - | - |
| DMAdam | 0.1 | - | - | - | 3 |
![Sphere](results/Sphere.png)
---
## 2. Booth 函数
$$f(x, y) = (x + 2y - 7)^2 + (2x + y - 5)^2$$
- **全局最优**: $(1, 3)$,函数值 $0$
- **起始点**: $(-8, 8)$
### 优化器参数
| 优化器 | lr | beta1 | beta2 | momentum | eta0 |
|--------|-----|-------|-------|----------|------|
| SGD | 0.01 | - | - | - | - |
| Adagrad | 0.1 | - | - | - | - |
| SGDM | 0.01 | - | - | 0.9 | - |
| Adam | 0.1 | 0.9 | 0.999 | - | - |
| DMAdam | 0.1 | - | - | - | 3 |
![Booth](results/Booth.png)
### 收敛性分析
SGDM出现严重震荡在谷底来回摆动收敛极慢。SGD 和 Adagrad 收敛缓慢但稳定。Adam 和 DMAdam 表现最佳其中DMAdam路径最短直接沿山谷滑向最优点。
---
## 3. Matyas 函数
$$f(x, y) = 0.26(x^2 + y^2) - 0.48xy$$
- **全局最优**: $(0, 0)$,函数值 $0$
- **起始点**: $(4, -4)$
### 优化器参数
| 优化器 | lr | beta1 | beta2 | momentum | eta0 |
|--------|-----|-------|-------|----------|------|
| SGD | 0.01 | - | - | - | - |
| Adagrad | 0.1 | - | - | - | - |
| SGDM | 0.01 | - | - | 0.9 | - |
| Adam | 0.1 | 0.9 | 0.999 | - | - |
| DMAdam | 0.1 | - | - | - | 3 |
![Matyas](results/Matyas.png)
---
## 4. Beale 函数
$$f(x, y) = (1.5 - x + xy)^2 + (2.25 - x + xy^2)^2 + (2.625 - x + xy^3)^2$$
- **全局最优**: $(3, 0.5)$,函数值 $0$
- **起始点**: $(2, 2)$
### 优化器参数
| 优化器 | lr | beta1 | beta2 | momentum | eta0 |
|--------|-----|-------|-------|----------|------|
| SGD | 0.01 | - | - | - | - |
| Adagrad | 0.1 | - | - | - | - |
| SGDM | 0.01 | - | - | 0.9 | - |
| Adam | 0.1 | 0.9 | 0.999 | - | - |
| DMAdam | 0.1 | - | - | - | 3 |
![Beale](results/Beale.png)
### 收敛性分析
SGDM发散完全飞出可视范围无法收敛。SGD 收敛极慢几乎停滞。Adagrad 收敛慢在相同迭代次数下并未到达全局最小值点。Adam 收敛但路径迂回。DMAdam 是唯一直接收敛至全局最优 $(3, 0.5)$ 的优化器,路径干净利落。
---
## 5. Goldstein-Price 函数
$$f(x,y) = [1 + (x+y+1)^2(19 - 14x + 3x^2 - 14y + 6xy + 3y^2)]$$
$$\times [30 + (2x-3y)^2(18 - 32x + 12x^2 + 48y - 36xy + 27y^2)]$$
- **全局最优**: $(0, -1)$,函数值 $3$
- **起始点**: $(-0.5, 1.5)$
- **特点**: 多个局部极值,地形复杂
### 优化器参数
| 优化器 | lr | beta1 | beta2 | momentum | eta0 |
|--------|-----|-------|-------|----------|------|
| SGD | 0.01 | - | - | - | - |
| Adagrad | 0.1 | - | - | - | - |
| SGDM | 0.01 | - | - | 0.9 | - |
| Adam | 0.1 | 0.9 | 0.999 | - | - |
| DMAdam | 0.1 | - | - | - | **8** |
![Goldstein-Price](results/Goldstein-Price.png)
### 收敛性分析
SGD、SGDM几乎无移动Adagrad收敛速度慢。Adam陷入局部极值。只有DMAdam成功收敛至全局最优点 $(0, -1)$,展现了其在复杂地形中逃逸局部极值的能力。