transformer

Transformer

  • [1. Transformer](#1. Transformer)
    • [1.1. transformer模型背景](#1.1. transformer模型背景)
      • [1.1.1. RNN (Recurrent Neural Network) 是一种经典的神经网络结构,具有以下优缺点:](#1.1.1. RNN (Recurrent Neural Network) 是一种经典的神经网络结构,具有以下优缺点:)
      • [1.1.2. LSTM神经网络的优缺点](#1.1.2. LSTM神经网络的优缺点)
    • [1.2. transformer简介](#1.2. transformer简介)
    • [1.3. transformer整体结构](#1.3. transformer整体结构)
      • [1.3.1. 编码器和解码器](#1.3.1. 编码器和解码器)
      • [1.3.2. 注意力](#1.3.2. 注意力)
        • [1.3.2.1. 缩放点积注意力 (Scaled Dot-Product Attention)](#1.3.2.1. 缩放点积注意力 (Scaled Dot-Product Attention))
        • [1.3.2.2. 多头注意力机制](#1.3.2.2. 多头注意力机制)
        • [1.3.2.3. 模型中注意力的应用](#1.3.2.3. 模型中注意力的应用)
      • [1.3.3. 基于位置的前馈神经网络](#1.3.3. 基于位置的前馈神经网络)
      • [1.3.4. 词嵌入和Softmax](#1.3.4. 词嵌入和Softmax)
      • [1.3.5. 位置编码](#1.3.5. 位置编码)

1. Transformer

1.1. transformer模型背景

Transformer 模型是自然语言处理领域中的一项重要创新。

其背景主要源于对传统神经网络模型在处理序列数据(如文本)时的局限性的突破需求。在 Transformer 出现之前,循环神经网络(RNN)及其变体(如长短期记忆网络 LSTM)是处理序列数据的常用模型,但它们存在一些问题,如难以并行处理、对长序列的记忆能力有限以及训练速度较慢等。

为了解决这些问题,Transformer 模型引入了注意力机制(Attention Mechanism),使得模型能够对输入序列的不同部分进行灵活且高效的关注和权重分配,从而能够更好地捕捉长距离的依赖关系。并且,由于其基于自注意力机制的架构,能够并行处理输入序列,大大提高了训练效率。

Transformer 模型的提出为自然语言处理带来了巨大的变革,被广泛应用于机器翻译、文本生成、问答系统等众多任务,并成为后续许多先进模型的基础架构。

1.1.1. RNN (Recurrent Neural Network) 是一种经典的神经网络结构,具有以下优缺点:

优点:

处理序列数据:RNN 是一种适用于处理序列数据的神经网络,能够有效地捕捉序列中的时序信息。

共享权重:RNN 在每个时间步都使用相同的参数,可以有效地共享权重,减少模型的复杂度和训练的参数数量。

上下文依赖建模:RNN 能够记忆之前的信息,并在后续时间步中利用该信息进行预测或决策,对于处理依赖于上下文的任务非常有用。
缺点:

梯度消失/爆炸:RNN 在反向传播时,由于参数共享和多次连乘的特性,容易出现梯度消失或梯度爆炸的问题,导致模型难以训练或无法收敛。

长期依赖问题:由于梯度消失的原因,RNN 在处理长序列时难以捕捉到长期依赖关系,只能有效利用较短的上下文信息。

计算效率较低:RNN 的计算过程是基于时间步展开的,每个时间步都需要依次计算,造成计算效率较低,尤其是处理较长序列时。

尽管 RNN 存在一些缺点,但它仍然是处理序列数据的重要工具。为了解决梯度消失和长期依赖问题,出现了一些改进的 RNN 变体,例如 LSTM (Long Short-Term Memory) 和 GRU (Gated Recurrent Unit)。这些变体通过引入门控机制来控制信息的流动和遗忘,能够更好地处理长序列和长期依赖关系。

1.1.2. LSTM神经网络的优缺点

LSTM (Long Short-Term Memory) 神经网络是一种特殊的循神经网络 (RNN),它在处理序列数据和长期依赖关系时具有一些优点和缺点:
优点:

1.长期依赖建模:LSTM通过引入门控机制,能够有效地捕捉和建模长期依赖关系。这使得它在处理序列数据时比传统的RNN模型更具优势,如自然语言处理中的语言建模、机器翻译等任务。

2.防止梯度消失和梯度爆炸:传统的RNN在训练过程中容易遇到梯度消失或梯度爆炸的问题,导致难以有效地学习长期依赖。而LSTM通过门控机制,可以在一定程度上解决这个问题,使得网络能够更稳定地进行训练。

3.灵活的门控结构:LSTM的核心是门控单元,包括输入门、遗忘门和输出门。这些门控结构能够控制信息的流动和保留,使得网络能够有选择地记忆和遗忘输入序列中的信息,从而更好地处理序列数据。
缺点:

1.计算复杂度较高:由于引入了门控机制,LSTM相对于传统的RNN模型而言计算复杂度更高。这可能导致在大规模数据集或复杂模型中的训练和推理过程较慢。

2参教量较多:LSTM网终中的门控单元和记忆单元增加了网终的参数量,特别是当网络层数较多时,参数量会进一步增加。这可能导致需要更多的训练数据和计算资源来进行训练和调优。

3.难以解释性:LSTM网络中的门控结构和复杂的记忆单元使得网络的决策过程相对难以解释和理解。相比于一些简单的模型,LSTM的结果和内部运作可能更难以解释给非专业人士。

总体而言,LSTM神经网络在处理序列数据和长期依赖关系方面具有很大优势,但也有一些缺点需要注意。在实际应用中,我们需要根据具体问题和数据集的特点来选择合适的神经网络模型和优化方法。

1.2. transformer简介

类别 内容
论文 Attention Is All You Need
论文地址 https://arxiv.org/pdf/1706.03762.pdf
项目地址 https://pytorch.org/docs/stable/_modules/torch/nn/modules/transformer.html#Transformer
作者 Ashish Vaswani∗ Noam Shazeer 等
单位 2017 年,Google 机器翻译团队
摘要 主要的序列转导模型是基于复杂的循环或卷积神经网络,包括一个编码器和一个解码器。表现最好的模型还通过注意机制连接编码器和解码器。我们提出了一个新的简单的网络架构,transformer,完全基于注意力机制,完全摒弃递归和卷积。在两个机器翻译任务上的实验表明,这些模型在质量上更优越,同时更具并行性,并且需要更少的训练时间。我们的模型在WMT 2014英语-德语翻译任务上实现了28.4 BLEU,比现有的最佳结果(包括集合)提高了2个BLEU以上。在WMT 2014英法翻译任务中,我们的模型在8个gpu上训练3.5天后,建立了一个新的单模型最先进的BLEU分数41.8,这是文献中最佳模型训练成本的一小部分。我们通过将Transformer成功地应用于具有大量和有限训练数据的英语选区解析,证明了它可以很好地推广到其他任务
贡献 这篇论文的主要贡献是提出了一种新的神经网络架构,即Transformer,它完全基于注意力机制,不涉及循环和卷积操作。Transformer在机器翻译任务上表现出了更好的性能,同时具有更高的并行性和训练效率。

1.3. transformer整体结构

Transformer是一种基于自注意力机制的深度学习模型,广泛应用于自然语言处理任务。它的核心特点包括自注意力机制、多头注意力、编码器-解码器架构、位置编码、残差连接和层归一化,以及并行化计算能力。

Transformer模型的核心组件

Transformer模型的核心组件主要包括以下几个部分:

  • 自注意力机制(Self-Attention Mechanism):这是Transformer的核心,它允许模型在处理序列数据时,考虑序列中各个元素之间的相互关系,从而捕捉长距离依赖。
  • 多头注意力机制(Multi-Head Attention):通过将注意力机制分解为多个"头",模型能够在不同的表示子空间中学习信息,增强了模型对不同位置的敏感性。
  • 前馈神经网络(Feed-Forward Neural Network):位于自注意力机制之后,用于进一步处理和转换注意力机制的输出,每个位置的处理是独立的。
  • 编码器和解码器(Encoder-Decoder):Transformer模型由编码器和解码器组成,编码器负责处理输入序列,解码器负责生成输出序列。解码器在处理目标序列时,不仅关注序列本身,还通过编码器-解码器注意力机制关注编码器的输出123。
  • 位置编码(Positional Encoding):由于Transformer模型不使用循环结构,位置编码被添加到输入序列中,以提供单词在序列中的位置信息。
  • 残差连接(Residual Connection) 和 层归一化(Layer Normalization) :这些技术用于改善梯度传播,增加模型的训练稳定性,并加速收敛速度。
    这些组件共同工作,使得Transformer模型能够有效地处理序列数据,特别是在自然语言处理任务中表现出色。

1.3.1. 编码器和解码器

编码器:

编码器由N = 6个相同层的堆栈组成。每一层有两个子层。第一种是多头自注意机制,第二种是简单的、位置完全连接的前馈网络。我们在每一个子层周围使用残差连接[11],然后进行层归一化[1]。也就是说,每个子层的输出是 L a y e r N o r m ( x + S u b l a y e r ( x ) ) LayerNorm(x + Sublayer(x)) LayerNorm(x+Sublayer(x)),其中 S u b l a y e r ( x ) Sublayer(x) Sublayer(x)是子层本身实现的函数。为了方便这些残差连接,模型中的所有子层以及嵌入层产生的输出维度为dmodel = 512。
解码器:

解码器也由N = 6相同层的堆栈组成。除了每个编码器层中的两个子层之外,解码器插入第三个子层,该子层对编码器堆栈的输出执行多头注意。与编码器类似,我们在每个子层周围使用残差连接,然后进行层归一化。我们还修改了解码器堆栈中的自注意子层,以防止位置关注后续位置。这种掩模,再加上输出嵌入被偏移一个位置的事实,确保了位置 i i i的预测只能依赖于位置小于 i i i的已知输出。

1.3.2. 注意力

注意力函数可以描述为将一个query和一组key-value对映射为一个输出,其中query、key、value和output都是向量。output是通过所有value的加权和计算得到,其中,分配给每个value的权重是由query和对应的key的兼容函数计算得到。

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

缩放点积注意力如Figure2所示。输入由维度 d k d_k dk的query和key,以及维度 d v d_v dv的value组成。计算query和所有keys的点积,将每个点积除以 d k \sqrt{d_k} dk ,并应用一个softmax函数来获得这些值的权重。

在实际中,在一组queries上同时计算注意力函数,打包成一个矩阵 Q Q Q。keys和values也被打包成矩阵 K K K和 V V V。计算矩阵表达形式:
A t t e n t i o n ( Q , K , V ) = s o f t m a x ( Q K T d k ) V (1) Attention(Q,K,V)=softmax(\frac{QK^T}{\sqrt{d_k}})V \tag{1} Attention(Q,K,V)=softmax(dk QKT)V(1)

两个最常用的注意力函数是加法注意力点积注意力 。点积注意力与这里的算法相同,除了这里包含一个缩放因子 1 d k \frac{1}{\sqrt{d_k}} dk 1。加法注意力函数使用包含单隐层的前馈网络计算兼容性函数。虽然两种方法在理论上复杂性相似,但是在实际中,点积注意力更快且空间上更高效。因为它可以通过高度优化的矩阵乘法代码实现。

对于较小的 d k d_k dk值,两种机制性能相似;对于较大的 d k d_k dk值,由于加法注意力没有缩放,性能优于点积注意力。由于怀疑,对于dk的大值,点积的幅度越来越大,将softmax函数推到梯度极小的区域。为了抵消这种效应,才使用 1 d k \frac{1}{\sqrt{d_k}} dk 1来缩放点积

1.3.2.2. 多头注意力机制

相比较与单一注意力函数,可以发现将queries、keys和values使用不同的学习到的线性投影参数 h h h倍线性投影到 d k d_k dk、 d k d_k dk、 d v d_v dv维是有益的。对每一个queries、keys、values的投影版本中,并行执行注意力函数,产生 d v d_v dv维输出值。它们被拼接后再次投影,产生如Figure2中最终的值。

多头注意允许模型共同关注来自不同位置的不同表示子空间的信息。用一个注意力头,平均可以抑制这一点。

M u l t i H e a d ( Q , K , V ) = C o n c a t ( h e a d 1 , ⋯   , h e a d h ) W O w h e r e h e a d i = A t t e n t i o n ( Q W i Q , K W i K , V W i V ) MultiHead(Q,K,V)=Concat(head_1, \cdots, head_h)W^O \\ where \quad head_i = Attention(QW_i^Q,KW_i^K,VW_i^V) MultiHead(Q,K,V)=Concat(head1,⋯,headh)WOwhereheadi=Attention(QWiQ,KWiK,VWiV)

其中投影是参数矩阵 W i Q ∈ R d m o d e l × d k , W i K ∈ R d m o d e l × d k , W i V ∈ R d m o d e l × d v W_i^Q \in \mathbb{R}^{d_{model}\times d_k}, W_i^K \in \mathbb{R}^{d_{model}\times d_k}, W_i^V \in \mathbb{R}^{d_{model}\times d_v} WiQ∈Rdmodel×dk,WiK∈Rdmodel×dk,WiV∈Rdmodel×dv, W O ∈ R h d v × d m o d e l W^O \in \mathbb{R}^{h d_v \times d_{model}} WO∈Rhdv×dmodel。

在论文中使用了 h = 8 h=8 h=8并行注意力层或头。对于每一个头,使用 d k = d v = d m o d e l / h = 64 d_k = d_v = d_{model}/h = 64 dk=dv=dmodel/h=64。由于每个头部的维数降低,其总计算代价与全维的单头注意相似。

1.3.2.3. 模型中注意力的应用

在Transformer中多头注意力机制有三种不同的使用方式:
在编码器-解码器注意力层中 ,queries来自解码器的前一层,记忆keys和values来自编码器的输出。这允许解码器中的每个位置都参与输入序列中的所有位置。这模拟了序列到序列模型中典型的编解码器注意机制。
在编码器中包含的自我注意层 。在自注意力层中,所有的keys、values和queries都来自同一个位置,在这种情况下,它们是编码器中上一层的输出。编码器中的每个位置都可以处理编码器上一层中的所有位置。
在解码器中的自我注意力层。解码器中的自注意层允许解码器中的每个位置关注解码器中的所有位置,直到并包括该位置。我们需要防止解码器中向左的信息流,以保持自回归特性。我们通过屏蔽(设置为−∞)softmax输入中对应于非法连接的所有值来在缩放点积注意内部实现这一点。见图2。

1.3.3. 基于位置的前馈神经网络

除了注意力子层外,编码器和解码器中的每个层都包含一个完全连接的前馈网络,它分别和相同地应用于每个位置。这由两个线性变换组成,中间有一个ReLU激活。
F F N ( x ) = m a x ( 0 , x W 1 + b 1 ) W 2 + b 2 (2) FFN(x) = max(0, xW_1+b_1)W_2+b_2 \tag{2} FFN(x)=max(0,xW1+b1)W2+b2(2)

虽然线性转换在不同的位置上是相同的,但它们每层都使用不同的参数。另一种描述它的方法是用核大小为1的两个卷积。输入和输出的维度都是 d m d e l = 512 d_{mdel}=512 dmdel=512,内部层维度 d f f = 2048 d_{ff}=2048 dff=2048。

1.3.4. 词嵌入和Softmax

与其他序列转换模型类似,我们使用学习到的嵌入词向量 将输入字符和输出字符转换为维度为 d m o d e l d_{model} dmodel​

的向量。我们还使用普通的线性变换和softmax函数将decoder输出转换为预测的下一个词符的概率。在模型中,两个嵌入层之间和pre-softmax线性变换共享相同的权重矩阵,类似于[30]。 在嵌入层中,将这些权重乘以 d m o d e l \sqrt{d_{model}} dmodel 。

1.3.5. 位置编码

由于我们的模型不包含循环或卷积,为了让模型利用序列的顺序信息,必须加入序列中关于字符相对或者绝对位置的一些信息。 为此,在encoder和decoder堆栈底部的输入嵌入中添加"位置编码"。 位置编码和嵌入的维度 d m o d e l d_{model} dmodel 相同,所以它们两个可以相加。有多种位置编码可以选择,例如通过学习得到的位置编码和固定的位置编码[9].

在这项工作中,我们使用不同频率的正弦和余弦函数:
P E ( p o s , 2 i ) = s i n ( p o s / 1000 0 2 i / d m o d e l ) P E p o s , 2 i + 1 = c o s ( p o s / 1000 0 2 i / d m o d e l ) PE_{(pos, 2i)}=sin(pos/10000^{2i/d_{model}}) \\ PE_{pos, 2i+1}=cos(pos/10000^{2i/d_{model}}) PE(pos,2i)=sin(pos/100002i/dmodel)PEpos,2i+1=cos(pos/100002i/dmodel)

其中 p o s pos pos 是位置, i i i是维度。也就是说,位置编码的每个维度对应于一个正弦曲线。波长形成了从2π到10000·2π的几何数列。我们之所以选择这个函数,是因为我们假设它可以让模型很容易地通过相对位置来学习,因为对任意确定的偏移 k k k, P E p o s + k PE_{pos + k} PEpos+k 可以表示为 P E p o s PE_{pos} PEpos的线性函数。

们还尝试使用预先学习的positional embeddings[9]来代替正弦波,发现这两个版本产生了几乎相同的结果 (see Table 3 row (E))。我们之所以选择正弦曲线,是因为它允许模型扩展到比训练中遇到的序列长度更长的序列。

参考:RNN,LSTM,CNN,RCNN的优缺点

参考:<>

参考:<>

参考:<>

相关推荐
loongloongz10 分钟前
联合条件概率 以及在语言模型中的应用
人工智能·语言模型·自然语言处理·概率论
lijfrank12 分钟前
情感计算领域期刊与会议
人工智能·人机交互
sp_fyf_202415 分钟前
计算机人工智能前沿进展-大语言模型方向-2024-09-18
人工智能·语言模型·自然语言处理
sp_fyf_202417 分钟前
计算机人工智能前沿进展-大语言模型方向-2024-09-14
人工智能·语言模型·自然语言处理
ybdesire22 分钟前
nanoGPT用红楼梦数据从头训练babyGPT-12.32M实现任意问答
人工智能·深度学习·语言模型
AI极客菌29 分钟前
Stable Diffusion绘画 | 生成高清多细节图片的各个要素
人工智能·ai·ai作画·stable diffusion·aigc·midjourney·人工智能作画
FOUR_A30 分钟前
【机器学习导引】ch2-模型评估与选择
人工智能·机器学习
lupai1 小时前
盘点实用的几款汽车类接口?
大数据·人工智能·汽车
geekrabbit2 小时前
机器学习和深度学习的区别
运维·人工智能·深度学习·机器学习·浪浪云
Java追光着2 小时前
扣子智能体实战-汽车客服对话机器人(核心知识:知识库和卡片)
人工智能·机器人·汽车·智能体