Transformer相关原理

本文介绍了Transformer的基本原理,包括seq2seq模型的构成,RNN的工作机制,以及Attention机制的实现过程,阐述了如何通过Attention让解码器在生成输出时更加聚焦于输入的相关部分。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 一些概念

1. seq2seq模型

seq2seq模型是由编码器(Encoder)和解码器(Decoder)组成的。其中,编码器会处理输入序列中的每个元素,把这些信息转换为一个向量(称为上下文(context))。当处理完整个输入序列后,编码器把上下文(context)发送给解码器,解码器开始逐项生成输出序列中的元素。

在编写seq2seq模型的时候设置上下文向量的长度。这个长度是基于编码器 RNN 的隐藏层神经元
的数量。

如何把每个单词都转化为一个向量呢?我们使用一类称为 "word embedding" 的方法。这类方法把单词转换到一个向量空间,这种表示能够捕捉大量单词之间的语义信息。可以使用预训练好的 embeddings,或者在数据集上训练自己的 embedding。

2. RNN 的机制
由于编码器和解码器都是 RNN,RNN 会根据当前时间步的输入,和前一个时间步的 hidden state(隐藏层状态),更新当前时间步的 hidden state(隐藏层状态)。
解码器持有 hidden state(隐藏层状态),而且需要把 hidden state(隐藏层状态)从一个时间步传递到下一个时间步。


3.Attention 讲解

注意力模型不同于经典的序列到序列(seq2seq)模型,
主要体现在 2 个方面:
首先,编码器会把更多的数据传递给解码器。编码器把所有时间步的 hidden state(隐藏层状态)传递给解码器&#

### Transformer网络架构和工作原理详解 #### 一、整体架构概述 Transformer是一种完全基于注意力机制的神经网络模型,摒弃了传统的RNN/CNN结构。该模型由编码器(Encoder)和解码器(Decoder)两部分组成[^1]。 #### 二、编码器(Encoder) 编码器主要负责处理输入序列的信息提取。其内部包含多相同的模块堆叠而成,每一又分为两个子: - **自注意力机制(Multi-head Self-Attention)**:这是整个Transformer的核心组件之一。通过计算Query(Q),Key(K), Value(V)三个矩阵之间关系来捕捉不同位置上的特征关联度,并利用Softmax函数使得输出更加稳定合理。 - **前馈神经网络(Feed Forward Neural Network, FFN)**:这是一个简单的线性变换加上ReLU激活函数构成的标准MLP结构。值得注意的是,在这两个子之间加入了Layer Normalization以及残差连接技术以提高训练效率并防止梯度消失现象的发生[^2]。 ```python import torch.nn as nn class Encoder(nn.Module): def __init__(self, d_model=512, nhead=8, num_encoder_layers=6, dim_feedforward=2048, dropout=0.1): super().__init__() encoder_layer = nn.TransformerEncoderLayer(d_model=d_model, nhead=nhead, dim_feedforward=dim_feedforward, dropout=dropout) self.transformer_encoder = nn.TransformerEncoder(encoder_layer, num_layers=num_encoder_layers) def forward(self, src): output = self.transformer_encoder(src) return output ``` #### 三、解码器(Decoder) 解码器用于生成目标序列。同样是由多个相同次组成的复杂体系,不过相较于编码器而言增加了第三个子——Masked Multi-Head Attention。这一特殊设计可以有效避免当前时刻之后的信息泄露给前面的时间步长,从而保证预测过程中的因果顺序。 ```python class Decoder(nn.Module): def __init__(self, vocab_size, d_model=512, nhead=8, num_decoder_layers=6, dim_feedforward=2048, dropout=0.1): super().__init__() decoder_layer = nn.TransformerDecoderLayer(d_model=d_model, nhead=nhead, dim_feedforward=dim_feedforward, dropout=dropout) self.embedding = nn.Embedding(vocab_size, d_model) self.positional_encoding = PositionalEncoding(d_model, max_len=5000) self.transformer_decoder = nn.TransformerDecoder(decoder_layer, num_layers=num_decoder_layers) self.fc_out = nn.Linear(d_model, vocab_size) def forward(self, tgt, memory, tgt_mask=None): embedded_tgt = self.embedding(tgt) * math.sqrt(self.d_model) pos_encoded_tgt = self.positional_encoding(embedded_tgt) output = self.transformer_decoder(pos_encoded_tgt, memory, tgt_mask=tgt_mask) prediction = self.fc_out(output) return prediction ``` #### 四、应用领域拓展 除了经典的自然语言处理任务外,Transformers家族成员如Vision Transformers (ViT), Swin Transformers等也被成功应用于计算机视觉等多个跨学科研究方向当中,取得了令人瞩目的成果[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值