从0开始深度学习(2)——自动微分

1 微积分

1.1 导数和微分

1.2 偏导数

1.3 梯度(gradient)

1.3.1 定义

对于一个多变量函数 f ( x 1 , x 2 , … , x n ) f\left(x_{1}, x_{2}, \ldots, x_{n}\right) f(x1,x2,,xn)其中点 a = ( a 1 , a 2 , … , a n ) \mathbf{a}=(a_1,a_2,\ldots,a_n) a=(a1,a2,,an) 处的梯度是一个向量,通常表示为 ∇ f ( a ) / grad ⁡ f ( a ) \nabla f(\mathbf{a})/\operatorname{grad}f(\mathbf{a}) f(a)/gradf(a)这个向量的各个分量是函数关于各个变量的偏导数,即: ∇ f ( a ) = ( ∂ f ∂ x 1 ( a ) , ∂ f ∂ x 2 ( a ) , … , ∂ f ∂ x n ( a ) ) \nabla f(\mathbf{a})=\left(\frac{\partial f}{\partial x_1}(\mathbf{a}),\frac{\partial f}{\partial x_2}(\mathbf{a}),\ldots,\frac{\partial f}{\partial x_n}(\mathbf{a})\right) f(a)=(x1f(a),x2f(a),,xnf(a))

1.3.2 梯度的意义

  1. 方向:梯度的方向指出了函数在该点处增长最快的方向。
  2. 大小:梯度的大小(或模长)表示了函数在该方向上的最大增长速率。
  3. 垂直性:梯度的方向与等值线(或等值面)垂直。

1.3.3 示例

假设我们有一个二维函数 f ( x , y ) = x 2 + y 2 f(x,y)=x^2+y^2 f(x,y)=x2+y2
计算梯度:
在这里插入图片描述
因此梯度为:
∇ f ( x , y ) = ( 2 x , 2 y ) \nabla f(x,y)=(2x,2y) f(x,y)=(2x,2y)
解释梯度:
在这里插入图片描述

1.3.4 应用

  1. 优化算法:在机器学习和深度学习中,梯度下降算法利用梯度的方向来寻找函数的局部最小值。
  2. 图像处理:梯度可以用来检测图像中的边缘。
  3. 物理学:梯度可以用来描述物理场的变化率,例如电势的梯度给出电场强度。

1.4 链式法则

2 自动微分

深度学习框架通过自动计算导数,即自动微分(automatic differentiation)来加快求导。 实际中,根据设计好的模型,系统会构建一个计算图(computational graph), 来跟踪计算是哪些数据通过哪些操作组合起来产生输出。 自动微分使系统能够随后反向传播梯度。 这里,反向传播(backpropagate)意味着跟踪整个计算图,填充关于每个参数的偏导数。

2.1 简单梯度计算示例

假设X是列向量[0,1,2,3],我们想对函数 y = 2 x ⊤ x y=2\mathbf{x}^{\top}\mathbf{x} y=2xx关于列向量X求导。首先,我们创建变量x并为其分配一个初始值。

2.1.1 手算

在这里插入图片描述
梯度为列向量[ 0., 4., 8., 12.]

2.1.2 代码计算

PS: 在计算前,需要一个地方来存储梯度,且不会在每次对一个参数求导时都分配新的内存,因为我们经常会成千上万次地更新相同的参数,每次都分配新的内存可能很快就会将内存耗尽

import torch# 创建一个张量,并通过设置requires_grad属性来让PyTorch自动追踪所有涉及该张量的计算操作
# 即计算得到的梯度会保存到x.grad中
x = torch.arange(4.0,requires_grad=True)
print("x: ",x)
print("grad: ",x.grad)
y=2*torch.dot(x,x)
print("y: ",y)# 调用反向传播函数来自动计算y关于x每个分量的梯度
y.backward()
# 打印梯度
print("grad: ",x.grad)# result
'''
x:  tensor([0., 1., 2., 3.], requires_grad=True)
grad:  None
y:  tensor(28., grad_fn=<MulBackward0>)
grad:  tensor([ 0.,  4.,  8., 12.])
'''

2.2 非标量变量的反向传播

在深度学习中,神经网络的最后一层可能会输出多个向量或矩阵,而不是单一的标量值。例如,在多标签分类任务中,输出层可能会产生一个向量,其中每个元素对应一个类别的预测概率。

假设有一个向量y,由向量x通过线性变换得到:
y = W x + b \mathbf{y}=\mathbf{Wx}+\mathbf{b} y=Wx+b
x是输入向量,W是权重矩阵,b是偏置向量,y是输出向量

假设:
在这里插入图片描述

import torch# 定义变量
x = torch.tensor([1.0, 2.0], requires_grad=True)
W = torch.tensor([[2.0, 3.0], [4.0, 5.0]])
b = torch.tensor([1.0, 1.0])
target = torch.tensor([5.0, 10.0])  # 目标向量# 计算输出向量 y
y = torch.mm(W, x.unsqueeze(-1)).squeeze() + b# 定义损失函数
loss = (y - target).pow(2).sum()# 计算梯度
loss.backward()# 输出梯度
print("Gradient of x: ", x.grad)

2.3 分离计算

指的是使用.detach()方法来分离一个张量的计算历史,使其不再参与自动梯度计算。

例如,假设y是作为x的函数计算的,而z则是作为yx的函数计算的,我们想计算z关于x的梯度,但由于某种原因,希望将y视为一个常数, 并且只考虑到xy被计算后发挥的作用。

在这里插入图片描述

import torchx = torch.tensor([1.0, 2.0], requires_grad=True)
y = 2 * x + 1
# 将 y 视为常数,分离计算
y_detached = y.detach()
# 计算 z
z = y_detached + x
# 计算梯度
z.backward(torch.tensor([1.0, 1.0]))
print("Gradient of x: ", x.grad)

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

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

相关文章

【卷起来】VUE3.0教程-01-环境搭建与安装

​分享不易&#xff0c;耗时耗力&#xff0c;麻烦给个不要钱的关注和赞吧 &#x1f332; 什么是VUE Vue 是一个框架&#xff0c;也是一个生态。其功能覆盖了大部分前端开发常见的需求。但 Web 世界是十分多样化的&#xff0c;不同的开发者在 Web 上构建的东西可能在形式和规模…

Question mutiple pdf‘s using openai, pinecone, langchain

题意&#xff1a;使用 OpenAI、Pinecone 和 LangChain 对多个 PDF 文件进行提问。 问题背景&#xff1a; I am trying to ask questions against a multiple pdf using pinecone and openAI but I dont know how to. 我正在尝试使用 Pinecone 和 OpenAI 对多个 PDF 文件进行提…

【Linux】保姆级 Linux 常见命令使用

&#x1f970;&#x1f970;&#x1f970;来都来了&#xff0c;不妨点个关注叭&#xff01; &#x1f449;博客主页&#xff1a;欢迎各位大佬!&#x1f448; 文章目录 1. Linux 是什么1.1 Linux 是什么1.2 关于 Linux 我们需要学什么 2. 需提前准备的东西2.1 环境 —— 如何获取…

使用 Eigen 库中的 Kronecker 积运算

前言 在数值计算和线性代数的众多应用中&#xff0c;Kronecker 积&#xff08;Kronecker Product&#xff09;是一种常用的矩阵运算。Eigen 是一个高性能的 C 数值计算库&#xff0c;广泛用于科学计算和工程应用中。在 Eigen 库中&#xff0c;Kronecker 积运算属于不常用的扩展…

Linux 进程概念

冯诺依曼体系结构 我们常见的计算机&#xff0c;大部分都遵守冯诺依曼体系结构 关于冯诺依曼的注意点 1.这里的存储器指的是内存 2.不考虑缓冲情况&#xff0c;这里的CPU能且只能对内存进行读写&#xff0c;不能访问外设(输入或输出设备) 3.外设(输入或输出设备)要输入或者输出…

自定义校验--校验json长度

mysql8中支持json格式的字段&#xff0c;某些情况下使用很方便&#xff0c;但也带来一个问题&#xff0c;就是它的最大长度不能设置&#xff0c;最大支持4GB&#xff0c;如果有恶意程序保存一条4GB的数据进去&#xff0c;估计这张表就要卡死了,所以要加一个自定义校验&#xff…

学习周报-2024.8.31

目录 摘要 Abstract 创新点总结 模型数学原理 实验设置 一、验证实验 二、对比实验 摘要 这周重新梳理出论文的三个创新点&#xff0c;对所提出方法进行数学原理验证&#xff0c;证明其可行性。重新设置了实验部分&#xff0c;分为验证实验和对比实验&#xff0c;一共四…

真实较量|以挖矿告警闭环应急处置

背景 2024年6月18日&#xff0c;在公司关键位置部署的安全检测设备的告警日志中&#xff0c;发现大量挖矿软件请求矿池的告警事件。安全运营人员已经进行了相关处置&#xff0c;但是由于攻击者手法的隐蔽未处理干净&#xff0c;一直产生告警信息。 行动 通过与服务器运营人员…

Django+vue自动化测试平台(29)--测试平台集成playwright录制pytest文件执行

需求背景 一、 系统目标与功能概述 脚本管理: 系统需要能够组织和存储所有通过playwright官方插件录制的脚本。这包括脚本的上传、编辑、删除和版本控制功能。 脚本执行: 用户应该能够在后台界面上查看所有可用的脚本&#xff0c;并能够通过简单的点击操作来启动特定脚本的执…

【行测笔记】

题型 判断推理题型 1. 图形推理 位置规律-元素组成相同 横着看竖着看旋转翻折对称 样式规律-元素组成相似 元素组成相同 相同线条重复出现 相加相减旋转求同求异黑白加减规律 特征&#xff1a;图形轮廓和分割区域相同&#xff0c;内部颜色不同方法&#xff1a;相同位置运算…

python学习11-Pytorch环境安装与模型搭建

先查看下自己的电脑是否是英伟达显卡 如果不是就需要租用平台了,如 AutoDL算力云 https://www.autodl.com/home CUDA 当涉及到深度学习和 Python 时&#xff0c;CUDA 是一个非常重要的概念&#xff0c;它是 NVIDIA 开发的并行计算平台和应用程序编程接口&#xff08;API&am…

从源码到产品:视频美颜SDK与直播美颜插件的开发详解

开发一款高效的视频美颜SDK与直播美颜插件&#xff0c;不仅需要深入理解图像处理技术&#xff0c;还需要考虑到性能优化、跨平台支持等多个方面的挑战。接下来&#xff0c;笔者将从源码开发的角度&#xff0c;详解视频美颜SDK与直播美颜插件的开发过程。 一、视频美颜SDK的核心…

仿华为车机功能之--修改Launcher3,实现横向滑动桌面空白处切换壁纸

本功能基于Android13 Launcher3 需求:模仿华为问界车机,实现横向滑动桌面空白处,切换壁纸功能(本质只是切换背景,没有切换壁纸)。 实现效果: 实现思路: 第一步首先得增加手势识别 第二步切换底图,不切换壁纸是因为切换壁纸动作太大,需要调用到WallpaperManager,耗…

asp.net core在win上的发布和部署

一、asp.net core两种发布方式 1、两个发布方式——【框架依赖发布】和【独立发布】 2、两种发布方式的差别 二、发布的详细过程 1、【生成】->【发布】 2、框架依赖发布 设置发布参数&#xff0c;然后进行发布 发布好的文件&#xff0c;把它们放到一个新的目录文件夹里 …

浏览器播放RTSP流,支持H264、H265等格式,支持IE、Chrome等浏览器

目录 背景 解决方案 效果 代码 前端代码 后端代码 下载 背景 项目中需要在浏览器中播放RTSP流&#xff0c;实在是不想折腾ActiveX控件 1、麻烦&#xff08;开发麻烦、使用时设置也麻烦&#xff09; 2、非IE浏览器不兼容 解决方案 使用OpenCvSharpNancy写一个解码服…

中仕公考怎么样?省考笔试成绩什么时候出?

根据往年的经验&#xff0c;省考笔试的成绩通常在考试后的大约一个月左右公布&#xff0c;但具体日期会根据各省份的公告而有所差异&#xff0c;不同省份具体时间不同&#xff0c;以2024年的为例&#xff1a; 广东省预计于笔试后约30天发布、山东省预计于笔试后约35天发布、浙…

Python计算机视觉四章-照相机模型与增强现实

目录 4.1针孔照相机模型 4.1.1照相机矩阵 4.1.2 三维点的投影 4.1.3 照相机矩阵的分解 4.1.4 计算照相机中心 4.2 照相机标定 4.2.1 一个简单的标定方法 4.3 以平面和标记物进行姿态估计 4.4 增强现实 4.4.1 PyGame和PyOpenGL 4.4.2 从照相机矩阵到OpenGL格式 4…

2024结构振动与智能控制国际学术会议(ICSVIC 2024)

文章目录 一、会议详情二、重要信息三、大会介绍四、出席嘉宾五、征稿主题六、咨询 一、会议详情 二、重要信息 大会官网&#xff1a;https://ais.cn/u/vEbMBz提交检索&#xff1a;EI Compendex、IEEE Xplore、Scopus 三、大会介绍 四、出席嘉宾 五、征稿主题 如想"投稿…

Day 1 : 数据结构

引入 以张三为例&#xff1a;CEF不能同时举办。 数据的逻辑结构 数据结构是什么 研究计算机数据之间的关系 逻辑结构和存储结构及其操作 基本概念 数据 数据元素 逻辑结构 按前趋和后继数将逻辑结构分为&#xff1a;线性结构和非线性结构。 即&#xff1a;找前…

Activity的生命周期

目录 前言 Activity的生命周期 五种状态 生命周期相关方法 前言 Android中有着四大组件&#xff1a;Activity、Service、ContentProvider和BroadcastReceiver。本篇我们主要讲解的是Activity组件&#xff0c;它是安卓提供给用户与手机之间进行交互的界面 控件&#xff0c;那…