【深度学习】NLP之Transformer (1) Encoder

目录

1. 背景

2. 模型

Encoder

2.1. self-attention

2.2. matrix calculation of self-attention

2.3. muti-headed attention

2.4. positional encoding

2.5. Residual \ Layer Normalization

Decoder

2.6. 损失函数 cross-entroy loss

2.7. 训练技巧

3. Transformer优缺点

4. 回顾

5. QA


在机器翻译的任务中,使用RNN会造成梯度消失和长句子传递信息缺失的问题。LSTM只能缓解,如果想要进一步提升,就引入了Transformer。这里的新思想是不用RNN来做机器翻译。
The Illustrated Transformer – Jay Alammar – Visualizing machine learning one concept at a time.

                                                                  图:梯度消失的问题 

1. 背景

Transformer中抛弃了传统的CNN和RNN,整个网络结构完全是由Attention机制组成。 作者采用Attention机制的原因是考虑到RNN(或者LSTM,GRU等)的计算是顺序的,RNN相关算法只能从左向右依次计算或者从右向左依次计算,这种机制带来了两个问题: 

  (1) 时间片 t 的计算依赖 t−1 时刻的计算结果,这样限制了模型的并行能力;

  (2) 顺序计算的过程中信息会丢失,尽管LSTM等门机制的结构一定程度上缓解了长期依赖的问题,但是对于特别长期的依赖现象,LSTM依旧无能为力

  Transformer的提出解决了上面两个问题:

  (1) 首先它使用了Attention机制,将序列中的任意两个位置之间的距离是缩小为一个常量;

  (2) 其次它不是类似RNN的顺序结构,因此具有更好的并行性,符合现有的GPU框架

2. 模型

模型结构

Nx:是一层,类似于LSTM的内部,红色框的encoder和蓝色框的decoder都是可以叠加的。

如上图,transformer模型本质上是一个Encoder-Decoder的结构。输入序列先进行Embedding,经过Encoder之后结合上一次output再输入Decoder,最后用softmax计算序列下一个单词的概率。

transformer的网络结构

Encoder

一个独立的encoder包含了如下的信息:

目的就是将输入的x1转为输出的r1,x2转为r2 ...(将输入的向量转为另一个包含更多信息的向量)

第一部分就是self-attetion(x1 x2共享self-attention)

单词与单词的影响力有多大,图中的it与句子中的哪个单词最相关?用颜色强弱来代表,it指代的是the animal

第二部分就是feed forward neural network,可以理解为一个全连接层。(x1 x2分开了)

2.1. self-attention

2023/04/02更新,

 

 

 2023/04/02更新结束。。。

x1、x2是输入的两个单词embedding,将一个向量转为另一个向量最简单的办法就是乘以W矩阵。

将x1转为q1、k1、v1三个不同的向量。所以引入W^QW^kW^v,这里x1和x2共享了三个矩阵,在某种程度上输入的x1和x2已经有个某种联系

现在已经得知v1和v2了,如何转为z1和z2呢? z_1 =v_1\theta _1 + v_2 \theta _2

\theta _1 和 \theta _2 如何得到呢?

q1和k1做点击后再求和,再将q1和k2做点击后求和,如上图,q1k1=112、q1k2=96,除以一个共同的数字8,所以112/8=14、96/8=12,再将14和12经过softmax,所得到的两个值就是\theta _1 和 \theta _2 。

v1、v2已知,所以就将x1、x2转为了z1、z2,z_1 =v_1\theta _1 + v_2 \theta _2

同理,计算z2只需要将q2k1、q2k2作为v1和v2的权重。

z1是经过self-attention的输出,再经过2个全连接层,得到r1。

其中,query为搜索词、key-value是键值对。

以5g作为query,得到huawei的概率为100%,得到诺基亚的概率为50%。

W^QW^kW^v是随机初始化,网络学习到的参数,代表什么样的qkv最契合我现在要解决的问题。

2.2. matrix calculation of self-attention

为了减少计算,实际是矩阵相乘。只要做3次计算,就能算出所有词的计算。

gpu上操作两个矩阵相乘是一个时间步骤,cpu是 O(n^3)

        

2.3. muti-headed attention

就是说用了很多不同的WQ、WK、WV。

因为是随机初始化的 W_0^Q  、W_0^KW_0^V,所以得到的 Q_0 、Q_1 也是不同的,通过网络误差传递,有更丰富的层次,每个head都是从不同的角度来看待问题。。

                                               图:产生8个不同的attention输出

如何将不同的z0,z1转为一个Z呢?(参考FC)(这个的muti-headed attention的额外步骤,将多个head输出的z转为最终想要的Z)

multi-head self-attention整体流程

最终self-attention得到的z1\z2通过不同的FC转为r1、r2,这个r1、r2再下一个encoder中再作为x1、x2继续下去。

为什么需要muti-head?

右图有8个head,it与其他单词在不同维度发生不同强度的关联。橙色关注it是什么?绿色关注it的状态。

2.4. positional encoding

希望网络在自注意力的时候,不仅知道要聚焦在哪个单词上,还想知道单词之间互相离多远。

输入有2个值:

这个单词在原来句子中的位置;

最后想要产生的encoding vector,它的位置在哪?

不同位置的向量做点击,如下图,自己和自己做点击是最大的。关注点是这个东西离我是比较近的还是比较远的(这样就够了!)。

encoding向量的点积值对称,随着距离增大而减小。

图:所有positional encoding vector点积值热图

2.5. Residual \ Layer Normalization

Residual \ Layer Normalization+attention

residual和LN在每一层都使用

Decoder

输入随着时间而变化。

最开始输入就是<start>,起始向量+positional encoding (对应位置相加)

与encoder唯一区别是encoder-decoder attention这一层用到了encoder的输出作为它的输入。softmax为预测某个单词的概率值。

这里m没懂??????????????????

什么是masked multi-head attention?

神经网络的输入是固定长度的,让网络知道哪一部分是它现在需要忽略的,不用考虑的。

举例:

decoder output输入,x为我所不知道的内容,需要主动去忽略的。

t=3时   <start> I am a x x x x   则mask为 0 0 0 1 1 1 1

t=4时                                       则mask为 0 0 0 0 1 1 1  (这时候student已经预测出来了~)

encoder和decoder结合

2.6. 损失函数 cross-entroy loss

2.7. 训练技巧

label smoothing

不用绝对的01,用小数

warm up(修改学习率,取决于数据量和任务难度)

3. Transformer优缺点

代码实现

4. 回顾

这个Transformer Block其实才是Transformer最关键的地方,核心配方就在这里。

以上所有的编码器在结构上都是相同的,但它们没有共享参数。每个解码器都可以分解成两个子层。拆分成小的来看:

以机器翻译来说,这个流程如下:

从编码器输入的句子首先会经过一个自注意力(self-attention)层,这层帮助编码器在对每个单词编码时关注输入句子的其他单词。

自注意力层的输出会传递到前馈(feed-forward)神经网络中。每个位置的单词对应的前馈神经网络都完全一样(译注:另一种解读就是一层窗口为一个单词的一维卷积神经网络)。

解码器中也有编码器的自注意力(self-attention)层和前馈(feed-forward)层。除此之外,这两个层之间还有一个注意力层,用来关注输入句子的相关部分(和seq2seq模型的注意力作用相似)。

5. QA

针对NLP任务的特点来说下Transformer的对应解决方案。

1、自然语言一般是个不定长的句子,那么这个不定长问题怎么解决呢?

Transformer做法跟CNN是类似的,一般设定输入的最大长度,如果句子没那么长,则用Padding填充,这样整个模型输入起码看起来是定长的了。

2、NLP句子中单词之间的相对位置是包含很多信息的,RNN因为结构就是线性序列的,所以天然会将位置信息编码进模型;而CNN的卷积层其实也是保留了位置相对信息的,所以什么也不做问题也不大。但是对于Transformer来说,为了能够保留输入句子单词之间的相对位置信息,必须要做点什么。为啥它必须要做点什么呢?

因为输入的第一层网络是Muli-head self attention层,Self attention会让当前输入单词和句子中任意单词发生关系,然后集成到一个embedding向量里,但是当所有信息到了embedding后,位置信息并没有被编码进去。所以,Transformer不像RNN或CNN,必须明确的在输入端将Positon信息编码,Transformer是用位置函数来进行位置编码的,而Bert等模型则给每个单词一个Position embedding,将单词embedding和单词对应的position embedding加起来形成单词的输入embedding。

3、关于NLP句子中长距离依赖特征的问题,Self attention天然就能解决这个问题,因为在集成信息的时候,当前单词和句子中任意单词都发生了联系,所以一步到位就把这个事情做掉了。不像RNN需要通过隐层节点序列往后传,也不像CNN需要通过增加网络深度来捕获远距离特征,Transformer在这点上明显方案是相对简单直观的。

文章参考:

BERT大火却不懂Transformer?读这一篇就够了 - 数据汪的文章 - 知乎 (具体实现细节看这里👀)

深入理解Transformer及其源码

放弃幻想,全面拥抱Transformer:自然语言处理三大特征抽取器(CNN/RNN/TF)比较 - 张俊林的文章 - 知乎中说道:从NLP领域的特征抽取器角度来说,Transformer会逐步取代RNN成为最主流的的特征抽取器。

后续:

关于Transformer的若干问题整理记录 - Adherer的文章 - 知乎

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Transformer发轫于NLP(自然语言处理),并跨界应用到CV(计算机视觉)领域。目前已成为深度学习的新范式,影响力和应用前景巨大。 本课程对Transformer的原理和TensorFlow 2代码进行精讲,来帮助大家掌握其详细原理和具体实现。 原理精讲部分包括:注意力机制和自注意力机制、Transformer的架构概述、Encoder的多头注意力(Multi-Head Attention)、Encoder的位置编码(Positional Encoding)、残差链接(Residual Connection)、层规范化(Layer Normalization)、FFN(Feed Forward Network)、Transformer的训练及性能、Transformer的机器翻译工作流程。  代码精讲部分使用Jupyter Notebook对Transformer的TensorFlow 2实现代码进行逐行解读,包括:安装TensorFlow、Transformer的数据集加载与预处理代码解读、Transformer的位置编码与多头注意力代码解读、TransformerTransformer类代码解读、Transformer的优化器与损失函数代码解读、Transformer的训练代码解读、Transformer的推理与权重保存代码解读。相关课程: 《Transformer原理与代码精讲(PyTorch)》https://edu.csdn.net/course/detail/36697《Transformer原理与代码精讲(TensorFlow)》https://edu.csdn.net/course/detail/36699《ViT(Vision Transformer)原理与代码精讲》https://edu.csdn.net/course/detail/36719《DETR原理与代码精讲》https://edu.csdn.net/course/detail/36768《Swin Transformer实战目标检测:训练自己的数据集》https://edu.csdn.net/course/detail/36585《Swin Transformer实战实例分割:训练自己的数据集》https://edu.csdn.net/course/detail/36586《Swin Transformer原理与代码精讲》 https://download.csdn.net/course/detail/37045
深度学习中的Transformer是一种用于序列建模的架构,它在自然语言处理和机器翻译等任务中取得了很大的成功。Transformer通过使用注意力机制来建立输入序列与输出序列之间的长距离依赖关系,在处理长序列时表现出色。 Transformer模型的基本结构可以看作是工业界的风向标,目前在市场上有很大的应用空间。它采用了Encoder-Decoder的架构,其中编码器部分负责将输入序列映射到隐藏表示,而解码器部分则将隐藏表示映射到输出序列。 在Transformer架构中,编码器和解码器都由多层的自注意力机制和前馈神经网络组成。自注意力机制允许模型在处理输入序列时将注意力集中在不同的位置,从而捕捉到全局的语义信息。前馈神经网络则负责对输入的隐藏表示进行非线性变换。 总而言之,深度学习中的Transformer是一种用于序列建模的架构,它采用了编码器-解码器结构,并通过注意力机制来捕捉序列之间的依赖关系。它在自然语言处理等任务中具有广泛的应用前景。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [深度学习-Transformer实战系列课程](https://download.csdn.net/download/muihoa/86656806)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [深度学习 Transformer架构解析](https://blog.csdn.net/mengxianglong123/article/details/126261479)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [深度学习-Transformer详解](https://blog.csdn.net/fzz97_/article/details/128905992)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值