优化算法——梯度下降法

优化算法——梯度下降法最近一直在看机器学习的材料,归纳起来就是把一个学习的问题转化为优化的问题,机器学习算法的本质就是如何对问题抽象建模,使一个学习的问题变为一个优化的问题。优化的算法有很多种,从最基本的梯度下降法到现在的一些启发式算法,如遗传算法(GA),差分演化算法(DE),粒子群算法(PSO)和人工蜂群算法(ABC)。梯度下降法又被称为最速下降法(Steepestdescendmethod),其理论基

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

一、优化算法概述

 

    优化算法所要求解的是一个问题的最优解或者近似最优解。现实生活中有很多的最优化问题,如最短路径问题,如组合优化问题等等,同样,也存在很多求解这些优化问题的方法和思路,如梯度下降方法。

    机器学习在近年来得到了迅速的发展,越来越多的机器学习算法被提出,同样越来越多的问题利用机器学习算法得到解决。优化算法是机器学习算法中使用到的一种求解方法。在机器学习,我们需要寻找输入特征与标签之间的映射关系,在寻找这样的映射关系时,有一条重要的原则就是使得寻找到的映射结果与原始标签之间的误差最小。机器学习问题归纳起来就是把一个学习的问题转化为优化的问题,机器学习算法的本质就是如何对问题抽象建模,使一个学习的问题变为一个可求解的优化问题。

    优化的算法有很多种,从最基本的梯度下降法到现在的一些启发式算法,如遗传算法(GA),差分演化算法(DE),粒子群算法(PSO)和人工蜂群算法(ABC)。

二、梯度下降法

1、基本概念

    梯度下降法又被称为最速下降法(Steepest descend method),其理论基础是梯度的概念。梯度与方向导数的关系为:梯度的方向与取得最大方向导数值的方向一致,而梯度的模就是函数在该点的方向导数的最大值。对于一个无约束的优化问题:优化算法——梯度下降法 ,例如优化算法——梯度下降法

优化算法——梯度下降法

如图,在优化算法——梯度下降法处的切线。显然在优化算法——梯度下降法处函数取得最小值。沿着梯度的方向是下降速度最快的方向。具体的过程为:初始时,任取优化算法——梯度下降法的值,如取优化算法——梯度下降法,则对应的优化算法——梯度下降法。利用梯度下降法优化算法——梯度下降法,其中优化算法——梯度下降法为学习率,可以取固定常数。如取优化算法——梯度下降法,则优化算法——梯度下降法,对应的优化算法——梯度下降法,类似的优化算法——梯度下降法,对应的优化算法——梯度下降法。算法终止的判断准则是:优化算法——梯度下降法,其中优化算法——梯度下降法是一个指定的阈值。梯度的更新公式为:优化算法——梯度下降法

2、算法流程

梯度下降法的流程:

1、初始化:随机选取取值范围内的任意数

2、循环操作:

       计算梯度;

       修改新的变量;

       判断是否达到终止:如果前后两次的函数值差的绝对值小于阈值,则跳出循环;否则继续;

3、输出最终结果

    与梯度下降法对应的是被称为梯度上升的算法,主要的区别就是在梯度的方向上,一个方向是下降最快的方向,相反的就是梯度上升最快的方法。主要用来求解最大值问题:优化算法——梯度下降法。梯度的更新公式为:优化算法——梯度下降法

下面以优化算法——梯度下降法为例,给出一下的Java程序:

public class SteepestDescend {
	public static double alpha = 0.5;// 迭代步长
	public static double e = 0.00001;// 收敛精度

	public double x0;
	public double y0;

	public double getY(double x) {
		return (x * x - 3 * x + 2);
	}

	public double getDerivative(double x) {
		return (2 * x - 3);
	}

	public void init() {
		x0 = 0;
		y0 = this.getY(x0);
	}

	public double getSteepestDescend() {
		double min = 0;
		double x = x0;
		double y = y0;
		double y1;
		double temp = 0;
		/*
		 * 做梯度运算
		 */
		while (true) {
			temp = this.getDerivative(x);
			x = x - alpha * temp;
			y1 = this.getY(x);
			if (Math.abs(y1 - y) <= e) {
				break;
			}
			y = y1;
			min = y;
		}
		return min;
	}
}

Jetbrains全家桶1年46,售后保障稳定

主函数:

public class TestMain {
	public static void main(String args[]) {
		double min;
		SteepestDescend sd = new SteepestDescend();
		sd.init();
		min = sd.getSteepestDescend();
		System.out.println("最小值:"+ min );
	}

}

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/215540.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 7-1 正整数A+B > 题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。「建议收藏」

    7-1 正整数A+B > 题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。「建议收藏」7-1 正整数A+B题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000]。稍微有点麻烦的是,输入并不保证是两个正整数。输入格式:输入在一行给出A和B,其间以空格分开。问题是A和B不一定是满足要求的正整数,有时候可能是超出范围的数字、负数、带小数点的实数、甚至是一堆乱码。注意:我们把输入中出现的第1个空格认为是A和B的分隔。题目保证至少存在一个空格,并且B不是一个…

  • 文本分类算法综述

    文本分类算法综述文本分类大致有两种方法:一种是基于训练集的文本分类方法;另一种是基于分类词表的文本分类方法。两种方法出自不同角度的研究者,训练集法更多的来自计算机或人工智能研究领域,而分类表法则更多地来自突出情报领域。本文主要介绍前一种。基于训练集的文本分类是一种典型的有教师的机器学习问题,一般分为训练和分类两个阶段,具体过程如下:训练阶段:1)             定义类别集合 ,这些类别可是是层次式的,…

  • vm安装centos7蓝屏「建议收藏」

    vm安装centos7蓝屏「建议收藏」vm安装centos7蓝屏最近有同学购买了最新款英特尔11代的笔记本,使用vm安装centos7系统

  • JAVA:定时器的三种方法(详细注解)

    JAVA:定时器的三种方法(详细注解)第一种:创建一个thread,然后让它在while循环里一直运行着,通过sleep方法来达到定时任务的效果,代码如下:publicclassTask1{ publicstaticvoidmain(String[]args){ //runinasecond //每一秒钟执行一次 finallongtimeInterval=10…

  • JavaMD5加密「建议收藏」

    JavaMD5加密「建议收藏」Java实现MD5加密什么是MD5:MD5信息摘要算法(英语:MD5Message-DigestAlgorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hashvalue),用于确保信息传输完整一致。使用方法:1、引入maven坐标,导入相应的包在pom.xml中引入包的坐标<dependency> <groupId>commons-codec</groupId> <artifactI

  • 学习Java大数据需要掌握哪些Java技能?

    学习Java大数据需要掌握哪些Java技能?学习Java大数据需要掌握哪些Java技能?现在大数据发展很速度很多小伙伴想要学习Java大数据技术开发,但是学习大数据为什么需要掌握Java技能呢?一、学大数据为什么要掌握Java?首先,我们学习大数据,为什么要先掌握Java技术?Java是目前使用非常广泛的编程语言,它具有的众多特性,特别适合作为大数据应用的开发语言。Java不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。Java语言作为静态面向对象编程语言的

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号