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

作者: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。

在这里插入图片描述

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

五种方案图文并茂教你使用DBeaver,SQL文件导入数据库,插入数据,备份恢复mysql,postgres数据

文章目录 备份导出数据方案一:支持可以整个库导出、部分表导出、多个库导出(可选格式较少)使用连接数据库鼠标右键选择需要导出备份的数据库-工具-备份勾选需要导出的表-点击下一步设置输出目录和输出名称-点击开始导出成功 方案二&#xff1…

如何查看局域网IP?

在日常使用计算机和网络时,我们经常需要查看本地设备在局域网中的IP地址,以便进行一些网络配置或者连接其他设备。本文将介绍如何查看局域网中的IP地址,以及相关技术中的天联组网优势。 查看局域网IP 在Windows操作系统中,我们可…

Centos 配置JDK和Tomcat(新手版)

Centos 配置JDK和Tomcat(新手版) 1、安装JDK 如果原环境有jdk则需要卸载。 先用命令查看 rpm -qa|grep java 如果有jdk则需要卸载rpm -e --nodeps java-1.7.0-openjdk-1.7.0.191-2.6.15.5.el7.x86_64rpm -e --nodeps java-1.8.0-openjdk-…

ClickHouse初体验

1.clickHouse是啥? ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库(DBMS),使用 C语言编写,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告 2.clickHouse的特点 2.1列式存储 对于列的聚合&…

web--文件下载,文件删除,文件读取

文件下载 看下载的地址 r不为空,所以传入donwload 下面的都能下载 实例 这样就会尝试下载1.zip 下载上一个目录的文件 包含了很多,里面可能就有配置文件 就是看到这种直接放文件上去 任意文件读取 得搜索特定函数,然后去源码找 找到调用的地…

软考 系统架构设计师系列知识点之云原生架构设计理论与实践(8)

接前一篇文章:软考 系统架构设计师系列知识点之云原生架构设计理论与实践(7) 所属章节: 第14章. 云原生架构设计理论与实践 第2节 云原生架构内涵 14.2 云原生架构内涵 关于云原生的定义有众多版本,对于云原生架构的…

JAVA的控制语句

控制语句 分为顺序、选择和循环 顺序结构 先执行a,再执行b 条件判断结构 如果......则....... 循环结构 如果.....则重复执行 条件判断结构(选择结构) if单分支结构 语法结构: if(布尔表达式){ 语句块 } 注&#xff…

极简wordpress网站模板

Pithy设计师wordpress网站模板 精练简洁的wordpress模板,设计师或设计工作室展示型网站模板。 https://www.jianzhanpress.com/?p6329

11.Notepad++

文章目录 一、下载和安装设置练习 以前在记事本上写的代码看上去有点累,因为所有的单词看上去都是黑色的,并且当代码出现问题后,它提示第三行,我们还需要一行一行去数。这些问题都可以由一个高级记事本: Notepad 来解…

Ceph——部署

Ceph简介 Ceph是一款开源的 SDS 分布式存储,它具备极高的可用性、扩展性和易用性,可用于存 储海量数据 Ceph的存储节点可部署在通用服务器上,这些服务器的 CPU 可以是 x86 架构的,也可以 是 ARM 架构的。 Ceph 存储节点之间相互…

深入探讨分布式ID生成方案

🎈🎈作者主页: 喔的嘛呀🎈🎈 🎈🎈所属专栏:python爬虫学习🎈🎈 ✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天…

【Functional Affordances】如何确认可抓取的区域?(前传)

文章目录 1. 【Meta AI】Emerging Properties in Self-Supervised Vision Transformers2. 【Meta AI】DINOv2: Learning Robust Visual Features without Supervision3. 【NeurIPS 2023】Diffusion Hyperfeatures: Searching Through Time and Space for Semantic Corresponden…

网安学习笔记-day9,DNS服务器介绍

文章目录 DNS服务器部署域名介绍及分类DNS解析解析过程1.递归查询2.迭代查询 DNS服务器部署准备阶段安装DNS服务 部署过程在另一台虚拟机查看是否能解析到baidu.com的地址测试解析 转发器 扩展命令 DNS服务器部署 DNS(Domain Name System) 域名介绍及分类 常用的www.baidu.c…

【unity】如何汉化unity编译器

在【unity】如何汉化unity Hub这篇文章中,我们已经完成了unity Hub的汉化,现在让我们对unity Hub安装的编译器也进行下汉化处理。 第一步:在unity Hub软件左侧栏目中点击安装,选择需要汉化的编译器,再点击设置图片按钮…

stitcher类实现多图自动拼接

效果展示 第一组: 第二组: 第三组: 第四组: 运行代码 import os import sys import cv2 import numpy as npdef Stitch(imgs,savePath): stitcher cv2.Stitcher.create(cv2.Stitcher_PANORAMA)(result, pano) stitcher.st…

自动化面试常见算法题!

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…

ARMday7作业

实现三个按键的中断,现象和代码 do_ipr.c #include "stm32mp1xx_gic.h" #include "stm32mp1xx_exti.h" extern void printf(const char *fmt, ...); unsigned int i 0; void do_irq(void) {//获取要处理的中断的中断号unsigned int irqnoGI…

离线数仓(八)【DWD 层开发】

前言 1、DWD 层开发 DWD层设计要点: (1)DWD层的设计依据是维度建模理论(主体是事务型事实表(选择业务过程 -> 声明粒度 -> 确定维度 -> 确定事实),另外两种周期型快照事实表和累积型…

信号处理--情绪分类数据集DEAP预处理(python版)

关于 DEAP数据集是一个常用的情绪分类公共数据,在日常研究中经常被使用到。如何合理地预处理DEAP数据集,对于后端任务的成功与否,非常重要。本文主要介绍DEAP数据集的预处理流程。 工具 图片来源:DEAP: A Dataset for Emotion A…

如何备考2025年AMC8竞赛?吃透2000-2024年600道真题(免费送题

最近有家长朋友问我,现在有哪些类似于奥数的比赛可以参加?我的建议可以关注下AMC8的竞赛,类似于国内的奥数,但是其难度要比国内的奥数低一些,而且比赛门槛更低,考试也更方便。比赛的题目尤其是应用题比较有…