使用原文表达如下:the encoder maps an input sequence of symbol representations \((x_1, x_2, \cdots, x_n)\) to a sequence of continuous representations $\pmb z = (z_1, z_2, \cdots, z_n) $. Given $\pmb z $, the decoder then generates an ouput sequence \((y_1, y2, \cdots, y_m)\) of symbols one element at a time.
因此在推理过程中,transformer网络布局中的decoder模块是自回归模式的,不能并行计算。
注: 自回归模式:之前时刻生成的,将作为当前时刻的输入(或此中一部分),并一起用来预测当前时刻的输出。如此循环直至竣事
Attention机制
使用原文表达如下:“An attention function can be described as mapping a query and set of key-value pairs to an output where query, keys, values and output are all vectors. The output is computed as a weightd sum of the values, where the weight assigned to each value is computed by compatibility function of the query with the corresponding key.”
query vector \(q\)
a set of key-value pairs, \((k_1, v_1), \cdots, (k_r,v_r)\)
scores of the query with the corresponding keys \(s_1, \cdots, s_r\)
output vector \(z=s_1v_1 + \cdots + s_rv_r\)
Self-Attention机制
直观理解
以“The animal didn’t cross the street because it was too tired”为例阐明,下面图阐明,是序列中每个单词都与序列中所有的单词都要计算一遍它们之间的某种相似度。而这种计算相似度量与序列中单词顺序无关,因此是可以并行的。
实际计算
创建querys, keys, values
随机初始化三个矩阵\(W_Q, W_K, W_V \in \mathbb{R}^{d \times d}\)(假设矩阵维度都是这样的),也是transformer中需要训练的参数。输入序列特性表示\(x_1, x_2, \cdots, x_n\),按行摆放,就构成了输入特性\(X \in \mathbb{R}^{n \times d}\),那么就将输入的\(n\)个特性序列都转换为对应的\(n\)个query vector, \(n\)个key vector, \(n\)个value vector, 矩阵化表示这些为 Q = X W _ Q , K = X W _ K , V = X W _ V Q=XW\_Q, K=XW\_K, V=XW\_V Q=XW_Q,K=XW_K,V=XW_V
这里的\(Q,K,V\)可以看成都是输入的\(n\)个特性的 不同表示,与原始的特性保持着逐一对应关系,好比\(W_Q, W_K, W_V\)都是单元矩阵,那么\(Q,K,V\)就与\(X\)完全一致了。\(softmax(QK^T)\)就表示了输入的\(n\)个特性两两之间的相似性关系,而输出就是依据这个相似度量矩阵,对value vectors进行加权均匀。因此序列每个位置的输出,都可以看出输入序列转换后表示的加权均匀,加权系数是由当前位置特性与序列所有位置的特性相似度确定的(这里的特性都是转换后的特性),即 z _ i = s o f t m a x ( f r a c Q K T s q r t d ) _ i V z\_i=softmax(\\frac{QK^T}{\\sqrt{d}})\_i V z_i=softmax(fracQKTsqrtd)_iV
从实际计算过程也可以看出encoder是可以并行计算的。更过细的阐明可以参考[1,2]
Encoder Attention层的网络布局
问题1: Transformer中decoder各个层中的,的K,V来着哪里? encoder模块的最后输出,照旧decoder层与coder层对应的K,V呢? 答案1:是Transformer中encoder模块最后输出
起首,原文阐明了这一点(但是decoder中的K,V不便是encoder的输出)
the encoder maps an input sequence of symbol representations \((x_1, x_2, \cdots, x_n)\) to a sequence of continuous representations $\pmb z = (z_1, z_2, \cdots, z_n) $. Given $\pmb z $, the decoder then generates an ouput sequence \((y_1, y2, \cdots, y_m)\) of symbols one element at a time.
其次,参考https://github.com/huggingface/blog/blob/main/encoder-decoder.md图示,很清楚展示了,decoder模块中的,K,V是encoder模块输出\(Z\)经过decoder模块各个层的\(W_{K}^{l}, W_{V}^{l}\)映射得到。
感谢你们的阅读和喜欢,我收藏了很多技术干货,可以共享给喜欢我文章的朋友们,如果你肯花时间沉下心去学习,它们一定能帮到你。
由于这个行业不同于其他行业,知识体系实在是过于巨大,知识更新也非常快。作为一个平凡人,无法全部学完,所以我们在提拔技术的时候,起首需要明确一个目标,然后订定好完备的计划,同时找到好的学习方法,这样才气更快的提拔自己。 这份完备版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】