📕参考:大模型研讨课第一期:Why LLMs?、模型结构1(共10期)_哔哩哔哩_bilibili
(本系列是课程笔记)
NLP呢,是对文本进行处理,学习里面蕴含的信息,然后使模型可以自动化处理一些文本。
文本呢,可以把它看成一组序列数据。它是由词元序列(token)序列组成的。
语言模型,就是估计序列出现的概率分布。
eg:已经知道前边几个词是“中国的首都是”那后两个词预测是“北京”的概率。
常见的模型结构有:seq2seq、attention 、scaled dot-product attention、self-attention、multi-head attention。
Seq2Seq
Seq2Seq:Sequence-to-Sequence,序列到序列模型
应用:将一种时序数据转换为另一种时序数据
eg:机器翻译、对话、自动文摘
Seq2Seq的结构:
(1)由编码器(encoder)和解码器(decoder)两部分组成
(2)编码器根据输入数据生成语义编码
(3)解码器根据该语义编码输出处理结果
(4)Seq2Seq模型适用于输入序列和输出序列不等长的情况
传统Seq2Seq模型通常使用RNN或LSTM作为编码器和解码.
但是RNN的缺点,并行度差、且当序列很长时,序列靠前的信息容易丢失。
编码器把输入编码成固定长度的语义编码。
问题:(1)固定长度的语义编码难以存储较长的输入序列的所有信息,严重影响模型性能。
(2)语义编码中每个元素权重相同,模型无法区分各个元素的重要程度。
为了解决以上问题,提出了注意力机制。
注意力机制
注意力机制可以抽取少量重要信息,并聚焦于这些重要信息,忽略不重要的信息。
注意力机制可以有效提升基于RNN的Seq2Seq模型的信息处理能力。
1.先用注意力机制计算注意力得分
2.加权求和 注意力汇聚,就计算出了最终的 e(i)
每一步会聚焦不一样的词。
当我翻译第一个词(AI )的时候,“智能”的注意力得分会比较高。
当翻译第二个词(computing)的时候,“计算”的得分会比较高。
注意力机制:缩放点积注意力(Transformer里使用的)
Transformer中的注意力:缩放点积注意力(Scaled dot-product attention)
key和value成对,key是value 的代表。
计算 query和key的相似度,比直接计算query和value的相似度更高效。
query相当于要查找的书中的关键词,value是书里的内容,key是书的ISDN码。
匹配q和k,比匹配q和v容易的多。
看下边的理解:⭐因为K 和V 是相同的,所以可以理解为:我先用V的分身去和Q计算一下相似度,我就知道应该关注V的哪一部分了,然后再用V的注意力权重 加权求和 ,最后得到output。
具体计算过程:
1.计算Q和K的点乘(Q和K的相关关系)
2.经过尺度变换scale、掩码Mask和Softmax等归一化处理,得到权重矩阵(注意力打分)
3.将权重矩阵与V相乘(注意力汇聚)
以上是 缩放点积注意力。
注意力机制:自注意力
自注意力:
输入:查询Q、键K、值V都来源于同一组输入。
特点:擅长捕捉数据内部的相关性。
Q K V 的输入是来源于同一个矩阵I,然后对它们乘不同的矩阵得到的
这样可以捕捉输入内部的相关关系。
1.最下边一层是 I 的embedding
2. 对 I 乘不同的矩阵 就得到了 Q K V
3.然后 Q乘K 缩放 ,再乘 V 得到了最终的输出
这个可以关注输入序列内部自身的一些信息。
注意力机制:多头注意力
多头注意力(multi-head attention):基于相同的注意力机制学习不同的知识,再进行组合
类比:卷积中的多通道, 从不同的表示子空间中学习到不同的信息,再融合起来
理解成有很多个通道,每个通道的W 不同,这样就会得到不同的QKV,这个计算过程是并行的。最后将 h 组注意力结果拼接在一起,并进行线性映射。
【矩阵相乘】:一行乘一列 再乘以次数 所以自注意力:n^2 d
序列操作数:输出一个点,需要序列计算多少次。
自注意力:一次
卷积:一次
RNN:需要迭代计算整个序列,O(n)
最大路径长度:任意两个点,传递信息需要的路径长度。
它的复杂度理解为传多少次。
卷积:【暂时还理解不了】、
Q、K、V矩阵的理解
Q K V 是什么?
Q K V其实都是向量。
Q是查询向量,K是关键向量,V代表数值向量。这三个向量是通过线性变换从原始输入向量(通常是词嵌入表示)得到的。
-
Q代表的是query查询,后续会和每一个k进行匹配,找到最相似的k
-
K代表的是key关键字,后续会被每一个q匹配
-
V代表的是value,代表从输入中提到的信息
注意:每一个key,都对应一个value;计算query和key的匹配程度就是计算两者相关性,相关性越大,代表key对应value的权重也就越大,这就是不同信息的权重不一样,这就是注意力机制!
理解:Query 和 Key 用于计算相关性,Value 用于聚合信息。
1. Query (Q)
-
Query 表示当前需要关注的输入位置。
-
在注意力机制中,Query用于与所有位置的Key进行匹配,计算注意力权重。
-
可以理解为“我想要找什么信息”。
2. Key (K)
-
Key 表示输入序列中每个位置的“标识符”。
-
Key与Query的点积用于计算注意力权重,反映当前位置与其他位置的相关性。
-
可以理解为“我能提供什么信息”。
3. Value (V)
-
Value 表示每个位置的实际信息。
-
注意力权重与Value的加权和生成最终的输出,表示当前位置的上下文信息。
-
可以理解为“我实际包含的信息”。
举例说明
比如说 “我爱中国”这句话经过计算输出。
-
Query (Q):当前需要关注的目标(如
"爱"
)。 -
Key (K):用于与 Query 计算相似度的特征(如
"我"
、"爱"
、"中国"
的 Key)。 -
Value (V):每个词的实际信息(如
"我"
、"爱"
、"中国"
的 Value)。
通过计算 Query 和 Key 的相似度,得到注意力权重,然后用权重对 Value 加权求和,得到最终的输出。
感觉,Q是当前关注的词的向量,K是这个句子里每个词的向量,Q和K分别计算一下相似度,就知道 【我要查的词】 和这个句子里的哪个词相似度最高了,这几个词的注意力得分最高,那么在这个句子里 它们和我要查找的东西最有关系,最后在加权求和,就能得到这个句子调整过注意力后,最终要输出的东西。
⭐因为K 和V 是相同的,所以可以理解为:我先用V的分身去和Q计算一下相似度,我就知道应该关注V的哪一部分了,然后再用V的注意力权重 加权求和 ,最后得到output。