diff --git a/.DS_Store b/.DS_Store index a53d5a8..21c200a 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/assets/.DS_Store b/assets/.DS_Store index 8011be5..5a7cded 100644 Binary files a/assets/.DS_Store and b/assets/.DS_Store differ diff --git a/assets/image-20240503135051251.png b/assets/image-20240503135051251.png new file mode 100644 index 0000000..11fc018 Binary files /dev/null and b/assets/image-20240503135051251.png differ diff --git a/人人都能看懂的Transformer/第五章——多头注意力机制——全流程.md b/人人都能看懂的Transformer/第五章——多头注意力机制——全流程.md index 3bd4ef4..de47be0 100644 --- a/人人都能看懂的Transformer/第五章——多头注意力机制——全流程.md +++ b/人人都能看懂的Transformer/第五章——多头注意力机制——全流程.md @@ -125,3 +125,28 @@ A矩阵里的第一行第二列的值,则是QK矩阵第一行跟V的第二列 也就是最终的矩阵A里面,就是每个文本对所有文本的关注度的总权重(权重总和),并且有64个维度(每个头和每个批次里)。在训练过程中,通过不断的训练后,推理阶段就能得出输入文字中,哪些文字的权重比较高(重要性)。 + + +### 注意力输出结果 + +image-20240503135051251 + +前面我们的矩阵A已经算好了,矩阵A经过Concat合并成一开始的[4, 16, 768]的形状,即12个头都合并到一起。再结果一次W的权重矩阵相乘,最终输出[4, 16, 768]维度的矩阵。 + +> 大家应该也注意到,除了Wo,另外3个W(qkv)都是[768, 768]维度的矩阵,并且,生成的Q、K、V、A都是统一维度的,这样最大的好处是能简化计算(包括代码)以及并行计算。 + +Wq、Wk、Wv、Wo这4个矩阵的值都是不一样的,每个头(以及每个Block里,即我们前面讲到的GPT-3据说有175层)里都是唯一的且只有一份。比如Wq只要是一个头里,不管跟哪个X相乘都是一样的值,除非训练的过程中自动给它调整了。 + + + +### 上亿的参数量是怎么来的 + +> WHAT:大家平时看到的7B、13B模型就代表着70亿、130亿的模型参数的模型。 + +继续上文。也就是说,每个子模块有4个W(Wq、Wk、Wv、Wo)每个768,以及一开始输入的X也会随之改变(X是词向量,前面我们GPT-2输出的是50257,维度是768),且GPT-3据说有175层(Block)。 + +公式为: +$$ +((4*768)+(1*50257*768))*175 = 6,755,078,400 +$$ +上面单单是子模块就有67亿的参数量了,还没包括前馈神经网络的部分(后面会详解),神经网络里也有W权重等需要保存。