八度:最速下降:如何最小化方程

时间:2016-07-31 08:30:34

标签: machine-learning octave gradient-descent

我是Octave的新手。现在我试图在Octave中实现最速下降算法。

例如f(x1,x2) = x1^3 + x2^3 - 2*x1*x2

的最小化
  1. 估算起始设计点x0,迭代计数器k0,收敛参数容差= 0.1。 说这个凝视点是(1,0)

  2. f(x1,x2)的当前点x(k)的渐变计算为grad(f)。我将在这里使用数值微分。

    d/dx1 (f) = lim (h->0) (f(x1+h,x2) - f(x1,x2) )/h
    

    这是grad(f)=(3*x1^2 - 2*x2, 3*x2^2 - 2*x1)

    (0,1)的{p> grad(f)c0 =(3,-2)

  3. 因为c0的L2范数>宽容,我们继续下一步

  4. 方向d0 = -c0 =( - 3,2)

  5. 计算步长aMinimize f(a) = f(x0 + a*d0) = (1-3a,2a) = (1-3a)^3 + (2a)^3 - 2*(1-3a)*(2a)。我没有保持不变的步长。

  6. 更新:new[x1,x2] = old[x1,x2]x + a*d0

  7. 在第5步之前一切都很好。我不知道如何实现方程,或直接在Octave中得到方程的最小值。怎么做?

    修改 我们如何利用这个凸函数使用最速下降:f(x, y) = 4x^2 − 4xy + 2y^2

1 个答案:

答案 0 :(得分:0)

简短的回答是"你不能"。至少不是一般的。第5行中的优化问题本身很难。尽管它是一维的,但您正在优化高度非凸函数。因此,你可以做的是运行一个对数刻度线searcch(只是采样越来越大的步骤,选择一个最小值)或运行另一个"嵌套"优化器,就像在步骤5中对问题具有固定步长的常规SD一样,或者您可以使用更简单的东西(如2阶多项式)近似此函数,并直接进入近似的最优值。无论你选择哪种方式 - 它都是近似值。没有办法达到实际最低要求。直接求解它的唯一能力是仍然在符号级别上工作,如果函数足够简单(如小程度的多项式),你可以通过分析找到它的极值。

enter image description here

作为旁注 - 你的整个优化问题定义不明确,除非你有一些约束,你不是在谈论。它的最小值是(-infty,-infty)(它无穷无尽地减少)。

enter image description here