日期:2025-06-28 10:38:30

从 Transfomer 架构图可以看到,其实在 Encoder 之前还有一个模块,即位置编码模块。不免有同学好奇,为什么需要在 Encoder 输入之前要进行位置的编码呢?其实这也不难理解,通过上面的学习,我们可以发现在做自注意力机制时,它是跟每一个输入的词向量进行内积,在这个过程中,并没有考虑到词向量的顺序,所以这最后得到的结果一定是缺失原来文本的顺序信息的。
Transformer 内部结构
位置信心的 Embedding 通常有两种方式获得,一种是通过训练得到,另一种是直接使用公式,而 Transformer 中的位置信息则是采用了后者 —— 公式获得。计算公式如下:
展开剩余47%针对上面的公式,进行解释一下:pos 代表单词的位置,2i 和 2i+1 则分别代表偶数位置和奇数位置,d 则代表向量维度(和前面单词的 embedding 维度相同),使用该公式有以下几个好处:
使用公式法能够适应比训练集里所有句子更长的句子场景,这么说可能有点绕,举一个例子,假设我们训练的时候,训练集里最长的句子只有 100 个单词,但是现实中我们在推理的时候,可能会存在 101 个单词的场景,这时候呢根据公式就可以计算出 101 单词的位置信息。
可以让模型更容易地计算出相对位置。举一个例子,假设 A 单词的位置是 pos, B 单词和 A 单词之间的位置距离为 L,那么 PE(pos+L) 则可以由 PE(pos) 计算得到。因为 Sin(A+B) = Sin(A)Cos(B) + Cos(A)Sin(B) , Cos(A+B) = Cos(A)Cos(B) - Sin(A)Sin(B)
根据公式得到位置信息后,将单词的 Embedding 信息和位置 Embedding 相加,就可以得到带有位置信息和单词特征信息的向量,而这个向量也正是 Encoder 的输入。
发布于:湖南省广盛网提示:文章来自网络,不代表本站观点。