梯度下降算法(Gradient Descent Optimization)是求解损失函数最小值最常用的方法之一,根据计算目标函数采用数据量的不同,梯度下降算法又可以分为批量梯度下降算法(Batch Gradient Descent),随机梯度下降算法(Stochastic Gradient Descent)和小批量梯度下降算法(Mini-batch Gradient Descent)。
1 梯度下降法
1.1 梯度下降法原理
梯度下降法(Gradient Descent)是一种常用的一阶(First Order)优化方法,是求解无约束优化问题最简单、最经典的方法之一。
在微积分里面,对多元函数的参数求偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度。比如函数 f ( x , y ) f(x,y) f(x,y),分别对 x x x 和 y y y 求偏导,组成的 ( ∂ f ∂ x , ∂ f ∂ y ) T (\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y})^T (∂x∂f,∂y∂f)T 就叫做梯度向量,简称为 g r a d f ( x , y ) grad \ f(x,y) grad f(x,y) 或者 ∇ f ( x , y ) \nabla f(x,y) ∇f(x,y)。
梯度向量在几何上的意义,就是函数变化增加最快的方向。沿着梯度向量的方向,函数增长的最快,更容易找到函数的最大值;沿着梯度向量的相反方向,函数减少的最快,更容易找到函数的最小值。
1.2 梯度下降法和一阶泰勒展开的关系
泰勒展开
假设函数 f ( x ) f(x) f(x) 具有 n n n 阶导数,则 f ( x ) f(x) f(x) 在 x = x 0 x=x_0 x=x0 处的泰勒展开为:
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) 1 ! ( x − x 0 ) + f ′ ′ ( x 0 ) 2 ! ( x − x 0 ) 2 + ⋯ + f ( n ) ( x 0 ) n ! ( x − x 0 ) n + R n ( x ) f(x)=f(x_0)+\frac{f^\prime (x_0)}{1!}(x-x_0) + \frac{f^{\prime \prime} (x_0)}{2!}(x-x_0)^2 + \cdots + \frac{f^{(n)} (x_0)}{n!}(x-x_0)^n + R_n(x) f(x)=f(x0)+1!f′(x0)(x−x0)+2!f′′(x0)(x−x0)2+⋯+n!f(n)(x0)(x−x0)n+Rn(x)
其中, R n ( x ) = f ( n + 1 ) ( θ x ) ( n + 1 ) ! x n + 1 , ( 0 < θ < 1 ) R_n(x)=\frac{f^{(n+1)} (\theta x)}{(n+1)!} x^{n+1},(0<\theta < 1) Rn(x)=(n+1)!f(n+1)(θx)xn+1,(0<θ<1),通常也会写作 o ( x n ) o(x^n) o(xn)
一阶泰勒展开
f ( x ) = f ( x 0 ) + f ′ ( x 0 ) ( x − x 0 ) + α f(x)=f(x_0)+f^\prime (x_0)(x-x_0) + \alpha f(x)=f(x0)+f′(x0)(x−x0)+α
当 Δ x → 0 \Delta x \rightarrow 0 Δx→0 或者说 x → x 0 x \rightarrow x_0 x→x0 时, α → 0 \alpha \rightarrow 0 α→0
梯度下降法和一阶泰勒展开的关系
假设我们的损失函数为 J ( θ ) J(\theta) J(θ),对它进行一阶泰勒展开有:
J ( θ ) = J ( θ 0 ) + J ′ ( θ 0 ) ( θ − θ 0 ) + α J(\theta)=J(\theta_0)+J^\prime (\theta_0)(\theta-\theta_0) + \alpha J(θ)=J(θ0)+J′(θ