牛顿法和梯度下降法

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

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

单元函数

在初始值x0x_0x0附近,将f(x)f(x)f(x)进行二阶泰勒展开,f(x0+△x)=f(x0)+f′(x0)△x+12f′′(x0)△x2+o(△x2)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(x0+△x)=g(△x)+o(△x2)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′(x0)f′′(x0)-{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(△x2)o(△x^2)o(x2),因此f(x)f(x)f(x)x0x_0x0附近这一很小很小的局部内的极值点为x=x0−f′(x0)f′′(x0)x=x_0-{f^{\prime}(x_0)\over {f^{\prime\prime}(x_0)}}x=x0f(x0)f(x0)
通过迭代可得xn=xn−1−f′(xn−1)f′′(xn−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(x0⃗)+gT(x⃗−x0⃗)+12(x⃗−x0⃗)TH(x⃗−x0⃗)+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(xx0)+21(xx0)TH(xx0)+o()
其中,gT=[∂f(x)⃗x1,∂f(x)⃗x2,...,∂f(xn)⃗xn]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)的梯度。HHH为hassion矩阵,函数的二阶偏导数。
H=[∂2f(x⃗)∂x1∂x1∂2f(x⃗)∂x1∂x2⋯∂2f(x⃗)∂x1∂xn∂2f(x⃗)∂x2∂x1∂2f(x⃗)∂x2∂x2⋯∂2f(x⃗)∂x2∂xn⋮⋮⋱⋮∂2f(x⃗)∂xn∂x1∂2f(x⃗)∂xn∂x2⋯∂2f(x⃗)∂xn∂xn]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)
由单元函数可得,多元函数极值点迭代公式:
xn⃗=xn−1⃗−H(xn−1⃗)g(xn−1⃗)\vec{x_n}=\vec{x_{n-1}}-{{H(\vec{x_{n-1}}) }\over g(\vec{x_{n-1}})}xn=xn1g(xn1)H(xn1)

梯度下降法:一阶逼近

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

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

两种特点总结

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值