优化算法——梯度下降法

一、优化算法概述

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

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

    优化的算法有很多种,从最基本的梯度下降法到现在的一些启发式算法,如遗传算法(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;
	}
}

主函数:

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

}     

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏SIGAI学习与实践平台

理解Spatial Transformer Networks

随着深度学习的不断发展,卷积神经网络(CNN)作为计算机视觉领域的杀手锏,在几乎所有视觉相关任务中都展现出了超越传统机器学习算法甚至超越人类的能力。一系列CNN...

16050
来自专栏机器学习算法与Python学习

Pre-training到底有没有用?何恺明等人新作:Rethinking ImageNet Pre-training

使用基于ImageNet预训练(Pre-training)的网络已成为计算机视觉任务中一种常规的操作。何恺明等人在新作Rethinking ImageNet P...

10920
来自专栏marsggbo

DeepLearning.ai学习笔记(一)神经网络和深度学习--Week3浅层神经网络

介绍 DeepLearning课程总共五大章节,该系列笔记将按照课程安排进行记录。 另外第一章的前两周的课程在之前的Andrew Ng机器学习课程笔记(博...

23990
来自专栏机器学习算法工程师

EM算法原理总结

地址:http://www.cnblogs.com/pinard/p/6912636.html

10920
来自专栏机器之心

资源 | 从全连接层到大型卷积核:深度学习语义分割全指南

选自qure.ai 机器之心编译 参与:路雪、蒋思源 语义分割一直是计算机视觉中十分重要的领域,随着深度学习的流行,语义分割任务也得到了大量的进步。本文首先阐...

47160
来自专栏机器之心

徒手实现CNN:综述论文详解卷积网络的数学本质

选自arXiv 机器之心编译 参与:黄小天、路雪、蒋思源 近日南洋理工大学研究者发布了一篇描述卷积网络数学原理的论文,该论文从数学的角度阐述整个卷积网络的运算与...

378110
来自专栏一直在跳坑然后爬坑

向量空间相关概念总结-线性相关

严格定义: 如果存在不全为零的实数k1、k2...km,使上面的等式成立,则这个向量组线性相关,否则线性无关。 注:这里这个向量组里是包含...

18430
来自专栏瓜大三哥

BP神经网络

BP(Back Propagation)神经网络是1986年由以Rumelhart和McCelland为首的科学家小组提出的,是一种按误差逆传播算法训练的多层前...

30990
来自专栏AI科技大本营的专栏

北大、北理工、旷视联手:用于图像语义分割的金字塔注意力网络

近日,北京理工大学、旷视科技、北京大学联手,发表了一篇名为 Pyramid Attention Network for Semantic Segmentatio...

12420
来自专栏AI研习社

深度学习下的医学图像分析(二)

AI 研习社按:本文由图普科技编译自《Medical Image Analysis with Deep Learning Part2》,是最近发表的《深度学习下...

41450

扫码关注云+社区

领取腾讯云代金券