梯度下降法和牛顿法计算开根号

梯度下降法和牛顿法计算开根号

本文将介绍如何不调包,只能使用加减乘除法实现对根号x的求解。主要介绍梯度下降和牛顿法者两种方法,并给出 C++ 实现。

梯度下降法

思路/步骤

  1. 转化问题,将 x\sqrt{x}x 的求解转化为最小化目标函数:L(t)L(t)L(t)L(t)=(t2−x)L(t)=(t^2-x)L(t)=(t2x) ,当 LLL 趋近于 0 时,ttt 就是我们想要的结果;
  2. 迭代寻找使得 LLL 变小的 ttt
  3. 最终得到足够小的 LLL 时的 ttt ,即使得 L→0L\rightarrow 0L0, 得到结果 ttt
  4. 求解 LLL 的极小值,就是导数为 0 的点

如何迭代

OK,现在的问题就是要如何进行迭代,从而得到尽可能小的 LLL,为此,我们要使得随着每一次迭代中 ttt 的变化,LLL 都朝着更小的方向变化一个合适的步长

在这里插入图片描述

确定如何迭代,无非就是要确定每次迭代的方向步长

最自然的想法,我们使得 ttt 朝政府两个方向都移动一个很小的步长,然后比一比,看哪个的 LLL 更小了,就向哪个方向移动。即:

  • L(t+Δt)<L(t)L(t+\Delta t)<L(t)L(t+Δt)<L(t) ,则 t1=t+Δtt_1=t+\Delta tt1=t+Δt
  • L(t−Δt)<L(t)L(t-\Delta t)<L(t)L(tΔt)<L(t) ,则 t1=t−Δtt_1=t-\Delta tt1=tΔt

注意这里的 Δt\Delta tΔt 应当是一个大于零的无穷小数,即 0+0^+0+

在这里插入图片描述

我们接下来再对上面的式子进行一点变化:

  • L(t+Δt)−L(t)<0L(t+\Delta t)-L(t)<0L(t+Δt)L(t)<0 ,则 t1=t+Δtt_1=t+\Delta tt1=t+Δt
  • L(t)−L(t−Δt)>0L(t)-L(t-\Delta t)>0L(t)L(tΔt)>0 ,则 t1=t−Δtt_1=t-\Delta tt1=tΔt

将这两个式子写在一起:
t1=t−L(t+Δt)−L(t)∣L(t+Δt)−L(t)∣⋅Δtt_1=t-\frac{L(t+\Delta t)-L(t)}{|L(t+\Delta t)-L(t)|}\cdot \Delta t t1=tL(t+Δt)L(t)L(t+Δt)L(t)Δt
这里的 L(t+Δt)−L(t)∣L(t+Δt)−L(t)∣\frac{L(t+\Delta t)-L(t)}{|L(t+\Delta t)-L(t)|}L(t+Δt)L(t)L(t+Δt)L(t) 用来指示正负号。再进行一点变形:
t1=t−L(t+Δt)−L(t)∣L(t+Δt)−L(t)∣⋅Δt=t−L(t+Δt)−L(t)Δt∣L(t+Δt)−L(t)Δt∣⋅Δt=t−L(t+Δt)ΔtΔt∣L(t+Δt)−L(t)Δt∣=t−αL′(t),α=Δt∣L(t+Δt)−L(t)Δt∣→0+,L′(t)=L(t+Δt)−L(t)Δt\begin{align} t_1&=t-\frac{L(t+\Delta t)-L(t)}{|L(t+\Delta t)-L(t)|}\cdot \Delta t\\ &=t-\frac{\frac{L(t+\Delta t)-L(t)}{\Delta t}}{|\frac{L(t+\Delta t)-L(t)}{\Delta t}|}\cdot \Delta t\\ &=t-\frac{L(t+\Delta t)}{\Delta t}\frac{\Delta t}{|\frac{L(t+\Delta t)-L(t)}{\Delta t}|}\\ &=t-\alpha L'(t), \ \ \ \alpha=\frac{\Delta t}{|\frac{L(t+\Delta t)-L(t)}{\Delta t}|}\rightarrow 0^+,\ \ \ L'(t)=\frac{L(t+\Delta t)-L(t)}{\Delta t} \end{align} t1=tL(t+Δt)L(t)L(t+Δt)L(t)Δt=tΔtL(t+Δt)L(t)ΔtL(t+Δt)L(t)Δt=tΔtL(t+Δt)ΔtL(t+Δt)L(t)Δt=tαL(t),   α=ΔtL(t+Δt)L(t)Δt0+,   L(t)=ΔtL(t+Δt)L(t)

  1. 当a取无穷小时,虽然一定保证下降,但效率太慢

  2. 日常设计的很多函数,可以允许使用相对大一些的步长,比如 α=0.01\alpha = 0.01α=0.01。理由是,若步长大了,出现跳过合适位置,使得 L(t1)>L(t0)L(t1) > L(t0)L(t1)>L(t0)。再下一个时刻,依旧可能跳回来使得 L(t2)<L(t1)L(t2) < L(t1)L(t2)<L(t1)

  3. 大的步长不能保证一定收敛,但是大部分时候是可以很好的工作,也因此,步长 α\alphaα,我们称之为学习率,通常会给一个相对小的数字,但不会太小。

  4. 总之,学习率一般需要在不同的模型任务中手动调试。

代码

float sqrt_grad_decent(float x) {float t = x / 2;float L = (t * t - x) * (t * t - x);float alpha = 0.001;while ( L > 1e-5 ) {float delta = 2 * (t * t - x) * 2 * t;t = t - alpha * delta;L = (t * t - x) * (t * t - x);printf("t=%f\n", t);}return t;
}

总结

  1. 梯度下降法是通过观察局部,决定如何调整的算法。如果函数具有多个极值,则可能陷入局部极值,此时初始点的选择直接影响收敛结果

  2. 大的步长在一定程度上可能跨过局部极值,但也可能造成震荡导致不收敛

  3. 步长的选择,需要根据函数的特性来找到合适取值,若导数特别大时,则步长取小,导数小时,步长可大。否则很容易造成收敛问题

  4. 存在一类算法,可以在一定范围内搜索一个合适步长,使得每一次迭代更加稳定

牛顿法1

梯度下降法常用语求解函数极小值的情况,而牛顿法常用于求解函数零点的情况,即 L=0L=0L=0 时方程的根。

思路/步骤

  1. 转化问题,将求解 x\sqrt{x}x 转换为求解 L(t)=t2−x=0L(t)=t^2-x=0L(t)=t2x=0 时的根,即函数的零点
  2. 迭代寻找 ttt

如何迭代

用曲线在 t0t_0t0 处切线与 xxx 轴的交点作为 t1t_1t1 ,来逼近函数的零点。图/牛顿法

在这里插入图片描述

切线斜率,同样可以用导数来表示 。

考虑两个坐标系:原坐标系 o1o1o1 ,新坐标系 o2o2o2 ,其中 o2o2o2o1o1o1 中的 (x1,f(x1))(x_1,f(x_1))(x1,f(x1)) 为原点。则在 o2o2o2 坐标系中,下图红色切线可表示为:
fo2(x)=f′(x1)xf_{o2}(x)=f'(x_1)x fo2(x)=f(x1)x
则该切线与 xxx 轴交点:
fo2(x2)=f′(x1)(x2−x1)=−f(x1)f_{o2}(x_2)=f'(x_1)(x_2-x_1)=-f(x_1) fo2(x2)=f(x1)(x2x1)=f(x1)
则有:
x2−x1=−f(x1)f′(x1)x2=x1−f(x1)f′(x1)x_2-x_1=-\frac{f(x_1)}{f'(x_1)}\\ x_2=x_1-\frac{f(x_1)}{f'(x_1)} x2x1=f(x1)f(x1)x2=x1f(x1)f(x1)

在这里插入图片描述

代码

我们经过上一小节已经知道迭代的方法:
t1=t−L(t)L′(t)t_1=t-\frac{L(t)}{L'(t)} t1=tL(t)L(t)
代码:

float sqrt_newton1(float x) {float t = x / 2;float L = t * t - x;while ( abs(L) > 1e-5 ) {float dL = 2 * t;t = t - L / dL;L = t * t - x;}return t;
}

牛顿法2

思路

既然牛顿法是对函数求零点,那我们能不能对函数的导函数求零点呢?这样就可以得到函数的极值了。

与梯度下降法的目标函数 L(t)=(t2−x)L(t)=(t^2-x)L(t)=(t2x) 是相同的,而区别在于,迭代式不同 t1=t−f′(t)f′′(t)t_1=t-\frac{f'(t)}{f''(t)}t1=tf′′(t)f(t),并且其中步长(学习率)为 1。

代码

float sqrt_newton2(float x) {float t = x / 2;float L = (t * t - x) * (t * t - x);while ( L > 1e-5 ) {float dL = 2 * (t * t - x) * 2 * t;float d2L = 12 * t * t - 4 * x;t = t - dL / d2L;L = (t * t - x) * (t * t - x);}return t;
}

Ref

  1. 牛顿法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532440.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汇博工业机器人码垛机怎么写_全自动码垛机器人在企业生产中的地位越来越重要...

全自动码垛机器人在企业生产中的地位越来越重要在智能化的各种全自动生产线中&#xff0c;全自动码垛机器人成了全自动生产线的重要机械设备&#xff0c;在各种生产中发挥着不可忽视的作用。全自动码垛机器人主要用于生产线上的包装过程中&#xff0c;不仅能够提高企业的生产率…

小说中场景的功能_《流浪地球》:从小说到电影

2019年春节贺岁档冒出一匹黑马&#xff1a;国产科幻片《流浪地球》大年初一上映后口碑、票房双丰收&#xff1a;截至9日下午&#xff0c;票房已破15亿&#xff0c;并获得9.2的高评分。著名导演詹姆斯卡梅隆通过社交媒体对我国春节期间上映的科幻影片《流浪地球》发出的祝愿&…

线性回归与逻辑回归及其实现

线性回归与逻辑回归及其实现 回归与分类 预测值定性分析&#xff0c;即离散变量预测时&#xff0c;称之为分类&#xff1b;预测值定量分析&#xff0c;即连续变量预测时&#xff0c;称之为回归。 如预测一张图片是猫还是狗&#xff0c;是分类问题&#xff1b;预测明年的房价…

hbase 页面访问_HBase

HBase 特点 海量存储 Hbase 适合存储 PB 级别的海量数据&#xff0c;在 PB 级别的数据以及采用廉价 PC 存储的情况下&#xff0c;能在几十到百毫秒内返回数据。这与 Hbase 的极易扩展性息息相关。正式因为 Hbase 良好的扩展性&#xff0c;才为海量数据的存储提供了便利。 2&…

深入理解L1、L2正则化

深入理解L1、L2正则化 转自&#xff1a;【面试看这篇就够了】L1、L2正则化理解 一、概述 正则化&#xff08;Regularization&#xff09;是机器学习中一种常用的技术&#xff0c;其主要目的是控制模型复杂度&#xff0c;减小过拟合。正则化技术已经成为模型训练中的常用技术&a…

机器学习中的概率模型

机器学习中的概率模型 转自&#xff1a;https://zhuanlan.zhihu.com/p/164551678 机器学习中的概率模型 概率论&#xff0c;包括它的延伸-信息论&#xff0c;以及随机过程&#xff0c;在机器学习中有重要的作用。它们被广泛用于建立预测函数&#xff0c;目标函数&#xff0c;以…

max std value 宏_Rust Macro/宏 新手指南

Rust语言最强大的一个特点就是可以创建和利用宏/Macro。不过创建 Rust宏看起来挺复杂&#xff0c;常常令刚接触Rust的开发者心生畏惧。这片文章 的目的就是帮助你理解Rust Macro的基本运作原理&#xff0c;学习如何创建自己的 Rust宏。相关链接&#xff1a;在线学编程 - 汇智网…

农林资金 大数据审计案例_大数据审计:现状与发展

大数据审计&#xff1a;现状与发展【摘要】传统手工环境下&#xff0c;审计人员常用的审计方法包括检查法、观察法、重新计算法、外部调查法、分析法、鉴定法等。随着信息技术的发展&#xff0c;被审计单位的运行越来越依赖于信息化环境。信息化环境下审计工作发生了巨大的变化…

angularjs sill 创建项目_开源项目——博客项目MyBlogs.Core,基于.NET 5

个人博客站项目源码&#xff0c;高性能低占用的博客系统&#xff0c;这也许是我个人目前写过的性能最高的web项目了 。目前日均处理请求数80-120w次&#xff0c;同时在线活跃用户数30-100人&#xff0c;数据量累计已达到100多万条&#xff0c;数据库Redis网站主程序同时运行在一…

怀旧服推荐配置_【怀旧服】狂暴战P4毕业装备推荐

在怀旧服开启P4阶段之后&#xff0c;狂暴战玩家的输出也得到了进一步的提升。当然&#xff0c;狂暴战想要打出足够的伤害离不开对应的装备&#xff0c;现在就给大家介绍下狂暴战P4阶段的BIS装备。散件装备狂暴战在这一阶段依旧有非常不错的散件装备&#xff0c;个人建议玩家入手…

高斯混合模型GMM及EM迭代求解算法(含代码实现)

高斯混合模型GMM及EM迭代求解算法&#xff08;含代码实现&#xff09; 高斯分布与高斯混合模型 高斯分布 高斯分布大家都很熟悉了&#xff0c;下面是一元高斯分布的概率密度函数&#xff08;Probability Density Function&#xff0c;PDF&#xff09;&#xff1a; P(x)N(μ,…

十个模块_专栏 | ABAQUS Part模块的十个小技巧

作者介绍星辰_北极星2012年开始从事Abaqus仿真相关工作&#xff0c;服务大小课题逾百项; 主要仿真领域&#xff1a;石油工程、岩土工程和金属加工工艺&#xff1b; 重点研究方向&#xff1a;ABAQUS GUI二次开发、固体力学、断裂以及损伤等。Abaqus有部件(Part)和装配体(Assembl…

深度学习时代的视频理解综述

深度学习时代的视频理解综述 本文为b站bryanyzhu老师四期视频理解相关论文解读的汇总图文笔记。 我们先精读深度学习时代视频理解领域最为重要的两篇论文&#xff1a;双流网络和 I3D。它们分别是领域内两大类方法双流&#xff08;利用光流&#xff09;网络和 3D CNN 网络的代…

typec扩展坞hdmi没反应_typec扩展坞转hdmi/vga多功能网口usb转换器苹果华为电脑matebook6元优惠券券后价26.8元...

★typec扩展坞转hdmi/vga多功能网口usb转换器苹果华为电脑matebook&#xff0c;6元拼多多优惠券★券后价26.8元★★★typec扩展坞转hdmi/vga多功能网口usb转换器苹果华为电脑matebook&#xffe5;26.8元&#xffe5;32.8元已拼5097件点击抢购猜你喜欢[速发]喵喵机P1热敏打印机手…

NLP任务概览

NLP任务概览 本文为台湾大学李宏毅老师视频课程笔记。本课程介绍了 &#xff08;2020年&#xff09;NLP 领域常见的 17 种任务。本文只会从输入输出的角度概览多种 NLP 任务&#xff0c;并简介它们的常见做法&#xff0c;并不会细致地介绍每个任务模型的具体细节。 两种模式与…

大物实验总结模板_期中总结大会amp;期末动员大会

在逐渐降温的双创周麦包坊的期中总结暨期末动员大会来啦在学长团和小麦包的分享下希望大家重新启航奋斗期末板块一学长团经验分享面对本学期十二门科目&#xff0c;作为过来人的前辈们给出很多对本学期各科目的针对性建议&#xff0c;可谓是干货满满&#xff0c;快来瞧瞧吧&…

PTMs:NLP预训练模型的全面总结

PTMs&#xff1a;NLP预训练模型的全面总结 转自&#xff1a;https://zhuanlan.zhihu.com/p/115014536 预训练模型(Pre-trained Models,PTMs) 的出现将NLP带入了一个全新时代。2020年3月18日&#xff0c;邱锡鹏老师发表了关于NLP预训练模型的综述《Pre-trained Models for Natur…

python中提取几列_Python一键提取PDF中的表格到Excel(实例50)

从PDF文件获取表格中的数据&#xff0c;也是日常办公容易涉及到的一项工作。一个一个复制吧&#xff0c;效率确实太低了。用Python从PDF文档中提取表格数据&#xff0c;并写入Excel文件&#xff0c;灰常灰常高效。上市公司的年报往往包含几百张表格&#xff0c;用它作为例子再合…

详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解

详解最大似然估计&#xff08;MLE&#xff09;、最大后验概率估计&#xff08;MAP&#xff09;&#xff0c;以及贝叶斯公式的理解 声明&#xff1a;本文为原创文章&#xff0c;发表于nebulaf91的csdn博客。欢迎转载&#xff0c;但请务必保留本信息&#xff0c;注明文章出处。 本…

重新打开_iPhone 应用停止响应或无法打开的解决办法

如果当您在 iPhone 上使用某个重要应用时&#xff0c;遇到应用停止响应、意外退出或无法打开的问题&#xff0c;请参考如下步骤尝试解决&#xff1a;1.强制退出应用&#xff1a;在 iPhone 后台强制关闭该应用之后&#xff0c;再次重新打开看看。2.重启您的设备&#xff0c;然后…