标准transformer
时间: 2025-01-11 17:47:36 浏览: 32
Transformer模型结构及其工作原理
输入嵌入层
在Transformer模型中,输入序列中的每个token首先被映射到高维向量空间。这个过程通过查找表完成,其中每个词对应一个可训练的向量表示。为了保留位置信息,加入了绝对位置编码[^1]。
编码器堆栈
编码器由多个相同的层组成,每一层有两个子层:一个多头自注意力机制(Multi-head Self-Attention Mechanism),用于捕捉不同位置之间的关系;以及一个简单的全连接前馈网络(Feed Forward Network)。这两个子层都采用了残差连接和层归一化来加速收敛并防止梯度消失问题。
解码器堆栈
解码器同样包含多层重复单元,每层有三个主要组件:掩蔽后的多头自注意机制、编码器-解码器关注力模块以及另一个全连接前馈神经网路。值得注意的是,在第一个子层中应用了未来标记屏蔽技术以确保预测时不依赖后续时间步的信息。
输出线性变换与Softmax函数
经过一系列编解码操作之后的数据会送入最终一层线性转换矩阵乘法运算后再接softmax激活得到概率分布作为输出结果。
import torch.nn as nn
class PositionalEncoding(nn.Module):
def __init__(self, d_model, max_len=5000):
super(PositionalEncoding, self).__init__()
pe = torch.zeros(max_len, d_model)
position = torch.arange(0, max_len, dtype=torch.float).unsqueeze(1)
div_term = torch.exp(torch.arange(0, d_model, 2).float() * (-math.log(10000.0) / d_model))
pe[:, 0::2] = torch.sin(position * div_term)
pe[:, 1::2] = torch.cos(position * div_term)
pe = pe.unsqueeze(0).transpose(0, 1)
self.register_buffer('pe', pe)
def forward(self, x):
return x + self.pe[:x.size(0), :]
相关推荐

















