当前位置: 首页 > news >正文

深度学习前置知识

文章目录

  • 介绍
  • 数据操作
      • 张量
      • 张量的定义
      • 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.xdnf.cn/news/1136395.html

相关文章:

  • PyTorch边界感知上下文神经网络BA-Net在医学图像分割中的应用
  • ubuntu基础搭建
  • 基于dcmtk的dicom工具 第二章 图像接受StoreSCP(2)
  • ubuntu22 npm install electron --save-dev 失败
  • LVDS系列21:Xilinx 7系ISERDESE2原语(二)
  • 一款基于PHP开发的不良事件上报系统源码,适用于医院安全管理。系统提供10类事件类别、50余种表单,支持在线填报、匿名上报及紧急报告。
  • [MRCTF2020]Ezpop
  • 直播带货与开源AI智能名片链动2+1模式S2B2C商城小程序:重塑电商营销新格局
  • SpringBoot使用ThreadLocal共享数据
  • JAVA中的Collection集合及ArrayList,LinkedLIst,HashSet,TreeSet和其它实现类的常用方法
  • #systemverilog# 关键字之 变量声明周期与静态方法关系探讨
  • SVG基础语法:绘制点线面的简单示例
  • 强化第三讲—一元函数微分学的概念
  • 网络编程-java
  • 2025年视频超高清技术应用全景介绍
  • 模型移植实战:从PyTorch到ONNX完整指南
  • 【C++详解】STL-stack、queue的模拟实现,容器适配器,deque双端队列介绍
  • 我的开发日志:随机数小程序
  • vue + Cesium 实现 3D 地图水面效果详解
  • 【后端】.NET Core API框架搭建(7) --配置使用Redis
  • 使用 Spring Boot + AbstractRoutingDataSource 实现动态切换数据源
  • 高光谱相机有多少种类型?分别有什么特点?
  • Java面试(基础篇) - 第二篇!
  • 2020717零碎写写
  • 91套商业策划创业融资计划书PPT模版
  • Matlab2025a软件安装|详细安装步骤➕安装文件|附下载文件
  • IDEA运行Tomcat一直提示端口被占用(也查不到该端口)
  • 社区搜索离线回溯系统设计:架构、挑战与性能优化|得物技术
  • 在开关电源电路中,WD0407 可作为整流二极管使用,WD0407 40V 7A
  • 前端-列表fixed冻结的列 横向滚动条拖不动