正/余弦位置编码 Sinusoidal Encoding

1 公式

其中,pos 为词汇在句子中的位置索引;i 为特征维度索引,2i 代表偶数位置,2i + 1 代表奇数位置;d 为特征维度,在传统 Transformer 模型中默认为 512。

2 代码实现

"你", "今天", "好", "漂亮", "啊"\],句子 token 长度为 5,若特征维度为 512,则位置编码矩阵的形状为 (5, 512)。

python 复制代码
# 正/余弦位置编码
class SinusoidalEncoding(nn.Module):
    def __init__(self,
                 d_model: int = 512,
                 max_len: int = 5000,
                 p: float = 0.1) -> None:
        """
        PE(pos, 2i) = sin(pos / 10000 ** (2i / d_model))
        PE(pos, 2i + 1) = cos(pos / 10000 ** (2i / d_model))

        Args:
            d_model: 特征维度,默认为 512
            max_len: 最大句子长度,默认为 5000
            p: 丢弃率,默认为 0.1
        """
        super(SinusoidalEncoding, self).__init__()
        # 初始化位置向量
        pe = torch.zeros((max_len, d_model))
        position = torch.arange(0, max_len).unsqueeze(1)
        # 1 / 10000 ** (2 * k / d)
        div_term = torch.exp(torch.arange(0, d_model, 2) * -(math.log(10000) / d_model))
        # 偶数位置
        pe[:, 0::2] = torch.sin(position * div_term)
        # 奇数位置
        pe[:, 1::2] = torch.cos(position * div_term)
        pe = pe.unsqueeze(0)
        # 缓存
        self.register_buffer("pe", pe)
        # 丢弃层
        self.dropout = nn.Dropout(p)

    def forward(self, x: Tensor) -> Tensor:
        # 截取与词向量相同形状的位置向量,并相加,但位置向量不参与学习,(N, S, E) -> (N, S, E)
        x += Variable(self.pe[:, :x.size(1)], requires_grad=False)

        return self.dropout(x)
相关推荐
MoonOutCloudBack1 小时前
VeRL 框架 RL 微调大语言模型,algorithm.use_pf_ppo 参数详解
人工智能·机器学习·语言模型·自然语言处理
流烟默1 小时前
Python爬虫之下载豆瓣电影图片到本地
爬虫·python
喵手2 小时前
Python爬虫实战:构建“时光机”——网站数据增量监控与差异分析系统!
爬虫·python·爬虫实战·差异分析·零基础python爬虫教学·网站数据增量·网站数据增量监控系统
Katecat996632 小时前
SAR图像火情与烟雾检测:Cascade-Mask-RCNN与RegNetX模型融合详解
python
阿杰学AI2 小时前
AI核心知识98——大语言模型之 Generative AI(简洁且通俗易懂版)
人工智能·语言模型·自然语言处理·aigc·生成式ai·generative ai
禁默2 小时前
零基础全面掌握层次分析法(AHP):Python实现+论文加分全攻略
python·数学建模·matlab
阿杰学AI2 小时前
AI核心知识108—大语言模型之 AI Aesthetics Engineer(简洁且通俗易懂版)
人工智能·ai·语言模型·自然语言处理·aigc·新型职业·ai美学工程师
feasibility.2 小时前
打造AI+准SaaS:中文法律检索分析平台
vue.js·人工智能·自然语言处理·django·sass·web·法律
陈天伟教授2 小时前
人工智能应用- 搜索引擎:06. PageRank 算法
神经网络·搜索引擎·语言模型·自然语言处理·机器翻译