当前位置: 首页 > news >正文

NLP:Transformer各子模块作用(特别分享1)

本文目录:

  • 一、Transformer 整体架构图
  • 二、 输入层各子模块
    • **(一)输入嵌入(Input Embedding)**
    • **(二)位置编码(Positional Encoding)**
  • 三、编码器各子模块
    • **(一)多头自注意力机制(Multi-Head Self-Attention)**
    • **(二)前馈神经网络(Feed Forward Network)**
  • 四、 解码器各子模块
    • **(一)掩码多头注意力(Masked Multi-Head Attention)**
    • **(二)编码器-解码器注意力(Encoder-Decoder Attention)**
  • 五、Transformer 各模块协同工作流程
  • 六、各模块的核心作用总结
  • 七、 实际应用中的变体
    • **(一)BERT(仅编码器)**
    • **(二)GPT(仅解码器)**
    • **(三)原始Transformer(编码器-解码器)**
  • 八、总结

前言:Transformer 是深度学习领域的革命性架构,彻底改变了NLP的发展方向。前面分享了Transformer的大概构建思路,本文特别分享Transformer的各子模块作用。

一、Transformer 整体架构图

首先,我们来看Transformer的整体结构,它主要由输入层、编码器、解码器和输出层 四部分组成:

Input → Input Embedding → Positional Encoding → Encoder Stack → Decoder Stack → Output

二、 输入层各子模块

(一)输入嵌入(Input Embedding)

def input_embedding(input_tokens):"""将离散的token转换为连续的向量表示"""# 作用:将词汇映射到高维空间,捕获语义信息# 实现:查找表(lookup table)或神经网络return embedding_matrix[input_tokens]# 示例:将"apple"映射为[0.2, -0.5, 0.8, ...]的256维向量

(二)位置编码(Positional Encoding)

def positional_encoding(embedding):"""为序列添加位置信息(因为Transformer没有RNN的循环结构)"""# 使用正弦和余弦函数生成位置信息# 公式:PE(pos, 2i) = sin(pos/10000^(2i/d_model))#       PE(pos, 2i+1) = cos(pos/10000^(2i/d_model))return embedding + position_matrix# 为什么需要:自注意力机制本身没有位置概念,需要额外添加

三、编码器各子模块

经典的Transformer架构中的Encoder模块包含6个Encoder Block. * 每个Encoder Block包含两个子模块, 分别是多头自注意力层, 和前馈全连接层。

(一)多头自注意力机制(Multi-Head Self-Attention)

class MultiHeadAttention(nn.Module):def __init__(self, d_model, num_heads):"""d_model: 模型维度(如512)num_heads: 注意力头数(如8)"""# 核心公式:Attention(Q, K, V) = softmax(QK^T/√d_k)V# 多头:将Q、K、V投影到多个子空间,捕获不同方面的信息def forward(self, x):# 1. 线性投影得到Q、K、Vq = self.wq(x)  # Query:当前要关注的词k = self.wk(x)  # Key:被关注的词  v = self.wv(x)  # Value:实际的信息内容# 2. 计算注意力权重scores = torch.matmul(q, k.transpose(-2, -1)) / math.sqrt(d_k)attention_weights = F.softmax(scores, dim=-1)# 3. 加权求和output = torch.matmul(attention_weights, v)return output

注意力机制的作用

  • 捕获长距离依赖:直接计算任意两个位置的关系
  • 并行计算:比RNN更高效
  • 可解释性:注意力权重显示模型关注点

(二)前馈神经网络(Feed Forward Network)

class FeedForward(nn.Module):def __init__(self, d_model, d_ff):super().__init__()self.linear1 = nn.Linear(d_model, d_ff)  # 扩展维度(如2048)self.linear2 = nn.Linear(d_ff, d_model)  # 恢复维度self.relu = nn.ReLU()def forward(self, x):# 作用:提供非线性变换,增强模型表达能力return self.linear2(self.relu(self.linear1(x)))
## **(二) 残差连接和层归一化(Add & Norm)**
```python
def residual_connection(x, sublayer):"""残差连接:解决深层网络梯度消失问题"""return x + sublayer(x)  # 原始输入 + 子层输出def layer_norm(x):"""层归一化:稳定训练过程,加速收敛"""return (x - x.mean()) / (x.std() + eps) * gamma + beta

四、 解码器各子模块

经典的Transformer架构中的Decoder模块包含6个Decoder Block. * 每个Decoder Block包含3个子模块, 分别是多头自注意力层, Encoder-Decoder Attention层, 和前馈全连接层。

解码器与编码器结构类似,但注意力层有一些关键区别,如下:

(一)掩码多头注意力(Masked Multi-Head Attention)

class MaskedMultiHeadAttention(nn.Module):def forward(self, x):# 在解码时,不能让当前词看到后面的词# 使用上三角掩码(upper triangular mask)mask = torch.triu(torch.ones(seq_len, seq_len), diagonal=1).bool()scores = scores.masked_fill(mask, float('-inf'))  # 将未来位置设为负无穷return super().forward(x)

(二)编码器-解码器注意力(Encoder-Decoder Attention)

class EncoderDecoderAttention(nn.Module):def forward(self, decoder_x, encoder_output):# Query来自解码器,Key和Value来自编码器输出q = self.wq(decoder_x)  # Query:当前要生成的词k = self.wk(encoder_output)  # Key:编码器的信息v = self.wv(encoder_output)  # Value:编码器的信息# 这让解码器可以关注输入序列的相关部分return attention(q, k, v)

五、Transformer 各模块协同工作流程

def transformer_forward(input_seq, target_seq):# 编码器流程enc_output = input_embedding(input_seq) + positional_encodingfor _ in range(N):  # 6个编码器层enc_output = encoder_layer(enc_output)# 解码器流程  dec_output = input_embedding(target_seq) + positional_encodingfor _ in range(N):  # 6个解码器层dec_output = decoder_layer(dec_output, enc_output)return final_output

六、各模块的核心作用总结

模块英文名主要作用为什么重要
输入嵌入Input Embedding将离散token转为连续向量提供语义表示
位置编码Positional Encoding添加序列位置信息弥补无序列结构的缺陷
自注意力Self-Attention计算词与词之间的关联度捕获长距离依赖关系
多头注意力Multi-Head Attention从多个角度计算注意力捕获不同类型的语义关系
前馈网络Feed Forward非线性变换增强模型表达能力
残差连接Residual Connection直连通道解决梯度消失问题
层归一化Layer Normalization标准化激活值稳定训练过程
掩码注意力Masked Attention防止信息泄露保证自回归生成的性质
编码器-解码器注意力Encoder-Decoder Attention连接输入和输出实现序列到序列的转换

七、 实际应用中的变体

(一)BERT(仅编码器)

# 用于理解任务:文本分类、NER、情感分析
model = TransformerEncoderOnly()
output = model(input_text)  # 得到每个token的表示

(二)GPT(仅解码器)

# 用于生成任务:文本生成、对话、创作
model = TransformerDecoderOnly()
output = model.generate(prompt)  # 自回归生成文本

(三)原始Transformer(编码器-解码器)

# 用于序列到序列任务:翻译、摘要、问答
model = TransformerEncoderDecoder()
output = model.translate(english_text)  # 英译中

八、总结

Transformer的成功在于:

  1. 自注意力机制:彻底解决长距离依赖问题
  2. 并行计算:大幅提升训练效率
  3. 模块化设计:各司其职,协同工作
  4. 可扩展性:易于堆叠更多层数

每个子模块都承担着关键角色,共同构成了这个革命性的架构,为后来的BERT、GPT等模型奠定了坚实基础!

今天的分享到此结束。

http://www.dtcms.com/a/348486.html

相关文章:

  • Python JSON数据格式
  • 禁用 Nagle 算法(TCP_NODELAY)
  • 【数据结构】-5- 顺序表 (下)
  • 谷德红外温度传感器在 3D 打印领域应用探究
  • 【小程序-慕尚花坊02】网络请求封装和注意事项
  • 序言|从《Machine Learning: A Probabilistic Perspective》出发:我的学习实践
  • 16、web应用系统分析语设计
  • 经营分析的价值不在报告厚度,而在行动颗粒度
  • .NET反射与IL反编译核心技术
  • 关于 svn无法查看下拉日志提示“要离线”和根目录看日志“no data” 的解决方法
  • Rust Web开发指南 第三章(Axum 请求体解析:处理 JSON、表单与文件上传)
  • 【Python NTLK自然语言处理库】
  • 数学建模-线性规划(LP)
  • GPT-5国内免费体验
  • 【Android】从一个AndroidRuntime看类的加载
  • Unreal Engine 下载与安装全指南:从入门到配置详解
  • 淘宝API实战应用:数据驱动商品信息实时监控与增长策略
  • 13种常见机器学习算法面试总结(含问题与优质回答)
  • 【209页PPT】P2ITSP新奥IT战略规划架构设计报告(附下载方式)
  • Python基础之运算符
  • Vue3 学习教程,从入门到精通,基于 Vue3 + Element Plus + ECharts + JavaScript 开发图片素材库网站(46)
  • 塔能科技物联精准节能如何构建智慧路灯免疫系统
  • 【软考选择】系分和架构哪个好考?适合什么样的人?
  • 简历书写指南
  • [创业之路-560]:机械、电气、自控、电子、软件、信息、通信、大数据、人工智能,上述技术演进过程
  • Linux shell脚本数值计算与条件执行
  • 基于php的萌宠社区网站的设计与实现、基于php的宠物社区论坛的设计与实现
  • 手写MyBatis第32弹-设计模式实战:Builder模式在MyBatis框架中的精妙应用
  • Wagtail CRX 的 Latest Pages Block 高级设置 模版v3.0 以后被阉割了
  • 基于深度学习的阿尔茨海默症MRI图像分类系统