点击上方 "程序员小乐"关注, 星标或置顶一起成长

每天凌晨00点00分, 第一时间与你相约

每日英文

Smile and stop complaining about the things you can't change. Time keeps ticking whether you're happy or sad.

保持微笑,停止抱怨那些改变不了的事。无论你开心与否,时间总是不等人的。

每日掏心

你不努力,机会有可能遇到。努力,会增加了遇见机会的概率。吴闲云说:所谓努力,其实就是愿意白干。不求回报做很多事的人,一般都能获得更多的机会。

来自:覃佑桦 | 责编:乐乐

链接:baeldung.com/java-gradient-descent

程序员小乐(ID:study_tech)第 849 次推文   图源:百度

往日回顾:去掉烦人的 “ ! = null " (判空语句)

     

   正文   

1.引言

文本会学习梯度下降算法。我们将分步对算法实现过程进行说明并用Java实现。

2.什么是梯度下降?

梯度下降是一种优化算法,用于查找给定函数的局部最小值。它被广泛用于高级机器学习算法中,最小化损失函数。

梯度(gradient)是坡度(slope)的另一种表达,下降(descent)表示降低。顾名思义,梯度下降随着函数的斜率下降直到抵达终点。

3.梯度下降特性

梯度下降可找到局部最小值,该局部最小值有可能与全局最小值不同。起始局部点会作为算法的一个参数给出。

这是一种迭代算法。每一步都会尝试沿斜率向下移动并接近局部最小值。

实践中,算法采用的是回溯(backtrack)。接下来我们将采用回溯实现梯度下降。

4.分步说明

梯度下降需要一个函数和一个起点作为输入。让我们定义并绘制一个函数:

可以从任何期望的点开始。让我们从 x=1 开始:

第一步,梯度下降以预定的步长沿斜率下降:

接下来以相同的步长继续前进。但是,这次结束时的y 值比上次大:

这就表明算法已超过了局部最小值,因此用较小的步长后退:

随后,只要当前y 大于前一次 y,就会减小步长并取反。迭代会一直进行直到满足所需的精度。

如我们看到的那样,梯度下降在这里处找到了局部最小值,但不是全局最小值。如果我们从 x=-1 而非 x=1 开始,则能找到全局最小值。

5.Java实现

有几种方法能够实现梯度下降。这里没有采用计算函数的导数来确定斜率的方向,因此我们的实现也适用于不可微函数。

定义 precision 和 stepCoefficient 并给它赋上初值:

double precision = 0.000001;
double stepCoefficient = 0.1;

进行第一步时,没有之前的 y 作比较。我们可以增加或减少 x 值确认 y 值是减少或增加。stepCoefficient 为正数表明正在增加 x 值。

现在让我们执行第一步:

double previousX = initialX;
double previousY = f.apply(previousX);
currentX += stepCoefficient * previousY;

上面的代码中,f 是 Function<Double, Double>,initialX  的类型是 double,二者都作为输入。

另一个需要考虑的关键点,梯度下降并不保证收敛。为了避免陷入死循环,需要限制迭代次数:

int iter = 100;

每次迭代都把 iter 减1。因此,最多循环100次。

现在有了一个 previousX,我们可以设置循环了:

while (previousStep > precision && iter > 0) {iter--;double currentY = f.apply(currentX);if (currentY > previousY) {stepCoefficient = -stepCoefficient/2;}previousX = currentX;currentX += stepCoefficient * previousY;previousY = currentY;previousStep = StrictMath.abs(currentX - previousX);
}

每次迭代,我们都会计算新的 y 值并将其与之前的 y 比较。如果 currentY 大于 previousY,将改变方向并减小步长。

循环会一直进行直到步长小于期望的precision 为止。最后,返回 currentX 作为本地最小值:

return currentX;

6.总结

本文分步骤介绍了梯度下降算法。

还用Java对算法进行了实现,完整源代码可以从 GitHub 下载。

欢迎在留言区留下你的观点,一起讨论提高。如果今天的文章让你有新的启发,学习能力的提升上有新的认识,欢迎转发分享给更多人。

欢迎各位读者加入订阅号程序员小乐技术群,在后台回复“加群”或者“学习”即可。

猜你还想看

阿里、腾讯、百度、华为、京东最新面试题汇集

彻底搞懂MySQL分区,看这篇就对了!

各种 Java Web 开发人员的通用工具

Git 如何优雅地回退代码,用 reset 还是 revert ?

关注订阅号「程序员小乐」,收看更多精彩内容

嘿,你在看吗

用 Java 实现梯度下降,看这篇就对了!相关推荐

  1. Sklearn官方文档中文整理4——随机梯度下降和最近邻篇

    Sklearn官方文档中文整理4--随机梯度下降和最近邻篇 1. 监督学习 1.5. 随机梯度下降 1.5.1. 分类[linear_model.SGDClassifier] 1.5.2. 回归[li ...

  2. Java应用系统监控看这篇就够了

    Java应用系统监控看这篇就够了 文章目录 业务背景 系统监控发展历程 技术方案 日志监控技术方案 Grafana+阿里云SLS日志服务 分布式链路追踪技术方案 阿里云jaeger方案 开源框架sky ...

  3. 女生就不适合学Java吗_女生不适合学java?给他看这篇文章,女生其实更适合学java,更好就业!...

    原标题:女生不适合学java?给他看这篇文章,女生其实更适合学java,更好就业! 女生适合学java吗?女生做IT怎么样 首先要表明我的观点,编程是不分男女,什么女生不适合学编程的说法,从客观上来说 ...

  4. 梯度下降算法 java_用 Java 实现梯度下降,看这篇就对了!

    每天凌晨00点00分, 第一时间与你相约 每日英文 Smile and stop complaining about the things you can't change. Time keeps t ...

  5. Java 集合框架,看这篇真的够了!

    话不多说,直接上图: Java 集合,也称作容器,主要是由两大接口 (Interface) 派生出来的: Collection 和 Map 顾名思义,容器就是用来存放数据的. 那么这两大接口的不同之处 ...

  6. Java应用梯度下降求解线性SVM模型参考代码

    下面的代码是参考网上的,直接执行,主要是为了后续进一步掌握SVM原理而发布. 两个基本原理还是要去掌握:SVM原理和梯度下降法. 1)SVM分类器: 支持向量机,因其英文名为support vecto ...

  7. 搞懂Java分布式锁实现看这篇文章就对了

    2019独角兽企业重金招聘Python工程师标准>>> 前言: 随着微处理机技术的发展,人们只需花几百美元就能买到一个CPU芯片,这个芯片每秒钟执行的指令比80年代最大的大型机的处理 ...

  8. java空间大战,看这篇足矣了!

    开头 在找工作的过程中,对于 Redis 技术知识的掌握已经成为必须的技能.美团面试常常就会被问到Redis相关知识,而这次我就差点倒在了美团3面,面试官连问我以下几个Redis的问题,然后就卡壳了- ...

  9. Jaeger的客户端采样配置(Java版)(1),看这篇文章准没错

    echo "启动docker-compose" cd jaeger-service-provider && docker-compose up -d &&a ...

  10. java集合大全,看这篇足够理解了

    一.集合入门总结 集合框架: Java中的集合框架大类可分为Collection和Map:两者的区别: 1.Collection是单列集合:Map是双列集合 2.Collection中只有Set系列要 ...

最新文章

  1. 私有网盘nextcloud 12的问题处理及优化
  2. vue 多选自动触发_Vue,初次邂逅(二)
  3. 理解卡夫卡的初学者指南
  4. 帆软报表-打印sql日志设置
  5. 7、【转载】python yield generator 详解
  6. 计算机组成原理(白中英)简答题复习
  7. Swift 使用SwiftyJSON解析JSON数据
  8. xen html插件天气不会刷新,天气通刷新不了怎么办 刷新不了解决方法
  9. 《2020国内WAF产品研究报告》
  10. Unity 中 print 和 Debug.Log 的区别
  11. IP周边创作交流#创作者的个人影响力
  12. 20220425二次型复习
  13. 安卓手机通讯录恢复教程
  14. IOS - 七大手势操作
  15. 自考本科计算机专业英语作文,成人学位英语作文万能模板
  16. linux——管道详解
  17. 细细品味hadoop
  18. 能够在乱世中_在乱世纷纷的时代,庄子依然能够在浮华的人生,活出本真的自我...
  19. 增长黑客内容摘要(四五六章)
  20. linux ntp时间立即同步命令_Linux系统时间同步方法小结

热门文章

  1. 【逗老师带你学IT】阿里云监控报警回调+转发企业微信+转发SnmpTrap+PRTG
  2. 电脑 清理android,怎样清除系统垃圾 手机电脑一举拿下【图文】
  3. 美团校招笔试题-算法8.20-python
  4. 北京最好的商标律师解析商标侵权的处罚规定
  5. 使用费马小定理和欧拉定理计算余数
  6. 有人痴狂,有人跑路,开源软件新一年的冰火两重天
  7. linux 微信客户端 mojo,QQ微信一体客户端教程
  8. 批量为Word2010尾注加方括号[]的方法
  9. 博纳影业明日上市:于冬陷入与江疏影绯闻 被曝斥资千万买珠宝
  10. steam linux 安装目录,如何在Ubuntu中安装Steam | MOS86