transformer模型的目标:预测下一个文字
参考文档:https://www.youtube.com/watch?v=wjZofJX0v4M
1、tokens
把内容split成各个片段,片段叫tokens。
对于文本:token通常是单词、单词一部分、或者几个字符的组合。
对于图像:token是某个区域的一部分像素。
对于声音:token是某一段声音片段。
每一个token会对应到一个向量,代表片段的含义。
token词库比较大,比如有5w个。我们通过Embedding matrix进行转换,该矩阵为每个token都分配了一个独立的列。在GPT3中,该matrix达到了12288维。
此时每个token获取了单独的含义,以及它在上下文中的位置信息。
2、Attention
(1)概念
这些token对应的向量信息会经过Attention模块,在该模块中向量间会交互信息,并根据这些信息更新自身的向量值。这样使得每一个向量能获得比单个单词更丰富、更具体的含义。
attention的作用就是:确定上下文中哪些词对更新其他词的意义有关,以及如何准确地更新这些含义。
假设用E代表嵌入向量,我们的目标是通过一系列计算,产生一组新的、更为精细的嵌入向量。比如,这样做可以让名词的嵌入向量,捕捉并融合了与它们相对应的形容词的含义。
这个网络每次只能处理一定数量的向量,这就是所谓的上下文大小Context size。
在GPT-3中,它的训练上下文大小为2048。这意味着,数据在网络中流动时,它是2048列的数组,每列又是1.2w个值。
(2)QKV计算流程
1)Q矩阵的计算
以形容词对名词的影响介绍计算过程。
每个名词在问:有没有形容词在我前面。
对于Fluffy、blue,它们会回答:对,我是一个形容词,我就在那个位置。
每个词会被编码成一组数字,我们称之为这个词的查询向量。这个查询向量的维度比嵌入向量要小得多,比如说128维。
怎么计算这个词的查询向量?
取一个特定的矩阵,将其与嵌入向量相乘。
即:
使用这种方式,将这个矩阵与上下文中的所有嵌入向量相乘,就可以得到每个Token对应的一个查询向量。
该是模型的参数。
2)K矩阵的计算
它同样需要使用一个矩阵与所有嵌入向量相乘,生成键的向量序列。我们可以把Key理解为潜在的查询回答者。
该也是模型的参数。
我们知道,矩阵的作用就是空间的映射,通过和
,我们将1.2w的向量映射到了128维的小空间中,
当K与Q密切对齐时,可以将key视为与query相匹配。比如Fluffy、blue的向量与单词creature的向量紧密对齐。
3)KQ矩阵的计算
为了计算每一对可能的K-Q组合之间的点积。
较大的点意味着较大的点积,即K-Q对齐。
该矩阵计算出了每个单词在更新其他单词含义上的相关性得分的能力。
为了不让矩阵中的值在负无穷到正无穷之间,我们通过对列上的数值进行softmax转化。
4)稳定性处理
我们将所有这些值除以键-查询空间维度的平方根。
5)mask掩码
我们希望同时训练attention涉及的参数。
attention设计原则:不允许后出现的词汇影响先出现的词汇。使用mask方式,将未出现的词的权重设为0,但是又会影响normalization,所以设为负无穷。
6)V矩阵/One head of attention
通过该矩阵,模型能够推断哪些词与其他词相关。
我们接下来希望更新嵌入向量,让词语可以将信息传递给它们相关的其他词。
比如,我希望fluffy的嵌入向量能够使得creature的向量发生改变,从而将它移动到12000维嵌入空间的另一边,以便更具体地表达一个fluffy的creature。
我们的做法是,通过矩阵,让其乘以形容词的嵌入向量,每乘以一次,就会使得creature的嵌入向量发生一次变更。
以下为Value Matrix。需要将每个V向量与该列中相应的权重相乘。比如对于creature,fluffy和blue的权重较大,而其他的值减少为0,或者至少接近零。
为了更新这一列对应的嵌入向量,需要将列中所有这些经过重新调整比例的值加总起来得到。通过
,是一个更加细致和含有丰富上下文信息的向量,比如描绘了一个毛绒绒、蓝色的奇妙生物。
通过对所有列进行处理,形成了一组更为细致且富含信息的嵌入向量序列。
7)QKV组合运算
矩阵大小:
Query:
Key:
Value:
12288*12288=150994944,即1.5亿的参数,矩阵参数过多,为了提升效果,我们为您希望把参数拆分为两部分:
让Value矩阵的参数数量与Key矩阵和Query矩阵的参数数量相同。
通过拆分矩阵,我们将变化的映射矩阵拆分成了2次过程。
低秩转化技术:
通过这种方式,参数量大大减少:
8)Cross -attention技术
以翻译为例:交叉发生在一种语言的文本和正在翻译的另一种语言的文本。
和Self-Attention的区别是:Q和K来自两种语言。
attention的作用是:计算一种语言的哪些词对应另一种语言的哪些词。
在这种情况下,通常不会有mask,因为不存在后面的词会影响前面的词。
9)Multi-headed attention
GPT使用了96个head,每个head的attention产生单独的,最后汇总优化原始的
。
通过多头机制,能让模型有能力学习上下文改变含义的多种不同方式。
10)为什么需要多次Attention
通过多次的attention - multilayer perceptron,一个单词在吸收了一些上下文信息后,仍有机会收到其周围更为细致环境的影响。
在网络中越深入,每个embedding从所有其他embedding中获取的含义就越多,这有助于理解输入的更高级别和更抽象的概念。而不仅仅是描述和语法结构,这些概念可以是情感、语调,是否是一首诗,以及与这个作品相关的基础科学真理。
(3)改进
计算出了context长度的KQ矩阵。
但是受限于context的长度2048。
更有扩展性的方案,使其突破2048的限制。
- Sparse Attention Mechanisms
- Blockwise Attention
- Linformer
- Reformer
- Ring attention
- Longformer
- Adaptive Attention Span
3、Multilayer Perceptron
(1)概念
多层感知机。(前馈层)
这个阶段,向量不再进行相互间的交流,而是并行地经历同一处理。
Attention和Multilayer Perceptron本质上都是大量地矩阵乘法。
Attention和Multilayer Perceptron会重复好多轮,直到核心含义已经被完全融入到序列地最后一个向量中。
我们希望最后输出的每个向量都能吸收足够多的信息,这些信息既来自上下文、输入中的所有其他单词,也来自通过训练植入模型权重的一般知识,从而可以用来预测下一个标记是什么。
所以,通过上面的网络结构,每一个词都编码远远超出一个词的含义的东西。
(2)参数量情况
(3)基础前提
1)两个向量的乘积大于1,说明两个向量相关。
2)通过attetion机制,某个单词可以具有两个单词的含义。
对于Michael Jordan的识别,
最后的向量和First Name Michael和Last Name Jordan的点积值都必须大于等于1。
Michel和Jordan通过Attention机制,使得Jordan具备了Michael的含义。
(4)残差连接
4、softmax
(1)概念
对最后一层的向量进行softmax处理,产生一个覆盖所有可能token的概率分布。
softmax的过程:
softmax with temperature:
当T较大时,分布稍微均匀一点:
当T较小时,分布较为陡峭。
很多平台限制T不大于2,这个没有数学上的依据,只是为了不让AI生成太过离谱的文字。
(2)temperature的作用和原理
temperature(温度)是一个用于控制生成文本随机性的超参数。它主要通过对概率分布的调整来实现对随机性的控制。通过调整 temperature 的值,就可以在模型生成文本时灵活地控制其随机性,以满足不同的应用需求。例如,在生成创意性文本时,可以使用较大的 temperature 来增加多样性;而在需要生成较为确定、准确的文本时,则可以使用较小的 temperature。
语言模型在生成文本时,会基于当前的上下文和模型参数计算出下一个单词或字符的概率分布。通常,这个概率分布是通过 Softmax 函数来计算的。Softmax 函数的定义如下:
解读:
- 引入temperature就是改造了原来的softmax函数
- 假设原来
的值为0.2,0.5,0.3。如果没有T,则3个值虽然有差距,但是对应的指数值区分度并不是特别大。假如T为0.0001,相当于3个数变成了2000,5000,3000,对应的指数值差距就明显拉开了。