近期在搞论文,须要用梯度下降算法求解,所以又一次整理分享在这里。

主要包含梯度介绍、公式求导、学习速率选择、代码实现。

梯度下降的性质:

1.求得的解和选取的初始点有关

2.能够保证找到局部最优解,由于梯度终于会减小为0,则步长与梯度的乘积会自己主动越来越小。

梯度简单介绍

一个多元函数的在某点的梯度方向是函数值在该点增长最快的方向。即方向导数取最大值的方向。

问题描写叙述公式求导学习率选择

如果要学习这么一个函数:

那么损失函数能够定义成:

当中X矩阵,每行表示一个数据点,theta是列向量。Y也是列向量。

像这样的优化问题有非常多方法,那咱们先直接求导吧,对于求导过程。好多还是不理解。能够用这样的方法:

首先定义损失变量:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDM2NzUwNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

那么损失函数就能够表示成:

一步一步的求导:

再求:                             

                                                                               

那么把分步骤合起来就是:

能够用最小二乘或者梯度下降来求解,这里我们看看梯度下降的实现,梯度下降的思想不难。仅仅要确定好梯度以及梯度的方向就ok。由于是梯度的反方向去下降,所以在对參数更新的时候要注意:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDM2NzUwNg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="" />

下降速率能够从0.01開始尝试,越大下降越快,收敛越快。当然下降的速率能够改成自适用的。就是依据梯度的强弱适当调整步伐,这样效果还好一点儿。

代码

matlab实现
clc;
clear
% load data
heart_scale = load('heart_scale');
X = heart_scale.heart_scale_inst;
Y = heart_scale.heart_scale_label; epsilon = 0.0003;
gamma= 0.0001; w_old=zeros(size(X,2),1);%參数初始值均设为0
k=1;
figure(1);
while 1
minJ_w(k) = 1/2 * (norm(X*w_old - Y))^2;
w_new = w_old - gamma*(X'*X*w_old - X'*Y);
fprintf('The %dth iteration, minJ_w = %f, \n',k,minJ_w(k)); if norm(w_new-w_old) < epsilon %这里採用两次迭代中优化目标是否变化来判定是否收敛,也能够通过判定优化函数值是否变化来判定是否收敛
W_best = w_new;
break;
end
w_old = w_new;
k=k+1;
end plot(minJ_w);%观察收敛性

梯度下降算法(Gradient Descent)的更多相关文章

  1. 梯度下降算法(Gradient descent)GD

    1.我们之前已经定义了代价函数J,可以将代价函数J最小化的方法,梯度下降是最常用的算法,它不仅仅用在线性回归上,还被应用在机器学习的众多领域中,在后续的课程中,我们将使用梯度下降算法最小化其他函数,而 ...

  2. 机器学习(1)之梯度下降(gradient descent)

    机器学习(1)之梯度下降(gradient descent) 题记:最近零碎的时间都在学习Andrew Ng的machine learning,因此就有了这些笔记. 梯度下降是线性回归的一种(Line ...

  3. 梯度下降(gradient descent)算法简介

    梯度下降法是一个最优化算法,通常也称为最速下降法.最速下降法是求解无约束优化问题最简单和最古老的方法之一,虽然现在已经不具有实用性,但是许多有效算法都是以它为基础进行改进和修正而得到的.最速下降法是用 ...

  4. 梯度下降(Gradient Descent)小结 -2017.7.20

    在求解算法的模型函数时,常用到梯度下降(Gradient Descent)和最小二乘法,下面讨论梯度下降的线性模型(linear model). 1.问题引入 给定一组训练集合(training se ...

  5. 梯度下降(Gradient descent)

    首先,我们继续上一篇文章中的例子,在这里我们增加一个特征,也即卧室数量,如下表格所示: 因为在上一篇中引入了一些符号,所以这里再次补充说明一下: x‘s:在这里是一个二维的向量,例如:x1(i)第i间 ...

  6. (二)深入梯度下降(Gradient Descent)算法

    一直以来都以为自己对一些算法已经理解了,直到最近才发现,梯度下降都理解的不好. 1 问题的引出 对于上篇中讲到的线性回归,先化一个为一个特征θ1,θ0为偏置项,最后列出的误差函数如下图所示: 手动求解 ...

  7. CS229 2.深入梯度下降(Gradient Descent)算法

    1 问题的引出 对于上篇中讲到的线性回归,先化一个为一个特征θ1,θ0为偏置项,最后列出的误差函数如下图所示: 手动求解 目标是优化J(θ1),得到其最小化,下图中的×为y(i),下面给出TrainS ...

  8. (3)梯度下降法Gradient Descent

    梯度下降法 不是一个机器学习算法 是一种基于搜索的最优化方法 作用:最小化一个损失函数 梯度上升法:最大化一个效用函数 举个栗子 直线方程:导数代表斜率 曲线方程:导数代表切线斜率 导数可以代表方向, ...

  9. <反向传播(backprop)>梯度下降法gradient descent的发展历史与各版本

    梯度下降法作为一种反向传播算法最早在上世纪由geoffrey hinton等人提出并被广泛接受.最早GD由很多研究团队各自发表,可他们大多无人问津,而hinton做的研究完整表述了GD方法,同时hin ...

  10. 梯度下降法Gradient descent(最速下降法Steepest Descent)

    最陡下降法(steepest descent method)又称梯度下降法(英语:Gradient descent)是一个一阶最优化算法. 函数值下降最快的方向是什么?沿负梯度方向  d=−gk

随机推荐

  1. 说说UART(转)

    串口协议基础 1 串口概述 串口由收发器组成.发送器是通过TxD引脚发送串行数据,接收器是通过RxD引脚接收串行数据.发送器和接收器都利用了一个移位寄存器,这个移位寄存器可以将数据进行“并转串”和“串 ...

  2. odbc数据源for mysql

    1. 下载mysql适配器并安装 mysql-connector-odbc-3.51.20-win32.exe 2. 配置数据源 “开始” ->”管理工具“ -> “数据源(ODBC)”- ...

  3. 在taro中跳转页面的时候执行两遍componentDidMount周期的原因和解决方法

    在做taro跳转的时候,发现在跳转后的页面会走两遍componentDidMount周期,查看了github上的issues,发现是跳转路由带参为中文引起的,只要把中文参数进行urlencode解决 ...

  4. java 对 汉字排序(按照拼音字母排序)

    业务场景: 一个list集合,里面add了若干个实体类,针对该实体类排序的属性为String. 使用技术,自定义list排序(JDK自带),重写Comparator接口的compare方法,汉字转拼音 ...

  5. RabbitMQ与java、Spring结合实例详细讲解

    林炳文Evankaka原创作品.转载请注明出处http://blog.csdn.net/evankaka 摘要:本文介绍了rabbitMq,提供了如何在Ubuntu下安装RabbitMQ 服务的方法. ...

  6. C语言字节对齐问题详解

    引言 考虑下面的结构体定义: typedef struct{ char c1; short s; char c2; int i; }T_FOO; 假设这个结构体的成员在内存中是紧凑排列的,且c1的起始 ...

  7. sencha touch 类的使用

    sencha touch 有一套自己的类机制,可以以面向对象的方式去写代码,封装业务逻辑,sencha touch 的组件.插件.api等都建立在这一套类机制的上面 在实际开发中,我们需要遵循这一套机 ...

  8. DragonBones龙骨插槽的隐藏

    参考: 插槽中对象的显示与隐藏问题 let factory = dragonBones.EgretFactory.factory; factory.parseDragonBonesData(RES.g ...

  9. CentOS系统下docker的安装与卸载

    Docker简介 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱机制, ...

  10. 解决jenkins下使用HTML Publisher插件后查看html报告显示不正常

    在jenkins后使用html publisher查看html报告时,发现显示不全,很多东西显示不了. 在查看官方文档后,这原来是安全问题所导致的. Jenkins安全默认是将以下功能都关闭了 1.j ...