在深度学习中,“维度”指的是数据的结构或数组的每个轴的长度。每个维度表示数据的不同特征或轴。为了更好地理解维度,我们可以通过一些示例来说明。
1. 一维数据
示例: 向量
[2, 4, 6, 8]
- 维度: 1(这是一个一维数组)
- 长度: 4(数组中有4个元素)
2. 二维数据
示例: 矩阵
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
- 维度: 2(这是一个二维数组)
- 形状: (3, 3)(矩阵有3行3列)
3. 三维数据
示例: 张量(可以用来表示图片的多个通道)
[
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
],
[
[10, 11, 12],
[13, 14, 15],
[16, 17, 18]
]
]
- 维度: 3(这是一个三维数组)
- 形状: (2, 3, 3)(有2个矩阵,每个矩阵有3行3列)
4. 四维数据
示例: 张量(用于批量处理图像)
[
[
[
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
],
[
[10, 11, 12],
[13, 14, 15],
[16, 17, 18]
]
],
[
[
[19, 20, 21],
[22, 23, 24],
[25, 26, 27]
],
[
[28, 29, 30],
[31, 32, 33],
[34, 35, 36]
]
]
]
- 维度: 4(这是一个四维数组)
- 形状: (2, 2, 3, 3)(有2个批次,每个批次包含2个图像,每个图像为3x3的像素矩阵)
在 Transformer 中的维度
在 Transformer 模型中,尤其是多头注意力机制中,维度的概念用于描述张量的形状和数据流动。
示例: 多头注意力中的张量维度
假设有以下张量:
queries
、keys
和values
的形状为(batch_size, seq_len, num_hiddens)
。
batch_size
: 批量大小(即一次输入多少个样本)seq_len
: 序列长度(即每个样本有多少个时间步或词)num_hiddens
: 隐藏维度(即每个时间步的特征维度)
在多头注意力中,num_hiddens
被分成 num_heads
个头,每个头的维度是 num_hiddens / num_heads
。为了计算每个头的注意力,张量的形状需要调整。例如,transpose_qkv
函数将张量的形状从 (batch_size, seq_len, num_hiddens)
调整为 (batch_size * num_heads, seq_len, num_hiddens / num_heads)
,以便于并行计算。
总结
- 维度 是描述数据的不同轴的长度。
- 在深度学习中,理解数据的维度有助于进行有效的数据处理和模型设计。
- 在 Transformer 中,维度用于定义模型的输入、输出和计算过程的结构。