LLM 系列之 Transformer 组件总结

本博客是LLM学习记录,介绍大语言模型主流架构,包括编码器 - 解码器、因果解码器、前缀解码器架构,还阐述Transformer的标准化、激活函数、位置编码、注意力和偏差等组件,以及语言模型和去噪编码两种预训练任务,最后列出待研究的各算法实现与对比。

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

本系列为LLM 学习博客,会一一记录各个模块解读。
以下内容参考:大语言模型综述 https://github.com/RUCAIBox/LLMSurvey

主流架构

大语言模型,主要的核心组件是Transformer。不同的模型选择的架构不一样,目前主流架构有:

  1. 编码器-解码器架构: 传统Transformer模型是建立在编码器-解码器架构上的,由两个Transformer块分别作为编码器-解码器。目前只有少数LLM 是基于 该架构的 如:Flan-T5
  2. 因果解码器架构: 因果解码器架构采用单项注意力掩码,以确保每个输入标记只能关注过去的标记和它本身。输入和输出标记通过解码器以相同的方式进行处理。典型的model有 GPT1/23, OPT, BLOOM, Gopher.
  3. 前缀解码器架构:前缀解码器修正了因果解码器的掩码机制,以使其能够对前缀标记执行双向注意力,并仅对生成的标记执行单向注意力。这样与编码器-解码器架构类似,前缀解码器可以双向编码前缀序列并自回归地逐个预测输出标记,其中在编码和解码过程中共享相同的参数。实用的建议是不从头开始进行预训练,而是基于训练因果解码器,然后将其转换为前缀解码器以加上收敛。典型的model: U-PaLM (从PaLM 演化来的), GLM-130B.

总结:对于这三种类型的架构,也可以考虑通过专家混合MoE扩展他们,其中每个输入的一小部分神经网络权重被稀疏激活,如Switch Transformer 和 GLaM,已经证明 通过增加专家的数量或总参数大小,可以观察到显著的性能改进。

模型组件

Transformer的四个组件:标准化,位置编码,激活函数,注意力和偏置。

标准化

  • 目的是使得训练稳定。
  • 目前主要采用的有:
    1)LayerNorm:后置LN, 前置LN(损失一定的性能 带来更稳定的训练),Sandwich-LN (基于前置LN,在残差连接之前添加额外的LN 避免数值
### 关于 LLM 中图转换器架构及其实现 #### 图转换器简介 图转换器是一种特殊的神经网络结构,旨在处理具有复杂关系的数据集。这种架构扩展了传统变换器的能力,不仅能够理解线性序列中的模式,还能够在节点之间建立连接并捕捉它们之间的依赖关系。 #### Graph Transformer 的工作原理 Graph Transformer 结合了图形表示学习和自注意力机制的优点,在处理自然语言处理任务时表现出色。通过引入基于邻接矩阵或拉普拉斯矩阵的编码方式来表征输入文本中词语间的关联程度,使得模型可以更好地模拟真实世界里的语义联系[^1]。 #### 实现细节 为了在大型语言模型中应用 Graph Transformer 架构,通常会采用如下方法: - **初始化阶段**:利用预定义的方法构建初始版本的词向量以及对应的边权重; - **消息传递层**:此部分负责更新每个节点的状态信息,它接收来自相邻节点的消息并通过聚合函数计算新的状态; - **读出操作**:最终将所有节点的信息汇总起来形成整个图表征,并用于下游任务预测。 以下是使用 Hugging Face Transformers 库创建一个简单的 Graph Transformer 模型实例代码片段: ```python from transformers import BertModel, BertTokenizerFast import torch.nn as nn class CustomGraphTransformer(nn.Module): def __init__(self, pretrained_model_name='bert-base-uncased'): super(CustomGraphTransformer, self).__init__() # 加载预训练BERT作为基础组件 self.bert = BertModel.from_pretrained(pretrained_model_name) # 定制化图卷积层或其他形式的消息传播模块 def forward(self, input_ids=None, attention_mask=None, adjacency_matrix=None): outputs = self.bert(input_ids=input_ids, attention_mask=attention_mask) sequence_output = outputs.last_hidden_state # 使用adjacency_matrix进行进一步加工sequence_output以完成GCN等功能... return output tokenizer = BertTokenizerFast.from_pretrained('bert-base-uncased') model = CustomGraphTransformer() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值