【AIGC入门一】Transformers 模型结构详解及代码解析

这篇具有很好参考价值的文章主要介绍了【AIGC入门一】Transformers 模型结构详解及代码解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Transformers 开启了NLP一个新时代,注意力模块目前各类大模型的重要结构。作为刚入门LLM的新手,怎么能不感受一下这个“变形金刚的魅力”呢?

目录

Transformers ——Attention is all You Need

背景介绍

模型结构

位置编码

代码实现:

Attention

Scaled Dot-product Attention

Multi-head Attention

Position-Wise Feed-Forward Networks

Encoder and Decoder

Add & Norm

mask 机制

参考链接


论文链接:Attention Is All You Need

Transformers ——Attention is all You Need

背景介绍

        在Transformer提出之前,NLP主要基于RNN、LSTM等算法解救相关问题。这些模型在处理长序列时面临梯度消失和梯度爆炸等问题,且这些模型是串行计算的,运行时间较长。

        Transformer 模型的提出是为了摆脱序列模型的顺序依赖性,引入了注意力机制,使得模型能够在不同位置上同时关注输入序列的各个部分,且支持并行计算。该模型的提出对深度学习和自然语言处理领域产生了深远的影响,成为了现代NLP模型的基础架构,并推动了attention 机制在各种任务中的应用。

模型结构

【AIGC入门一】Transformers 模型结构详解及代码解析,AIGC

位置编码

        任何一门语言,单词在句子中的位置以及排列顺序是非常重要的。一个单词在句子的位置或者排列顺序不同,整个句子的意义就发生了偏差。举个例子:

小明小王500块

小王小明500块

顺序不同,债主关系就发生变化了😑

        当采用了Attention之后,句子中的词序信息就会丢失,模型就没法知道每个词在句子中的相对和绝对的位置信息。目前位置编码有多种方法:

(1)整型值标记位置,即第一个token标记为1, 第二个token标记为2。。。以此类推

         可能存在的问题:

  • 随着序列长度的增加,位置值会越来越大;
  • 推理的序列长度比训练时所用的序列长度更长,不利于模型的泛化

(2)用[0,1] 范围标记位置

        将位置值的范围限制在[0,1]之内,即在第一种的方法进行归一化操作(除以序列长度)。比如有4个token,那么位置信息就是[0, 0.33, 0.69, 1]。 但这样产生的问题是,当序列长度不同时,token间的相对距离是不一样的。

        因此,一个好的位置编码方法应该满足以下特性:

(1)可以表示一个token 在序列中的绝对位置;

(2)在序列长度不同的情况下,不同序列中token 的相对位置/ 距离要保持一直;

(3)可以扩展到更长的句子长度;

        Transformers 中选择的是sincos编码法,其公式如下所示:

【AIGC入门一】Transformers 模型结构详解及代码解析,AIGC

        其中,pos 是token在sentence中的位置,i是维度。

代码实现:

        假设句子长度是 s, embedding的维度是d, 最终生成的PE的shape是(s, d)。公式的核心是计算, 这里可以借助对数和指数的性质进行如下操作:

        所以可以转换成(可对照代码进行推导理解)

class Position_Encoding(nn.Module):
    
    def __init__(self, max_length, d_model):
        self.max_length = max_length
        self.dim = d_model
        
        pe = torch.zeros(self.max_length, self.dim)
        
        position = torch.arange(0, self.max_length).unsqueeze(1)
        
        div_term = torch.exp( torch.arange(0, self.dim ,2) * (-1) *math.log(10000) / self.dim)
        
        
        pe[:, 0::2] = torch.sin(position * div_term)
        pe[:, 1::2] = torch.cos(position * div_term)
        

    def forward(self, x):
        
        #  input_embedding + position_encoding
        #....

Attention

        Attention 是将query 和key、value映射为输出值,其中query 和 key 计算一个相似度,然后以这个相似度为权重,计算value的加权和,最终得到输出。

Scaled Dot-product Attention

        论文中用的是放缩点乘注意力(scaled dot-product attention),其公式是:

其中, 计算时需要用到的矩阵Q(查询),K(键值),V(值)是输入单词的embedding 变换或者 上一个Encoder block的输出 。注意Q、K、V的shape 会存在一定的联系(因为需要做矩阵乘法运算)。

【AIGC入门一】Transformers 模型结构详解及代码解析,AIGC

        公式中会除以dk的平方根,从而避免内积过大。还有解释是说 softmax 在 绝对值较大的区域梯度较小,梯度下降的速度比较慢。因此希望softmax的点乘数值尽可能小。

        论文中解释了为什么点积会变大。假设q 和 k中的元素满足独立分布,且均值是0,方差为1。点积    的均值是0, 方差是dk 。

Multi-head Attention

        作者发现,相比直接在dmodel 维度上的 q、k、v进行attention计算 ,使用不同的、可学习的linear function 分别地对q、k、v 进行多次映射(映射的维度是dk, dk, dv)  , 然后对每一组映射的q、k、v进行attention 并行计算,并concat得到最终输出。后一种方法更有效。就像卷积层可以用多个卷积核生成多个通道的特征,在Transformers中可以用多组self attention 生成多组注意力的结果,从而增加特征表示。其计算公式和流程图如下:

【AIGC入门一】Transformers 模型结构详解及代码解析,AIGC

【AIGC入门一】Transformers 模型结构详解及代码解析,AIGC

        注意: head的数量 * 每一组head中q的维度 = dmodel (输入Q的维度)

Position-Wise Feed-Forward Networks

        前馈网络比较简单,是一个两层的全连接层,第一层的激活函数是ReLU,第二层不使用激活函数,对应的公式如下所示:

【AIGC入门一】Transformers 模型结构详解及代码解析,AIGC

Encoder and Decoder

       Transformer 从结构上可以分为Encoder 和Decoder 两个部分,这两者结构上比较类似,但也存在一些差异。

【AIGC入门一】Transformers 模型结构详解及代码解析,AIGC

        上图红色区域对应的是Encoder部分,可以看出是由 Input Embedding 、Position Encoding 和6层的EncoderLayer组成。 EncoderLayer 主要包括Multi-head Attention, Add&Norm, Feed Forward ,Add&Norm。

        上图绿色区域对应的是Decoder部分,相比Encoder,需要注意Decoder中的Multi-head Attention 有所不同。首先是Masked Multi-head Attention, 是为了实现串行推理;第二个Multi-head Attention输入的Q、K、V来自不同的地方,其中Q是Masked Multi-head Attention 的输出, K和V是Encoder 的输出。

Add & Norm

        这部分主要由Add 和 Norm 组成,其计算公式如下所示:

【AIGC入门一】Transformers 模型结构详解及代码解析,AIGC

        Add 是一种残差结构,和ResNet中的是一样的,可以帮助网络收敛。Norm 是指Layer Norm。

mask 机制

        Transformers中比较重要的一个知识点就是mask设置。mask主要来源有两个:第一个是填充操作的空白字符(为了保证batch内句子的长度一样会进行padding操作);第二个是因为模拟串行推理需要用到mask(Decoder部分)。

        一般情况下, query 和 key都是一样的,但是在Decoder的第二个多头注意力层中,query 来自目标语言,key来自源语言。为了生成mask, 首先要知道query 和 key中<pad> 字符的分布情况,它们的形状为[n, seq_len]。如果某处是True, 表明这个地方的字符是<pad>。

src_pad_mask = x == pad_idx
dst_pad_mask = y == pad_idx

        为了实现串行推理,即某字符只能知道该字符以及该字符之前的内容,即一个下三角全1矩阵。mask矩阵需要取反,实现方式如下所示:

mask = 1 - torch.tril(torch.ones(mask_shape))

        最后根据<pad>字符分布情况分别将mask对应的行或者列置1。文章来源地址https://www.toymoban.com/news/detail-795025.html

参考链接

  1. GitHub - P3n9W31/transformer-pytorch: Transformer model for Chinese-English translation.
  2. PyTorch Transformer 英中翻译超详细教程 - 知乎
  3. Transformer模型详解(图解最完整版) - 知乎

到了这里,关于【AIGC入门一】Transformers 模型结构详解及代码解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【目标跟踪算法】Strong SORT多目标跟踪模型论文解析+代码详解

    1. Strong SORT算法的背景和概述 Strong SORT算法基于经典的Deep SORT模型,并从目标检测模型、表征特征模型和匹配算法等各个方面对其进行了升级优化。 1.1 表观特征分支的优化算法 对于Strong SORT算法的表观特征分支部分,主要是进行了2方面的优化,一是优化了特征提取器的能力

    2024年02月12日
    浏览(37)
  • 【前后端的那些事】2万字详解WebRTC + 入门demo代码解析

    WebRTC是一项允许网页浏览器进行实时音视频通信的技术标准。旨在实现在浏览器之间直接进行点对点的音频、视频以及数据共享,无需安装任何插件或额外软件。 ICE全称Interactive Connectivity Establishment ,是一种交互式连接框架,他允许两个设备进行p2p通讯。 在进行p2p通讯过程

    2024年03月11日
    浏览(42)
  • Hugging Face快速入门(重点讲解模型(Transformers)和数据集部分(Datasets))

    本文主要包括如下内容: Hugging Face是什么,提供了哪些内容 Hugging Face模型的使用(Transformer类库) Hugging Face数据集的使用(Datasets类库) Hugging Face Hub和 Github 类似,都是Hub(社区)。Hugging Face可以说的上是机器学习界的Github。Hugging Face为用户提供了以下主要功能: 模型仓库(

    2024年01月21日
    浏览(49)
  • 2023MathorcupC题电商物流网络包裹应急调运与结构优化问题建模详解+模型代码(一)

    第三次继续写数模文章和思路代码了,不知道上次美赛和国赛大家有没有认识我,没关系今年只要有数模比赛艾特我私信我,要是我有时间我一定免费出文章代码好吧!博主参与过十余次数学建模大赛,三次美赛获得过二次M奖一次H奖,国赛二等奖。想要了解更多的欢迎联系

    2023年04月17日
    浏览(90)
  • 【AIGC】大模型协作系统 HuggingGPT 深度解析

    欢迎关注【youcans的 AIGC 学习笔记】原创作品 3 月 30日,浙江大学、微软亚洲研究院合作发布了 基于 ChatGPT的大模型协作系统HuggingGPT ,并在 Github 开源了基础代码。 HuggingGPT 将语言作为通用接口、将 LLM 作为控制器,管理现有的人工智能模型。 HuggingGPT 通过 ChatGPT 管理 Hugging

    2023年04月23日
    浏览(40)
  • AIGC - 入门向量空间模型

    标量 (Scalar只是一个单独的数字,而且不能表示方向。从计算机数据结构的角度来看,标量就是编程中最基本的变量。 和标量对应的概念,就是线性代数中最常用、也最重要的概念, 向量(Vector) ,也可以叫做矢量。它代表一组数字,并且这些 数字是有序排列的 。我们用

    2024年02月06日
    浏览(46)
  • 【AIGC】Stable Diffusion的模型入门

    下载好相关模型文件后,直接放入Stable Diffusion相关目录即可使用,Stable Diffusion 模型就是我们日常所说的大模型,下载后放入**webuimodelsStable-diffusion**目录,界面上就会展示相应的模型选项,如下图所示。作者用夸克网盘分享了「大模型」 链接:https://pan.quark.cn/s/bd3491e5199

    2024年02月20日
    浏览(44)
  • 【AIGC扫盲】人工智能大模型快速入门

    人工智能大模型的技术框架主要有以下几种: TensorFlow :这是一个由Google Brain团队开发的开源库,用于进行高性能数值计算,特别是用于训练和运行深度学习模型。TensorFlow提供了一种称为计算图的编程模型,它允许用户定义复杂的计算并自动计算梯度。此外,TensorFlow还提供

    2024年02月20日
    浏览(48)
  • AIGC入门系列1:感性的认识扩散模型

    大家好,欢迎来到AI手工星的频道,我是专注AI领域的手工星。AIGC已经成为AI又一个非常爆火的领域,并且与之前的AI模型不同,AIGC更适合普通人使用,我们不仅可以与chatgpt对话,也能通过绘画模型生成想要的图片。很多朋友都想去深入的了解和掌握AIGC的原理,但是AIGC需要一

    2024年02月03日
    浏览(55)
  • 独家解析:近屿智能的AIGC大模型工程师和产品经理学习路径图

    近屿智能,作为AIGC领域的资深实践者和践行者,结合实战经验亲身打造出了一套业内独一无二的AIGC大模型工程师和产品经理学习路径图,旨在为大模型工程师和产品经理的学习和成长提供一条清晰、高效的进阶之路。 这套学习路径图,将带您从A1到A7,深度掌握AIGC大模型不

    2024年02月19日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包