2.7.2.4 较少梯度方法

2.7.2.4.1 打靶法: Powell算法

接近梯度方法

状态糟糕的二元函数:

Powell法对低维局部糟糕状况并不很敏感

2.7.2.4 较少梯度方法 - 图1

2.7.2.4 较少梯度方法 - 图2

状况糟糕的极端非二元函数:

2.7.2.4 较少梯度方法 - 图3

2.7.2.4 较少梯度方法 - 图4

2.7.2.4.2 单纯形法: Nelder-Mead

Nelder-Mead算法是对高维空间的对立方法的归纳。这个算法通过改进单纯形来工作,高维空间间隔和三角形的归纳,包裹最小值。

长处: 对噪音很强壮,他不依赖于计算梯度。因此,它可以在局部光滑的函数上工作,比如实验数据点,只要他显示了一个大规模的钟形行为。但是,它在光滑、非噪音函数上比基于梯度的方法慢。

状况糟糕的非二元函数:

2.7.2.4 较少梯度方法 - 图5

2.7.2.4 较少梯度方法 - 图6

状况糟糕的极端非二元函数:

2.7.2.4 较少梯度方法 - 图7

2.7.2.4 较少梯度方法 - 图8

在scipy中, scipy.optimize.fmin() 实现了Nelder-Mead法:

In [11]:

  1. def f(x): # rosenbrock函数
  2. return .5*(1 - x[0])**2 + (x[1] - x[0]**2)**2
  3. optimize.fmin(f, [2, 2])
  1. Optimization terminated successfully.
  2. Current function value: 0.000000
  3. Iterations: 46
  4. Function evaluations: 91

Out[11]:

  1. array([ 0.99998568, 0.99996682])