深度学习前置知识

文章目录

  • 介绍
  • 数据操作
      • 张量
      • 张量的定义
      • 1. **张量的维度(Rank)**
      • 2. **张量的形状(Shape)**
    • 简单的数据预处理(插值
  • 线性代数
  • 微积分
  • 概率论
    • 1. 基本概念
      • (1) 随机试验与事件
      • (2) 概率公理(Kolmogorov公理)
    • 2. 概率公式
      • (1) 条件概率
      • (2) 全概率公式
      • (3) 贝叶斯定理
    • 3. 随机变量与分布
      • (1) 随机变量类型
      • (2) 常见分布
      • (3) 期望与方差
    • 4. 极限定理
      • (1) 大数定律
      • (2) 中心极限定理(CLT)
    • 5. 联合分布与独立性
      • (1) 联合概率
      • (2) 独立性
      • (3) 协方差与相关系数

课程学习自李牧老师B站的视频和网站文档

https://zh-v2.d2l.ai/chapter_preliminaries

介绍

深度学习是机器学习的一种,可以做计算机视觉,可以做自然语言处理

  • 在图片分类出现了较大的突破
  • 可以物体检测和分割
  • 可以样式迁移(类似换背景
  • 可以人脸合成(随机生成的
  • 可以文字生成图片
  • 文字生成模型(AI大模型

image-20250715224044732

数据操作

N维数组时机器学习和神经网络的主要数据结构

  • 0-d:标量(1.0这样的一个类别
  • 1-d:向量(【1.0,2.7,3.4】这样的一个特征向量
  • 2-d:矩阵(一个样本,也就是特征矩阵

image-20250716161237375

访问元素:

  • 【1:】把第一行拿出来
  • 【::3】每三行一跳

张量

张量的定义

  • 标量:0维张量,例如一个数字(如 5)。
  • 向量:1维张量,例如 [1, 2, 3]。
  • 矩阵:2维张量,例如 [[1, 2], [3, 4]]。
  • 高维张量:3维或更高,例如表示图像的张量(宽×高×通道)。

1. 张量的维度(Rank)

  • 维度指的是张量的轴(axes)数量,表示张量是几维的。
  • 例如:
    • 0维:标量(如 5),无轴。
    • 1维:向量(如 [1, 2, 3]),1个轴。
    • 2维:矩阵(如 [[1, 2], [3, 4]]),2个轴。
    • 3维及以上:高维张量(如 [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]),3个轴或更多。
  • 维度也叫阶(rank),例如2维张量的阶是2。

2. 张量的形状(Shape)

  • 形状是一个元组,描述张量在每个轴上的元素数量。

  • 例如:

    • 标量:形状是 ()(空元组)。
    • 向量 [1, 2, 3]:形状是 (3,),表示1个轴有3个元素。
    • 矩阵 [[1, 2], [3, 4]]:形状是 (2, 2),表示2行2列。
    • 3维张量 [[[1, 2], [3, 4]], [[5, 6], [7, 8]]]:形状是 (2, 2, 2),表示2个矩阵,每个矩阵2行2列。
    import torch# 标量(0维)
    scalar = torch.tensor(5)
    print(scalar.shape)  # 输出:torch.Size([])# 向量(1维)
    vector = torch.tensor([1, 2, 3])
    print(vector.shape)  # 输出:torch.Size([3])# 矩阵(2维)
    matrix = torch.tensor([[1, 2], [3, 4]])
    print(matrix.shape)  # 输出:torch.Size([2, 2])# 3维张量
    tensor_3d = torch.tensor([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
    print(tensor_3d.shape)  # 输出:torch.Size([2, 2, 2])
    

    x.reshape函数只改变张量的形状

    tensor.zeros创建全0的张量

    cat函数将张量连结在一起

    image-20250716170406414

    x.sum()函数求和

    两个张量维度一样,但形状不一样,可以通过广播机制执行(每个张量自动复制自己比另一个张量低的形状

image-20250716170709329

python用id标识元素地址,类似指针,在pytorch中有一些原地操作的函数

原地操作直接修改张量的值,而不是返回一个新张量。

在 PyTorch 中,原地操作通常以方法名后加下划线 _ 标记,例如 .add_()、.mul_()。

转换为numpy张量

A = X.numpy()
B = torch.tensor(A)
type(A), type(B)
(numpy.ndarray, torch.Tensor)

简单的数据预处理(插值

假设我们有这样的一个csv文件

import pandas as pddata = pd.read_csv(data_file)
print(data)NumRooms Alley   Price
0       NaN  Pave  127500
1       2.0   NaN  106000
2       4.0   NaN  178100
3       NaN   NaN  140000

这里我们使用插值的方式处理,假设price可能缺失,我们就把它单独分出来作为output,其他作为input

input中如果是数值类,则将NaN替换为其他数的平均值

inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = inputs.fillna(inputs.mean())
print(inputs)NumRooms Alley
0       3.0  Pave
1       2.0   NaN
2       4.0   NaN
3       3.0   NaN

如果是字符类,我们采用数字01来代替存在

inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)NumRooms  Alley_Pave  Alley_nan
0       3.0           1          0
1       2.0           0          1
2       4.0           0          1
3       3.0           0          1

线性代数

一些基本的概念

image-20250716221305746

image-20250716221332397

image-20250716221343157

对某一维求和,其实就是沿着选择的方向做一个压缩

保持维度:用 keepdim=True 保留求和后的维度,便于后续操作

image-20250716223911595

image-20250716224047151

微积分

在深度学习中,我们“训练”模型,不断更新它们,使它们在看到越来越多的数据时变得越来越好。 通常情况下,变得更好意味着最小化一个损失函数(loss function), 即一个衡量“模型有多糟糕”这个问题的分数。 最终,我们真正关心的是生成一个模型,它能够在从未见过的数据上表现良好。 但“训练”模型只能将模型与我们实际能看到的数据相拟合。 因此,我们可以将拟合模型的任务分解为两个关键问题:

  • 优化(optimization):用模型拟合观测数据的过程;
  • 泛化(generalization):数学原理和实践者的智慧,能够指导我们生成出有效性超出用于训练的数据集本身的模型。

image-20250717131902559

image-20250717132251674

偏导数:假如y有多个变量x1,x2,x3等,对其中一个变量求导,其余变量视为常数

梯度:对每个变量求偏导数,结果合成一个向量

image-20250717133710176

image-20250717133913252

image-20250717140422115

fx是一个输入x1和x2这两个向量得到一个标量(固定结果,可能数数字)的标量函数,而x可能是向量,求标量函数关于向量的梯度,其实就是说求fx这函数的每个x的偏导数

链式法则求导

image-20250717134624935

image-20250717141948255

image-20250717142114585

反向需要把正向存储的中间结果拿过来用

非标量反向传播依赖自动微分工具(如 PyTorch 的 .backward()),手动推导需注意维度匹配。

梯度累积可能需要清零(如 optimizer.zero_grad())。

计算图的概念:

image-20250717141648417

分离计算:假如我们希望将y视为一个常数,可以引入变量u

x.grad.zero_()
y = x * x
u = y.detach()
z = u * xz.sum().backward()
x.grad == u

由于记录了y的计算结果,我们可以随后在y上调用反向传播, 得到y=x*x关于的x的导数,即2*x

x.grad.zero_()
y.sum().backward()
x.grad == 2 * x

使用自动微分的一个好处是: 即使构建函数的计算图需要通过Python控制流(例如,条件、循环或任意函数调用),我们仍然可以计算得到的变量的梯度。 在下面的代码中,while循环的迭代次数和if语句的结果都取决于输入a的值。

def f(a):b = a * 2while b.norm() < 1000:b = b * 2if b.sum() > 0:c = belse:c = 100 * breturn c
a = torch.randn(size=(), requires_grad=True)
d = f(a)
d.backward()

概率论

1. 基本概念

(1) 随机试验与事件

  • 样本空间Ω={所有可能结果}\Omega = \{\text{所有可能结果}\}Ω={所有可能结果}
    例:掷骰子的样本空间 Ω={1,2,3,4,5,6}\Omega = \{1, 2, 3, 4, 5, 6\}Ω={1,2,3,4,5,6}
  • 事件A⊆ΩA \subseteq \OmegaAΩ,如“掷出偶数”对应 A={2,4,6}A = \{2, 4, 6\}A={2,4,6}

(2) 概率公理(Kolmogorov公理)

对任意事件 AAA

  1. 非负性:P(A)≥0P(A) \geq 0P(A)0
  2. 规范性:P(Ω)=1P(\Omega) = 1P(Ω)=1
  3. 可列可加性:若 A1,A2,…A_1, A_2, \dotsA1,A2, 互斥,则 P(⋃iAi)=∑iP(Ai)P\left(\bigcup_{i} A_i\right) = \sum_i P(A_i)P(iAi)=iP(Ai)

2. 概率公式

(1) 条件概率

P(A∣B)=P(A∩B)P(B)(P(B)>0)P(A \mid B) = \frac{P(A \cap B)}{P(B)} \quad (P(B) > 0) P(AB)=P(B)P(AB)(P(B)>0)

(2) 全概率公式

B1,B2,…,BnB_1, B_2, \dots, B_nB1,B2,,BnΩ\OmegaΩ 的划分:
P(A)=∑i=1nP(A∣Bi)P(Bi)P(A) = \sum_{i=1}^n P(A \mid B_i) P(B_i) P(A)=i=1nP(ABi)P(Bi)

(3) 贝叶斯定理

P(Bi∣A)=P(A∣Bi)P(Bi)∑jP(A∣Bj)P(Bj)P(B_i \mid A) = \frac{P(A \mid B_i) P(B_i)}{\sum_j P(A \mid B_j) P(B_j)} P(BiA)=jP(ABj)P(Bj)P(ABi)P(Bi)


3. 随机变量与分布

(1) 随机变量类型

  • 离散型X∈{x1,x2,…}X \in \{x_1, x_2, \dots\}X{x1,x2,}
  • 连续型X∈RX \in \mathbb{R}XR,概率密度函数 f(x)f(x)f(x) 满足 P(a≤X≤b)=∫abf(x)dxP(a \leq X \leq b) = \int_a^b f(x) dxP(aXb)=abf(x)dx

(2) 常见分布

分布名称概率质量/密度函数参数
伯努利分布P(X=k)=pk(1−p)1−kP(X=k) = p^k (1-p)^{1-k}P(X=k)=pk(1p)1kk∈{0,1}k \in \{0,1\}k{0,1}
二项分布P(X=k)=(nk)pk(1−p)n−kP(X=k) = \binom{n}{k} p^k (1-p)^{n-k}P(X=k)=(kn)pk(1p)nkk≤nk \leq nkn
泊松分布P(X=k)=λke−λk!P(X=k) = \frac{\lambda^k e^{-\lambda}}{k!}P(X=k)=k!λkeλλ>0\lambda > 0λ>0
正态分布f(x)=1σ2πe−(x−μ)22σ2f(x) = \frac{1}{\sigma\sqrt{2\pi}} e^{-\frac{(x-\mu)^2}{2\sigma^2}}f(x)=σ2π1e2σ2(xμ)2μ,σ\mu, \sigmaμ,σ

(3) 期望与方差

  • 期望E[X]=∑xP(x)\mathbb{E}[X] = \sum x P(x)E[X]=xP(x)∫xf(x)dx\int x f(x) dxxf(x)dx
  • 方差Var(X)=E[(X−E[X])2]\text{Var}(X) = \mathbb{E}[(X - \mathbb{E}[X])^2]Var(X)=E[(XE[X])2]

4. 极限定理

(1) 大数定律

1n∑i=1nXi→PE[X]当 n→∞\frac{1}{n} \sum_{i=1}^n X_i \overset{P}{\to} \mathbb{E}[X] \quad \text{当} \ n \to \infty n1i=1nXiPE[X] n

(2) 中心极限定理(CLT)

∑i=1nXi−nμσn→dN(0,1)\frac{\sum_{i=1}^n X_i - n\mu}{\sigma \sqrt{n}} \overset{d}{\to} N(0, 1) σni=1nXinμdN(0,1)


5. 联合分布与独立性

(1) 联合概率

  • 离散型:P(X=x,Y=y)P(X=x, Y=y)P(X=x,Y=y)
  • 连续型:fX,Y(x,y)f_{X,Y}(x,y)fX,Y(x,y)

(2) 独立性

XXXYYY 独立 ⟺\iff P(X,Y)=P(X)P(Y)P(X,Y) = P(X)P(Y)P(X,Y)=P(X)P(Y)fX,Y(x,y)=fX(x)fY(y)f_{X,Y}(x,y) = f_X(x) f_Y(y)fX,Y(x,y)=fX(x)fY(y)

(3) 协方差与相关系数

  • 协方差Cov(X,Y)=E[(X−E[X])(Y−E[Y])]\text{Cov}(X,Y) = \mathbb{E}[(X-\mathbb{E}[X])(Y-\mathbb{E}[Y])]Cov(X,Y)=E[(XE[X])(YE[Y])]
  • 相关系数ρX,Y=Cov(X,Y)σXσY∈[−1,1]\rho_{X,Y} = \frac{\text{Cov}(X,Y)}{\sigma_X \sigma_Y} \in [-1, 1]ρX,Y=σXσYCov(X,Y)[1,1]

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

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

相关文章

XSS学习总结

一.XSS概述 跨站脚本攻击&#xff08;Cross-Site Scripting&#xff0c;XSS&#xff09;是一种常见的网络安全漏洞&#xff0c;攻击者通过在网页上注入恶意脚本代码&#xff0c;从而在用户的浏览器上执行恶意操作。这些脚本可以是 JavaScript、HTML 或其他网页脚本语言。一旦用…

计算机网络中:传输层和网络层之间是如何配合的

可以把网络层和传输层想成一个“快递系统”&#xff1a; 网络层&#xff08;IP 层&#xff09; 邮政系统&#xff1a;只负责把“包裹”&#xff08;IP 数据报&#xff09;从 A 地搬到 B 地&#xff0c;不保证顺序、不保证不丢、不保证不重复。传输层&#xff08;TCP/UDP 层&am…

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 用户登录实现

大家好&#xff0c;我是java1234_小锋老师&#xff0c;最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程&#xff0c;持续更新中&#xff0c;计划月底更新完&#xff0c;感谢支持。今天讲解用户登录实现 视频在线地址&#xff1a; …

Redis主从复制数据同步实现原理详细介绍

文章目录一、主从复制的概念二、全量复制&#xff08;完整重同步&#xff09;三、增量复制&#xff08;部分重同步&#xff09;1. 增量复制的核心思想2. 增量复制的实现3. 复制偏移量&#xff08;replicationoffset&#xff09;4. 复制积压缓冲区&#xff08;replicationbacklo…

docker 软件bug 误导他人 笔记

DockerDesktopInstaller.exe install --installation-dirX:\AI-AI\docker\pro\ 由于 Docker官方随便修改安装命令&#xff0c;这个在4.4一下是无法使用的&#xff0c;存在误导他人

Python 进阶(六): Word 基本操作

目录 1. 概述2. 写入 2.1 标题2.2 段落2.3 表格2.4 图片2.5 样式 3. 读取 1. 概述 Word 是一个十分常用的文字处理工具&#xff0c;通常我们都是手动来操作它&#xff0c;本节我们来看一下如何通过 Python 来操作。 Python 提供了 python-docx 库&#xff0c;该库就是为 Wo…

OpenLayers 入门指南【三】:API概要

目录一、官方文档二、核心类三、总结一、官方文档 首页右侧有四个栏目分别是 Docs(文档):也可以理解为使用指南&#xff0c;涵盖一下四个模块 Quick Start(快速入门)&#xff1a;介绍如何快速引入并使用OpenLayers快速构建一个地图应用FAQ(问答)&#xff1a;介绍一些常见问题的…

JAVA面试宝典 -《Kafka 高吞吐量架构实战:原理解析与性能优化全攻略》

&#x1f680; Kafka 高吞吐量架构实战&#xff1a;原理解析与性能优化全攻略 随着大数据技术在日志收集、埋点监控、订单流处理等场景的普及&#xff0c;Kafka 已成为流处理架构中的核心组件。它之所以能在海量数据场景下保持高吞吐、低延迟&#xff0c;源于其在架构层面和底…

把sudo搞坏了怎么修复:报错sudo: /etc/sudo.conf is owned by uid 1000, should be 0

今天部署 NFS 的时候一不小心给/etc目录下所有的文件都所有者给改了&#xff0c;然后使用sudo的时候就出现了下面的问题&#xff1a; sudo: /etc/sudo.conf is owned by uid 1000, should be 0 sudo: /etc/sudo.conf is owned by uid 1000, should be 0 sudo: /etc/sudoers i…

VUE前端项目开发1.0.1版本

项目包含用户权限管理、表单提交、数据上传下载、仪表盘可视化等功能&#xff0c;非常适合新手从零开始学习Vue3前端开发&#xff0c;下述包含所有开发源代码&#xff0c;敬请食用 废话少说先上图: 登陆界面: 仪表盘管理系统: 用户管理: 对于普通用户只有仪表盘和个人信息界…

低代码平台能否完全取代传统前端开发

低代码平台不能完全取代传统前端开发&#xff0c;主要原因包括灵活性有限、性能优化能力不足、复杂定制需求难以实现。 低代码平台尽管能快速开发出相对标准化的应用&#xff0c;但在处理复杂、个性化的业务需求时&#xff0c;明显表现出不足。尤其在需要精细化控制UI界面、高性…

Git 中如何比较不同版本之间的差异?常用命令有哪些?

回答重点1&#xff09; git diff <commit1> <commit2> &#xff1a;比较两个指定的提交之间的差异。2&#xff09; git diff <branch1> <branch2> &#xff1a;比较两个分支之间的差异。3&#xff09; git diff <path> &#xff1a;比较工作目录…

MySQL 8.0 OCP 1Z0-908 题目解析(32)

题目125 Choose three. Identify three functions of MySQL Enterprise Monitor. □ A) Analyze query performance. □ B) Start a logical backup. □ C) Determine the availability of monitored MySQL servers. □ D) Centrally manage users. □ E) Start a MySQL Enterp…

Spring处理器和Bean的生命周期

Spring处理器和Bean的生命周期Spring处理器是对Bean对象的的开发可以对BeanDifinition进行操作&#xff0c;例如动态添加、修改BeanDefinition、动态修改Bean。&#xff0c;也可以在Bean对象创建后对Bean对象进行代理增强。注意&#xff1a;对于处理器要又一个正确的认知&#…

Spring Framework源码解析——BeanFactory

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl1. BeanFactory 概述 BeanFactory 是 Spring IoC 容器的最基础接口&#xff0c;它定义了获取、配置和管理 Bean 的核心方法。它是 Spring 框架中容器体系的顶层接口之一&#…

C# 计算梯形面积和周长的程序(Program to calculate area and perimeter of Trapezium)

梯形是至少有一对边平行&#xff0c;其他两条边可以不平行的四边形。平行边称为梯形的底&#xff0c;其他两条边称为梯形的腿。平行边之间的垂直距离称为梯形的高。公式 &#xff1a; 梯形面积&#xff1a; 0.5 * (a b) * h梯形周长&#xff1a; a b c d例子&#xff1a; 输…

【计算机考研(408)- 数据结构】数组和特殊矩阵

数组和特殊矩阵 数组 数组的定义 数组是由n(n>1)个相同类型的数据元素构成的有限序列。每个数据元素称为一个数组元素&#xff0c;每个元素在n个线性关系中的序号称之为该元素的下标&#xff0c;下标的取值范围称为数组的维界。 数组是[[线性表]]的推广&#xff0c;一维数组…

Agent架构与工作原理:理解智能体的核心机制

Agent架构与工作原理&#xff1a;深入理解智能体的核心机制 AI Agent的核心组成部分 一个完整的AI Agent通常由以下几个核心模块组成&#xff1a; 1. 规划模块&#xff08;Planning Module&#xff09; 规划模块是Agent的"大脑"&#xff0c;负责制定行动策略。它接收…

解决vscode中vue格式化后缩进太小的问题,并去除分号 - 设置Vetur tabSize从2到4,设置prettier取消分号semi

效果图 左边原来的&#xff0c;右边是设置后的效果 实现步骤 安装插件 Vetur 安装插件 prettier Vscode > 文件 > 首选项 > 设置 搜索vetur > 找到比较下面的“Vetur > Format > Options: Tab Size” > 设置缩进为4 在附近找到“Vetur > Format: De…

计算机发展史:电子管时代的辉煌与局限

在计算机的发展历程中&#xff0c;电子管时代犹如一颗璀璨的流星&#xff0c;短暂却耀眼。它接过了机械计算装置的接力棒&#xff0c;以电子管为核心元件&#xff0c;开启了计算机的电子化征程&#xff0c;为后续的计算机发展奠定了坚实的基础。这段从 20 世纪 40 年代到 50 年…