在学习机器学习的过程中梯度下降这个词出现的频率很高,在运用的过程中不能很好的理解算法的意思,于是从网路上查找了一些资料。
一.介绍
梯度下降法(gradient descent)是求解无约束最优化问题的一种常用方法,有实现简单的优点。梯度下降法是迭代算法,每一步需要求解目标函数的梯度向量。

二.应用场景
1.给定许多组数据(xi, yi),xi (向量)为输入,yi为输出。设计一个线性函数y=h(x)去拟合这些数据。
2.感知机:感知机(perceptron)为二类分类的线性分类模型。 输入为实例的特征向量,输出为实例的类别, 取+1 和 -1 二值。 下面分别对这两种应用场景进行分析。

1.对于第一种场景:

既然是线性函数,在此不妨设为 h(x) = w0x0 + w1x1。此时我们遇到的问题就是如何确定w0和w1这两个参数,即w=(w0,w1)这个向量。
既然是拟合,则拟合效果可以用平方损失函数:E(w)=∑ [ h(x)- y ] ^2 / 2 来衡量。

其中w是权重二维向量,x是输入二维向量,x和y都是训练集的数据,即已知。至于后面除于2只是为了之后的推导过程中对E求导时候可以消除系数,暂时可以不管。
因此该问题变成了求E(w)最小值的无约束最优化问题

下面分别对这两种应用场景进行分析。

1).对于第一种场景:

既然是线性函数,在此不妨设为 h(x) = w0x0 + w1x1。

此时我们遇到的问题就是如何确定w0和w1这两个参数,即w=(w0,w1)这个向量。

既然是拟合,则拟合效果可以用平方损失函数:E(w)=∑ [ h(x)- y ] ^2 / 2 来衡量。

其中w是权重二维向量,x是输入二维向量,x和y都是训练集的数据,即已知。

至于后面除于2只是为了之后的推导过程中对E求导时候可以消除系数,暂时可以不管。

因此该问题变成了求E(w)最小值的无约束最优化问题

2).对于第二种场景:

假设输入空间(特征向量)为x,输出空间为y = {+1, -1},由输入空间到输出空间的如下函数

f(x) = sign(w · x + b) w∈Rn 其中 w 叫做权值或者权值向量, b叫做偏振。w · x 表示向量w和x的点积

感知机sign(w · x + b)的损失函数为 L(w, b) = -∑yi(w · xi + b) x ∈M, M为误分类点集合。

因此该问题变成了求L(w, b)最小值的无约束最优化问题

三.梯度下降方法

梯度其实就是高数求导方法,对E这个公式针对每个维数(w0,w1)求偏导后的向量▽E(w)=(∂E/∂w0,∂E/∂w1)

  1. 对于第一种场景

    对E这个公式针对每个维数(w0,w1)求偏导后的向量▽E(w)=(∂E/∂w0,∂E/∂w1)

    梯度为最陡峭上升的方向,对应的梯度下降的训练法则为: w=w-η▽E(w) 这里的η代表学习速率,决定梯度下降搜索中的步长 。

    上式的w是向量,即可用将该式写成分量形式为:wi=wi-η*∂E/∂wi

    现在关键就使计算∂E/∂wi:

    推导过程很简单,书上写的很详细,这里只记录结论(其实就是对目标函数求导):

    ∂E/∂wi=∑(h(x)-y)*(xi)

    这里的∑是对样本空间,即训练集进行一次遍历,耗费时间较大,可以使用梯度下降的随机近似:

    1. 对于第二种场景

      感知机学习算法是误分类驱动的,具体采用随机梯度下降方法

      ▽wL(w, b) = -∑yixi

      ▽bL(w, b) = -∑yi

      随机选取一个误分类点(xi, yi), 对w, b进行更新:

      w <—— w - η * (-yixi)

      b <—— b - η * (-yi) 式中η(0 < η <= 1)是步长,在统计学习中又称为学习率(learning rate)

四.随机梯度下降的随机近似:

既然是随机近似,则顾名思义,肯定是用近似方法来改善梯度下降时候的时间复杂度问题。

正如上所说,在∂E/∂wi=∑(h(x)-y)(xi) 的时候∑耗费了大量的时间,特别是在训练集庞大的时候。
所以肯定有人会猜想,如果把求和去掉如何,即变为∂E/∂wi=(h(x)-y)
(xi)。
幸运的是,猜想成立了。

只是要注意一下标准的梯度下降和随机梯度下降的区别:
   1.标准下降时在权值更新前汇总所有样例得到的标准梯度,随机下降则是通过考察每次训练实例来更新。

2.对于步长 η的取值,标准梯度下降的η比随机梯度下降的大。

因为标准梯度下降的是使用准确的梯度,理直气壮地走,随机梯度下降使用的是近似的梯度,就得小心翼翼地走,怕一不小心误入歧途南辕北辙了。

3.当E(w)有多个局部极小值时,随机梯度反而更可能避免进入局部极小值中。

四.代码及实例:

  1. 对于第一种场景
1 /*2  * 随机梯度下降实验:3  * 训练集输入为矩阵:4  * 1,`45  * 2,56  * 5,17  * 4,28  * 输出结果为:9  * 19
10  * 26
11  * 19
12  * 20
13  * 需要参数为 w:
14  * ?
15  * ?
16  *
17  * 目标函数:y=w0*x0+w1*x1;
18  *
19  * */
20 #include<stdio.h>
21 #include <stdlib.h>
22 int main()
23 {
24     double matrix[4][2]={{1,4},{2,5},{5,1},{4,2}};
25     double result[4]={19,26,19,20};
26     double w[2]={0,0};//初始为零向量
27     double loss=10.0;
28     const double n = 0.01;        //步长
29     for(int i=0;i<100&&loss>0.001;i++)
30     {
31         double error_sum=0;
32         int j=i%4;
33         {
34             double h=0;
35             for(int k=0;k<2;k++)
36             {
37                 h+=matrix[j][k]*w[k];
38             }
39             error_sum = h - result[j];
40             for(int k=0;k<2;k++)
41             {
42                 w[k]-= n * (error_sum) * matrix[j][k];//这里是关键
43             }
44          }
45         printf("%lf,%lf\n",w[0],w[1]);
46         double loss=0;
47         for(int j=0;j<4;j++)
48         {
49             double sum=0;
50             for(int k=0;k<2;k++)
51             {
52                 sum += matrix[j][k] * w[k];
53         }
54         loss += (sum - result[j]) * (sum-result[j]);
55      }
56         printf("%lf\n",loss);
57     }
58
59     system("pause");
60     return 0;
61 }

结果可以得出 w0=3,w1=4。

  1. 对于第二种场景
 1 /*2  * 基于感知机的随机梯度下降实验:  《统计学习方法》- p29-例2.1 3  * 训练集输入为矩阵:4  * 3,35  * 4,36  * 1,17  * 输出结果为(表示实例的分类):8  * 1 9  * 1
10  * -1
11  * 需要参数为 w:
12  * ?
13  * ?
14  *
15  * 目标函数:y = w0 * x0 + w1 * x1 + b;
16  *
17  * */
18 #include<stdio.h>
19 #include <stdlib.h>
20 int main()
21 {
22     double x[3][2]={{3,3},{4,3},{1,1}};
23     double y[4]={1, 1, -1};
24     double w[2]={0,0};//初始为零向量
25     double b = 0;
26     int j;
27     const double n = 1;        //步长
28
29     while(1)
30     {
31         for(j=0;j<3;j++)
32         {
33             if(y[j] * (w[0] * x[j][0] + w[1] * x[j][1] + b) <= 0)
34                 break;
35         }
36         if(j < 3)
37         {
38             for(int k=0;k<2;k++)
39                 w[k] += n * y[j] * x[j][k];//这里是关键
40             b += n * y[j];
41          }
42          else
43             break;
44         printf("%d :%lf,%lf %lf\n", j, w[0], w[1], b);
45
46     }
47
48     system("pause");
49     return 0;
50 }

结果可以得出 w0=1,w1=1, b = -3 。

梯度下降和随机梯度下降的区别相关推荐

  1. 梯度下降法和随机梯度下降法的区别

    这几天在看<统计学习方法>这本书,发现 梯度下降法 在 感知机 等机器学习算法中有很重要的应用,所以就特别查了些资料.  一.介绍 梯度下降法(gradient descent)是求解无约 ...

  2. 批量梯度下降,随机梯度下降和小批量梯度下降的区别

    批量梯度下降,随机梯度下降和小批量梯度下降的区别主要体现在用于计算梯度的样本的数量: 批量梯度下降:在每次迭代时,用整个数据集的所有样本上的梯度计算更新. 随机梯度下降:在每次迭代时,用单个样本上的梯 ...

  3. 梯度下降算法_批梯度下降法,Minibatch梯度下降法和随机梯度下降法之间的区别...

    什么是梯度下降法? 梯度下降法是一种机器学习中常用的优化算法,用来找到一个函数(f)的参数(系数)的值,使成本函数(cost)最小. 当参数不能解析计算时(如使用线性代数),并且必须通过优化算法搜索时 ...

  4. 大白话5分钟带你走进人工智能-第十一节梯度下降之手动实现梯度下降和随机梯度下降的代码(6)...

                                第十一节梯度下降之手动实现梯度下降和随机梯度下降的代码(6) 我们回忆一下,之前咱们讲什么了?梯度下降,那么梯度下降是一种什么算法呢?函数最优化 ...

  5. 梯度、梯度下降,随机梯度下降

    一.梯度gradient http://zh.wikipedia.org/wiki/%E6%A2%AF%E5%BA%A6 在标量场f中的一点处存在一个矢量G,该矢量方向为f在该点处变化率最大的方向,其 ...

  6. 梯度下降法和随机梯度下降法

    1. 梯度 在微积分里面,对多元函数的参数求∂偏导数,把求得的各个参数的偏导数以向量的形式写出来,就是梯度.比如函数f(x,y), 分别对x,y求偏导数,求得的梯度向量就是(∂f/∂x, ∂f/∂y) ...

  7. pytorch学习笔记(三十三):梯度下降和随机梯度下降

    文章目录 前言 1. 一维梯度下降 2. 学习率 3. 多维梯度下降 4. 随机梯度下降 小结 前言 在本节中,我们将介绍梯度下降(gradient descent)的工作原理.虽然梯度下降在深度学习 ...

  8. 【stanford】梯度、梯度下降,随机梯度下降

    一.梯度gradient http://zh.wikipedia.org/wiki/%E6%A2%AF%E5%BA%A6 在标量场f中的一点处存在一个矢量G,该矢量方向为f在该点处变化率最大的方向,其 ...

  9. 梯度下降和随机梯度下降

    梯度下降和随机梯度下降 目标函数 大多数机器学习或者深度学习算法都涉及某种形式的优化. 优化指的是改变 以最小化或最大化某个函数 f(x) 的任务. 我们通常以最小化 f(x) 指代大多数最优化问题. ...

最新文章

  1. POJ Mayor's posters——线段树+离散化
  2. 关于数据库group by需要注意
  3. 边工作边刷题:70天一遍leetcode: day 11-2
  4. 图片尺寸对分类迭代次数和准确率的影响
  5. 中国油气装备行业发展状况与投资前景咨询报告2022-2028年版
  6. Lua的扩展库LuaSocket
  7. ECMA学习小结(3)——constructor 和 prototype
  8. Python键鼠自动化函数
  9. OAuth2.0 原理流程及其单点登录和权限控制
  10. Python 03-pyc、数据类型
  11. 拦截JQuery的ajax
  12. IDEA中使用SQLite数据库
  13. 计算机量子化学计算焓变,中国科学技术大学超级计算中心
  14. 博弈论算法常见模型整理
  15. java出租车计费系统_基于JavaEE的出租车计费系统的设计实验报告
  16. EndNote X9破解之后遇到的问题
  17. vue引入阿里巴巴矢量图库图标
  18. 小D的一串数字 (数位DP做法)
  19. ArcSDE之SDE命令
  20. 较快入门postman,使用postman玩转接口测试 一

热门文章

  1. java基础 day01笔记
  2. 在gitee上新建仓库并上传文件
  3. 比尔盖茨的11条人生箴言
  4. “南通大学教务管理系统微信公众号” 用户体验分析
  5. js 时间戳和日期格式相互转换
  6. RDD、矩阵基础——3. 矩阵、向量(Breeze、BLAS)
  7. WebGrid固定列(Fixed-Coloum)的设定
  8. m2server架构
  9. msxml3.dll 错误 80072ee2解决方法 The operation timed out
  10. labview的MAX显示数据库损坏的解决办法