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

news2024/12/23 10:23:46

作者: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.coloradmin.cn/o/1549958.html

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

相关文章

Android-Handler详解_原理解析

为了方便阅读将文章分为使用篇和源码解析两篇,上一篇已经写了Handler是什么、有什么、怎们用,这一片从源码的角度分析完整流程,看看Handler消息机制到底是啥原理。才疏学浅,如有错误,欢迎指正,多谢。 完整…

XR虚拟直播间,引领创新风潮,打破直播局限!

随着互联网技术日新月异的发展,直播行业也迎来了蓬勃发展的春天。然而,大多数直播间在吸引观众眼球和延长用户观看时长方面,仍然面临着巨大的挑战。正是在这样的背景下,XR虚拟直播系统应运而生,以其多维度的直播场景、…

[flask]异常抛出和捕获异常

Python学习之Flask全局异常处理流程_flask 异常处理-CSDN博客 读取文件错误 OSError: [Errno 22] Invalid argument:_[errno 22] invalid argument: ..\\data\\snli_1.0\\-CSDN博客 异常触发 assert触发异常: 在Python中,使用assert语句可以检查某个条…

Altium Designer 22 DRC规则检查解析(转载)

原文链接:Altium Designer 22 DRC规则检查解析 - 哔哩哔哩 (bilibili.com) PCB Designer Rules 即用来约束PCB走线或布局的规则条例。通常有如,PCB板厂所提供给你的最小线宽线距参数、最小字符宽高度、最小VIA&PAD内外径参数等,需要设计…

解决kubesphere流水线docker登陆错误http: server gave HTTP response to HTTPS client

kubesphere DevOps流水线中,在登录私有的harbor仓库时,报以下错误 docker login 111.230.19.120:80 -u admin -p test123. WARNING! Using --password via the CLI is insecure. Use --password-stdin. Error response from daemon: Get "https://…

java调用jacob进行文件转换ppt转pdf或者png

java调用jacob进行文件转换ppt转pdf或者png 前情提要 最近项目上,遇到一个复杂的ppt,最终要求是要将ppt每一页转成图片原本这个是不难,网上一搜一大堆案例,外加我本身也比较精通aspose,那还不是分分钟搞定。结果就是…

外星人m18R2国行中文版原厂预装23H2原装Win11系统恢复带F12恢复重置

戴尔外星人m18R2国行中文版原厂预装23H2系统恢复安装 远程恢复安装:https://pan.baidu.com/s/166gtt2okmMmuPUL1Fo3Gpg?pwdm64f 提取码:m64f 1.自带原厂预装系统各驱动,主题,Logo,Office带所有Alienware主题壁纸、Alienware软件驱动 2.带…

自动化与智能化并行:数字化运维体系助力企业腾飞

文章目录 文章目录 文章目录 一、引言二、数字化运维体系的核心要素三、构建数字化运维体系的策略四、数字化运维体系的实施与挑战主要内容读者对象 一、引言 随着信息技术的迅猛发展,数字化转型已成为企业提升竞争力、实现可持续发展的必由之路。在数字化转型的过…

华为开源自研AI框架昇思MindSpore应用案例:梯度累加

目录 一、环境准备1.进入ModelArts官网2.使用CodeLab体验Notebook实例 二、案例实现 梯度累加的训练算法,目的是为了解决由于内存不足,导致Batch size过大神经网络无法训练,或者网络模型过大无法加载的OOM(Out Of Memory&#xff…

EdgeGallery开发指南

API接口 简介 EdgeGallery支持第三方业务系统通过北向接口网关调用EdgeGallery的业务接口。调用流程如下图所示(融合前端edgegallery-fe包含融合前端界面以及北向接口网关功能,通过浏览器访问时打开的是融合前端的界面,通过IP:Port/urlPref…

Tensorflow CUPTI could not be loaded 解决

使用conda在指定环境安装cudatoolkit和cudnn后出现 CUPTI could not be loaded问题 conda install cudatoolkit11.0.3 conda install cudnn8.0.5.39 将本机C:\Program Files\NVIDIA Corporation\Nsight Systems xxxx\target-windows-x64 包含cupti的文件均复制到 D:\xxx\cond…

vue + LogicFlow 实现流程图展示

vue LogicFlow 实现流程图展示 1.背景 部门主要负责低代码平台,配置端负责配置流程图,引擎端负责流程执行,原引擎端只负责流程执行控制以及流程历史列表展示。现在提出个新的要求,认为仅历史记录不直观,需要在展示完…

分享多种mfc100u.dll丢失的解决方法(一键修复DLL丢失的方法)

在使用电脑过程中,我们经常会遇到一些陌生的DLL文件,例如mfc100u.dll。这些DLL文件是动态链接库(Dynamic Link Libraries)的缩写,它们包含了可以被多个程序共享的代码和数据。今天,我们将深入探讨mfc100u.d…

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

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

elasticsearch基础应用

1._cat接口 | _cat接口 | 说明 | | GET /_cat/nodes | 查看所有节点 | | GET /_cat/health | 查看ES健康状况 | | GET /_cat/master | 查看主节点 | | GET /_cat/indices | 查看所有索引信息 | es 中会默认提供上面的几个索引,表头…

【Redis】快速入门 数据类型 常用指令 在Java中操作Redis

文章目录 一、简介二、特点三、下载与安装四、使用4.1 服务器启动4.2 客户端连接命令4.3 修改Redis配置文件4.4 客户端图形化界面 五、数据类型5.1 五种常用数据类型介绍5.2 各种数据类型特点 六、常用命令6.1 字符串操作命令6.2 哈希操作命令6.3 列表操作命令6.4 集合操作命令…

ChatGPT赋能大气科学:GPT与Python结合应用遥感降水数据处理、ERA5大气再分析数据的统计分析、干旱监测及风能和太阳能资源评估等

目录 专题一 AI领域常见工具讲解 专题二 POE平台及ChatGPT使用方法 专题三 提示词工程 专题四 科研常见应用场景 专题五 Python简明教程 专题六 GPT科研绘图 专题七 GPT辅助下载数据 专题八 遥感降水数据 专题九 数据产品评估 专题十 ERA5全球大气再分析数据 专题十…

R语言 | 上下双向柱状图

1. 效果图 2. 代码 # 生成测试数据 difdata.frame(labelspaste0("pathway", 1:3),upc(30,15,1),downc(10,20,40) ) rownames(dif)dif$labels dif#变形 difreshape2::melt(dif) dif# 绘图 ggplot(dif, aes(xlabels, yifelse(variable"up", value, -value), …

大语言模型(LLM)token解读

1. 什么是token? 人们经常在谈论大模型时候,经常会谈到模型很大,我们也常常会看到一种说法: 参数会让我们了解神经网络的结构有多复杂,而token的大小会让我们知道有多少数据用于训练参数。 什么是token?比…

对比HTTP与WebSocket

目录 对比HTTP与WebSocket1. HTTP协议概述2. WebSocket协议概述3. HTTP与WebSocket的区别4. 使用场景比较5. 性能比较6. 安全性比较7. 应用案例分析8. 总结与展望 对比HTTP与WebSocket 1. HTTP协议概述 1.1 HTTP的基本概念 HTTP(Hypertext Transfer Protocol&…