神经网络:梯度下降法更新模型参数

作者:CSDN @ _养乐多_

在神经网络领域,梯度下降是一种核心的优化算法,本文将介绍神经网络中梯度下降法更新参数的公式,并通过实例演示其在模型训练中的应用。通过本博客,读者将能够更好地理解深度学习中的优化算法和损失函数,为学习和应用深度学习打下坚实的基础。


文章目录


一、概念

1.1 交叉熵损失函数

了解梯度下降方法更新参数之前,需要先了解交叉熵损失函数,可以参考《损失函数|交叉熵损失函数》,讲的很详细。交叉熵可以理解为模型输出值和真实值之间的差异,交叉熵损失越小,表示模型预测结果与真实情况越接近,模型的精度也就越高。

梯度下降更新参数的过程其实就是在反向求导减小梯度的过程中找到差异最小时的模型参数。

1.2 梯度下降

在机器学习和深度学习中,经常需要通过调整模型的参数来使其在训练数据上表现得更好,而梯度下降是一种常用的方法。

梯度下降的基本思想是沿着目标函数的负梯度方向进行迭代,以找到函数的局部最小值。具体而言,对于一个多维函数,梯度下降通过计算目标函数在当前参数位置的梯度(即偏导数),然后按照梯度的反方向更新参数,使得函数值不断减小。这个过程重复进行,直到达到某个停止条件,比如达到了指定的迭代次数或者目标函数的变化小于某个阈值。

梯度下降的核心公式:

θ n e w = θ − η ∂ L O S S ∂ θ (1) θ^{new}=θ-η \frac {∂LOSS}{∂θ}\tag{1} θnew=θηθLOSS(1)

其中, θ n e w θ^{new} θnew表示新的权重, θ θ θ表示旧的(初始/上一次迭代)权重, η η η 是学习率(learning rate)。

在这里插入图片描述

图片来自“Gradient Descent Algorithm: How does it Work in Machine Learning?”

梯度下降算法有多种变种,如批量梯度下降(Batch Gradient Descent)、随机梯度下降(Stochastic Gradient Descent)和小批量梯度下降(Mini-batch Gradient Descent)等,它们在计算梯度的方式和参数更新的规则上略有不同,但核心思想相似。

二、梯度下降更新模型参数

了解了交叉熵损失函数的概念之后,我们来看看梯度下降如何利用这个损失函数来更新模型参数。

这个过程是神经网络的核心,能看懂这个过程,也就基本懂深度神经网络了。

2.1 定义模型

首先,假设模型为下式,其中, T r u e True True为模型的真实输出值, ω ω ω b b b是模型需要更新的参数,分别为权重和偏置。
T r u e = Σ ω i ⋅ x i + b (2) True=Σω_i⋅x_i+b\tag{2} True=Σωixi+b(2)

2.2 损失函数的定义

接下来,我们定义一个损失函数。在这个例子中,我们假设损失函数是交叉熵损失,因为这个函数简单且容易推导,但是 L O S S LOSS LOSS函数使用均方差MSE(Mean Squared Error)的形式,这可能有些混淆。不管混淆不混淆吧,我们就用该函数来描述梯度下降更新参数的过程。

损失函数的定义:
L O S S = ( 真实输出值 − 期望输出值 ) 2 (3) LOSS=(真实输出值−期望输出值)^2\tag{3} LOSS=(真实输出值期望输出值)2(3)
L O S S = ( T r u e − P r e d ) 2 (4) LOSS=(True−Pred)^2\tag{4} LOSS=(TruePred)2(4)

其中, T r u e True True 是真实输出, P r e d Pred Pred 是模型预期输出。

L O S S LOSS LOSS T r u e True True求偏导,得

∂ L O S S ∂ T r u e = 2 ( T r u e − P r e d ) (5) \frac {∂LOSS}{∂True }=2(True-Pred)\tag{5} TrueLOSS=2(TruePred)(5)

2.3 对于权重 w i w_i wi的更新

先对 w i w_i wi求偏导,这里公式(6)是梯度下降方法的定式,得
w i n e w = w i − η ∂ L O S S ∂ w i (6) w_i^{new}=w_i-η \frac {∂LOSS}{∂w_i }\tag{6} winew=wiηwiLOSS(6)
其中, w i n e w w_i^{new} winew表示新的权重, w i w_i wi表示旧的(初始/上一次迭代)权重, η η η 是学习率(learning rate)。

通过链式法则, ∂ L O S S ∂ w i \frac {∂LOSS}{∂w_i } wiLOSS可以表示为:
∂ L O S S ∂ w i = ∂ L O S S ∂ T r u e ∂ T r u e ∂ w i (7) \frac {∂LOSS}{∂w_i }=\frac {∂LOSS}{∂True} \frac {∂True}{∂w_i }\tag{7} wiLOSS=TrueLOSSwiTrue(7)
因为 T r u e True True Σ ω ⋅ x i + b Σω⋅x_i+b Σωxi+b计算得到的,所以:
∂ T r u e ∂ w i = x i (8) \frac {∂True}{∂w_i }=x_i\tag{8} wiTrue=xi(8)
因此,权重 w i w_i wi的更新规则为:
w i n e w = w i − η ⋅ 2 ( T r u e − P r e d ) ⋅ x i (9) w_i^{new}=w_i-η·2(True-Pred)·x_i\tag{9} winew=wiη2TruePredxi(9)

2.4 对于偏置 b b b的更新

b n e w = b − η ∂ L O S S ∂ b (10) b^{new}=b-η \frac {∂LOSS}{∂b }\tag{10} bnew=bηbLOSS(10)

其中, b n e w b^{new} bnew表示新的偏置, b b b表示旧的(初始/上一次迭代)偏置, η η η 是学习率(learning rate)。
同样的,通过链式法则, ∂ L O S S ∂ b \frac {∂LOSS}{∂b } bLOSS可以表示为:
∂ L O S S ∂ b = ∂ L O S S ∂ T r u e ∂ T r u e ∂ b (11) \frac {∂LOSS}{∂b }=\frac {∂LOSS}{∂True} \frac {∂True}{∂b}\tag{11} bLOSS=TrueLOSSbTrue(11)
因为 T r u e True True Σ ω ⋅ x i + b Σω⋅x_i+b Σωxi+b计算得到的,所以:

∂ T r u e ∂ b = 1 (12) \frac {∂True}{∂b }=1\tag{12} bTrue=1(12)
因此,偏置 b b b的更新规则为:
b n e w = b − η ⋅ 2 ( T r u e − P r e d ) (13) b^{new}=b-η·2(True-Pred)\tag{13} bnew=bη2(TruePred)(13)

三、举例推导

3.1 样本数据

下表中, X 1 X_1 X1 X 2 X_2 X2分别为自变量,可以理解为特征变量,期望输出就是分类或者回归时用到的目标变量,可以理解为标签数据。

ID X 1 X_1 X1 X 2 X_2 X2期望输出
10.10.80.8
20.50.30.5
3.2 初始化模型

因为模型是 T r u e = Σ ω ⋅ x i + b True=Σω⋅x_i+b True=Σωxi+b ,分别设置模型的初始参数: η η η为0.1, w 1 w_1 w1为0, w 2 w_2 w2为0, b b b为0。

3.3 第1次迭代

将样本1( x 1 x_1 x1为0.1, x 2 x_2 x2为0.8,期望输出为0.8)代入模型,经过 w 1 ⋅ x 1 + w 2 ⋅ x 2 + b w_1⋅x_1+w_2⋅x_2+b w1x1+w2x2+b,得 0 ✖ 0.1 + 0 ✖ 0.8 + 0 0✖0.1+0✖0.8+0 0✖0.1+0✖0.8+0,最终输出值为0,然而期望输出值为0.8,根据损失函数 L O S S = ( T r u e − P r e d ) 2 LOSS=(True−Pred)^2 LOSS=(TruePred)2,得 L O S S = ( 输出值 − 期望输出值 ) 2 LOSS=(输出值-期望输出值)^2 LOSS=(输出值期望输出值)2,即 ( 0 − 0.8 ) 2 (0-0.8)^2 (00.8)2,那么 L O S S LOSS LOSS 0.64 0.64 0.64
根据公式(9), w 1 n e w = w 1 − η ⋅ 2 ( T r u e − P r e d ) ⋅ x 1 w_1^{new}=w_1-η⋅2(True-Pred)⋅x_1 w1new=w1η2(TruePred)x1,先来更新 w 1 w_1 w1,得 0 − 0.1 ✖ 2 ✖ ( 0 − 0.8 ) ✖ 0.1 0-0.1✖2✖(0-0.8)✖0.1 00.1✖2✖(00.8)✖0.1,最终得到新的权重 w 1 w_1 w1为0.016。
同样的更新 w 2 w_2 w2 w 2 n e w = w 2 − η ⋅ 2 ( T r u e − P r e d ) ⋅ x 2 w_2^{new}=w_2-η⋅2(True-Pred)⋅x_2 w2new=w2η2(TruePred)x2,得 0 − 0.1 ✖ 2 ✖ ( 0 − 0.8 ) ✖ 0.8 0-0.1✖2✖(0-0.8)✖0.8 00.1✖2✖(00.8)✖0.8,得到新的权重 w 2 w_2 w2为0.128。
接着根据公式(13), b n e w = b − η ⋅ 2 ( T r u e − P r e d ) b^{new}=b-η·2(True-Pred) bnew=bη2(TruePred),更新偏置 b b b,得 0 − 0.1 ✖ 2 ✖ ( 0 − 0.8 ) 0-0.1✖2✖(0-0.8) 00.1✖2✖(00.8),得到新的偏置 b b b为0.16。

3.4 第2次迭代

经过3.3节第1次迭代更新的参数,现在新的参数为: η η η为0.1, w 1 w_1 w1为0.016, w 2 w_2 w2为0.128, b b b为0.16。

接着基于这一组新的参数继续训练模型。

将样本2( x 1 x_1 x1为0.5, x 2 x_2 x2为0.3,期望输出为0.5)代入3.3节更新的模型中,经过 w 1 ⋅ x 1 + w 2 ⋅ x 2 + b w_1⋅x_1+w_2⋅x_2+b w1x1+w2x2+b,得 0.016 ✖ 0.5 + 0.128 ✖ 0.3 + 0.16 0.016✖0.5+0.128✖0.3+0.16 0.016✖0.5+0.128✖0.3+0.16,最终输出值为0.2064,然而期望输出值为0.5,根据损失函数 L O S S = ( T r u e − P r e d ) 2 LOSS=(True−Pred)^2 LOSS=(TruePred)2,得 L O S S = ( 输出值 − 期望输出值 ) 2 LOSS=(输出值-期望输出值)^2 LOSS=(输出值期望输出值)2,即 ( 0.2065 − 0.5 ) 2 (0.2065-0.5)^2 (0.20650.5)2,那么 L O S S LOSS LOSS 0.0862 0.0862 0.0862
根据公式(9), w 1 n e w = w 1 − η ⋅ 2 ( T r u e − P r e d ) ⋅ x 1 w_1^{new}=w_1-η⋅2(True-Pred)⋅x_1 w1new=w1η2(TruePred)x1,先来更新 w 1 w_1 w1,得 0.1 − 0.1 ✖ 2 ✖ ( 0.2064 − 0.5 ) ✖ 0.1 0.1-0.1✖2✖(0.2064-0.5)✖0.1 0.10.1✖2✖(0.20640.5)✖0.1,最终得到新的权重 w 1 w_1 w1为0.04536。
同样的更新 w 2 w_2 w2 w 2 n e w = w 2 − η ⋅ 2 ( T r u e − P r e d ) ⋅ x 2 w_2^{new}=w_2-η⋅2(True-Pred)⋅x_2 w2new=w2η2(TruePred)x2,得 0.128 − 0.1 ✖ 2 ✖ ( 0.2064 − 0.5 ) ✖ 0.3 0.128-0.1✖2✖(0.2064-0.5)✖0.3 0.1280.1✖2✖(0.20640.5)✖0.3,得到新的权重 w 2 w_2 w2为0.14562。
接着根据公式(13), b n e w = b − η ⋅ 2 ( T r u e − P r e d ) b^{new}=b-η·2(True-Pred) bnew=bη2(TruePred),更新偏置 b b b,得 0.16 − 0.1 ✖ 2 ✖ ( 0.2064 − 0.5 ) 0.16-0.1✖2✖(0.2064-0.5) 0.160.1✖2✖(0.20640.5),得到新的偏置 b b b为0.21872。

3.5 第n次迭代

和前面的方式一样,用户设置迭代次数n,迭代n次结束以后就可以得到一组模型参数,作为本次训练的最终模型。以后只要有新的 X 1 X_1 X1 X 2 X_2 X2输入,就会计算一个 输出 Y 输出Y 输出Y,这个过程就是模型应用(推理)。当然,并不是说迭代的次数越多,模型精度就越高,有可能会过拟合。

四、其他

模型精度也和学习率有关,学习率影响着模型在训练过程中收敛速度以及最终的收敛状态。

下图来自https://www.kdnuggets.com/2020/05/5-concepts-gradient-descent-cost-function.html。

在这里插入图片描述

如上图右下图示所示,学习率过大可能导致参数在优化过程中发生震荡,甚至无法收敛;而学习率过小(上图右上图示)则可能导致收敛速度过慢,耗费大量的时间和计算资源。因此,需要在学习率和模型精度之间取一定的平衡。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

H5小程序视频方案解决方案,实现轻量化视频制作

对于许多企业而言,制作高质量的视频仍然是一个技术门槛高、成本高昂的挑战。针对这一痛点,美摄科技凭借其深厚的技术积累和创新能力,推出了面向企业的H5/小程序视频方案解决方案,为企业提供了一种轻量化、高效、便捷的视频制作方式…

线程局部存储(TLS)

线程局部存储(Thread Local Storage,TLS),是一种变量的存储方法,这个变量在它所在的线程内是全局可访问的,但是不能被其他线程访问到,这样就保持了数据的线程独立性。而熟知的全局变量&#xff…

mac-git上传至github(ssh版本,个人tokens总出错)

第一步 git clone https://github.com/用户名/项目名.git 第二步 cd 项目名 第三步 将本地的文件移动到项目下 第四步 git add . 第五步 git commit -m "添加****文件夹" 第六步 git push origin main 报错: 采用ssh验证 本地文件链接公钥 …

超级会员卡积分收银系统源码:积分+收银+商城三合一小程序 带完整的安装代码包以及搭建教程

信息技术的迅猛发展,移动支付和线上购物已经成为现代人生活的常态。在这样的背景下,商家对于能够整合收银、积分管理和在线商城的综合性系统的需求日益强烈。下面,罗峰给大家分享一款超级会员卡积分收银系统源码,它集积分、收银、…

读所罗门的密码笔记04_社会信用

1. 人工智能 1.1. 人工智能可以帮助人们处理复杂的大气问题,完善现有的气候变化模拟,帮助我们更好地了解人类活动对环境造成的危害,以及如何减少这种危害 1.2. 人工智能也有助于减少森林退化和非法砍伐 1.3. 人工智能甚至可以将我们从枯燥…

205基于matlab的关于多目标跟踪的的滤波程序

基于matlab的关于多目标跟踪的的滤波程序,包括采用联合概率数据互联(JPDA)算法实现两个个匀速运动目标的点迹与航迹的关联,输出两个目标跟踪的观测位置、估计位置以及估计误差。程序已调通,可直接运行。 205 多目标跟踪…

Flink on Kubernetes (flink-operator) 部署Flink

flink on k8s 官网 https://nightlies.apache.org/flink/flink-kubernetes-operator-docs-release-1.1/docs/try-flink-kubernetes-operator/quick-start/ 我的部署脚本和官网不一样,有些地方官网不够详细 部署k8s集群 注意,按照默认配置至少有两台wo…

C语言:文件操作详解

什么是文件 文件是是计算机硬盘存储的数据的集合,它可以是文本文档,也可以是图片,程序等等。将数据存储进文件内可以很好的保存数据,方便程序员对文件的操作。 文件的类型 一般根据存储数据类型的不同可以分为二进制文件和文本文…

服务器监控软件夜莺采集监控(三)

文章目录 一、采集器插件1. exec插件2. rabbitmq插件3. elasticsearch插件 二、监控仪表盘1. 系统信息2. 数据服务3. NginxMQ4. Docker5. 业务日志 一、采集器插件 1. exec插件 input.exec/exec.toml [[instances]] commands ["/home/monitor/categraf/scripts/*.sh&q…

AI智能分析网关V4数字农场智能监控方案

随着大数据时代的到来,数据成为国家基础性战略资源,加快数字化转型、以数字化谋求国际竞争新优势已成为全球普遍共识,利用大数据推动经济发展、优化社会治理、改善公共服务成为了世界各国的必然选择。农村为实现产业转型升级和治理创新&#…

HBase的Python API操作(happybase)

一、Windows下安装Python库:happyhbase pip install happybase -i https://pypi.tuna.tsinghua.edu.cn/simple 二、 开启HBase的Thrift服务 想要使用Python API连接HBase,需要开启HBase的Thrift服务。所以,在Linux服务器上,执行…

算法之美:二叉树演进之多叉树及B-Tree树原理

在上篇文章我们了解了平衡二叉树的优势,了解到平衡二叉树能够对不平衡的节点施加旋转,使得树达趋于平衡,以提升查询效率,操作效率很高,与之同时也存在着不少的问题,例如我们在实际使用中会通常会将树加载到…

【Flink架构】关于FLink BLOB的组织架构:FLIP-19: Improved BLOB storage architecture:官网解读

文章目录 一. BlobServer架构1.BlobClient2. BlobServer3. BlobCache4. LibraryCacheManager 二、BLOB的生命周期1. 分阶段清理2. BlobCache的生命周期3. BlobServer 三、文件上下载流程1. BlobCache 下载2. BlobServer 上传3. BlobServer 下载 四. Flink中支持的BLOB文件类型1…

SPI机制详解

在上一篇 gRPC源码剖析-Server启动流程 有提到过SPI机制,SPI对于大多数业务开发人员可能并不熟悉,但是在各底层基础框架中用得还是比较多的,今天我们来详细了解一下。 一、SPI机制 SPI,全称是Service Provider Interface,就是为…

微软正在改进其AI驱动的Copilot在Microsoft Teams中的工作方式,为会议聊天、总结等引入了新的召唤助手方式

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

【spring】@Value注解学习

Value介绍 Value 是 Spring 框架中一个非常有用的注解,它允许你将来自配置文件、系统属性、环境变量或者通过 SpEL(Spring Expression Language)表达式计算得出的值注入到 Spring 管理的 Bean 中。这个注解可以用在字段、setter 方法或者构造…

自动化面试常见算法题!

1、实现一个数字的反转,比如输入12345,输出54321 num 12345 num_str str(num) reversed_num_str num_str[::-1] reversed_num int(reversed_num_str) print(reversed_num) # 输出 54321代码解析:首先将输入的数字转换为字符串&#xff…

【研发日记】Matlab/Simulink开箱报告(十)——Signal Routing模块模块

文章目录 前言 Signal Routing模块 虚拟模块和虚拟信号 Mux和Demux Vector Concatenate和Selector Bus Creator和Bus Selector 分析和应用 总结 前言 见《开箱报告,Simulink Toolbox库模块使用指南(五)——S-Fuction模块(C MEX S-Fun…

python学习15:python中的input语句

python中的input语句 我们前面学习过print语句,可以将内容输出到屏幕上;在python中,与之对应的还有一个input语句,用来获取键盘输入。 数据输出:print 数据输入:input 使用上也很简单: 使用inp…

LIS、LCS算法模型

文章目录 1.LCS算法模型2.LIS算法模型 1.LCS算法模型 LCS问题就是给定两个序列A和B,求他们最长的公共子序列。 在求解时,我们会设dp[i][j]表示为A[1 ~ i]序列和B[1 ~ j]序列中(不规定结尾)的最长子序列的长度。 if(a[i]b[i]) dp…