IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 简单的梯度下降 -> 正文阅读

[人工智能]简单的梯度下降

梯度下降

1.概念

梯度下降是迭代法的一种,可以用于求解最小二乘问题(线性和非线性都可以)。梯度下降(Gradient Descent)是在求解机器学习算法的模型参数最常采用的方法之一(另外一种是最小二乘法)。在求解损失函数的最小值时,可以通过梯度下降法来一步步的迭代求解,得到最小化的损失函数和模型参数值。

2.梯度

梯度下降法的计算过程就是沿梯度下降的方向求解极小值的过程,我们首先要知道梯度的数学意义以及表达式,在单变量函数中,梯度就是函数的微分
例如 d ( x 2 ) d ( x ) = 2 x \frac{d(x^2)}{d(x)}=2x d(x)d(x2)?=2x d ( ? 2 y 3 ) d ( y ) = ? 6 y 2 \frac{d(-2y^3)}{d(y)}=-6y^2 d(y)d(?2y3)?=?6y2。对于多变量的微分,当函数有多个变量时,分别对每一个变量求微分,例如 ? ? x \frac{\partial}{\partial x} ?x?? ( x 2 y 2 ) (x^2y^2) (x2y2)= 2 x y 2 2xy^2 2xy2, ? ? y \frac{\partial}{\partial y} ?y?? ( ? y 4 + z 2 ) (-y^4 + z^2) (?y4+z2)= ? 4 y 3 -4y^3 ?4y3。对于一元函数来讲,梯度就是函数的导数。而对于多元函数而言,梯度是一个向量,也就是说,把求得的偏导数以向量的形式写出来,就是梯度。

3.梯度下降

梯度下降就是通过一步一步的迭代,让所有的编导函数都下降到最低,用数学公式来描述就是 x k + 1 x_{k+1} xk+1?= x k x_k xk? - α \alpha α ? \cdot ?g 。
x k x_k xk?为k时刻的点坐标, x k + 1 x_{k+1} xk+1?为下一刻要移动的点的坐标,例如 x 0 x_0 x0?就代表初始化的点的坐标, x 1 x_1 x1?就代表第一部移动到的位置。
g代表梯度,前边有个负号,就代表朝着梯度相反的方向移动,也即梯度下降。
α \alpha α代表学习率(也叫做步长)。用它乘以梯度值来控制每次移动的距离, α \alpha α的值需要自己设置,如果过大,容易一步跨太大,直接跳过了最小值,设置太小则会导致迭代次数过多。

4.简单示例分析

下面以简单的一元函数来进行实例分析: y = ( x ? 2.5 ) 2 + 3 y=(x-2.5)^2+3 y=(x?2.5)2+3
在这里插入图片描述

多元函数的思路也一样,先初始化一个点,计算它的梯度,然后往梯度相反的方向,每次移动一点点,直到达到停止条件。这个停止条件,可以是足够大的迭代步数,也可以是一个比较小的阈值,当两次迭代之间的差值小于该阈值时,认为梯度已经下降到最低点附近了。

5.代码实现

import numpy as np
import matplotlib.pyplot as plt

x = eval(input("输入初始的x的位置:"))
ap = eval(input("输入学习率:"))
i = 0
x11 = list()
y11 = list()
sl = list()
for i in range(10000):
    y = (x - 2.5) ** 2 + 3
    y1 = 2 * x - 5
    ak = [x, y]
    x11.append(x)
    y11.append(y)
    x = x - ap * y1
    sl.append(ak)
    i += 1
    if abs(x - 2.5) < 1e-5:
        print("运行次数为:", i)
        print("坐标分别是:")
        for e in sl:
            print(e, end="")
        break
    elif i > 500:
        print("迭代次数过多,学习率过小")
        break
plt.plot(x11, y11)
plt.show()

在这里插入图片描述

6.总结

本文只是讲解了梯度下降的最简单的一种形式,有很多概念以及函数未涉及到,在之后的文章里会慢慢补充。

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-11-24 07:56:48  更:2021-11-24 07:57:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/27 4:12:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码