## 15.4 算法在等高线图上的效果比较
### 15.4.1 模拟效果比较
为了简化起见,我们先用一个简单的二元二次函数来模拟损失函数的等高线图,测试一下我们在前面实现的各种优化器。但是以下测试结果只是一个示意性质的,可以理解为在绝对理想的条件下(样本无噪音,损失函数平滑等等)的各算法的表现。
$$z = \frac{x^2}{10} + y^2 \tag{1}$$
公式1是模拟均方差函数的形式,它的正向计算和反向计算的`Python`代码如下:
```Python
def f(x, y):
return x**2 / 10.0 + y**2
def derivative_f(x, y):
return x / 5.0, 2.0*y
```
我们依次测试4种方法:
- 普通SGD, 学习率0.95
- 动量Momentum, 学习率0.1
- RMPSProp,学习率0.5
- Adam,学习率0.5
每种方法都迭代20次,记录下每次反向过程的(x,y)坐标点,绘制图15-8如下。
![](https://aiedugithub4a2.blob.core.windows.net/a2-images/Images/15/Optimizers_sample.png)
图15-8 不同梯度下降优化算法的模拟比较
- SGD算法,每次迭代完全受当前梯度的控制,所以会以折线方式前进。
- Momentum算法,学习率只有0.1,每次继承上一次的动量方向,所以会以比较平滑的曲线方式前进,不会出现突然的转向。
- RMSProp算法,有历史梯度值参与做指数加权平均,所以可以看到比较平缓,不会波动太大,都后期步长越来越短也是符合学习规律的。
- Adam算法,因为可以被理解为Momentum和RMSProp的组合,所以比Momentum要平缓一些,比RMSProp要平滑一些。
### 15.4.2 真实效果比较
下面我们用第四章线性回归的�