做一个简单的梯度下降

为什么要梯度下降?

梯度是上升最快的方向。那么,沿着梯度的反方向,一定是下降最快的方向。

用梯度下降可以比较快地找到函数的某个极值。

怎么做?

  1. 指定一个步长 alpha。
  2. 随便找一个点。
  3. 求函数在这点的梯度。
  4. 沿着梯度的方向走一个 alpha 步长,当作新点。
  5. 重复前面两步,直到收敛。

有什么需要注意的事儿呢?

  • “同步更新”。也就是说,如果在一个 n 维空间做梯度下降,那么一定是有 n 个参数。我们必须同时求这 n 个参数的梯度,之后再 “走一步”。不能先求第一个参数的梯度,走一小步,再求第二个参数的梯度,再走一小步……

给个例子?

我们求恶意函数(我也不知道为啥叫这个名字)$latex (x_1,x_2)=[1-x_1^2]^2+(x_1-x_2)^4$ 的极值

结果

恶意函数的梯度下降

注意图中的那个黑线,就是梯度下降的轨迹。这个函数的梯度下降曲线比较 “好”,几乎走了一条直线。正常情况下应该是走一个“之” 字形的路径。

参考

Gradient descent

2 thoughts on “做一个简单的梯度下降”

发表评论

电子邮件地址不会被公开。 必填项已用*标注