实现transformer的总结

本文详细介绍了Transformer模型的构造,包括embedding层、位置编码、self-attention机制、mask处理、多头注意力、残差层和layernorm,以及decoder部分的独特设计。重点阐述了遇到的问题和解决策略。

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

transformer 是当前最新使用模型的基类之一。今天主要介绍transformer的构成,以及在实现这个模型时自己遇到的一些问题。

1 encoder的构成

01 embeding层

可以根据情况,选择是否进行训练。如果在数据预处理阶段,已经训练过词向量矩阵,此时可以选择不训练直接使用。输出生成的维度是(batch,input_seq_len,d_model)

02 position位置

由于transformer的输入没有时序性的关系,所以引入了位置信息。位置信息可以表示一定程度上的时序信息。但是position对于输入向量特征低维度的位置信息,表示能力较强。对于高维度特征信息,作用不明显。

03 self-attention

根据输入信息,分别根据y=W*x 得到3个矩阵。q、k、v矩阵。通过q与k相乘得到attention得分矩阵,表示k上每一个维度信息的得分,可以表示token之间关系的强弱关联性。然后将attention矩阵作用于v矩阵,得到每一个token对应v每一个序列对应特征维度的加和信息。self-attention可以表示token与token之间的关强弱关系,对于长文本也适用。(q和k相乘后需要除以k的开根号维度,因为q和k相乘,往往数字会变化比较大,不能服从原始的分布,为了分布不发生变化,除以根号k的维度)

04 mask

注意,由于输入的batch个序列不一定都是相等的,所以当限制输入的最大长度后,为了计算,有些序列的长度不够最大长度进行了补0操作。但是这些补0的序列,在计算attention的对应索引位置是没有得分的。为了实现这个操作,需要将mask后的矩阵乘以一个负无穷小的数与attention进行加和操作,是的padding部分的得分为0。

06 多头注意力

多头注意力,是把最后一维度的特征数量,分割成为若干份。然后每一份都去算self-attention,然后将分割后的self-attention在合并到原始的维度。这样做的好处是,通过多种不同的注意力方式可以学到token之间的更多的信息。

 

05 残差层和layernorm层

残差层可以避免梯度消失。layernorm可以将每一层的样本信息都符合独立同分布,而使得效果更理想。分别在self-attion之后和ffn之后各添加残差层和layernorm层

06 ffn层

ffn层的作用是,可以表示更多特征之间的非线性关系。

2 decoder的构成

01 输入

区别于encoder输入的部分是,每次只能输入一个时间步的token序列,来预测下一时间步的token。

02 mask

这里有2处mask。第一处为对输入的mask,保证当前时间步后面的序列信息被掩盖掉,在计算双向注意力机制,保证当前时间步之后的序列得分都为0。第二处时间注意力机制为encoder部分的最后一层的输出,保证输出padding部分的注意力得分为0。

03 注意力机制

这里也是计算2处的注意力,第一处为decoder输入部分的自注意力机制,和输入的注意力区别就在于mask部分,保证。当前时间步后面的序列部分都mask掉。

第二处为encoder部分的输出,传入decoder部分,来计算注意力部分的k和v。与decoder第一层注意力输出的部分q。来计算encoder部分和decoder部分的注意力。

04 残差和layernorm

残差层可以避免梯度消失。layernorm可以将每一层的样本信息都符合独立同分布,而使得效果更理想。分别在self-attion之后和ffn之后各添加残差层和layernorm层。

05 ffn层

ffn层的作用是,可以表示更多特征之间的非线性关系。

 

### Transformer模型综述 Transformer 是一种基于自注意力机制(Self-Attention Mechanism)的深度学习架构,最初由 Vaswani 等人在 2017 年提出[^4]。它摒弃了传统的循环神经网络(RNN)和卷积神经网络(CNN),转而采用完全依赖于注意力机制的设计思路,从而实现了并行化训练的能力,大幅提高了计算效率。 #### 主要特点 - **自注意力机制**:允许模型在同一序列的不同位置之间建立联系,捕捉全局上下文信息。 - **编码器-解码器结构**:Transformer 的核心框架分为编码器(Encoder)和解码器(Decoder)。编码器负责提取输入数据的特征表示,解码器则用于生成目标序列。 - **高效性与扩展性**:由于其高度并行化的特性,Transformer 能够轻松处理大规模语料库,并支持参数量的增长以提升性能。 随着研究深入和技术进步,一系列改进版 Transformer 架构相继问世,例如 BERT、GPT 和 T5 等预训练语言模型。这些模型在自然语言处理任务上取得了卓越成果,同时也推动了多模态应用的发展[^3]。 --- ### Transformer 模型未来发展趋势 #### 结构优化 为了降低资源消耗并保持高性能表现,研究人员正在探索更高效的 Transformer 变体。其中包括但不限于稀疏注意力机制、线性化注意力以及动态长度调整策略等方法[^1]。 #### 多模态融合 当前单模态 AI 已经趋于成熟,但真实世界的场景往往涉及视觉、听觉等多种感官协同工作。因此,开发具备跨媒体感知能力的大规模预训练模型成为必然选择之一。此类模型可以通过联合建模图像、视频、音频乃至文本等形式的内容来增强表达能力和泛化水平。 #### 提升效率的方法 除了直接修改原有体系外,还有几种途径可用于加速现有方案或者减少存储需求: - 权重共享:通过让不同间共用部分权重矩阵实现压缩效果; - 量化/混合精度:利用低比特数浮点运算代替高精度版本,在几乎不影响质量的前提下节省内存占用; - 知识蒸馏:将复杂教师网络的知识迁移到较轻便的学生版本里完成部署; - NAS (Neural Architecture Search): 自动寻找最佳超参配置组合达到最优性价比平衡状态; - Task Adapter: 对特定应用场景定制专属插件模块以便快速适配新业务需求[^2]。 #### 面临的主要挑战 尽管前景广阔,但在实际落地过程中仍存在不少难题亟待解决。比如如何有效控制成本的同时维持良好的用户体验;怎样保障隐私安全不被泄露等问题都需要引起高度重视。 ```python import torch from transformers import BertTokenizer, BertModel tokenizer = BertTokenizer.from_pretrained('bert-base-uncased') model = BertModel.from_pretrained('bert-base-uncased') input_text = "This is an example sentence." tokens = tokenizer(input_text, return_tensors="pt") outputs = model(**tokens) print(outputs.last_hidden_state.shape) # 输出最后一隐藏状态维度大小 ``` 上述代码展示了加载 Hugging Face 中预先训练好的 BERT 模型及其分词工具的过程,并演示了一个简单的前向传播操作。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值