趋近智
线性代数提供了处理大型语言模型中常见高维数据的数学语言。向量和矩阵是我们用于表示神经网络中的输入数据、模型参数和中间激活的主要对象。把握它们的属性和运算方式,对于明白信息在这些模型中如何流动和转变来说,是十分重要的。
本质上,向量是一个有序的数字列表,通常表示多维空间中的一个点或方向。在大型语言模型的背景下,向量通常表示:
维欧几里得空间中的向量表示为:
向量加法和标量乘法等基本运算使我们能够组合或缩放这些表示。例如,将输入嵌入添加到位置编码向量会组合语义和位置信息。
在PyTorch中,向量表示为一维张量。
import torch
# 示例:一个5维向量
vector_a = torch.tensor([1.0, 2.5, -0.8, 4.0, 0.0])
# 示例:标量乘法
scaled_vector = 2.0 * vector_a
# 示例:向量加法
vector_b = torch.tensor([-0.5, 1.0, 1.2, -2.0, 1.5])
summed_vector = vector_a + vector_b
print(f"原始向量 A: {vector_a}")
print(f"缩放后的向量: {scaled_vector}")
print(f"相加后的向量: {summed_vector}")
print(f"向量维度 (阶): {vector_a.ndim}")
print(f"向量形状: {vector_a.shape}")
矩阵是数字的矩形排列,将向量扩展到二维。它们在深度学习中最重要的作用是表示向量空间之间的线性变换。
一个有行列的矩阵()是:
某些线性代数运算在神经网络计算中无处不在:
这个运算将矩阵定义的线性变换应用于向量。如果且,则结果是一个在中的向量。这是神经网络中一个密集层(无偏置)内的基本计算,它将一个维输入表示转换为一个维输出表示。
import torch
# 定义一个权重矩阵(例如,用于将4个特征映射到3个特征的层)
W = torch.randn(3, 4) # 形状:(输出维度, 输入维度)
# 定义一个输入向量(4个特征)
x = torch.tensor([1.0, 0.5, -1.0, 2.0]) # 形状:(输入维度,)
# 执行矩阵-向量乘法
# 注意:torch.matmul 会适当地处理维度
y = torch.matmul(W, x) # 或者 W @ x
print(f"权重矩阵 W (形状 {W.shape}):\n{W}")
print(f"\n输入向量 x (形状 {x.shape}): {x}")
print(f"\n输出向量 y (形状 {y.shape}): {y}")
矩阵 W 将向量 x 从4维空间变换到3维空间。
两个矩阵 和 相乘得到矩阵 。这在批量处理数据时被广泛使用,其中输入 可能是一个矩阵,每行是一个输入向量,或者在组合多个线性变换时使用。例如,Transformer的前馈网络中的计算通常涉及多次矩阵乘法。
import torch
# 输入批次(例如,2个序列/样本,每个有4个特征)
X = torch.randn(2, 4) # 形状:(批次大小, 输入维度)
# 来自前面示例的权重矩阵
W = torch.randn(3, 4) # 形状:(输出维度, 输入维度)
# 对批次应用变换
# 我们需要对 W 进行转置,以匹配标准矩阵乘法的维度约定
# Y = X @ W.T 的结果是 (2, 4) @ (4, 3) -> (2, 3)
Y = torch.matmul(X, W.T) # 形状:(批次大小, 输出维度)
print(f"输入批次 X (形状 {X.shape}):\n{X}")
print(f"\n权重矩阵 W 转置 (形状 {W.T.shape}):\n{W.T}")
print(f"\n输出批次 Y (形状 {Y.shape}):\n{Y}")
这涉及到将两个相同形状的矩阵(或向量)的对应元素相乘。表示为 ,结果 的 。这与矩阵乘法不同,并出现在各种神经网络组成部分中,例如逐元素应用激活函数或在LSTM或GRU中实现门控机制。
import torch
A = torch.tensor([[1., 2.], [3., 4.]])
B = torch.tensor([[0.5, 1.], [-1., 2.]])
# 逐元素乘法
C = A * B # 或者 torch.multiply(A, B)
print(f"矩阵 A:\n{A}")
print(f"矩阵 B:\n{B}")
print(f"逐元素乘积 C:\n{C}")
一个基本运算是两个向量 之间的点积(或内积)。它计算为 。在几何上,它与一个向量在另一个向量上的投影相关(,其中 是它们之间的夹角)。
如果第一个向量被视为行向量,第二个被视为列向量,则点积在计算上等同于矩阵乘法:。
在大型语言模型中,点积是注意力机制的核心。缩放点积注意力使用点积来计算查询()和键()向量之间的相关性,以确定对输入序列不同部分的关注程度。
import torch
v = torch.tensor([1.0, 2.0, -1.0])
w = torch.tensor([3.0, -1.0, 0.5])
# 计算点积
dot_product_val = torch.dot(v, w)
print(f"向量 v: {v}")
print(f"向量 w: {w}")
print(
f"点积: {dot_product_val}"
) # 预期: (1*3) + (2*-1) + (-1*0.5) = 3 - 2 - 0.5 = 0.5
范数是一个函数,它为向量空间中的每个向量赋予一个严格为正的长度或大小(零向量除外,其长度为零)。机器学习中最常见的范数是:
范数也用于归一化技术,如层归一化,这通常涉及根据激活值的L2范数对其进行缩放。
import torch
v = torch.tensor([3.0, -4.0, 0.0])
l2_norm = torch.linalg.norm(v, ord=2) # 或者直接 torch.linalg.norm(v)
l1_norm = torch.linalg.norm(v, ord=1)
print(f"向量 v: {v}")
# 预期: sqrt(3^2 + (-4)^2 + 0^2) = sqrt(9 + 16) = sqrt(25) = 5.0
print(f"L2 范数: {l2_norm}")
print(f"L1 范数: {l1_norm}") # 预期: |3| + |-4| + |0| = 3 + 4 + 0 = 7.0
尽管我们主要讨论了向量(1维)和矩阵(2维),但深度学习非常依赖于张量,它是对更高维度的推广。例如:
(批次大小,序列长度,嵌入维度)。跟踪张量形状非常重要,以确保运算兼容。维度不匹配是深度学习代码中常见的错误来源。PyTorch及其他框架提供工具来检查和操作张量形状(.shape、.reshape()、.permute()等)。
本次回顾涵盖了最直接相关的线性代数内容。随着课程进展,特别是在讨论Transformer架构和注意力机制时,矩阵乘法、点积以及管理张量维度的作用将变得越来越明显。牢固掌握这些运算对于有效理解和实现大型语言模型来说是不可或缺的。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造