梯度下降算法 java_用 Java 实现梯度下降,看这篇就对了!
每天凌晨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 实现梯度下降,看这篇就对了!相关推荐
- 梯度下降:全梯度下降算法(FG)、随机梯度下降算法(SG)、小批量梯度下降算法(mini-batch)、随机平均梯度下降算法(SAG)。梯度下降法算法比较和进一步优化。
日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 2.2 梯度下降(Gradient Descent) 2.2. ...
- 梯度下降算法的正确步骤_梯度下降算法
梯度下降算法的正确步骤 Title: What is the Gradient Descent Algorithm and its working. 标题:什么是梯度下降算法及其工作原理. Gradi ...
- Java应用系统监控看这篇就够了
Java应用系统监控看这篇就够了 文章目录 业务背景 系统监控发展历程 技术方案 日志监控技术方案 Grafana+阿里云SLS日志服务 分布式链路追踪技术方案 阿里云jaeger方案 开源框架sky ...
- 女生就不适合学Java吗_女生不适合学java?给他看这篇文章,女生其实更适合学java,更好就业!...
原标题:女生不适合学java?给他看这篇文章,女生其实更适合学java,更好就业! 女生适合学java吗?女生做IT怎么样 首先要表明我的观点,编程是不分男女,什么女生不适合学编程的说法,从客观上来说 ...
- 彻底搞明白梯度下降算法1:方向导数与梯度概念理解
预备知识点:斜率与变化率 方向导数 梯度 总结 1.预备知识点:斜率与变化率 斜率: 数学.几何学名词,是表示一条直线(或曲线的切线)关于横坐标轴倾斜程度的量.它通常用直线(或曲线的切线)与横坐标轴夹 ...
- 后门怎么写隐蔽java_用Java写黑软-后门篇
这次我给大家带来的是<用Java写黑软-后门篇>,目前我在网上还没有找到哪位高手把自己写的java后门公布出来,有的也多是些恶搞的东西,所以这次我就来献献丑了. 先来一段理论的东西,后门, ...
- Java 集合框架,看这篇真的够了!
话不多说,直接上图: Java 集合,也称作容器,主要是由两大接口 (Interface) 派生出来的: Collection 和 Map 顾名思义,容器就是用来存放数据的. 那么这两大接口的不同之处 ...
- 搞懂Java分布式锁实现看这篇文章就对了
2019独角兽企业重金招聘Python工程师标准>>> 前言: 随着微处理机技术的发展,人们只需花几百美元就能买到一个CPU芯片,这个芯片每秒钟执行的指令比80年代最大的大型机的处理 ...
- java空间大战,看这篇足矣了!
开头 在找工作的过程中,对于 Redis 技术知识的掌握已经成为必须的技能.美团面试常常就会被问到Redis相关知识,而这次我就差点倒在了美团3面,面试官连问我以下几个Redis的问题,然后就卡壳了- ...
最新文章
- python 程序设计思维_Python程序设计与算法思维
- Ubuntu16.04LTS Install Intel® RealSense™ ROS from Sources
- %matplotlib inline 是什么意思
- Android下常见终端模拟器和SSH客户端感受及几个Tips
- 15分钟内使用Twilio和Stormpath在Spring Boot中进行身份管理
- linux内核优化项,Linux内核优化配置
- 常用代码生成工具汇总(转)
- ds—at1000s说明书_DS-1000操作手册.pdf
- 杂项:grunt-tmod
- 新买的显卡需要用软件测试吗,怎么测试显卡性能?新手测试教程,秒懂
- 宝塔环境下MinDoc的安装教程
- CSS实现自适应下保持宽高比
- 前端面试题集锦——算法
- 巅峰战舰服务器维护,《巅峰战舰》8月5日更新公告
- fedora vs. ubuntu
- java printerjob打印_利用PrinterJob类实现打印控制
- Lake Shore350型低温温度控制器
- 每日一问 --什么是信道编码和交织?
- 盛世昊通董车长2.0“后“积薄发,点爆汽车后市场
- 谈谈国产FPGA现状
热门文章
- 【Serverless】【认证服务】接入谷歌账号登录时提示错误码10
- iview表格内容居中
- Day442443444445446447448.K8s -谷粒商城
- 算法(并查集--合并集合)
- CBitmap Detach DeleteObject关系
- opencv python:使用cv2.waitKey(1)控制多个按键
- Ubuntu18的bug导致系统启动后黑屏的问题
- jsp+servlet实现商城购物车功能
- wps如何在目录里面打省略号_在wps中怎么让文档目录的省略号对齐 - 卡饭网
- 21天学会c++(英汉对照,个人翻译,水平有限,供参考)-------第2天