【数学基础】梯度下降法 理论推导 从局部最小解引入推导

【数学基础】梯度下降法

先一步一步来:
(一)全局最小值与局部最优值
对于很多非线性的优化问题,会存在许许多多的若干局部最小值。
局部最小值的定义是:
假设 x ∗ x^\ast x是一个局部最小值
存在一个 δ > 0 \delta>0 δ>0 对于所有满足 ∥ x − x ∗ ∥ < δ    \parallel x-x^\ast\parallel<\delta\; xx<δ x x x都有 f ( x ∗ ) ⩽ f ( x ) f(x^\ast)\leqslant f(x) f(x)f(x) , 也就是说在x这点的邻域内所有点的函数值都是大于x这一点的函数值的。
对于所有的 x ∈ D x\in\mathcal D xD 如果 f ( x ∗ ) ⩽ f ( x ) f(x^\ast)\leqslant f(x) f(x)f(x) 成立的话,则 x ∗ x^\ast x是一个全局最小值。
求局部最小解一般来说是容易的,但是很难保证能求出来的局部最小解是全局最小解,对于线性规划或者凸优化问题来说,局部最小解就是全局最小解。
要判定一个点 x ∗ x^\ast x是不是一个局部最小值,通过比较它的领域内有没有更小的函数是不现实的。如果函数 f ( x ) f(x) f(x)是二次连续可微的,我们可以求出其在点 x ∗ x^\ast x处的梯度 ∇ f ( x ∗ ) \nabla f(x\ast) f(x) 和 Hessian矩阵来判断。
局部最小解的一阶必要条件:若 x ∗ x^\ast x 为局部最小解并且函数在 x ∗ x^\ast x的领域内一阶可微,则 ∇ f ( x ∗ ) = 0 \nabla f(x\ast)=0 f(x)=0

局部最小解的二阶必要条件:若 x ∗ x^\ast x 为局部最小解并且函数在 x ∗ x^\ast x的领域内二阶可微,则 ∇ f ( x ∗ ) = 0 ,      ∇ 2 f ( x ∗ ) \nabla f(x\ast)=0,\ \ \ \ \nabla^2f(x\ast) f(x)=0,    2f(x)为半正定矩阵

证明的话,就用一阶、二阶泰勒展开式近似处理一下即可得证。

(二)梯度下降法
梯度下降法(Gradient Descent Method)简称GD,通常是用来求解无约束优化的最小值问题的。
对于函数 f ( x ) f(x) f(x)如果在 x t x_t xt点是连续可微的,那么它下降的最快的方向就是它的梯度方向的反方向。(说白了就是切线方向,向着递减的那个方向)
由泰勒一阶展开公式:
f ( x t + 1 ) = f ( x t + △ x ) ≈ f ( x t ) + △ x T ∇ f ( x t ) f(x_{t+1})=f(x_t+\triangle x)\approx f(x_t)+\triangle x^T\nabla f(x_t) f(xt+1)=f(xt+x)f(xt)+xTf(xt)
为了实现下降,那么要让 f ( x t + 1 ) < f ( x t ) f(x_{t+1})<f(x_t) f(xt+1)<f(xt) 才行。
那如果这个条件成立了,那么 △ x T ∇ f ( x t ) < 0 \triangle x^T\nabla f(x_t)<0 xTf(xt)<0
现在可以让 △ x = − α ∇ f ( x t ) \triangle x=-\alpha\nabla f(x_t) x=αf(xt),当 α > 0 \alpha>0 α>0且足够小的时候, f ( x t + 1 ) < f ( x t ) f(x_{t+1})<f(x_t) f(xt+1)<f(xt) 成立。
按照这个方法,我们从 x 0 x_0 x0作为初始值开始通过迭代公式:
x t + 1 = x t − α ∇ f ( x t ) x_{t+1}=x_t-\alpha\nabla f(x_t) xt+1=xtαf(xt)
可得到:
f ( x 0 ) ≥ f ( x 1 ) ≥ f ( x 2 ) ≥ . . . ≥ f (    x ∧    ) f(x_0)\geq f(x_1)\geq f(x_2)\geq...\geq f(\;\overset\wedge x\;) f(x0)f(x1)f(x2)...f(x)
如果顺利的话,会收敛, x ∧    \overset\wedge x\; x处就是局部最小值。
α \alpha α乘为步长,也叫做学习率,太大会导致函数发散无法收敛,太小会导致收敛过慢。
总结:梯度下降法是一个一阶收敛算法,当接近局部最优值时梯度变小,收敛速度变慢,以S型的方式下降。如果目标是二阶连续可微的,可以采用牛顿法,拟牛顿法来解决。但是牛顿法(NT)是二阶收敛算法,收敛速度更快,但是每次迭代都需要计算Hessian矩阵,复杂度特别大。所以当数据量在10^5以内可以用牛顿法,太大了的话,就还是老老实实用GD或者SGD吧。
如果遇到了要求解极值点是最大的情况,有两个办法解决,第一是转换成求解极小值问题,或者使用梯度上升法,在迭代中正向叠加梯度和步场的乘积。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值