神经网络和深度学习-梯度下降Gradient Descent

news2024/11/27 18:47:17

梯度下降

损失函数

绝大多数的机器学习模型都会有一个损失函数。比如常见的均方误差(Mean Squared Error)损失函数:

L ( w , b ) = 1 N ∑ i = 1 N ( y i − f ( w x i + b ) ) 2 L(w, b)=\frac{1}{N} \sum_{i=1}^{N}\left(y_{i}-f\left(w x_{i}+b\right)\right)^{2} L(w,b)=N1i=1N(yif(wxi+b))2

其中, 表示样本数据的实际目标值, 表示预测函数 根据样本数据 计算出的预测值。从几何意义上来说,它可以看成预测值和实际值的平均距离的平方。

损失函数用来衡量机器学习模型的精确度。一般来说,损失函数的值越小,模型的精确度就越高。如果要提高机器学习模型的精确度,就需要尽可能降低损失函数的值。而降低损失函数的值,我们一般采用梯度下降这个方法。所以,梯度下降的目的,就是为了最小化损失函数。

梯度下降的原理

1.确定一个小目标-预测函数

在这里插入图片描述

2.找到差距-代价函数

寻找损失函数的最低点,就像我们在山谷里行走,希望找到山谷里最低的地方。那么如何寻找损失函数的最低点呢?在这里,我们使用了微积分里导数,通过求出函数导数的值,从而找到函数下降的方向或者是最低点(极值点)。

损失函数里一般有两种参数,一种是控制输入信号量的权重(Weight, 简称 ),另一种是调整函数与真实值距离的偏差(Bias,简称 )。我们所要做的工作,就是通过梯度下降方法,不断地调整权重 w和偏差b,使得损失函数的值变得越来越小。

首先我们要量化数据的偏离程度(误差),例如均方误差

e 1 = ( y 1 − w ∗ x 1 ) 2 e 1 = ( w ∗ x 1 − y 1 ) 2 e 1 = w 2 ∗ x 1 2 − 2 ( w ∗ x 1 ∗ y 1 ) + y 1 2 e 1 = x 1 2 ∗ w 2 − 2 ( x 1 ∗ y 1 ) ∗ w + y 1 2 e_{1}=\left(y_{1}-w * x_{1}\right)^{2}\\e_{1}=\left(w * x_{1}-y_{1}\right)^{2}\\e_{1}=w^{2} * x_{1}^{2}-2\left(w * x_{1} * y_{1}\right)+y_{1}^{2}\\e_{1}=x_{1}^{2} * w^{2}-2\left(x_{1} * y_{1}\right) * w+y_{1}^{2} e1=(y1wx1)2e1=(wx1y1)2e1=w2x122(wx1y1)+y12e1=x12w22(x1y1)w+y12

我们的目标是求出所有点的误差的平均值

e 1 = x 1 2 ∗ w 2 − 2 ( x 1 ∗ y 1 ) ∗ w + y 1 2 e 2 = x 2 2 ∗ w 2 − 2 ( x 2 ∗ y 2 ) ∗ w + y 2 2 e 3 = x 3 2 ∗ w 2 − 2 ( x 3 ∗ y 3 ) ∗ w + y 3 2 ⋯ e n = x n 2 ∗ w 2 − 2 ( x n ∗ y n ) ∗ w + y n 2 e_{1}=x_{1}^{2} * w^{2}-2\left(x_{1} * y_{1}\right) * w+y_{1}^{2}\\e_{2}=x_{2}^{2} * w^{2}-2\left(x_{2} * y_{2}\right) * w+y_{2}^{2}\\e_{3}=x_{3}^{2} * w^{2}-2\left(x_{3} * y_{3}\right) * w+y_{3}^{2}\\\cdots\\e_{n}=x_{n}^{2} * w^{2}-2\left(x_{n} * y_{n}\right) * w+y_{n}^{2} e1=x12w22(x1y1)w+y12e2=x22w22(x2y2)w+y22e3=x32w22(x3y3)w+y32en=xn2w22(xnyn)w+yn2

xy和样本数n都是已知的

e = 1 n ( ( x 1 2 + … + x n 2 ) ∗ w 2 + ( − 2 ∗ x 1 ∗ y 1 − … − 2 ∗ x n ∗ y n ) ∗ w + ( y 1 2 + … + y n 2 ) ) e=\frac{1}{n}\left(\left(x_{1}^{2}+\ldots+x_{n}^{2}\right) * w^{2}+\left(-2 * x_{1} * y_{1}-\ldots-2 * x_{n} * y_{n}\right) * w+\left(y_{1}^{2}+\ldots+y_{n}^{2}\right)\right) e=n1((x12++xn2)w2+(2x1y12xnyn)w+(y12++yn2))

e = 1 n ( a ∗ w 2 + b ∗ w + c ) e=\frac{1}{n}\left(a * w^{2}+b * w+c\right) e=n1(aw2+bw+c)

这个误差函数表示学习所需要的代价,被称为代价函数

在这里插入图片描述

3.明确搜索方向-梯度计算

机器学习的目标就是拟合出最接近训练分布的直线,也就是找到使得误差代价最小的参数

在这里插入图片描述

对应在代价函数图像上就是他的最低点,寻找最低点的过程就是梯度下降的过程

在陡峭程序最大的方向走就能最快下降,这个陡峭程度就是梯度

在这里插入图片描述

4.学习率

这里我们用到学习率(Learning Rate) 这个概念。通过学习率,可以计算前进的距离(步长)。

我们用 表示权重的初始值, 表示更新后的权重值,用 表示学习率,则有:

w i + 1 = w i − α ∗ d L d w i w_{i+1}=w_{i}-\alpha * \frac{d L}{d w_{i}} wi+1=wiαdwidL

通过学习调整权重的方式就是新w等于旧w减去斜率乘以学习率

在这里插入图片描述

如果学习率 设置得过大,有可能我们会错过损失函数的最小值;如果设置得过小,可能我们要迭代非常多次才能找到最小值,会耗费较多的时间。因此,在实际应用中,我们需要为学习率 设置一个合适的值。

5.循环迭代

总结:以下就是整个过程

在这里插入图片描述

再简单介绍一些梯度下降:

预测函数是y=wx+b,则代价函数就变成了误差e关于两个参数w和b的曲面

在这里插入图片描述

代价函数还可能是个波浪线,当有多个最小点存在时,机器学习的目标将是找到最低的那个也就是全局最优而不是局部最优

在这里插入图片描述

代价函数也可能是个起伏不定的曲面又或者是某种无法中三维图像描述的更复杂函数。代价函数将变成十维或是百维,将很难可视化地展现出来。

但无论有多少维度都可以用梯度下降法来寻找误差最小的点

梯度下降法的三种变体

1.批量梯度下降法(BGD)

在这里插入图片描述

他的下降过程就像上图,左侧是样本点,右侧是用等高线表示的代价函数曲面,他的运算是用全部训练样本参与运算,梯度下降十分平稳,是最原始的形式

  • 优点:保证算法的精准度,找到全局最优解

  • 缺点:让训练搜索过程变得很慢

2.随机梯度下降法(SGD)

下降过程十分随性,每下降一步只需要用一个样本进行计算

在这里插入图片描述

他的下降过程非常不平稳

  • 优点:提升了计算的速度

  • 缺点:牺牲了一定的精准度

3.小批量梯度下降(MBGD)

每下降一步,选用一小批样本进行计算

在这里插入图片描述

他的下降没有BGD的平稳有规律,但是快了很多

没有SGD速度快,但是准确了很多

梯度下降法存在的问题: 除了效率很低的BGD,无法保证找到全局最低点,很可能陷入局部最优点

有一些更加优化的算法:

AdaGrad一动态学习率

经常更新的参数学习率就小一些,不常更新的学习率大一些,这种方法的问题就是频繁更新的学习率可能会过小,以至于逐渐消失

然后就提出了RMSProp-优化动态学习率AfaDelta-无需设置学习率Adam-融合AdaGrad和RMSPropMomentum-模拟动量

伪代码表示梯度下降

用伪代码把梯度下降的过程表现出来,可以写成下面的样子:

def train(X, y, W, B, alpha, max_iters):
    '‘’
    选取所有的数据作为训练样本来执行梯度下降
    X : 训练数据集
    y : 训练数据集所对应的目标值
    W : 权重向量
    B : 偏差变量
    alpha : 学习速率
    max_iters : 梯度下降过程最大的迭代次数
   '''
   dW = 0 # 初始化权重向量的梯度累加器
   dB = 0 # 初始化偏差向量的梯度累加器
   m = X.shape[0] # 训练数据的数量
   
   # 开始梯度下降的迭代
   for i in range(max_iters): 
       dW = 0 # 重新设置权重向量的梯度累加器
       dB = 0 # 重新设置偏差向量的梯度累加器
       
       # 对所有的训练数据进行遍历
       for j in range(m):
           # 1. 遍历所有的训练数据
           # 2. 计算每个训练数据的权重向量梯度w_grad和偏差向量梯度b_grad
           # 3. 把w_grad和b_grad的值分别累加到dW和dB两个累加器里
       
       W = W - alpha * (dW / m) # 更新权重的值
       B = B - alpha * (dB / m) # 更新偏差的值

    return W, B # 返回更新后的权重和偏差。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/27037.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

物理层物理层

该层解决具体比特传输问题 一般的数据通信系统如图: 该系统可按通信方式分为两种:同步/异步通信和模拟/数字通信: 异步通信是通信双方各自时钟独立,每次只传输一个字符,时钟在传送开始时对齐;这种机制简单…

[附源码]计算机毕业设计JAVA驾校管理系统

[附源码]计算机毕业设计JAVA驾校管理系统 项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis M…

Docker(四):Docker可视化管理工具

背景 在技术这一行,学无止境,无数的知识点在大脑里面堆积着。各种命令行脚本(Python,Java,Nodejs,Linux,Docker)数不胜数,如果有视图化的管理工具,帮我们管理着这些命令行脚本,岂不美哉。可以节…

11.22Spring 学习day02

1. 1.1 XML和注解的区别 xml优点: 把标签配置和java代码解耦一目了然,对于业务量大的需求,可以清晰表明各个对象的关系 缺点: 配置不方便,读取和解析需要一定的时间无法及时校验正确性 注解优点: 配置…

返乡人员信息登记管理系统,助力精准管控

随着全国疫情的零星化,再加上元旦与春节很快就要来临了。这几个月各省的人员流动性肯定会逐渐增加,为了应对佳节的人流高峰期,不少省市都早已发出通知。要求返乡人员提前3天提前报备行程,从而便于极大地提高了登记效率&#xff0c…

数字集成电路设计(五、仿真验证与 Testbench 编写)(四)

文章目录7. 用户自定义元件模型7.1 UDP应用实例8. 基本门级元件和模块的延时建模8.1 门级延迟建模8.1.1 门级延迟的基本延迟表达形式8.1.2 门级延迟的最小、典型、最大延迟表达形式8.1.3 例子用VerilogHDL建立图5.8-1 模块D的延迟仿真模块8.2 模块延迟建模8.2.1 延迟说明块 Spe…

数据分析和可视化必备的几大软件,你用过几个?

本文主要是面向数据分析初学者,因此分享的基本是一些免编程的可视化工具,详细介绍了7款工具,推荐大家使用,主要是让初学数据分析的朋友知道可视化工具大概有哪些、流行的有哪些。 Power BI Power BI是微软开发的商业分析工具。用户…

LeetCode 91 双周赛

2465. 不同的平均值数目 给你一个下标从 0 开始长度为 偶数 的整数数组 nums 。 只要 nums 不是 空数组,你就重复执行以下步骤: 找到 nums 中的最小值,并删除它。找到 nums 中的最大值,并删除它。计算删除两数的平均值。 两数…

mysql InnooDb存储引擎的体系结构和逻辑存储结构

前言 这是一篇理论性比较强的文章,是不是很多人一听理论性的东西,就被劝退了?可千万别。其实分享内容非常简单,也非常干,相信你会喜欢的,对你也是有帮助的。切入正题,mysql的体系结构可以作为一…

机理类模型的建模思路|2021年亚太赛B题|2022备赛|前景目标提取

目录 一、 前景目标提取问题 1.背景目标和前景目标提取 2.问题一 2.2问题一求解 3.问题二 4.问题三 5.问题四 6.问题五​ 7.问题六 8.矩阵范数 二、前景目标提取——机理总结 三、编程实现 一、 前景目标提取问题 1.背景目标和前景目标提取 不动 & 动 视…

redis集群

Redis集群在保证主从加哨兵的基本功能之外,还能够提升Redis存储数据的能力。 一致性hash环 k1-->crc(16)? 0-16384 redis集群的ping-pang机制:一个主机向另一个主机ping,另一个pang回来,说明连接成功,通过这样的方…

脑与认知科学基础(期末复习)

脑与认知科学基础(期末复习) 文章目录脑与认知科学基础(期末复习)第一章 脑与认知科学简介认知元认知中国脑计划第二章 大脑简介Human brain解剖参考坐标大脑皮质脑的内侧和腹侧面神经系统神经系统的细胞神经元间信号传导神经回路…

【LeetCode】No.94. Binary Tree Inorder Traversal -- Java Version

题目链接:https://leetcode.com/problems/binary-tree-inorder-traversal/ 1. 题目介绍(Binary Tree Inorder Traversal) Given the root of a binary tree, return the inorder traversal of its nodes’ values. 【Translate】&#xff1a…

Trie字典树详解

字典树📖1. 什么是Trie树📖2. Trie树的一些应用场景📖3. Trie树的优缺点📖4. Trie树的节点怎样定义📖5. 代码实现📖6. 字典树的优化📖1. 什么是Trie树 Trie树,又叫字典树&#xff0…

linux性能中常用压测工具

stress工具 stress是Linux的一个压力测试工具,可以对CPU、Memory、IO、磁盘进行压力测试。 安装: sudo yum install stress 命令的使用: -c, --cpu N:产生N个进程,每个进程都循环调用sqrt函数产生CPU压力。 -i, --io N:产生N个进…

Java搭建实战springboot基于若依项目工时统计成本核算管理源码

大家好啊,我是测评君,欢迎来到web测评。 本期给大家带来一套基于若依开发的springboot项目工时统计成本核算管理源码,该系统是前后端分离的架构,前端使用Vue2,后端使用SpringBoot2。 技术架构 技术框架:Sp…

计算机毕设推荐基于微信小程序的自来水收费系统

💖🔥作者主页:计算机毕设老哥🔥 💖 精彩专栏推荐订阅:在 下方专栏👇🏻👇🏻👇🏻👇🏻 Java实战项目专栏 Python实…

帝国CMS后台登录显示空白解决方法汇总

升级PHP版本由原来5.X切换使用PHP7.*运行环境时会出现登录后台空白的情况,以下两种方法可设置支持PHP7.* 帝国CMS后台登录显示空白解决方法操作步骤: 1、全新安装帝国CMS时: 只需安装时“MYSQL接口类型”选择“mysqli”即可支持PHP7系列。系统会自动识别。 2、已经运行的帝国…

送给python初学者的福利!掌握了这些知识,你将超过80%的小白

前言 Python要学多久才能学会?我没有接触过编程怎么办?这是每一个初学者心中的疑问。 小编曾在网上看到一个帖子: 有一名网友是学金融的,他去上海找工作,看到好多公司都要有 Python 开发经验的,而且工资…

UE5笔记【八】导入FBX网格和和材质到UE5

资源网站:TurboSquid。进入,然后搜索Crate。筛选条件:Free。然后找到这个木箱子。 注册下载时,看到好多3D软件。 点击fbx.zip下载。然后解压到相应目录下。 接下来就是如何导入到UE5中,使用这个素材了。 第一种方式&…