机器学习常用数学公式(梯度说明)

输入为标量(Scalar)

f(xk+δ)  f(xk)+f(xk)δ+f′′(xk)δ22      δ+xkU˚(xk) f ( x k + δ )   ≈   f ( x k ) + f ′ ( x k ) δ + f ″ ( x k ) δ 2 2             δ + x k ∈ U ˚ ( x k )

对于极值点 xk x k (极大值点和极小值点)表示在 xU(xk) ∀ x ∈ U ( x k ) ,都有 f(x)f(xk) (f(x)f(xk)) f ( x ) ≤ f ( x k )   ( f ( x ) ≥ f ( x k ) )

我们只看泰勒级数的前两项,即 f(xk+δ)  f(xk)+f(xk)δ f ( x k + δ )   ≈   f ( x k ) + f ′ ( x k ) δ ,可以看出如果 xk x k 为极大(小)值点,那么恒有 f(xk)f(xk+δ)  (f(xk)f(xk+δ)) f ( x k ) ≥ f ( x k + δ )     ( f ( x k ) ≤ f ( x k + δ ) ) ,所以当 δ+xkU˚(xk) δ + x k ∈ U ˚ ( x k ) 时,必有 f(xk)0 f ′ ( x k ) ≡ 0

如果现在满足 f(xk)=0 f ( x k ) = 0 ,且

  1. f′′(xk)>0 f ″ ( x k ) > 0 ​ ,则 xk x k ​ 为严格的局部极小值点(反之为局部极大值点)
  2. f′′(xk)=0 f ″ ( x k ) = 0 ,则有可能是一个鞍点(Saddle Point)

输入为矢量(Vector)

f(x⃗ k+δ⃗ )  f(x⃗ k)+Tf(x⃗ k)δ⃗ +12δ⃗ T2f(x⃗ k)δ⃗  f ( x → k + δ → )   ≈   f ( x → k ) + ∇ T f ( x → k ) δ → + 1 2 δ → T ∇ 2 f ( x → k ) δ →

补充,由上式
f(x⃗ k+δ⃗ )  f(x⃗ k)=Tf(x⃗ k)δ⃗  f ( x → k + δ → )   −   f ( x → k ) = ∇ T f ( x → k ) δ →
可以看出,当我们在  x⃗ k    x → k   附近加上一个扰动  δ⃗     δ →   之后函数值的变化为  Tf(x⃗ k)δ⃗     ∇ T f ( x → k ) δ →   , 因此,我们可以得出如下结论,当这个扰动  δ⃗     δ →   的方向与其在  x⃗ k    x → k   处的梯度方向一致,那么这个函数值的变化就会最大( 增加),或者说,梯度的反方向将会使函数值同样变化最大( 减少

Newton’s Method

​ 它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程根的方法,它表达的意思就是,对于方程 f(x)=0 f ( x ) = 0 ,欲求其解 x x ∗ ,使得 f(x)=0 f ( x ∗ ) = 0 ,那么可以任意初始化一个值 x0 x 0 作为 f(x) f ( x ) 的解,接着判断 x0 x 0 是否为 f(x) f ( x ) 的解(第一种, f(x0) f ( x 0 ) 是否为0,第二种, xi x i xi+1 x i + 1 是否无限接近(当然此时 f(xi+1) f ( x i + 1 ) 的绝对值也必然无限接近于于0)),如果不是,我们求出 f(x) f ( x ) 在点 xi x i 处切线与x轴的交点作为 f(x) f ( x ) 的下一个解 xi+1 x i + 1 ,然后继续判断 xi+1 x i + 1 是否为 f(x) f ( x ) 的解,直到找到解为止(必定在方程 f(x) f ( x ) 的解处收敛)。 f(x) f ( x ) xi x i 处的切线方程为,

f(x)=f(xi)+f(xi)(xxi) f ( x ) = f ( x i ) + f ′ ( x i ) ( x − x i )
那么它的下一个可能解为 xi+1 x i + 1 ,即令切线方程为0(切线与X轴交点 xi+1 x i + 1 ),得到,
xi+1=xif(xi)f(xi) x i + 1 = x i − f ( x i ) f ′ ( x i )

f(x) = 0, xn+1 = xn f(xn)f(xn) 对 于 方 程 f ( x )   =   0 ,   x n + 1   =   x n   − f ( x n ) f ′ ( x n ) 为 其 根 的 迭 代 公 式

非线性方程转为线性方程可利用Taylor’s formula

def calc_solution(n):  # x*x = n
    if n < 0:  # enable to calculate complex
        print('error')
    xi = 1
    xi1 = 10
    while abs(xi-xi1) > 0.0001:
        t = xi1
        xi1 = xi - (xi**2-n)/(2*xi)
        xi = t
    return xi1

你可能感兴趣的:(ML)