梯度下降计实例计算(二维)

文章目录

  • 内容简介
  • 示例说明
  • 绘制曲线
  • 进一步讨论
  • 参考资料

内容简介

梯度下降是在机器学习中重要的计算内容。本文就一个具体的示例,展示如何在梯度下降中。

示例说明

设损失函数 y=loss(x)=(x−4)2y=loss(x)=(x-4)^2y=loss(x)=(x−4)2,令此函数的导数为g(x)=y′=loss′(x)=2x−8g(x)=y'=loss'(x)=2x-8g(x)=y′=loss′(x)=2x−8。 在一般情况下,如果可以得到g(x)g(x)g(x),那么只要解出 g(x)=0g(x)=0g(x)=0的根,那么就求得了最小值。比如在本示例中,很容易得到在x=0x=0x=0时,取得最小值。

但是在实际的情况下,问题往往不是那么简单,即使有了 loss(x)loss(x)loss(x) 和 g(x)g(x)g(x),但是方程 g(x)=0g(x)=0g(x)=0,难以解出,那么就有了梯度下降法:

xi+1=xi−r∗loss′(x)(1)x_{i+1}=x_i- r * loss'(x) \tag 1 xi+1​=xi​−r∗loss′(x)(1)

为了理解这个公式,首先我们需要理解一下导数的基本概念。给定函数 y=f(x)y=f(x)y=f(x),则其导数的定义如下:
f′(x)=lim⁡Δx→0ΔyΔx=lim⁡Δx→0Δf(x+Δx)−f(x0)Δx(2)f'(x)=\lim_ {\Delta x \rightarrow 0} {\Delta y \over \Delta x} = \lim_ {\Delta x \rightarrow 0} {\Delta f(x+\Delta x) - f(x_0) \over \Delta x} \tag 2 f′(x)=Δx→0lim​ΔxΔy​=Δx→0lim​ΔxΔf(x+Δx)−f(x0​)​(2)

由公式可见,对点x0x0x0的导数的几何含义是函数在点x0x0x0处的变化速率或斜率。当变量增加时,(即多维函数),斜率不再是一维的,于是就有了梯度的概念。梯度是一个向量组合,其几何含义是多维图形中变化速率最快的方向。

有了这个概念再看公式1,可以发现通过r,能够根据y的变化率进行推进,从而逐渐逼近最小值的点。具体过程如下代码所示:

#encoding=utf-8
"""
创建日期:Sun Feb 21 16:19:17 2021
作者信息:郝伟老师
功能简介:
"""import matplotlib.pyplot as plt
import numpy as npdef loss(x):return (x-4)**2def g(x):return 2*x - 8# 初始化值为x0, 学习率为0.9
x0, rate=0, 0.1# 初始化 x和y
x, y=x0, loss(x0)# 记录中间的过程值
xs, ys=[], []
xs.append(x)
ys.append(y)# 循环次数限制在100,保证不会因为递减缓慢而卡死
print('i       x               y               delta_y')
for i in range(100):# 核心代码,根据 g(x)的变化率以r的速度递减x = x - rate * g(x)y_new=loss(x)print('{0}\t{1:.5e}\t{2:.5e}\t{3:.5e}'.format(i+1, x, y, abs(y_new-y)))if abs(y_new - y) < 1e-6:breaky = y_newxs.append(x)ys.append(y)# 绘制递减曲线
plt.plot(xs, ys, 'bo--')# 绘制函数 y=loss(x),其中 x in [0, 8]
xs2=np.arange(0.0, 8.0, 0.1)
ys2=[loss(x) for x in xs2]
plt.plot(xs2, ys2, '-', linewidth=2)plt.show()

绘制曲线

程序运行以后,可以得到以下曲线。

过程数据

i       x               y               delta_y
1       8.00000e-01     1.60000e+01     5.76000e+00
2       1.44000e+00     1.02400e+01     3.68640e+00
3       1.95200e+00     6.55360e+00     2.35930e+00
4       2.36160e+00     4.19430e+00     1.50995e+00
5       2.68928e+00     2.68435e+00     9.66368e-01
6       2.95142e+00     1.71799e+00     6.18475e-01
7       3.16114e+00     1.09951e+00     3.95824e-01
8       3.32891e+00     7.03687e-01     2.53327e-01
9       3.46313e+00     4.50360e-01     1.62130e-01
10      3.57050e+00     2.88230e-01     1.03763e-01
11      3.65640e+00     1.84467e-01     6.64083e-02
12      3.72512e+00     1.18059e-01     4.25013e-02
13      3.78010e+00     7.55579e-02     2.72008e-02
14      3.82408e+00     4.83570e-02     1.74085e-02
15      3.85926e+00     3.09485e-02     1.11415e-02
16      3.88741e+00     1.98070e-02     7.13053e-03
17      3.90993e+00     1.26765e-02     4.56354e-03
18      3.92794e+00     8.11296e-03     2.92067e-03
19      3.94235e+00     5.19230e-03     1.86923e-03
20      3.95388e+00     3.32307e-03     1.19631e-03
21      3.96311e+00     2.12676e-03     7.65635e-04
22      3.97049e+00     1.36113e-03     4.90007e-04
23      3.97639e+00     8.71123e-04     3.13604e-04
24      3.98111e+00     5.57519e-04     2.00707e-04
25      3.98489e+00     3.56812e-04     1.28452e-04
26      3.98791e+00     2.28360e-04     8.22095e-05

进一步讨论

如果,我们选择比较大的步长,比如0.9,那么会导致步长过长,“跨”过最小值,同样可以收敛,得到以下图像。

过程数据

i       x               y               delta_y
1       7.20000e+00     1.60000e+01     5.76000e+00
2       1.44000e+00     1.02400e+01     3.68640e+00
3       6.04800e+00     6.55360e+00     2.35930e+00
4       2.36160e+00     4.19430e+00     1.50995e+00
5       5.31072e+00     2.68435e+00     9.66368e-01
6       2.95142e+00     1.71799e+00     6.18475e-01
7       4.83886e+00     1.09951e+00     3.95824e-01
8       3.32891e+00     7.03687e-01     2.53327e-01
9       4.53687e+00     4.50360e-01     1.62130e-01
10      3.57050e+00     2.88230e-01     1.03763e-01
11      4.34360e+00     1.84467e-01     6.64083e-02
12      3.72512e+00     1.18059e-01     4.25013e-02
13      4.21990e+00     7.55579e-02     2.72008e-02
14      3.82408e+00     4.83570e-02     1.74085e-02
15      4.14074e+00     3.09485e-02     1.11415e-02
16      3.88741e+00     1.98070e-02     7.13053e-03
17      4.09007e+00     1.26765e-02     4.56354e-03
18      3.92794e+00     8.11296e-03     2.92067e-03
19      4.05765e+00     5.19230e-03     1.86923e-03
20      3.95388e+00     3.32307e-03     1.19631e-03
21      4.03689e+00     2.12676e-03     7.65635e-04
22      3.97049e+00     1.36113e-03     4.90007e-04
23      4.02361e+00     8.71123e-04     3.13604e-04
24      3.98111e+00     5.57519e-04     2.00707e-04
25      4.01511e+00     3.56812e-04     1.28452e-04
26      3.98791e+00     2.28360e-04     8.22095e-05

参考资料

[1] (二)深入梯度下降(Gradient Descent)算法,https://www.cnblogs.com/ooon/p/4947688.html

梯度下降计实例计算(二维)相关推荐

  1. cad计算机面积和周长,CAD怎么计算二维图形的面积和周长

    CAD怎么计算二维图形的面积和周长 CAD是一款实用的绘图软件,在工程设计的各个领域里应用十分广泛,具有强大的二维绘图功能,那么我们用CAD怎么计算二维图形的面积和周长呢? 下面来看看具体的实例: ( ...

  2. C语言:编写一个函数,计算二维数组中的最大元素,数组以指针的方式传递

    /*编写一个函数,计算二维数组中的最大元素,数组以指针的方式传递*/ #include<stdio.h> #define N 4 #define M 3 int findmax(int ( ...

  3. matlab中二维散点图,MATLAB实例:二维散点图

    MATLAB实例:二维散点图 用MATLAB实现简单的散点图的绘制,可以自行设置点的形状与颜色,可以去掉坐标轴边框. 数据来源:MATLAB高斯混合数据的生成 将二维数据保存为gauss.txt. 1 ...

  4. 分别计算二维数组主对角线元素与辅对角线元素的和。

    知识点:理解对角线与熟悉二维数组的下标. 二维数组本质上是以数组作为数组元素的数组,即"数组的数组",类型说明符 数组名[常量表达式][常量表达式].二维数组又称为矩阵,行列数相等 ...

  5. 高斯 二维 matlab,MATLAB实例:二维高斯分布图

    MATLAB实例:二维高斯分布图 问题描述:用MATLAB在一张图上同时画出二维高斯散点图与分布图. 数据来源:MATLAB高斯混合数据的生成 将二维数据保存为gauss_data.txt. 前期工作 ...

  6. 梯度下降法和牛顿法计算开根号

    梯度下降法和牛顿法计算开根号 本文将介绍如何不调包,只能使用加减乘除法实现对根号x的求解.主要介绍梯度下降和牛顿法者两种方法,并给出 C++ 实现. 梯度下降法 思路/步骤 转化问题,将 x \sqr ...

  7. MATLAB对autumn.tif文件计算二维DCT变换

    %对autumn.tif文件计算二维DCT变换 RGB = imread('autumn.tif'); I = rgb2gray(RGB); %真彩色图像转换成灰度图像 J = dct2(I); %计 ...

  8. lisp 圆柱螺旋线_Auto LISP对AutoCAD2002进行二次开发实例——绘制二维函数曲线

    Auto LISP 对 AutoCAD 2002 进行二次开发实例 ---绘制二维函数曲线Ξ李旭荣 ,任奕玲 ,梁秀英 ,刘梅英 (华中农业大学 工程技术学院 ,湖南 武汉 430070) 摘 要:主 ...

  9. opencv 计算二维矢量的幅值—magnitude()函数

    计算二维矢量的幅值:magnitude()函数 该函数用来计算二维矢量的幅值 void magnitude(InputArray x,InputArray y,OutputArray magnitud ...

最新文章

  1. python的popen函数
  2. java 搜索机制_Java爬虫搜索原理实现
  3. 【转】C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部
  4. [react] 在React中我们怎么做静态类型检测?都有哪些方法可以做到?
  5. 贪心算法(Greedy Algorithm)
  6. HDU 1827:Summer Holiday(强连通)
  7. 软件测试基础课程学习笔记7---如何撰写测试报告
  8. 水起泡器行业调研报告 - 市场现状分析与发展前景预测
  9. 实例讲解统计学基础知识(1):统计学基础概念
  10. 2021-2025年中国液压磁力钻行业市场供需与战略研究报告
  11. 如何改变Android-studio中的APP的名字和图标
  12. 在java中new一个对象的流程是怎样的
  13. TKinter美化库——tkkbootstrap
  14. 计算机锁屏图片怎么设置方法,电脑锁屏照片怎么设置
  15. HTML---网页编程(2)
  16. 水星路由器wan口ip显示0_水星路由器WAN口获取不到ip地址怎么办?
  17. Sony电视投屏 Android,怎样把手机画面投影到电视上观看 乐播投屏使用方法
  18. 12门课100分,直博清华的学霸火了!“造假都不敢这么写”
  19. 大学生会计技能竞赛总决赛(三)
  20. 测试必会Linux命令

热门文章

  1. 固液分离机市场现状及未来发展趋势
  2. JavaScript 实现BASE58加密 中文英文数字都可以加密
  3. 跟我一起写 Makefile
  4. 基于JAVA彩票在线购买系统计算机毕业设计源码+系统+lw文档+部署
  5. 时间轮 (史上最全)
  6. mysql性能监控 调优_MySQL管理之道:性能调优、高可用与监控(第2版)
  7. 2022-2028全球与中国健康资讯交换(HIE)市场现状及未来发展趋势
  8. Bootstrap第一章初识
  9. 视频超分修复,让重温经典影片有了新的可能
  10. 虚拟机包OVF和OVA的区别