在深度学习中,“维度”指的是数据的结构或数组的每个轴的长度。每个维度表示数据的不同特征或轴。为了更好地理解维度,我们可以通过一些示例来说明。

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 模型中,尤其是多头注意力机制中,维度的概念用于描述张量的形状和数据流动。

示例: 多头注意力中的张量维度

假设有以下张量:

  • querieskeysvalues 的形状为 (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 中,维度用于定义模型的输入、输出和计算过程的结构。