0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Transformer模型结构,训练过程

新机器视觉 来源:哈工大SCIR 作者:Alexander Rush 2022-06-20 14:26 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

导读

本文分享一篇来自哈佛大学关于Transformer的文章,作者为此文章写了篇注解文档,详细介绍了模型结构,训练过程并给出了可实现的Transformer的代码。本文仅作为研究人员和开发者的入门版教程。

下面分享一篇实验室翻译的来自哈佛大学一篇关于Transformer的详细博文。

e88aea92-efd1-11ec-ba43-dac502259ad0.jpg

"Attention is All You Need"[1] 一文中提出的Transformer网络结构最近引起了很多人的关注。Transformer不仅能够明显地提升翻译质量,还为许多NLP任务提供了新的结构。虽然原文写得很清楚,但实际上大家普遍反映很难正确地实现。

所以我们为此文章写了篇注解文档,并给出了一行行实现的Transformer的代码。本文档删除了原文的一些章节并进行了重新排序,并在整个文章中加入了相应的注解。此外,本文档以Jupyter notebook的形式完成,本身就是直接可以运行的代码实现,总共有400行库代码,在4个GPU上每秒可以处理27,000个tokens。

想要运行此工作,首先需要安装PyTorch[2]。这篇文档完整的notebook文件及依赖可在github[3] 或 Google Colab[4]上找到。

需要注意的是,此注解文档和代码仅作为研究人员和开发者的入门版教程。这里提供的代码主要依赖OpenNMT[5]实现,想了解更多关于此模型的其他实现版本可以查看Tensor2Tensor[6] (tensorflow版本) 和 Sockeye[7](mxnet版本)

  • Alexander Rush (@harvardnlp[8] or srush@seas.harvard.edu)

0.准备工作

# !pip install http://download.pytorch.org/whl/cu80/torch-0.3.0.post4-cp36-cp36m-linux_x86_64.whl numpy matplotlib spacy torchtext seaborn
e89735fe-efd1-11ec-ba43-dac502259ad0.png

内容目录

准备工作

背景

模型结构

- Encoder和Decoder

- Encoder

- Decoder

- Attention

- Attention在模型中的应用

- Position-wise前馈网络

- Embedding和Softmax

- 位置编码

- 完整模型

(由于原文篇幅过长,其余部分在下篇)

训练

- 批和掩码

- 训练循环

- 训练数据和批处理

- 硬件和训练进度

- 优化器

- 正则化

- 标签平滑

第一个例子

- 数据生成

- 损失计算

- 贪心解码

真实示例

- 数据加载

- 迭代器

- 多GPU训练

- 训练系统附加组件:BPE,搜索,平均

结果

- 注意力可视化

结论

本文注解部分都是以引用的形式给出的,主要内容都是来自原文。

1.背景

减少序列处理任务的计算量是一个很重要的问题,也是Extended Neural GPU、ByteNet和ConvS2S等网络的动机。上面提到的这些网络都以CNN为基础,并行计算所有输入和输出位置的隐藏表示。

在这些模型中,关联来自两个任意输入或输出位置的信号所需的操作数随位置间的距离增长而增长,比如ConvS2S呈线性增长,ByteNet呈现以对数形式增长,这会使学习较远距离的两个位置之间的依赖关系变得更加困难。而在Transformer中,操作次数则被减少到了常数级别。

Self-attention有时候也被称为Intra-attention,是在单个句子不同位置上做的Attention,并得到序列的一个表示。它能够很好地应用到很多任务中,包括阅读理解、摘要、文本蕴涵,以及独立于任务的句子表示。端到端的网络一般都是基于循环注意力机制而不是序列对齐循环,并且已经有证据表明在简单语言问答和语言建模任务上表现很好。

据我们所知,Transformer是第一个完全依靠Self-attention而不使用序列对齐的RNN或卷积的方式来计算输入输出表示的转换模型。

2.模型结构

目前大部分比较热门的神经序列转换模型都有Encoder-Decoder结构[9]。Encoder将输入序列映射到一个连续表示序列。

对于编码得到的z,Decoder每次解码生成一个符号,直到生成完整的输出序列:。对于每一步解码,模型都是自回归的[10],即在生成下一个符号时将先前生成的符号作为附加输入。

e8aa504e-efd1-11ec-ba43-dac502259ad0.jpg

Transformer的整体结构如下图所示,在Encoder和Decoder中都使用了Self-attention, Point-wise和全连接层。Encoder和decoder的大致结构分别如下图的左半部分和右半部分所示。

e8b8348e-efd1-11ec-ba43-dac502259ad0.jpg

2.Encoder和Decoder

Encoder

Encoder由N=6个相同的层组成。

e8c927c6-efd1-11ec-ba43-dac502259ad0.jpg

我们在每两个子层之间都使用了残差连接(Residual Connection) [11]和归一化 [12]。

e8da3818-efd1-11ec-ba43-dac502259ad0.pnge8f4e65e-efd1-11ec-ba43-dac502259ad0.jpge905b722-efd1-11ec-ba43-dac502259ad0.jpg

每层都有两个子层组成。第一个子层实现了“多头”的 Self-attention,第二个子层则是一个简单的Position-wise的全连接前馈网络。

e90f83ec-efd1-11ec-ba43-dac502259ad0.jpg

Dncoder

Decoder也是由N=6个相同层组成。

e918170a-efd1-11ec-ba43-dac502259ad0.jpg

除了每个编码器层中的两个子层之外,解码器还插入了第三种子层对编码器栈的输出实行“多头”的Attention。与编码器类似,我们在每个子层两端使用残差连接进行短路,然后进行层的规范化处理。

e92985d0-efd1-11ec-ba43-dac502259ad0.jpge938dfbc-efd1-11ec-ba43-dac502259ad0.jpge9450a62-efd1-11ec-ba43-dac502259ad0.jpg

3.Attention

e9545bb6-efd1-11ec-ba43-dac502259ad0.jpge9684de2-efd1-11ec-ba43-dac502259ad0.jpge97583cc-efd1-11ec-ba43-dac502259ad0.jpg

“多头”机制能让模型考虑到不同位置的Attention,另外“多头”Attention可以在不同的子空间表示不一样的关联关系,使用单个Head的Attention一般达不到这种效果。

e98bf5d0-efd1-11ec-ba43-dac502259ad0.jpge998afaa-efd1-11ec-ba43-dac502259ad0.jpge9a2f74e-efd1-11ec-ba43-dac502259ad0.jpg

4.Attention在模型中的应用

Transformer中以三种不同的方式使用了“多头”Attention:

1) 在"Encoder-Decoder Attention"层,Query来自先前的解码器层,并且Key和Value来自Encoder的输出。Decoder中的每个位置Attend输入序列中的所有位置,这与Seq2Seq模型中的经典的Encoder-Decoder Attention机制[15]一致。

2) Encoder中的Self-attention层。在Self-attention层中,所有的Key、Value和Query都来同一个地方,这里都是来自Encoder中前一层的输出。Encoder中当前层的每个位置都能Attend到前一层的所有位置。

3) 类似的,解码器中的Self-attention层允许解码器中的每个位置Attend当前解码位置和它前面的所有位置。这里需要屏蔽解码器中向左的信息流以保持自回归属性。具体的实现方式是在缩放后的点积Attention中,屏蔽(设为负无穷)Softmax的输入中所有对应着非法连接的Value。

5.Position-wise前馈网络

e9b135d4-efd1-11ec-ba43-dac502259ad0.jpg

6.Embedding和Softmax

e9c15568-efd1-11ec-ba43-dac502259ad0.jpg

7.位置编码

e9cf8e58-efd1-11ec-ba43-dac502259ad0.jpge9d868c0-efd1-11ec-ba43-dac502259ad0.jpge9e8b4fa-efd1-11ec-ba43-dac502259ad0.jpg

我们也尝试了使用预学习的位置Embedding,但是发现这两个版本的结果基本是一样的。我们选择正弦曲线版本的实现,因为使用此版本能让模型能够处理大于训练语料中最大序了使用列长度的序列。

8.完整模型

下面定义了连接完整模型并设置超参的函数。

e9fda4b4-efd1-11ec-ba43-dac502259ad0.jpg

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 代码
    +关注

    关注

    30

    文章

    4941

    浏览量

    73136
  • Transformer
    +关注

    关注

    0

    文章

    154

    浏览量

    6812
  • pytorch
    +关注

    关注

    2

    文章

    813

    浏览量

    14696

原文标题:搞懂Transformer结构,看这篇PyTorch实现就够了

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    在Ubuntu20.04系统中训练神经网络模型的一些经验

    , batch_size=512, epochs=20)总结 这个核心算法中的卷积神经网络结构训练过程,是用来对MNIST手写数字图像进行分类的。模型将图像作为输入,通过卷积和池化层提取图像的特征,然后通过全连接层进行分类预
    发表于 10-22 07:03

    【「AI芯片:科技探索与AGI愿景」阅读体验】+第二章 实现深度学习AI芯片的创新方法与架构

    运算符用于编码器层和解码器层。 ②LightSeq2采用了混合精度更新进行训练。 ③LightSeq2推出了加速整个Transformer训练过程的方案。 4、基于FPGA的大模型计算
    发表于 09-12 17:30

    算力网络的“神经突触”:AI互联技术如何重构分布式训练范式

      电子发烧友网综合报道 随着AI技术迅猛发展,尤其是大型语言模型的兴起,对于算力的需求呈现出爆炸性增长。这不仅推动了智算中心的建设,还对网络互联技术提出了新的挑战。   在AI大模型训练过程
    的头像 发表于 06-08 08:11 7073次阅读
    算力网络的“神经突触”:AI互联技术如何重构分布式<b class='flag-5'>训练</b>范式

    数据标注服务—奠定大模型训练的数据基石

    数据标注是大模型训练过程中不可或缺的基础环节,其质量直接影响着模型的性能表现。在大模型训练中,数据标注承担着将原始数据转化为机器可理解、可学
    的头像 发表于 03-21 10:30 2305次阅读

    标贝数据标注服务:奠定大模型训练的数据基石

    数据标注是大模型训练过程中不可或缺的基础环节,其质量直接影响着模型的性能表现。在大模型训练中,数据标注承担着将原始数据转化为机器可理解、可学
    的头像 发表于 03-21 10:27 877次阅读
    标贝数据标注服务:奠定大<b class='flag-5'>模型</b><b class='flag-5'>训练</b>的数据基石

    训练好的ai模型导入cubemx不成功怎么处理?

    训练好的ai模型导入cubemx不成功咋办,试了好几个模型压缩了也不行,ram占用过大,有无解决方案?
    发表于 03-11 07:18

    模型训练:开源数据与算法的机遇与挑战分析

    进行多方位的总结和梳理。 在第二章《TOP 101-2024 大模型观点》中,苏州盛派网络科技有限公司创始人兼首席架构师苏震巍分析了大模型训练过程中开源数据集和算法的重要性和影响,分析其在促进 AI 研究和应用中的机遇,并警示相
    的头像 发表于 02-20 10:40 996次阅读
    大<b class='flag-5'>模型</b><b class='flag-5'>训练</b>:开源数据与算法的机遇与挑战分析

    用PaddleNLP在4060单卡上实践大模型训练技术

    手把手教您如何在单张消费级显卡上,利用PaddleNLP实践OpenAI的GPT-2模型的预训练。GPT-2的预训练关键技术与流程与GPT-4等大参数模型如出一辙,通过亲手实践GPT-
    的头像 发表于 02-19 16:10 2130次阅读
    用PaddleNLP在4060单卡上实践大<b class='flag-5'>模型</b>预<b class='flag-5'>训练</b>技术

    如何训练BP神经网络模型

    BP(Back Propagation)神经网络是一种经典的人工神经网络模型,其训练过程主要分为两个阶段:前向传播和反向传播。以下是训练BP神经网络模型的步骤: 一、前向传播 前向传播
    的头像 发表于 02-12 15:10 1463次阅读

    腾讯公布大语言模型训练新专利

    大语言模型训练过程中引入第一摘要文本和第二摘要文本,为模型提供了更为丰富的学习信息。这两个摘要文本在信息量上存在差异,且第一摘要文本中既包含正确语句也包含错误语句。这一设计使得模型
    的头像 发表于 02-10 09:37 713次阅读

    如何使用MATLAB构建Transformer模型

    Transformer 模型在 2017 年由 Vaswani 等人在论文《Attentionis All You Need》中首次提出。其设计初衷是为了解决自然语言处理(Nature
    的头像 发表于 02-06 10:21 5720次阅读
    如何使用MATLAB构建<b class='flag-5'>Transformer</b><b class='flag-5'>模型</b>

    GPU是如何训练AI大模型

    在AI模型训练过程中,大量的计算工作集中在矩阵乘法、向量加法和激活函数等运算上。这些运算正是GPU所擅长的。接下来,AI部落小编带您了解GPU是如何训练AI大模型的。
    的头像 发表于 12-19 17:54 1322次阅读

    AI模型部署边缘设备的奇妙之旅:目标检测模型

    某些类型模型训练过程。 保留稀疏激活:与ReLU类似,Leaky ReLU仍然能够促进稀疏激活,这对模型的学习是有利的。 缺点: 性能提升有限:尽管Leaky ReLU解决了ReLU的一些问题,但在
    发表于 12-19 14:33

    【「大模型启示录」阅读体验】如何在客服领域应用大模型

    地选择适合的模型。不同的模型具有不同的特点和优势。在客服领域,常用的模型包括循环神经网络(RNN)、长短时记忆网络(LSTM)、门控循环单元(GRU)、Transformer等,以及基
    发表于 12-17 16:53

    如何使用FP8新技术加速大模型训练

    利用 FP8 技术加速 LLM 推理和训练越来越受到关注,本文主要和大家介绍如何使用 FP8 这项新技术加速大模型训练。 使用 FP8 进行大模型
    的头像 发表于 12-09 11:30 2073次阅读