深度学习之“线性代数”

embedded/2025/2/3 13:52:26/

线性代数深度学习中是解决多维数学对象计算问题的核心工具。这些数学对象包括标量、向量、矩阵和张量,借助它们可以高效地对数据进行操作和建模。以下将详细介绍这些数学对象及其在深度学习中的典型用途。

数学对象概述

标量

标量是最简单的数学对象,通常表示单个数值变量,是构成高阶数据结构的基础。例如:

python">import numpy as np
x = 42  # 标量
print(x)

向量

向量由标量组成,表示为一维数组。根据表示方式不同,可以分为行向量和列向量。在深度学习中,向量常用于描述样本的多个特征。例如:

python">import numpy as np
x = np.array([1,2,3])
print(x)
print(x.shape)
print(x.reshape((3,1)))

在这里插入图片描述

深度学习和机器学习中,向量的各个成员之间通常用于描述样本不同的特征。模型可以通过输入的这些特征量得到有用的输出,如分类标签或者是回归值。

矩阵

矩阵是由数字构成的二维数组。在矩阵中,各个元素所处的行数和列数为元素的下标。在python语言中,数组的下标是从0开始的,而在matlab语言中,数组的下标从1开始,不同语言的特点不同,需要注意。此外,在矩阵中,元素的位置由行和列索引确定。

python">import numpy as np
A = np.arange(12).reshape((3,4))
print(A)
print(A[1,2])
print(A[0,0])

在这里插入图片描述

此外,我们可以看到除开头可结尾的[]外,每一行的数据都由一组[]包括着,这说明numpy将二维数组当作行向量来对待,其中每一个元素也为一个行向量。

张量

张量是更高维的数组,超越矩阵的二维结构。例如,在计算机视觉中,RGB图像可以表示为形状为chw的三维张量,其中c表示通道数,h和w分别表示图像的高度和宽度。加上批量(batch size)维度后,形成四维张量。然而,不同框架可能对张量的维度顺序有不同约定,例如 ONNX 通常使用hwc。示例代码如下:

python">import numpy as np
t = np.arange(36).reshape(3,3,4)
print(t)

在这里插入图片描述

在计算机视觉模型推理阶段,尽管我们通常输入的是一张三维图片,但模型的输入通常还需要一个最高维度的批量大小(通常默认为1)。那么,如何对输入进行转换,将其扩展为四维数据呢?以下介绍两种方法,通过增加一个大小为1的维度来实现这一转换。

python">t = np.arange(36).reshape(3,3,4)
w = t[np.newaxis,:,:,:]
w2 = np.expand_dims(t,axis=0)
print(w.shape)
print(w2.shape)
print(w)
print(w2)

在这里插入图片描述

代数运算

本节主要设计向量和矩阵的计算

数组运算

标量运算中的加减乘除,以及指数等初等运算都适用于数组运算。当两个运算数组形状相同时,可以简单理解为对应位置上的元素进行运算。

python">import numpy as np
a = np.array([[1,2,3],[4,5,6]])
b = np.array([[7,8,9],[10,11,12]])
print(a+b)
print(a-b)
print(a*b)
print(a/b)

在这里插入图片描述

当两个数组形状不匹配时,就会涉及到NumPy的广播机制。举个例子,假设有三个人,第一个人分别拥有1个梨、2个苹果、3个香蕉和4个橘子;第二个人各类水果的数量是第一个人的两倍,第三个人则是第一个人的三倍。我们可以利用NumPy的广播机制,轻松地表示出每个人每种水果的拥有量。

python">import numpy as np
a = np.array([1,2,3,4])
b = np.array([[1],[2],[3]])
print(a*b)

在这里插入图片描述

其中行为4种水果,列为3个人。

向量运算

单位向量

将一个向量中的各个元素除以向量的模长,我们就能得到一个方向不变且模值为1的单位向量。

python">import numpy as np
v = np.array([2,-4,3])
print(v / np.sqrt((v*v).sum()))
print(v / np.sqrt(np.dot(v,v)))

在这里插入图片描述

我们既可以使用各元素平方求和开根号的方式来求得向量的模长,也可以使用内积的方式来得到。

内积

向量内积是最基础的向量运算,其计算方法如下
在这里插入图片描述

在这里插入图片描述

向量内积的结果是一个标量。向量内积满足交换律和分配律,但是不满足结合律。且内积为0的两个向量相互正交,它们之间的夹角为90°。

外积

与向量内积不同,两个向量的外积得到的是一个矩阵。个人理解,可以用前面的广播机制来理解它。向量的外积不要求两个向量具有相同数量的元素

python">a = np.array([1,2,3,4])
b = np.array([5,6,7])
print(np.outer(a,b))

在这里插入图片描述

叉积

叉积是定义在三维空间中的,两个向量叉积的结果是一个新的向量,这个向量垂直于这两个向量构成的平面。新向量的方向服从右手法则。
在这里插入图片描述

python">import numpy as np
a = np.array([1,0,0])
b = np.array([0,1,0])
c = np.array([1,1,0])
print(np.cross(a,b))
print(np.cross(a,c))

在这里插入图片描述

总结

线性代数深度学习的基础,其数学对象和运算在数据表示和模型计算中无处不在。掌握这些基本概念和操作,将为理解和优化深度学习模型提供有力支持。


http://www.ppmy.cn/embedded/159195.html

相关文章

使用Ollama 在Ubuntu运行deepseek大模型:以DeepSeek-coder为例

DeepSeek大模型这几天冲上热搜啦! 咱们来亲身感受下DeepSeek模型的魅力吧! 整个操作流程非常简单方便,只需要2步,先安装Ollama,然后执行大模型即可。 安装Ollama 在Ubuntu下安装Ollama非常简单,直接sna…

聚簇索引、哈希索引、覆盖索引、索引分类、最左前缀原则、判断索引使用情况、索引失效条件、优化查询性能

聚簇索引 聚簇索引像一本按目录排版的书,用空间换时间,适合读多写少的场景。设计数据库时,主键的选择(如自增ID vs 随机UUID)会直接影响聚簇索引的性能。 什么是聚簇索引? 数据即索引:聚簇索引…

Python Lambda函数完全指南:从基础到高阶应用

Python Lambda函数完全指南:从基础到高阶应用 一、Lambda函数核心认知 1.1 什么是Lambda函数? 匿名函数(无名函数)单行表达式实现函数功能语法:lambda 参数: 表达式即用即弃的轻量级函数工具 1.2 与普通函数对比 …

讯飞智作 AI 配音技术浅析(二):深度学习与神经网络

讯飞智作 AI 配音技术依赖于深度学习与神经网络,特别是 Tacotron、WaveNet 和 Transformer-TTS 模型。这些模型通过复杂的神经网络架构和数学公式,实现了从文本到自然语音的高效转换。 一、Tacotron 模型 Tacotron 是一种端到端的语音合成模型&#xff…

AI软件栈:LLVM分析(一)

文章目录 AI 软件栈后端编译LLVM IRLLVM的相关子项目AI 软件栈后端编译 AI软件栈的后端工作通常与硬件架构直接相关,为了实现一个既能适配现代编程语言、硬件架构发展的目标,所以提出了LLVM具备多阶段优化能力提供基础后端描述,便于进行编译器开发兼容标准编译器的行为LLVM …

一文讲解HashMap线程安全相关问题(上)

HashMap不是线程安全的,主要有以下几个问题: ①、多线程下扩容会死循环。JDK1.7 中的 HashMap 使用的是头插法插入元素,在多线程的环境下,扩容的时候就有可能导致出现环形链表,造成死循环。 JDK 8 时已经修复了这个问…

如何本地部署DeepSeek

第一步:安装ollama https://ollama.com/download 打开官网,选择对应版本 第二步:选择合适的模型 https://ollama.com/ 模型名称中的 1.5B、7B、8B 等数字代表模型的参数量(Parameters),其中 B 是英文 B…

leetcode27.删除有序数组中的重复项

目录 问题描述判题标准示例提示 具体思路思路一思路二 代码实现 问题描述 给你一个非严格递增排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,返回删除后数组的新长度。元素的相对顺序应该保持一致 。然后返回nums中唯一元…