一文搞懂 Transformer(总体架构 三种注意力层)

server/2024/10/11 9:28:06/

本文将从Transformer的本质、Transformer_的原理_、_Transformer的应用__三个方面,带您一文搞懂Transformer(总体架构 & 三种注意力层)。

图片
节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。

针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。

总结链接如下:《大模型实战宝典》(2024版) 正式发布!


一、Transformer 的本质

Transformer的起源:Google Brain 翻译团队通过论文《Attention is all you need》提出了一种全新的简单网络架构——Transformer,它完全基于注意力机制,摒弃了循环和卷积操作。

图片

注意力机制是全部所需

主流的序列转换模型RNN:Transformer出来之前,主流的序列转换模型都基于复杂的循环神经网络(RNN),包含编码器和解码器两部分。当时表现最好的模型还通过注意力机制将编码器和解码器连接起来。

图片

Transformer vs RNN

循环神经网络(RNN)、特别是长短时记忆网络(LSTM)和门控循环单元网络(GRU),已经在序列建模和转换问题中牢固确立了其作为最先进方法的地位,这些问题包括语言建模和机器翻译。

图片

RNN LSTM GRU

RNN编码器-解码器架构存在一个显著的缺陷:处理长序列时,会存在信息丢失。

编码器在转化序列x1, x2, x3, x4为单个向量c时,信息可能丢失。因为所有信息被压缩到这一个向量中,增加了信息损失的风险。解码器从这一向量中提取信息也很复杂。

图片

RNN编码器-解码器架构

注意力机制:一种允许模型在处理信息时专注于关键部分,忽略不相关信息,从而提高处理效率和准确性的机制。它模仿了人类视觉处理信息时选择性关注的特点。

图片

注意力机制

当人类的视觉机制识别一个场景时,通常不会全面扫描整个场景,而是根据兴趣或需求集中关注特定的部分,如在这张图中,我们首先会注意到动物的脸部,正如注意力图所示,颜色更深的区域通常是我们最先注意到的部分,从而初步判断这可能是一只狼。

图片

注意力机制

Q、K、V:注意力机制通过查询(Q)匹配键(K)计算注意力分数(向量点乘并调整),将分数转换为权重后加权值(V)矩阵,得到最终注意力向量。

图片

Q、K、V计算注意力分数

注意力分数的价值:量化注意力机制中某一部分信息被关注的程度,反映了信息在注意力机制中的重要性。

图片

注意力分数的价值

Transformer的本质:Transformer是一种基于自注意力机制的深度学习模型,为了解决自然语言处理中的序列到序列(sequence-to-sequence)问题而设计的。

相较于RNN模型,Transformer模型具有2个显著的优势。

  • 优势一:处理长序列数据。Transformer采用自注意力机制,能够同时处理序列中的所有位置,捕捉长距离依赖关系,从而更准确地理解文本含义。而RNN模型则受限于其循环结构,难以处理长序列数据。

  • 优势二:实现并行化计算。由于RNN模型需要依次处理序列中的每个元素,其计算速度受到较大限制。而Transformer模型则可以同时处理整个序列,大大提高了计算效率。

图片

Transformer vs RNN

二、Transformer 的原理

编码器-解码器架构:Encoder-Decoder架构是自然语言处理(NLP)和其他序列到序列(Seq2Seq)转换任务中的一种常见框架。

这种架构的核心思想是将输入序列编码成一个固定大小的向量表示,然后利用这个向量来生成输出序列。

图片

RNN编码器-解码器架构

机器翻译:机器翻译就是典型Seq2Seq模型,架构包括编码器和解码器两部分。能实现从一个序列到另外一个序列的映射,而且两个序列的长度可以不相等。

图片

机器翻译

Transformer的架构:Transformer也遵循编码器-解码器总体架构,使用堆叠的自注意力机制和逐位置的全连接层,分别用于编码器和解码器,如图中的左半部分和右半部分所示。

图片

Transformer的架构

  • Encoder编码器:Transformer的编码器由6个相同的层组成,每个层包括两个子层:一个多头自注意力层和一个逐位置的前馈神经网络。在每个子层之后,都会使用残差连接和层归一化操作,这些操作统称为Add&Norm。这样的结构帮助编码器捕获输入序列中所有位置的依赖关系。

图片

Encoder(编码器)架构

  • Decoder解码器:Transformer的解码器由6个相同的层组成,每层包含三个子层:掩蔽自注意力层、Encoder-Decoder注意力层和逐位置的前馈神经网络。每个子层后都有残差连接和层归一化操作,简称Add&Norm。这样的结构确保解码器在生成序列时,能够考虑到之前的输出,并避免未来信息的影响。

图片

Decoder(解码器)架构

编码器与解码器的本质区别:在于Self-Attention的Mask机制。

图片

编码器与解码器的本质区别

Transformer的核心组件:Transformer模型包含输入嵌入、位置编码、多头注意力、残差连接和层归一化、带掩码的多头注意力以及前馈网络等组件。

图片

Transformer的核心组件

  • 输入嵌入:将输入的文本转换为向量,便于模型处理。

  • 位置编码:给输入向量添加位置信息,因为Transformer并行处理数据而不依赖顺序。

  • 多头注意力:让模型同时关注输入序列的不同部分,捕获复杂的依赖关系。

  • 残差连接与层归一化:通过添加跨层连接和标准化输出,帮助模型更好地训练,防止梯度问题。

  • 带掩码的多头注意力:在生成文本时,确保模型只依赖已知的信息,而不是未来的内容。

  • 前馈网络:对输入进行非线性变换,提取更高级别的特征。

图片

Transformer的核心组件

Transformer的3种注意力层:在Transformer架构中,有3种不同的注意力层(Self Attention自注意力、Cross Attention 交叉注意力、Causal Attention因果注意力)

  • 编码器中的自注意力层(Self Attention layer):编码器输入序列通过Multi-Head Self Attention(多头自注意力)计算注意力权重。

  • 解码器中的交叉注意力层(Cross Attention layer):编码器-解码器两个序列通过Multi-Head Cross Attention(多头交叉注意力)进行注意力转移。

  • 解码器中的因果自注意力层(Causal Attention layer):解码器的单个序列通过Multi-Head Causal Self Attention(多头因果自注意力)进行注意力计算

图片

Transformer的3种注意力层

先了解一些概念:Scaled Dot-Product Attention、Self Attention、Multi-Head Attention、Cross Attention、Causal Attention

图片

Scaled Dot-Product Attention和Multi-Head Attention

Scaled Dot-Product Attention(缩放点积注意力):输入包括维度为dk的查询(queries)和键(keys),以及维度为dv的值(values)。我们计算查询与所有键的点积,每个点积结果都除以√dk,然后应用softmax函数,以得到注意力分数。

体现如何计算注意力分数,关注Q、K、V计算公式。

图片

Scaled Dot-Product Attention(缩放点积注意力)

Self Attention(自注意力):对同一个序列,通过缩放点积注意力计算注意力分数,最终对值向量进行加权求和,从而得到输入序列中每个位置的加权表示。

表达的是一种注意力机制,如何使用缩放点积注意力对同一个序列计算注意力分数,从而得到同一序列中每个位置的注意力权重。

图片

Self Attention(自注意力)

Multi-Head Attention(多头注意力):多个注意力头并行运行,每个头都会独立地计算注意力权重和输出,然后将所有头的输出拼接起来得到最终的输出。

强调的是一种实操方法,实际操作中我们并不会使用单个维度来执行单一的注意力函数,而是通过h=8个头分别计算,然后加权平均。这样为了避免单个计算的误差。

图片

Multi-Head Attention(多头注意力)

Cross Attention(交叉注意力):输入来自两个不同的序列,一个序列用作查询(Q),另一个序列提供键(K)和值(V),实现跨序列的交互。

图片

Cross Attention(交叉注意力)

Causal Attention(因果注意力):为了确保模型在生成序列时,只依赖于之前的输入信息,而不会受到未来信息的影响。Causal Attention通过掩盖(mask)未来的位置来实现这一点,使得模型在预测某个位置的输出时,只能看到该位置及其之前的输入。

图片

Causal Attention(因果注意力)

疑问一:图中编码器明明写的是Multi-Head Attention,怎么就说是Self Attention?

图片

编码器的Self Attention

疑问一解答:Scaled Dot-Product Attention、Self Attention、Multi-Head Attention实际上说的是同一件事,从不同维度解答如何获取同一个序列中每个位置的注意力权重。图上标注Multi-Head Attention强调需要多个头计算注意力权重。

疑问二:图中编码器明明写的也是Multi-Head Attention,怎么就说是Cross Attention?

图片

编码器-解码器的Cross Attention

疑问二解答:Cross Attention、Multi-Head Attention实际上说的是也同一件事,从不同维度解答两个不同序列之间如何进行注意力转移。图上标注Multi-Head Attention强调需要多个头进行注意力转移计算。

疑问三:图中编码器明明写的也是Masked Multi-Head Attention,怎么就说是Causal Attention?

图片

解码器的Causal Attention

疑问三解答:Causal Attention、Mask Multi-Head Attention实际上说的是也同一件事,解码器中Self Attention如何结合Causal Attention来保持自回归属性。

Mask Multi-Head Attention强调使用了多个独立的注意力头,每个头都可以学习不同的注意力权重,从而增强模型的表示能力。而Causal Attention则强调了模型在预测时只能依赖于已经生成的信息,不能看到未来的信息。

三、 Transformer的应用

Transformer应用NLP:由于Transformer强大的性能,Transformer模型及其变体已经被广泛应用于各种自然语言处理任务,如机器翻译、文本摘要、问答系统等。

  • Transformer:Vaswani等人首次提出了基于注意力机制的Transformer,用于机器翻译和英语句法结构解析任务。

  • BERT:Devlin等人介绍了一种新的语言表示模型BERT,该模型通过考虑每个单词的上下文。因为它是双向的,在无标签文本上预训练了一个Transformer。当BERT发布时,它在11个NLP任务上取得了最先进的性能。

  • GPT:Brown等人在一个包含45TB压缩纯文本数据的数据集上,使用1750亿个参数预训练了一个基于Transformer的庞大模型,称为GPT-3。它在不同类型的下游自然语言任务上取得了强大的性能,而无需进行任何微调。

图片

Transformer模型及其变体

Transformer应用CV:Vision Transformer(ViT)是一种革命性的深度学习模型,它彻底改变了传统计算机视觉领域处理图像的方式。

  • ViT采用了Transformer模型中的自注意力机制来建模图像的特征,这与CNN通过卷积层和池化层来提取图像的局部特征的方式有所不同。

  • ViT模型主体的Block结构基于Transformer的Encoder结构,包含Multi-head Attention结构。

图片

Vision Transformer

ViT的本质:将图像视为一系列的“视觉单词”或“令牌”(tokens),而不是连续的像素数组。

图片

ViT的本质

ViT的工作流程:将图像分割为固定大小的图像块(patches),将其转换为Patch Embeddings,添加位置编码信息,通过包含多头自注意力和前馈神经网络的Transformer编码器处理这些嵌入,最后利用分类标记进行图像分类等任务。

图片

ViT的工作流程


http://www.ppmy.cn/server/43149.html

相关文章

pytorch笔记:torch.nn.Flatten()

1 介绍 torch.nn.Flatten(start_dim1, end_dim-1) 将一个连续的维度范围扁平化为一个张量 start_dim (int)要开始扁平化的第一个维度(默认值 1)end_dim (int)要结束扁平化的最后一个维度(默认值 -1) 2 举例 input torch.ra…

Django模板层——模板引擎配置

作为Web 框架,Django 需要一种很便利的方法以动态地生成HTML。最常见的做法是使用模板。 模板包含所需HTML 输出的静态部分,以及一些特殊的语法,描述如何将动态内容插入。 模板引擎配置 模板引擎使用该TEMPLATES设置进行配置。这是一个配置列…

Python异步编程之基础概念

Python异步编程之基础概念 在现代编程中,异步编程是一种重要的技术,尤其是在处理I/O密集型任务时,异步编程可以大大提高程序的性能和响应速度。本文将介绍Python异步编程的基础概念,帮助你理解其原理和应用。 什么是异步编程&am…

摄像头应用测试

作者简介: 一个平凡而乐于分享的小比特,中南民族大学通信工程专业研究生在读,研究方向无线联邦学习 擅长领域:驱动开发,嵌入式软件开发,BSP开发 作者主页:一个平凡而乐于分享的小比特的个人主页…

【ARFoundation自学03】AR Point Cloud 点云(参考点标记)功能详解

和平面识别框架一样 1为XR Origin添加AR Point Cloud Manager组件 然后你的ar应用就具备了点云识别功能,就这么简单 2.可视化这些云点 创建一个美术效果的预制体,人家提供了预设模板 然后拖到仓库(ASSETS)创建预制体&#xff…

第八届“英拿科技杯”上海高校金马程序设计联赛暨东华大学邀请赛——源石虫(基础DP)

题源 源石虫 &#xff08;小声哔哔&#xff1a;这题当时脑子抽了死活没想到是DP&#xff0c;一直用贪心试&#xff0c;拿来凑个DP专题的数&#xff09; 代码 #include <bits/stdc.h> using namespace std; using ll long long; #define For for (ll i 1; i < n; …

内网信息收集

常规信息类收集&#xff0c;应用、服务、权限等 用户信息收集 查看本机用户列表 net user 获取本地管理员信息 net localgroup administrators 查看当前在线用户 quser quser user query user || qwinsta 查看当前用户在目标系统中的具体权限 whoami /all 查看当前…