每天凌晨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,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 下载。

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

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

  1. 梯度下降:全梯度下降算法(FG)、随机梯度下降算法(SG)、小批量梯度下降算法(mini-batch)、随机平均梯度下降算法(SAG)。梯度下降法算法比较和进一步优化。

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 2.2 梯度下降(Gradient Descent) 2.2. ...

  2. 梯度下降算法的正确步骤_梯度下降算法

    梯度下降算法的正确步骤 Title: What is the Gradient Descent Algorithm and its working. 标题:什么是梯度下降算法及其工作原理. Gradi ...

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

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

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

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

  5. 彻底搞明白梯度下降算法1:方向导数与梯度概念理解

    预备知识点:斜率与变化率 方向导数 梯度 总结 1.预备知识点:斜率与变化率 斜率: 数学.几何学名词,是表示一条直线(或曲线的切线)关于横坐标轴倾斜程度的量.它通常用直线(或曲线的切线)与横坐标轴夹 ...

  6. 后门怎么写隐蔽java_用Java写黑软-后门篇

    这次我给大家带来的是<用Java写黑软-后门篇>,目前我在网上还没有找到哪位高手把自己写的java后门公布出来,有的也多是些恶搞的东西,所以这次我就来献献丑了. 先来一段理论的东西,后门, ...

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

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

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

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

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

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

最新文章

  1. python 程序设计思维_Python程序设计与算法思维
  2. Ubuntu16.04LTS Install Intel® RealSense™ ROS from Sources
  3. %matplotlib inline 是什么意思
  4. Android下常见终端模拟器和SSH客户端感受及几个Tips
  5. 15分钟内使用Twilio和Stormpath在Spring Boot中进行身份管理
  6. linux内核优化项,Linux内核优化配置
  7. 常用代码生成工具汇总(转)
  8. ds—at1000s说明书_DS-1000操作手册.pdf
  9. 杂项:grunt-tmod
  10. 新买的显卡需要用软件测试吗,怎么测试显卡性能?新手测试教程,秒懂
  11. 宝塔环境下MinDoc的安装教程
  12. CSS实现自适应下保持宽高比
  13. 前端面试题集锦——算法
  14. 巅峰战舰服务器维护,《巅峰战舰》8月5日更新公告
  15. fedora vs. ubuntu
  16. java printerjob打印_利用PrinterJob类实现打印控制
  17. Lake Shore350型低温温度控制器
  18. 每日一问 --什么是信道编码和交织?
  19. 盛世昊通董车长2.0“后“积薄发,点爆汽车后市场
  20. 谈谈国产FPGA现状

热门文章

  1. 【Serverless】【认证服务】接入谷歌账号登录时提示错误码10
  2. iview表格内容居中
  3. Day442443444445446447448.K8s -谷粒商城
  4. 算法(并查集--合并集合)
  5. CBitmap Detach DeleteObject关系
  6. opencv python:使用cv2.waitKey(1)控制多个按键
  7. Ubuntu18的bug导致系统启动后黑屏的问题
  8. jsp+servlet实现商城购物车功能
  9. wps如何在目录里面打省略号_在wps中怎么让文档目录的省略号对齐 - 卡饭网
  10. 21天学会c++(英汉对照,个人翻译,水平有限,供参考)-------第2天