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

    文章

    4788

    浏览量

    68613
  • Transformer
    +关注

    关注

    0

    文章

    143

    浏览量

    6006
  • pytorch
    +关注

    关注

    2

    文章

    808

    浏览量

    13226

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

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

收藏 人收藏

    评论

    相关推荐

    GPU是如何训练AI大模型

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

    如何训练ai大模型

    训练AI大模型是一个复杂且耗时的过程,涉及多个关键步骤和细致的考量。 一、数据准备 1. 数据收集 确定数据类型 :根据模型的应用场景,确定需要收集的数据类型,如文本、图像、音频等。
    的头像 发表于 10-17 18:17 937次阅读

    FP8模型训练中Debug优化思路

    目前,市场上许多公司都积极开展基于 FP8 的大模型训练,以提高计算效率和性能。在此,我们整理并总结了客户及 NVIDIA 威廉希尔官方网站 团队在 FP8 模型训练过程中的 debug 思路和方法
    的头像 发表于 09-06 14:36 332次阅读
    FP8<b class='flag-5'>模型</b><b class='flag-5'>训练</b>中Debug优化思路

    BP神经网络的基本结构训练过程

    网络结构,通过误差反向传播算法(Error Backpropagation Algorithm)来训练网络,实现对复杂问题的学习和解决。以下将详细阐述BP神经网络的工作方式,涵盖其基本原理、训练过程、应用实例以及优缺点等多个方面
    的头像 发表于 07-10 15:07 4465次阅读
    BP神经网络的基本<b class='flag-5'>结构</b>和<b class='flag-5'>训练过程</b>

    Transformer语言模型简介与实现过程

    任务,随后迅速扩展到其他NLP任务中,如文本生成、语言理解、问答系统等。本文将详细介绍Transformer语言模型的原理、特点、优势以及实现过程
    的头像 发表于 07-10 11:48 1713次阅读

    解读PyTorch模型训练过程

    PyTorch作为一个开源的机器学习库,以其动态计算图、易于使用的API和强大的灵活性,在深度学习领域得到了广泛的应用。本文将深入解读PyTorch模型训练的全过程,包括数据准备、模型
    的头像 发表于 07-03 16:07 1072次阅读

    深度学习的典型模型训练过程

    深度学习作为人工智能领域的一个重要分支,近年来在图像识别、语音识别、自然语言处理等多个领域取得了显著进展。其核心在于通过构建复杂的神经网络模型,从大规模数据中自动学习并提取特征,进而实现高效准确的预测和分类。本文将深入解读深度学习中的典型模型及其
    的头像 发表于 07-03 16:06 1474次阅读

    卷积神经网络的基本结构训练过程

    处理具有空间层次结构的数据时表现出色。本文将从卷积神经网络的历史背景、基本原理、网络结构训练过程以及应用领域等方面进行详细阐述,以期全面解析这一重要算法。
    的头像 发表于 07-02 18:27 883次阅读

    CNN模型的基本原理、结构训练过程及应用领域

    CNN模型的基本原理、结构训练过程以及应用领域。 卷积神经网络的基本原理 1.1 卷积运算 卷积运算是CNN模型的核心,它是一种数学运算
    的头像 发表于 07-02 15:26 3585次阅读

    卷积神经网络的基本原理、结构训练过程

    训练过程以及应用场景。 一、卷积神经网络的基本原理 卷积运算 卷积运算是卷积神经网络的核心,它是一种数学运算,用于提取图像中的局部特征。卷积运算的过程如下: (1)定义卷积核:卷积核是一个小的矩阵,用于在输入图像上滑动,提取局部特征。 (2)滑动窗口:将
    的头像 发表于 07-02 14:21 2604次阅读

    使用PyTorch搭建Transformer模型

    Transformer模型自其问世以来,在自然语言处理(NLP)领域取得了巨大的成功,并成为了许多先进模型(如BERT、GPT等)的基础。本文将深入解读如何使用PyTorch框架搭建Trans
    的头像 发表于 07-02 11:41 1632次阅读

    深度学习模型训练过程详解

    详细介绍深度学习模型训练的全过程,包括数据预处理、模型构建、损失函数定义、优化算法选择、训练过程以及模型
    的头像 发表于 07-01 16:13 1273次阅读

    【大语言模型:原理与工程实践】大语言模型的预训练

    具有以下三个非常显著的特点,一个就是模型参数规模更大,训练数据更多。当然,对计算资源的要求也会更高。 构建强大的语言模型时,模型的选型至关重要,涉及
    发表于 05-07 17:10

    【大语言模型:原理与工程实践】大语言模型的基础威廉希尔官方网站

    全面剖析大语言模型的核心威廉希尔官方网站 与基础知识。首先,概述自然语言的基本表示,这是理解大语言模型威廉希尔官方网站 的前提。接着,详细介绍自然语言处理预训练的经典结构Tr
    发表于 05-05 12:17

    【大语言模型:原理与工程实践】核心威廉希尔官方网站 综述

    的复杂模式和长距离依赖关系。 预训练策略: 预训练是LLMs训练过程的第一阶段,模型在大量的文本数据上学习语言的通用表示。常用的预训练
    发表于 05-05 10:56