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

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

本文将介绍如何不调包,只能使用加减乘除法实现对根号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;不仅能够提高企业的生产率…

kmeans手写实现与sklearn接口

kmeans手写实现与sklearn接口 kmeans简介 K 均值聚类是最基础的一种聚类方法。它是一种迭代求解的聚类分析算法。 kmeans的迭代步骤 给各个簇中心 μ1,…,μc\mu_1,\dots,\mu_cμ1​,…,μc​ 以适当的初值&#xff1b; 更新样本 x1,…,xnx_1,\dots,x_nx1​,…,xn​ 对应的…

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

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…

rk3128屏幕占空比参数设置_瑞芯微RK3128芯片怎么样 性能全面解读

最近&#xff0c;笔者听说一款搭载瑞芯微RK3128芯片方案的盒子问市了&#xff0c;打听了一下才知道还真有其事&#xff0c;这款上市的RK3128盒子叫做开博尔M1&#xff0c;报价229元&#xff0c;这个价位在如今的四核网络机顶盒市场可谓是不多见&#xff0c;但是这款芯片的性能怎…

机器学习中的概率模型

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

访问云服务器储存的mp4_访问云服务器储存的mp4

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":6,"count":6}]},"card":[{"des":"云服务器 ECS(Elastic Compute Service)是一…

先验、后验、似然

先验、后验、似然 先验分布、后验分布和似然函数 本节转自&#xff1a;先验分布、后验分布、似然估计这几个概念是什么意思&#xff0c;它们之间的关系是什么&#xff1f; 通俗解释 先验分布&#xff1a;根据一般的经验认为随机变量应该满足的分布。先验分布是你瞎猜参数服从啥…

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

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

高斯分布及其极大似然估计

高斯分布及其极大似然估计 高斯分布 一维高斯分布 一维高斯分布的概率密度函数为&#xff1a; N(μ,σ2)12πσexp⁡(−(x−μ)22σ2)N(\mu,\sigma^2)\frac{1}{\sqrt{2\pi}\sigma}\exp(-\frac{(x-\mu)^2}{2\sigma^2}) N(μ,σ2)2π​σ1​exp(−2σ2(x−μ)2​) 多维高斯分布…

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

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

商标45类分类表明细表_2019版注册商标分类表,商标注册45类范围明细

注册商标的时候都是要确定具体的产品或服务的&#xff0c;目前我国商标分类是用《类似商品和服务区分表–基于尼斯分类第十一版》2019年版这本分类书。这本分类表也是全球通用的分类表&#xff0c;商标分类总共有45个类别&#xff0c;1-34类是产品类、35-45类是服务类。这45个大…

高维高斯分布基础

高维高斯分布基础 多位高斯分布的几何理解 多维高斯分布表达式为&#xff1a; p(x∣μ,Σ)1(2π)p/2∣Σ∣1/2e−12(x−μ)TΣ−1(x−μ)p(x|\mu,\Sigma)\frac{1}{(2\pi)^{p/2}|\Sigma|^{1/2}}e^{-\frac{1}{2}(x-\mu)^{T}\Sigma^{-1}(x-\mu)} p(x∣μ,Σ)(2π)p/2∣Σ∣1/21​…

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 网络的代…