传统是堆叠RNN这种自回归模型
引入(因为缺少rnn的时序性)位置编码–输入位置信息
注意力机制–通过注意力分数判断一个词的重要性–即需要关注的力度
求注意力分数:
- q(query–任务内容-----目标序列),k(key-索引),v
- 注意力分数–
query,key的相似度 - 归一化–避免在求相似度(点积)时受到向量大小的影响
归一化后还要通过softmax计算权重
自注意力机制
注意力机制关注不同句子,看他们词与词之间的对应关系
而自注意力机制则是自己与自己比,查看句子中每个单词与单词的关系
query,key和value都变成了一个相同序列
两个词之间注意力分数越高,关联越高(比如代词指代问题)
做一次子注意力只会关注一种关系(还是例如代词指代关系),但是一个句子通常不会只有一种关系(可能还有情感关系),因此只做一次子注意力时不够的
多头注意力
考虑到词之间关系不可能通过作一次注意力就求出来
因此要扩展到使模型以不同的角度关注不同部分
实现—对qkv分别乘上不同的权重,将归一化除上的d-model映射到多个小维度空间(d-k)
由此得到的多个d-k,为多个小维度空间
即对输入的embedding乘上不同的权重参数形成一个组合,以此将其映射到不同的小维度空间,这样一个组合我们称之为头,每个头并行计算自己的注意力分数
transformer结构
Encoder–将原语句进行分析技术,提取特征放入Decoder
但是在加入encoder之前,需要对序列做加工
- word Embedding将序列转换为模型所能理解的词向量----指的是内容信息
- positionEcoding(位置编码)—通过编码放入位置信息
decoder :两个多头注意力层
- masked是子注意力
- 要注意的是这里面是masked带掩码的,即通过三角矩阵的形式,实现t时刻的模型只能观察到直到t-1时刻的词元
- 第二个是比较原语句与目标语句(匹配度),计算注意力分数
Q1:
1. 为什么计算注意力权重之后要和value进行矩阵乘法
1. 将加权后的注意力权重与value进行操作是为了得到最终的注意力输出结果。
在注意力机制中,通过计算注意力权重,我们可以确定在给定的query和key之间,对value的不同部分分配不同的权重。
这些权重反映了query和key之间的相关性或重要性。将这些权重应用于value,可以对value进行加权,以突出与query相关的信息。
通过将注意力权重与value进行操作(矩阵乘法),可以将注意力权重应用于value,从而得到加权后的输出结果。这个输出结果将更加关注与query相关的value部分,同时减少对与query不相关的value部分的关注。这有助于在注意力机制中提取和聚焦于与任务相关的信息,从而提高模型的性能和表现。
B:多少个句子,N:句子有多少个字,d:就是这个字是多少维。
卷积中最后映射成一维bnd,而文本numsteps不定,所以我们要有两层,变成相同的bnd
因为n是可变的,那n跟batch合并,可以保证ffn的dimension d的一致性。可以理解为ffn处理了 n x batch 这样多个token
layer是对每个句子的全部字归一,batch是全部句子的第d个维度归一