问题回顾
上一篇 我们讲了大模型是怎么理解人类语言的词汇的。今天继续探究一下,AI大模型师怎么把这些词汇串起来理解的。
Transformer
当前的AI大模型基本是基于Transformer框架的,包括上一篇 讲到的词汇理解在Transformer架构中都有所体现。对于每一位想入坑AI大模型的人,Transformer架构论文Attention is all you need是必读不可的。这对我们理解其他的AI大模型大有裨益。
我们看以上架构图,发现主要有以下几个核心模块:
-
输入层
- Embedding 词嵌入,我们上一篇 讲的词向量就是这一步来的。
- Positional Encodding 位置编码,这也是我们今天着重要讲的重点。
-
Encoder
- MHA,多头注意力机制。也是我们今天要讲的第二个重点。也是Transformer架构的核心的核心。
- FFN,前馈神经网络
- 残差链接+层归一化
-
Deccoder
- 掩码注意力机制
- 交叉注意力机制
- 残差链接+层归一化
- 输出层
- SoftMax
位置编码
我们今天核心看输入层和Encoder,这两部分和AI理解词汇组成的句子关联紧密。我们先看看上一次的例子:
- 输入1:我有一个苹果,它很好
Embedding后,Token为:我 有 一个 苹果,它 很好。首先词向量维度是没有问题的,每个Token的词向量不同,不会产生歧义。
但是,如果是下面这个case呢:
- 输入2:我画了一幅画
Embedding后,Token为:我 画 了 一幅 画。第一个”画“和第二个”画“的词向量矩阵是一样的。那么AI怎么区分动词画和名词画呢?这个时候Positional Encodding应运而生。
-
PE(Positional Encodding)和Embedding共享同样的维度d_model,因为Embedding后的词向量是PE的输入。
-
PE词向量在AI大模型眼里有了顺序,🌰:
- ”我画了一幅画“中前后两个意思不同的画
- 即使是”我有一个苹果“这样无词向量冲突的case,PE对语义理解也至关重要
-
AI大模型中一般使用不同频率的正余弦函数作为位置编码函数
我(pos=0) = [sin(0/10000)^2*0/d_model, cos(0/10000)^2*0/d_model, sin(0/10000)^2*1/d_model, cos(0/10000)^2*1/d_model, ...] // 长度512
画(pos=1) = [sin(1/10000)^2*0/d_model, cos(1/10000)^2*0/d_model, sin(1/10000)^2*1/d_model, cos(1/10000)^2*1/d_model, ...] // 长度512
了(pos=2) = [sin(2/10000)^2*0/d_model, cos(2/10000)^2*0/d_model, sin(2/10000)^2*1/d_model, cos(2/10000)^2*1/d_model, ...] // 长度512
一幅(pos=3) = [sin(3/10000)^2*0/d_model, cos(3/10000)^2*0/d_model, sin(3/10000)^2*1/d_model, cos(3/10000)^2*1/d_model, ...] // 长度512
画(pos=4) = [sin(4/10000)^2*0/d_model, cos(4/10000)^2*0/d_model, sin(4/10000)^2*1/d_model, cos(4/10000)^2*1/d_model, ...] // 长度512
自注意力
词向量让AI理解人类词汇,位置编码让AI对句子中的词汇有了顺序的概念。而最终AI能理解句子还需要自注意力机制。
自注意力机制是Transformer实现上下文理解的核心。其本质是通过Query-Key-Value(QKV)模型,让句子中的每个词动态计算与其他所有词的关联权重。
-
Q(Query) :当前词对上下文的"提问"
- ”有“提问”有”什么,自注意力将“有”和“我有一个苹果”中其他Token
-
K(Key) :其他词的"身份标签",用于匹配Q提出的问题
- “苹果”代表水果(或电子设备)
-
V(Value) :实际携带的信息
- 机器语言内“苹果”所代表的机器语义
通过加权求和,每个词的最终表示会融合全局关键信息。进而让AI能够整体理解这句话的含义。
或者通俗地讲,Transformer让句子中的每个词都“回顾”一下上下文中的所有词,找到对自己理解最重要的信息,然后把这些信息融合起来,形成自己在这个特定语境下的新含义 。对于Tokens:我 有 一个 苹果
- AI会根据词向量矩阵分别计算出Q、K、V三组向量矩阵
- 执行Q(苹果),计算“苹果”的Q向量与句子中所有词(包括它自己)的K向量的相似度,“我”、“有”、“一个”、“苹果”的相关性。在理解“苹果”这个词时,模型认为“有”和它自己“苹果”具备最相关的上下文信息。
- 加权求和生成新表示。将上一步得到的所有权重,分别与对应的V(Value) 向量相乘,并求和。
- 这样生成的新向量,就不再是孤立的“苹果”的语义,而是融合了整句上下文信息的“苹果”——即“我所拥有的那个苹果”。这个新表示**能更准确地反映这个词在当前句子中的具体含义。**当然,每个Token都有一个这样的执行过程。
至此,AI大模型终于完整地理解了人类语言的一句话了。