一篇文章带你详细了解 Transformer

目录

RNN的原理以及弊端

Transformer

Transformer的结构

使用位置编码表示序列的顺序

自注意力机制

1. 生成查询(Query)、键(Key)和值(Value)向量

2. 计算注意力权重

3. 加权求和值

Add&Normalize

残差连接(Add)

层归一化(Normalize)

全连接层Feed Forward

Decoder整体结构

输出


 

RNN的原理以及弊端

6d39ada343d14c8abd06973a710fbcb6.png

4215deb2d7f349fc91251b2faebcc3dc.png

 

 

S表示隐藏层的值

U表示输入层到隐藏层的权重矩阵

X表示输入向量

W表示隐藏层上一次的值作为这一次的输入的权重矩阵

St-1表示上一时刻隐藏层的值

V表示隐藏层到输出层的权重矩阵

O表示输出向量

传统RNN模型的弊端

  • 长期依赖问题:RNN通过递归的方式将前一个时间步的输出传递给下一个时间步,因此当序列较长时,RNN难以捕捉到长期依赖关系模型在训练时容易忽视较远时间步的信息,导致模型性能不佳。
  • 计算效率低下:由于递归结构,每个时间步的计算必须在前一个时间步计算完成后才能进行,这种串行的处理方式严重限制了计算效率。

310bcd244c6047f3977653d080d235c7.png后续RNN地改良版本:长短期记忆网络LSTM 也无法解决RNN无法并行计算的问题。

 

Transformer

先大致了解一下:

  • Transformer 是一种用于处理序列数据的深度学习模型,首次在自然语言处理(NLP)任务中取得显著成功。
  • 与传统的循环神经网络(RNN)不同,Transformer 基于自注意力机制(Self-Attention)来处理输入数据中的不同部分之间的关系,能够并行处理整个序列,从而大大提高了计算效率。
  • Transformer 的核心组件包括编码器(Encoder)和解码器(Decoder),每个组件都由多个相同的层叠加而成。自注意力机制使得模型能够根据上下文动态地为序列中的每个词分配不同的权重,捕捉长程依赖关系。
  • Transformer 的结构为许多现代的NLP模型,如BERT、GPT等奠定了基础。

 

Transformer的结构

01cad6f55bb04b61a4eac8a7940bf8b9.png

推理工作流程

  • 编码器接收完整的源序列(包含位置编码和填充掩码),生成源序列的上下文表示。
  • 解码器首先接收特殊起始符号 <start>,然后在每一步动态加入之前生成的词元,同时利用编码器提供的源序列信息,逐步生成目标序列中的每个词元,直到遇到结束符 <end> 或达到最大长度。

 

使用位置编码表示序列的顺序

位置编码的作用:用于将输入序列中各个位置的信息显式地编码进模型中,从而保留序列数据的顺序。

计算方法

7fd8f5dd5a034bbcb6616ad54c5a291b.png

这个编码方式的独特之处在于:不同位置的编码具有唯一的模式,而相邻位置之间的编码值具有连续性。这样使得模型可以“感觉到”不同词的位置以及它们之间的相对距离。

最终将词嵌入与位置编码相加以表示输入元素:

022b3c9d391b4473b977eca8a74d1ddf.jpeg

 

自注意力机制

作用:用于计算一个序列中每个元素对于其他元素的重要性的机制,在序列的不同位置上自适应地分配“注意力”权重,使模型能够灵活地捕捉序列中各元素之间的相互关系。

工作流程

  • 生成查询(Query)、键(Key)和值(Value)向量
  • 计算注意力权重
  • 输出加权和

输出加权和(自注意力的输出向量)可以理解为该元素在当前上下文中的“综合信息”或“加权上下文表示”。

1. 生成查询(Query)、键(Key)和值(Value)向量

查询(Query)、键(Key)和值(Value)向量源自信息检索领域的“查询-键-值”思想。

  • 查询向量 Q:用于表示当前元素的需求,即“当前元素希望从其他元素中获取哪些信息”。
  • 键向量 K:用于描述每个元素的特征,用于与查询向量进行相似度匹配,进而生成注意力权重。
  • 值向量 V:表示元素的实际信息内容,在加权求和时起决定作用。最终的注意力表示是不同元素信息的加权和。

生成查询、键和值向量的具体过程

1. 输入序列长度为n,每个元素的嵌入向量维度为d,输入序列可以表示为矩阵X∈R^(n×d)

2. 定义线性映射矩阵:三个独立的线性映射矩阵,用于生成查询、键和值向量:

0975f23af0f947b180f261cd29053989.png

c32afcff119b4ae2893253d6d17ab5ae.png

 

3.  生成查询、键和值向量矩阵:

b26276b0cce945a8929855430776fd46.png

2. 计算注意力权重

注意力分数:查询向量和键向量的点积反映了每个元素与其他元素的相关性

6d09e7d0fbce419881edbb000ff63f6c.png

避免向量点积过大导致梯度消失或爆炸问题:通常会用向量维度dk 的平方根对结果进行缩放

1ab3fa5b054e4b53b02d78805e8890ce.png

转换为概率分布:通过Softmax将注意力分数转换为概率分布,从而得到一个元素对应的其他所有元素的重要性权重

0f2018f98c7f4979b186cbc55d777da0.png

3. 加权求和值

最后,将注意力权重应用到值向量上,计算加权和作为最终的自注意力表示:

91833248f4154650a3beeda286d0f819.png

对于整个序列而言,自注意力的计算公式可表示为:

5149818580fb44b7940fc86314a60f94.png

整个流程:(Thingking、Machines为两个元素)

图片参考 优快云@告白气球~ 的文章

4513424a21b74dcb97e4aa988c597749.png

76635d9e5f654df0b68f51eaa1622e19.png

55f8e6ceffa544e38a25e41e67195d9b.png

 

Add&Normalize

Add&Normalize在Transformer的中的位置:编码或解码层包括若干个子层,每个子层都由两个主要部分组成:多头自注意力机制或前馈神经网络,以及紧随其后的"Add & Normalize"操作

残差连接(Add)

642a60e3d18643078d3e567b30abdc0b.png

残差连接:一种跳跃连接,将子层的输入直接与子层的输出相加,形成一种“旁路”,从而允许信息更顺畅地流过深层模型。

优势:可以保留输入的信息流,帮助模型更好地传递浅层特征,从而有助于模型的梯度稳定,并加速训练。

层归一化(Normalize)

层归一化:使得每个神经元的输出都标准化至相同的均值和方差。

7ed917c1af874806b2b047770e201475.png

优势:让模型更稳定,有助于减小不同特征值的分布差异带来的训练困难。

 

全连接层Feed Forward

全连接层的组成:两个全连接层(也称为线性层)组成,中间夹着一个非线性激活函数ReLU。

原理:两层网络就是为了将输入的Z映射到更加高维的空间中然后通过非线性函数ReLU进行筛选,筛选完后再变回原来的维度。

edb4ea8ca5324c1197f5b5f403012261.png

作用:对每个词元位置的特征进一步提取并增强。

 

Decoder整体结构

7357b34ea35f422e8057bb50fd7d91a6.png

解码器块(Decoder Blocker)与编码器块(Encoder Block)相比:

  • 相同点:都是由6个编码器(解码器)所组成。
  • 不同点:解码器块包含两个 Multi-Head Attention 层,一个采用了 Masked 操作,另外一个的K, V矩阵使用 Encoder 的编码信息矩阵C进行计算,而Q使用上一个 Decoder block 的输出计算。

解码器的两个注意力层:

1.带掩码的多头注意力机制:自注意力层只允许关注已输出位置的信息。避免了在训练或推理过程中出现“作弊”的情况,即预测时提前看到未生成的未来词元,提升训练效果。

  • 结构位置:解码器的第一层注意力机制

  • 实现方式:在自注意力层的softmax之前进行mask,将未输出位置的权重设置为一个非常大的负数(进一步softmax之后基本变为0,相当于直接屏蔽了未输出位置的信息)。

2. 不带掩码的多头注意力机制:在解码过程中将解码器的当前状态与编码器的输出进行关联,使解码器能够充分利用源序列的信息,为生成的目标序列提供语义支持和上下文信息。

  • 结构位置:解码器的第二层注意力机制,与编码器相连

  • 实现方式

    • 与Encoder中的Q、K、V全部来自于上一层单元的输出不同。

    • Decoder是要通过当前状态Q与Encoder的输出K算出权重后(计算query与各个key的相似度),最后与Encoder的V加权得到下一层的状态。(Encoder的输出V结合源序列(编码器输出的隐藏状态)的各位置的注意力权重)

4e938669bf6844949ea20d43a40259a1.png

 

输出

123aca28e6e84d8e9301beb5f63d88e1.png

步骤:

  1. 线性层:线性变换(线性变换层是一个简单的全连接神经网络,把解码组件产生的向量投射到一个词汇表大小维度的向量里)
  2. Softmax层:得到词汇表中每个词元的分数后,Softmax输出概率分布
  3. 最终输出:通过词典,输出概率最大的对应的单词作为我们的预测输出

 


如果您觉得对您有帮助,请留下宝贵的赞赞吧🥺,我真的很需要。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值