学习笔记:机器学习优化算法之牛顿法、拟牛顿法

 活动地址:CSDN21天学习挑战赛

1 简介

        牛顿法也叫牛顿迭代法,它是一种求根算法,也可以求函数的极小值。它的基本思想是在现有极小点估计值附近对f(x)做二阶泰勒展开,找到下一个极小点,继续迭代的过程。

2 牛顿法原理

输入:目标函数f(x),函数梯度为f'(x),计算精度 \varepsilon

输出:f(x)的零点 x^{*}

(1)选出初始值x^{(0)},k=0;

(2)计算f(x^{(k)})和梯度\large \nabla f(x);

(3)带入迭代公式进行参数更新:             \large x^{(k+1)}=x^{(k)}-\frac{f(x^{k})}{\nabla f(x^{(k)})}

推导该迭代公式

设第k次迭代点为\small (x^{(k)},f(x^{(k)})),过该点做曲线的切线,斜率则为\small f'(x^{(k)}),进而可得到切线方程为:

\large y-f(x^{(k)}))=f'(x^{(k)})(x-x^{(k)})

接着求该曲线与x轴的交点坐标:

\large 0=f(x^{(x)})+f'(x^{(k)})(x-x^{(k)})

则交点的横坐标为新的迭代点的横坐标,整理得:

\large x^{(k+1)}=x^{(k)}-\frac{f(x^{k})}{\nabla f(x^{(k)})}

确定迭代次数或者精度;

(4)如果\large ||f(x^{(k+1)}||<\epsilon,停止迭代,令x^{*}=x^{(k+1)},输出结果;否则继续迭代。

实验部分:雷神之锤代码计算    \frac{1}{\sqrt{x}}

#include<iostream>
using namespace std;
//计算 1/((x)^(1/2))
float Q_rsqrt( float number ) {
	long i;
	float x2, y;
	const float threeHalfs = 1.5f;

	x2 = number * 0.5f;
	y  = number;
	i  = * ( long * ) &y;                       // evil floating point bit level hacking
	i  = 0x5f3759df - ( i >> 1 );               // What the fuck?
	y  = * ( float * ) &i;
	y  = y * ( threeHalfs - ( x2 * y * y ) );   // 1st iteration
//	y  = y * ( threeHalfs - ( x2 * y * y ) );   // 2nd iteration, this can be removed

	return y;
}
int main() {
	float x1=4;
	float x2=2;
	float x3=25;
	printf("%f",Q_rsqrt(x3));
	return 0;
}

2.1 Hessen矩阵

        Hessen矩阵存储了二阶可导的多元函数的二阶导数,Hessen矩阵可用于多元函数的泰勒展开,一般用H表示 Hessen矩阵。

上式可简写为:

f(x)\approx f(x^{(k)})+g_k^T(x-x^{(k)})+\frac{1}{2}(x-x^{(k)})^TH(x^{(k)})(x-x^{(k)}) \qquad \qquad(1)

其中\large g_k为求导后在第k个迭代点的梯度向量;

\large H(x^{(k)})表示第k次迭代时的Hessen矩阵

当f(x)去到最值时,f'(x)=0,令此时的x=k+1(其中x_{k},x^{(k)}意思相同)

\large \frac{\partial f(x) }{\partial x}=g(x)\approx 0+g(x^{(k)})+\frac{1}{2}\times 2H(x^{(k)})(x-x^{(k)}) \\ =g_k(x^{(k)})+H_k(x-x^{(k)})\quad(2)

整理后得到x的迭代公式:

\LARGE x_{k+1}=x_{k}-g_k(x^{(k)})H^{-1}_k

2.2 拟牛顿法条件

对(2)式子操作:

y_k=g_{k+1}-g_kx=x^{(k+1)},则:

\large g_{k+1}-g_k=H_k(x^{(k+1)}-x^{k})

\large y_k=H_k(x^{(k+1)}-x^{k})

\delta_k=x^{(k+1)}-x^{(k)}代入上式得:

 \large y_k=H_k\delta _k

即                                                                    \large \delta _k=H^{-1}_ky_k                                                            该式为拟牛顿法条件。

        从这里可以看出此时牛顿法需要 计算矩阵的逆,计算会很麻烦,甚至不存在逆矩阵,这样就需要拟牛顿法了。  

3 拟牛顿法

        拟牛顿法的思想是找到矩阵的逆的替代者,主要有DFP和DFGS方法。

参考

(43条消息) 泰勒展开与黑塞矩阵(Hessian Matrix)_老实人小李的博客-CSDN博客_泰勒展开式的矩阵形式

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值