阳江市建设路龙源学校网站,学校网站代码,衡阳商城网站制作,网站动态效果怎么做注意力机制
这可能是比较核心的地方了。
gpt2 是一个decoder-only模型#xff0c;也就是仅仅使用decoder层而没有encoder层。
decoder层中使用了masked-attention 来进行注意力计算。在看代码之前#xff0c;先了解attention-forward的相关背景知识。
在普通的self-atten…注意力机制
这可能是比较核心的地方了。
gpt2 是一个decoder-only模型也就是仅仅使用decoder层而没有encoder层。
decoder层中使用了masked-attention 来进行注意力计算。在看代码之前先了解attention-forward的相关背景知识。
在普通的self-attention 中对于一个长为T的句子对其中第t个单词。需要计算t和句子中所有T个单词的注意力。也就是使用词t的Q向量 q t q_t qt 和 T中的所有单词的key向量 k j , 0 j T k_j, 0jT kj,0jT相乘。得到词t和句子中其他单词的注意力得分。 于是对于词t和当前句子S, 得到了注意力得分向量而后对该向量使用softmax. 标准化的同时得到softmax后的注意力得分。
然后使用 每个词对应的值向量与注意力得分相乘之后再求和 ( v 1 , v 2 , . . . , v T ) ( s c o r e t 1 s c o r e t 2 . . . s c o r e t T ) o u t t (v_1, v_2, ..., v_T) \begin{pmatrix}score_{t1}\\score_{t2}\\... \\score_{tT}\end{pmatrix} out_t (v1,v2,...,vT) scoret1scoret2...scoretT outt 这里要注意 s o c r e t i socre_{ti} socreti 是一个标量值但是 v t v_t vt 是 一个向量长度和词嵌入向量长度相同相加时对每个向量位置元素对应相加。 对于masked-attention呢实际上就是计算注意力得分时候对第t个单词仅仅计算0到t单词的注意力得分t~T 部分的注意力得分不计算计算softmaxs时t之后的部分以初值0代替。 multi-head attention
前面了解了attention基本知识就很好理解多头注意力了。多头注意力实际上就是将单个Q,K,V向量分裂为多个头然后和self-attention一样流程计算每个头的注意力最后得到一个输出向量然后将多个头的输出向量拼接到一起得到最后的输出结果。 比如原本的一个向量长度为 l e n g t h Q l e n g t h K l e n g t h V 168 length_Q length_K length_V 168 lengthQlengthKlengthV168 分裂为12个注意力头之后每个注意力头的QKV向量长度为 l e n g t h Q i l e n g t h K i l e n g t h V i 64 , i ∈ [ 0 , 12 ] length_{Q_i} length_{K_i} length_{V_i} 64, i \in [0,12] lengthQilengthKilengthVi64,i∈[0,12]
然后和分裂的self-attention一样对每个词t的第i个头的Q向量 Q t i Q_{t_i} Qti与其他词的第i个头的K向量 K j i , 0 j t , i ∈ [ 0 , 12 ] K_{j_i}, 0jt, i\in[0,12] Kji,0jt,i∈[0,12] 内积得到注意力得分。
而后和self-attention一样的每一个注意力头的Value向量和该头的注意力得分相乘得到该注意力头的结果。
对于12个头长度为64的attention最后得到12个64长的注意力结果
再将其拼接得到长为768的注意attention forward结果和单个注意力头但是长为768的attention结果相同。