TR5 - Transformer的位置编码



前言

在NLP任务中,单词的序列顺序是非常重要的,将单词的顺序重新排列,整个句子的意思可能会发生改变。在RNN循环神经网络中,有着处理序列顺序的内置机制。Transformer通过引入位置编码机制来保存文本中字符的位置信息。

什么是位置编码

1. 定义

位置编码记录了文本中字符的位置信息,它并没有使用单个数字(例如索引值)的形式来记录位置信息。原因主要有:

  1. 对于长序列,索引的大小可能会变得很大,不利于存储。
  2. 将索引值规范化到0-1之间,可能会为可变长度序列带来问题(它们的标准化方式不同)。

Transformer使用智能位置编码方案,第个位置/索引都映射到了一个向量,所以位置编码层的输出明天是一个矩阵,其中矩阵的每一行代表序列中的一个编码对象与其位置信息相加。
将位置信息映射成向量

2. 三角函数

正弦函数的值域为[-1, 1],可以等效地使用正弦函数或余弦函数。
正弦、余弦波形

3. 位置编码公式

假设你有一个长度为L的输入序列,要计算第K个元素的位置编码,可以由不同频率的正弦和余弦函数给出:

P ( k , 2 i ) = s i n ( k n 2 i / d ) P(k, 2i) = sin(\frac k {n^{2i/d}}) P(k,2i)=sin(n2i/dk)

P ( k , 2 i + 1 ) = c o s ( k n 2 i / d ) P(k, 2i + 1) = cos(\frac k {n^{2i/d}}) P(k,2i+1)=

### Transformer模型的源码实现 在探讨Transformer模型的具体实现之前,了解其核心组件至关重要。Transformer架构依赖于自注意力机制来处理输入序列中的不同位置之间的关系[^1]。 对于引入复制注意机制(Copy Attention)的情况,在Transformer基础上进行了扩展,允许从输入源代码中直接复制单词而不是仅限于生成词表中存在的词汇项。这种改进特别有助于提高总结性能,尤其是在涉及罕见标记(如函数名、变量名)的情况下。 下面展示了一个简化版基于PyTorch框架下的`Generator`类定义,该部分负责将解码器输出转换成最终预测的概率分布: ```python import torch.nn as nn class Generator(nn.Module): """Define standard linear + softmax generation step.""" def __init__(self, d_model, vocab_size): super(Generator, self).__init__() self.proj = nn.Linear(d_model, vocab_size) def forward(self, x): return nn.functional.log_softmax(self.proj(x), dim=-1) ``` 此段代码展示了如何通过线性变换和softmax操作完成从隐藏状态到目标词汇概率分布映射的过程[^2]。然而这仅仅是整个Transformer结构的一小部分;完整的实现还包括编码器(encoder),解码器(decoder),以及多头注意力(multi-head attention)等模块的设计与集成。 为了获得更全面的理解并查看完整版本的Transformer源码实现,建议查阅官方文档或是开源项目仓库,例如Hugging Face Transformers库提供了详尽且经过优化的各种变体Transformer模型实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值