- 输入序列长度(sequence length):10
- 一次处理的样本数量(batch size):32
- 输入嵌入维度(embedding dimension):512
- 位置编码维度:512
- 每一个Transformer层中注意力头的数量(number of attention heads):8
- 前馈神经网络(FFN)隐藏层维度(hidden dimension of FFN):2048
- Transformer层的数量(number of Transformer layers):6
1. 输入嵌入和位置编码(Input Embedding and Positional Encoding)
- 输入:batch size 为32,Sequence 长度为10,Embedding 维度为512的三维矩阵。
- 输出:加入位置编码后还是 [32, 10, 512] 的 embedding 表示。
2. 自注意力层(Self-Attention Layer)
2.1 查询、键、值矩阵计算(Query, Key, Value Calculation)
- 输入:这里需要注意,batch size 不参与计算,所以相对于输入,少了一个维度,真正参与运算的是一个二维矩阵,形状为 [10, 512]
- 查询、键、值矩阵权重和偏置:
- 对于每个头:
- 查询矩阵 𝑊𝑄:形状为 [512, 64]
- 偏置 𝑏𝑄,𝑏𝐾,𝑏𝑉:形状为 [64]
- 值矩阵 𝑊𝑉:形状为 [512, 64]
- 键矩阵 𝑊𝐾:形状为 [512, 64]
- 总权重参数量为:
- 查询矩阵:8×512×64=262144
- 偏置:8×64×3=1536
- 值矩阵:8×512×64=262144
- 键矩阵:8×512×64=262144
- 总计:262144×3+1536=787968
- 输出:
- 查询、键、值矩阵计算:
- 查询 𝑄:形状为 [10, 8, 64]
- 值 𝑉:形状为 [10, 8, 64]
- 键 𝐾:形状为 [10, 8, 64]
- 查询、键、值矩阵计算:
2.2 注意力计算(Attention Calculation)
- 输入:查询 𝑄、键 𝐾、值 𝑉,形状为 [10, 8, 64]
- 计算:
- 输出:形状为 [10, 8, 64]
2.3 多头注意力(Multi-Head Attention)
- 输入:每个头的输出,形状为 [10, 8, 64]
- 拼接:将所有头的输出concat起来,形状为 [10, 512]
- 线性变换:
- 权重 𝑊𝑂:形状为 [512, 512]
- 偏置 𝑏𝑂:形状为 [512]
- 总参数量为:
- 权重:512×512=262144
- 偏置:512
- 总计:262144+512=262656
- 输出:形状为 [10, 512]
2.4 残差连接和层归一化(Residual Connection and Layer Normalization)
- 输入:形状为 [10, 512] 的输入加上多头注意力计算得到的输出[10, 512]。
- 输出:形状为 [10, 512]
3. 前馈神经网络(Feed-Forward Network, FFN)
3.1 第一层线性变换
- 输入:形状为 [10, 512]
- 线性变换:
-
- 权重 𝑊1:形状为 [512, 2048]
- 偏置 𝑏1:形状为 [2048]
- 总参数量为:
- 权重:512×2048=1048576
- 偏置:2048
- 总计:1048576+2048=1050624
- 输出:形状为 [10, 2048]
3.2 激活函数
- 输入:形状为 [10, 2048]
- 输出:形状为 [10, 2048]
3.3 第二层线性变换
- 输入:形状为 [10, 2048]
- 线性变换:
- 权重 𝑊2:形状为 [2048, 512]
- 偏置 𝑏2:形状为 [512]
- 总参数量为:
- 权重:2048×512=1048576
- 偏置:512
- 总计:1048576+512=1049088
- 输出:形状为 [10, 512]
3.4 残差连接和层归一化(Residual Connection and Layer Normalization)
- 输入:形状为 [10, 512] 的输入加上前馈神经网络的输出 [10, 512]。
- 输出:形状为 [10, 512]
总参数量(每层)
- 自注意力层:
- 查询、键、值矩阵:787968
- 多头注意力:262656
- 总计:787968+262656=1050624
- 前馈神经网络:
- 总计:2099712
- 每层总参数量:
- 自注意力层 + 前馈神经网络:1050624+2099712=3150336