牛顿法和梯度下降法

机器学习基本就是把问题转化成某个损失函数,然后求极值。函数的极值分为全局极值局部极值,两种都满足一个条件 f ′ = 0 f^{\prime}=0 f=0 ∇ f = 0 \nabla f=0 f=0

牛顿法:二阶泰勒级数逼近

单元函数

在初始值 x 0 x_0 x0附近,将 f ( x ) f(x) f(x)进行二阶泰勒展开, f ( x 0 + △ x ) = f ( x 0 ) + f ′ ( x 0 ) △ x + 1 2 f ′ ′ ( x 0 ) △ x 2 + o ( △ x 2 ) f(x_0+△x)=f(x_0)+f^{\prime}(x_0)△x+{1\over2}f^{\prime\prime}(x_0)△x^2+o(△x^2) f(x0+x)=f(x0)+f(x0)x+21f(x0)x2+o(x2)
f ( x 0 + △ x ) = g ( △ x ) + o ( △ x 2 ) f(x_0+△x)=g(△x)+o(△x^2) f(x0+x)=g(x)+o(x2)
g ( △ x ) g(△x) g(x)是二次函数,对它进行求导,令导数等于0,即可求导极值点,因为是二次函数,所以不确定是极大还极小。

g ( △ x ) g(△x) g(x)极值点为 − f ′ ( x 0 ) f ′ ′ ( x 0 ) -{f^{\prime}(x_0)\over {f^{\prime\prime}(x_0)}} f(x0)f(x0),由于 f ( x ) f(x) f(x) g ( △ x ) g(△x) g(x)只相差一个 o ( △ x 2 ) o(△x^2) o(x2),因此 f ( x ) f(x) f(x) x 0 x_0 x0附近这一很小很小的局部内的极值点为 x = x 0 − f ′ ( x 0 ) f ′ ′ ( x 0 ) x=x_0-{f^{\prime}(x_0)\over {f^{\prime\prime}(x_0)}} x=x0f(x0)f(x0)
通过迭代可得 x n = x n − 1 − f ′ ( x n − 1 ) f ′ ′ ( x n − 1 ) x_n=x_{n-1}-{f^{\prime}(x_{n-1})\over {f^{\prime\prime}(x_{n-1})}} xn=xn1f(xn1)f(xn1),通过一步一步迭代,就能够求出在一个较大的局部范围内, f ( x ) f(x) f(x)的极值点。

多元函数

在实际应用中,往往是解决多元函数的问题。多元函数是用向量和矩阵进行表示运算。
f ( x ⃗ ) = f ( x 0 ⃗ ) + g T ( x ⃗ − x 0 ⃗ ) + 1 2 ( x ⃗ − x 0 ⃗ ) T H ( x ⃗ − x 0 ⃗ ) + o ( ) f(\vec{x})=f(\vec{x_0})+g^T(\vec{x}-\vec{x_0})+{1\over2}(\vec{x}-\vec{x_0})^TH(\vec{x}-\vec{x_0})+o() f(x )=f(x0 )+gT(x x0 )+21(x x0 )TH(x x0 )+o()
其中, g T = [ ∂ f ( x ) ⃗ x 1 , ∂ f ( x ) ⃗ x 2 , . . . , ∂ f ( x n ) ⃗ x n ] g^T=[{\partial f(\vec{x)}\over{x_1}} ,{\partial f(\vec{x)}\over{x_2}},...,{\partial f(\vec{x_n)}\over{x_n}}] gT=[x1f(x) ,x2f(x) ,...,xnf(xn) ]
f ( x ) f(x) f(x)的梯度。 H H H为hassion矩阵,函数的二阶偏导数。
H = [ ∂ 2 f ( x ⃗ ) ∂ x 1 ∂ x 1 ∂ 2 f ( x ⃗ ) ∂ x 1 ∂ x 2 ⋯ ∂ 2 f ( x ⃗ ) ∂ x 1 ∂ x n ∂ 2 f ( x ⃗ ) ∂ x 2 ∂ x 1 ∂ 2 f ( x ⃗ ) ∂ x 2 ∂ x 2 ⋯ ∂ 2 f ( x ⃗ ) ∂ x 2 ∂ x n ⋮ ⋮ ⋱ ⋮ ∂ 2 f ( x ⃗ ) ∂ x n ∂ x 1 ∂ 2 f ( x ⃗ ) ∂ x n ∂ x 2 ⋯ ∂ 2 f ( x ⃗ ) ∂ x n ∂ x n ] H=\begin{bmatrix} {{\partial ^2f(\vec{x})} \over {\partial{x_1}{\partial{x_1}}}}&{{\partial ^2f(\vec{x})} \over {\partial{x_1}{\partial{x_2}}}}&{\cdots}&{{\partial ^2f(\vec{x})} \over {\partial{x_1}{\partial{x_n}}}}\\ {{\partial ^2f(\vec{x})} \over {\partial{x_2}{\partial{x_1}}}}&{{\partial ^2f(\vec{x})} \over {\partial{x_2}{\partial{x_2}}}}&{\cdots}&{{\partial ^2f(\vec{x})} \over {\partial{x_2}{\partial{x_n}}}}\\ {\vdots}&{\vdots}&{\ddots}&{\vdots}\\ {{\partial ^2f(\vec{x})} \over {\partial{x_n}{\partial{x_1}}}}&{{\partial ^2f(\vec{x})} \over {\partial{x_n}{\partial{x_2}}}}&{\cdots}&{{\partial ^2f(\vec{x})} \over {\partial{x_n}{\partial{x_n}}}}\\ \end{bmatrix} H=x1x12f(x )x2x12f(x )xnx12f(x )x1x22f(x )x2x22f(x )xnx22f(x )x1xn2f(x )x2xn2f(x )xnxn2f(x )
由单元函数可得,多元函数极值点迭代公式:
x n ⃗ = x n − 1 ⃗ − H ( x n − 1 ⃗ ) g ( x n − 1 ⃗ ) \vec{x_n}=\vec{x_{n-1}}-{{H(\vec{x_{n-1}}) }\over g(\vec{x_{n-1}})} xn =xn1 g(xn1 )H(xn1 )

梯度下降法:一阶逼近

梯度下降用于多元函数,采用一阶逼近。

f ( x ⃗ ) = f ( x 0 ⃗ ) + g T ( x ⃗ − x 0 ⃗ ) + o ( x ⃗ − x 0 ⃗ ) f(\vec{x})=f(\vec{x_0})+g^T(\vec{x}-\vec{x_0})+o(\vec{x}-\vec{x_0}) f(x )=f(x0 )+gT(x x0 )+o(x x0 )
梯度下降法采用是一阶逼近,线性逼近,无法通过求导令导数等于0来获取极值,只能沿着梯度反方向 − g -g g(求最小值)一点点尝试靠近。
x n ⃗ = x n − 1 ⃗ − l x n − 1 ⃗ g ( x n − 1 ⃗ ) T \vec{x_n}=\vec{x_{n-1}}-l\vec{x_{n-1}}g(\vec{x_{n-1}})^T xn =xn1 lxn1 g(xn1 )T
其中 l l l为学习率,控制着往梯度方向移动的步伐大小,取值过小,移动过慢,收敛速度就慢,但是取值大了,可能跳过极值点,倒是不收敛。

两种特点总结

  • 两种都是求局部最优值(因为采用的是局部逼近的方法)。
  • 当初值选取得当时,牛顿法收敛快(不止有梯度,还有求导得到极值)。
  • 牛顿法需要求二阶导数,对于多元函数,H矩阵计算量很大
  • 牛顿法其实是在平衡点收敛,有可能是极大值,也可能是极小值,还有可能是鞍点。梯度下降法是顾明思义就是求极小值,但也可能求鞍点。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值