大模型回答问题的本质上是一个模拟人类的预测能力,但其本质是一个一个字的分类问题,也就是说,它每生成一个词或字都是一次分类。(看你在模型里怎样定义一个向量)
对于自然语言处理(NLP),举一个Transformer模型中机器翻译的例子,把“机器学习”翻译成“machine learning”。
它首先通过将“机”“器”“学”“习”四个字变成4个向量:
输入模型,然后通过考虑这四个字的信息,生成(输出)一个新的向量,然后将这个向量进行分类,得到
(有多少个英文单词就有多少个类,这里假设按英语单词分类),然后生成
的这个machine单词继续和前面的“机器学习”做交叉注意力计算,再次输出(生成/分类出)第二个单词“
”,然后接着将这个
向量和前面的
向量做注意力计算,生成新的向量,将这个新的向量作为查询对象再次和前面的“机器学习”4个向量做交叉注意力计算,此时会输出(生成/分类出)第三个单词“
”这个结束符号,此时程序结束运行。
对于计算机视觉(CV),例如最简单的图片分类任务,你会看到,ViT模型把Transformer的Decoder去掉了,为什么去掉呢?因为输入一张图片后,它只需要分类一次就结束任务了,就相当于上面只生成了一个单词就任务完成了,当然也就不用Decoder来循环通过生成的新向量和输入的原向量进行交叉注意力计算了。也就是说,Decoder部分旨在参考新生成的单词的信息特征,和源输入单词句子进行综合考量,以此进行下一次输出(生成/分类)。
我们再来看,为什么一张图片要分成多个patch,这里有什么玄机?在NLP中,我们很好理解,一个字或一个单词就是一个向量,那么在CV中,我们是否也可以以此对比来看,或许我们能有点启发。例如,一个句子的意思是由多个单词组成的,随着一个个字的增加,这个句子的意义也慢慢地稳定下来,那么一张图片是否也可以是由多个碎片图片拼接而成,随着逐渐增多,这个图片的类别也被确定下来。
一个字词一般和它最相关的字词同时在文本中出现,就比如金庸小说中,“郭靖”和“黄蓉”这两个词最相关,“杨过”和“小龙女”这两个词也最相关,相比较“黄蓉”和“小龙女”反而相关度不高。
同样,一张图片的patch一般和这张图片的其它相邻的patch最相关,并且严格来说,是这个“猫猫”的图片的一个部分和其它部分相关,例如眼睛和鼻子和耳朵相关,而眼睛和这个图片的背景patch则没有什么关系。所以,当一个猫猫的照片出现在不同的地方时,眼睛和鼻子有很强的相关性,而背景因为经常变化,也就没有规律可言,也就是说,眼睛和背景(例如白云)没有什么相关性。
因为每次一张图片都有这种类型的耳朵和鼻子,经过多轮的迭代,在注意力机制上算出的值就越来越大,通过多个Encoder的堆叠,模型越来越会关注更加抽象的特征。只要数据量足够大,就可以找到所有patch中的相关性,而把不相关的排除出去。
在ViT模型中的表现就是,把一张猫咪的图片分成196个patch(14*14个),CLS 这个Token是可学习的变量,就相当于CNN中卷积核,通过它依次与其它patch进行注意力计算(点积),越相关,值越多,即余弦值越大,在坐标轴上表现就是两向量靠的近。
其实这就是一个特征融合的过程,这196个向量因为是一张图片分割开来的,按理说,有猫咪特征的patch,在高维空间的表示更集中。此时,我们可以通过注意力机制的计算,越相似,权重越大,我们越需要这个信息。当参考了所有patch的信息最终融合出了一个向量,这个融合的向量就根据向量的加减来进行更新。在高维空间的坐标轴表示上就是不断移动微调到了最符合它的位置。
什么是注意力机制?
人(Q)查询一张图(K)。每个人关注的重点不同。
也就是说,这个人的查询向量Q的维度里的值的不同决定了后来查询出来的东西,就很像一个的三观,有什么世界观就看到什么世界K,有什么价值观就感受到什么是有价值,还是无价值的,有什么人生观,就认为什么人生是有意义的还是无意义的。
既然这么重要,那么我这个查询向量是是什么呢?我关注的是什么呢?
通过计算我的这个向量和事物的向量之间的相似度,也就是说,我眼中有什么,就只能看到什么。一个事物有多个维度,包含很多维度的信息。例如一个人,有颜值,有身高,有学历,有家境,有修养等等维度,你看重哪个维度呢?如果是公司可能更看重其学历,如果是。
例如我看到这张图片,这里每个像素都算是一维的,更多关注到的是这张图片的红色区域的信息维度,而绿色区域则没有太多的关注,白色区域的信息则被我完全忽略了。当然,如果这张图片像素太多,可以转换(映射)成其他更加低阶的维度。
下面通过举一个向量的例子来说明(Q,K,V这3个向量现在各只有一个向量,如果多个向量,就是批次操作)
通过Q*K,获得关注值,然后通过softmax进行归一化,获得对这张图片每个维度的关注值(权重)
(Q中的一个向量的有n个维)
然后把这个每个维度上的权重再对应乘上这个值K,获得加权后的值,我们叫注意力,Attention。当然这个这个K可以是V,但是这个K一定和V有一定的关系。
此时,我们拿到了最后经过我们的世界观看到的图片(或文本)的信息。
我们用一张猫咪的图片来直观解释 ViT 中的自注意力过程:
假设我们有一张猫咪这样的图片:(请脑补)
步骤一:把图片切成 patch(小块)
比如这张图片是 像素,我们把它切成
的 patch,就会得到
个 patch。每个 patch 看起来像下面这样:
[Patch 1] [Patch 2] [Patch 3] ... [Patch 14]
[Patch 15] [Patch 16] ... [Patch 28]
...
[Patch 183] ... [Patch 196]
每一个小 patch 就像一个“词”一样,是 ViT 中的信息单位。
步骤二:每个 patch 转成一个向量(进入高维空间)
每个 patch 被展平并映射成一个向量,比如维度为 768。这就相当于你把原图的一个区域,转成了一个点 :
此时,猫耳朵、眼睛、鼻子、背景等都变成了不同的点,分别散布在一个高维空间中。
步骤三:进入自注意力机制
每个 patch 的向量 通过矩阵映射生成三组向量:
通俗解释注意力:假设你是“猫耳朵”patch
你是“猫耳朵”patch(假设是 Patch #35),你需要决定自己在这个图像理解任务中该关注谁?
你会:
-
拿自己的 Query 向量(
);
-
去和每个其他 patch 的 Key 向量做点积,看看谁和你“更相关”;
-
比如你发现“猫脸”(Patch #44)和“背景”(Patch #180)都和你有关,但猫脸更相关;
-
然后你通过 softmax 得到一个注意力分布(比如你给猫脸 0.6,给背景 0.1);
-
用这个分布去加权别人提供的信息(他们的 Value 向量):
在高维空间的含义
每个 patch 原本是一个向量 ,经过注意力机制后,它被更新为:
也就是说,这个 patch 的表示不再只包含它自己,而是融合了全图中相关区域的信息。
你可以想象,每个点 在高维空间中的位置被“拉动”了——往相关 patch 的方向靠近,从而更新为新的位置
。
直观类比:
每个 patch 向其他 patch 发出“注意力射线”,每个 patch 说:“我是谁?”然后通过“注意力射线”从其他地方收集信息来更新自己。
总结:整个过程在做什么?
| 阶段 | 含义 |
|---|---|
| 切 patch | 把图像离散成局部区域(词) |
| 映射向量 | 每个 patch 映射成高维点 |
| 自注意力 | 每个 patch 根据 Query 判断自己该向谁要信息(Key),从而更新自己(通过加权 Value) |
| 高维更新 | 每个 patch 的表示被更新为全局融合后的表示,更懂全局上下文 |
自注意机制
通过计算我和外部世界这两个事物的相似度,这个人就被我打上了标签,给他进行了某个方面特别的关注。本质上就是两个文本之间的匹配关系。所以,基于这个机制,后面才会有自注意力机制,通过计算这句话中的每个词之间的相关性。这里的自是在句子层面上说的,意思是一句话中内部的。在词与词层面上看,还是两个事物的注意力。
你问,这当然很好,那我的X和Q是什么关系?我又怎么样知道我的原本Q值呢?
其实上面我们一直把Q当成了我的X,其实他们本质就是一回事。所以,才会出现自注意力机制。我的内容是什么,我就和什么最相识,我就关注什么。比如,“我爱你。”这句话,和“我刚出完中午饭。”这两句话,几乎不相关。“我爱你”这句话最相关的一定是“我爱你”,和“我喜欢你”这句话也有点相关,尽管不是那么相关。
所以,我们的自注意机制就是关注我们本身的数据。一切都可以转换成文本(数据,向量),和外界的就没怎么关系了。
没关系,你的Q是经过训练出来的。你的Q一定符合你提供的整个大数据这个数据分布的函数,即,只不过你不知道这个函数是什么罢了,而神经网络干的事情就是通过训练,即数据拟合来找出这一个近似的函数。
最后,这个Q和我提供的一张照片,即输入变量X(或一句话)是相等的还是不相等,这里按理说,是相等的,其实Q,K,V都是X的线性变化,我们这里就叫做X的权重了。
把它们看成是一个黑盒子,我们只能看到输入X,然后输出Y。
大模型的注意力机制
而我们的大模型LLM,则是把所有的人类关注都考虑进去了,因为给它提供的数据是世界知识,如果理想情况下,可以把整个互联网产生的数据全部拿来训练,那这个训练出来的函数,当然符合一般人的关注点。
随便给它输入一句话X,它就能生成一段与你这句话很相关的回答。基于给定的句子中的信息,我能知道和你这个句子最相关的信息的句子。
因为句子中的每个词都与它整个句子中的其它的词汇有关系。它能记住这句话中每个词汇之间的细微关系。
如果这句话是整个文本,例如一本金庸小说,它就能计算出整个文本中每个词汇之间的信息。那么你提问关于这个小说的信息,他就能通过它来计算出每句话和它最相关的句子,给你最相关的回答。
在这个函数中(模型中)已经包含了所有句子的相关性,从某种程度上看,它可以说已经掌握了人类语言的语法规则了,不过这个规则很复杂,只能用一个模型还拟合整合这个函数(规则)。









网友评论