Transformer 架构详解

Transformer 架构是由 Ashish Vaswani 和他的同事们在 2017 年的论文《Attention is All You Need》中首次提出的。它在自然语言处理(NLP)和其他序列建模任务中取得了前所未有的成功。Transformer 模型完全基于自注意力机制,摒弃了循环和卷积操作,这使得它在处理长序列数据时具有显著优势,并且能够实现并行化计算。

一、总体架构

Transformer的主要架构由编码器(Encoder)和解码器(Decoder)两部分组成,这两部分都是基于自注意力(Self-Attention)机制构建的。

1、编码器(Encoder)

编码器负责将输入序列(例如,一段文本)转换成一种内部表示,这种表示将被解码器用来生成输出序列。编码器由多个相同的编码器层堆叠而成,每个编码器层包含两个子层:

多头自注意力(Multi-Head Self-Attention):

这是编码器的核心部分,它允许模型在处理序列中的每个元素时,都能够考虑到序列中的其他所有元素。多头机制通过并行处理不同的“表示子空间”,增强了模型捕获序列中不同方面信息的能力。

前馈神经网络(Feed Forward Neural Network, FFN):

这个子层是一个简单的全连接前馈网络,它对自注意力层的输出进行进一步的非线性变换。通常,这个网络由两个线性变换层和一个ReLU激活函数组成。

2、解码器(Decoder)

解码器根据编码器的输出生成目标序列。与编码器类似,解码器也由多个相同的解码器层堆叠而成,但每个解码器层包含三个子层:

掩码多头自注意力(Masked Multi-Head Self-Attention):

类似于编码器中的自注意力层,但增加了一个掩码机制,以确保在生成序列的当前位置时,模型只能关注到已经生成的部分(即,之前的序列位置),而不能看到未来的部分。这是实现自回归生成的关键。

编码器-解码器多头注意力(Encoder-Decoder Multi-Head Attention):

这个子层允

### GPT-2 的 Transformer 架构详解 GPT-2 是基于 Transformer 解码器结构的一种语言模型,其核心架构继承了 Vaswani 等人在 2017 年提出的 Transformer 模型设计思路。以下是关于 GPT-2 中 Transformer 架构的关键特性及其工作原理: #### 1. 多层 Transformer 解码器 GPT-2 使用了一个多层的 Transformer 解码器堆叠结构,每一层都包含了自注意力机制 (Self-Attention Mechanism) 和前馈神经网络 (Feedforward Neural Network)[^1]。这种解码器仅关注输入序列本身,而不像完整的 Transformer 那样同时处理编码器和解码器之间的交互。 #### 2. 自注意力机制 自注意力机制允许模型在不同位置之间建立联系,从而捕捉上下文依赖关系。具体来说,在每一步中,模型会计算当前 token 对其他所有 tokens 的权重分布,并据此生成加权表示。这一过程使得 GPT-2 能够有效地建模长距离依赖关系[^1]。 #### 3. 位置编码 尽管原始 Transformer 使用正弦/余弦函数来定义固定的位置编码方式,但在 GPT-1 及后续版本中(包括 GPT-2),则采取了一种更灵活的方法——将每个位置视为可学习的嵌入向量。这些位置嵌入会在训练过程中与其他参数一起优化调整[^2]。 #### 4. 嵌入层与最终输出 在输入阶段,单词会被映射成对应的词嵌入;与此同时,还会加入上述提到的位置信息作为额外特征维度的一部分。经过若干次迭代之后,最后一层产生的隐藏状态可以直接用于预测下一个最可能的词语概率分布[^3]。 下面是一个简单的伪代码实现片段展示如何构建基本版 transformer decoder 层: ```python import torch.nn as nn class TransformerDecoderLayer(nn.Module): def __init__(self, d_model=512, nhead=8, dim_feedforward=2048, dropout=0.1): super().__init__() self.self_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout) self.linear1 = nn.Linear(d_model, dim_feedforward) self.dropout = nn.Dropout(dropout) self.linear2 = nn.Linear(dim_feedforward, d_model) self.norm1 = nn.LayerNorm(d_model) self.norm2 = nn.LayerNorm(d_model) def forward(self, src): # Self Attention Block sa_output = self.self_attn(src, src, src)[0] sa_output = src + sa_output # Normalization after first sublayer normed_sa_out = self.norm1(sa_output) # Feed Forward Network block ff_output = self.linear2(self.dropout(torch.relu(self.linear1(normed_sa_out)))) output = normed_sa_out + ff_output # Final normalization step return self.norm2(output) ``` 此代码展示了单个变压器解码单元的主要组成部分:一个多头注意模块以及两个线性变换组成的全连接子网路,其间穿插有残差链接和标准化操作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值