本文为《Attention Is All You Need》精读中的一个拓展
论文- 《Attention Is All You Need》
由于transformer模型没有循环神经网络的迭代操作, 所以我们必须提供每个字的位置信息给transformer, 才能识别出语言中的顺序关系。
现在定义一个位置嵌入的概念,也就是现在定义一个位置嵌入的概念, 也就是𝑝𝑜𝑠𝑖𝑡𝑖𝑜𝑛𝑎𝑙 𝑒𝑛𝑐𝑜𝑑𝑖𝑛𝑔, 位置嵌入的维度为[𝑚𝑎𝑥 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒 𝑙𝑒𝑛𝑔𝑡ℎ, 𝑒𝑚𝑏𝑒𝑑𝑑𝑖𝑛𝑔 𝑑𝑖𝑚𝑒𝑛𝑠𝑖𝑜𝑛], 嵌入的维度同词向量的维度, 𝑚𝑎𝑥 𝑠𝑒𝑞𝑢𝑒𝑛𝑐𝑒 𝑙𝑒𝑛𝑔𝑡ℎ属于超参数, 指的是限定的最大单个句长.
注意, 我们一般以字为单位训练transformer模型, 也就是说我们不用分词了, 首先我们要初始化字向量为[𝑣𝑜𝑐𝑎𝑏 𝑠𝑖𝑧𝑒, 𝑒𝑚𝑏𝑒𝑑𝑑𝑖𝑛𝑔 𝑑𝑖𝑚𝑒𝑛𝑠𝑖𝑜𝑛], 𝑣𝑜𝑐𝑎𝑏 𝑠𝑖𝑧𝑒为总共的字库数量, 𝑒𝑚𝑏𝑒𝑑𝑑𝑖𝑛𝑔 𝑑𝑖𝑚𝑒𝑛𝑠𝑖𝑜𝑛为字向量的维度, 也是每个字的数学表达.
好吧,如果这里开始不懂了, 我们就拿我们的例子来看一下子:
论文里面使用了sine和cosine函数的线性变换来提供给模型的位置信息:
上式中p o s pospos指的是句中字的位置, 取值范围是[ 0 , m a x s e q u e n c e l e n g t h ) [0, \ max \ sequence \ length)[0, max sequence length), i ii指的是词向量的维度, 取值范围是[ 0 , e m b e d d i n g d i m e n s i o n ) [0, \ embedding \ dimension)[0, embedding dimension), 上面有s i n sinsin和c o s coscos一组公式, 也就是对应着e m b e d d i n g d i m e n s i o n embedding \ dimensionembedding dimension维度的一组奇数和偶数的序号的维度, 例如0 , 1 0, 10,1一组, 2 , 3 2, 32,3一组, 分别用上面的s i n sinsin和c o s coscos函数做处理, 从而产生不同的周期性变化, 而位置嵌入在e m b e d d i n g d i m e n s i o n embedding \ dimensionembedding dimension维度上随着维度序号增大, 周期变化会越来越慢, 而产生一种包含位置信息的纹理, 就像论文原文中第六页讲的
位置嵌入函数的周期从2 π 2 \pi2π到10000 ∗ 2 π 10000 * 2 \pi10000∗2π变化, 而每一个位置在e m b e d d i n g d i m e n s i o n embedding \ dimensionembedding dimension维度上都会得到不同周期的s i n sinsin和c o s coscos函数的取值组合, 从而产生独一的纹理位置信息, 模