Transformer学习

Teansformer 模型的作用

基于 seq-to-seq 架构的transformer 模型可以完成 NLP领域研究的典型任务,如 机器翻译,文本生成等。 同时由可以构建预训练语言模型,用于不同任务的迁移学习。transformer的经典模型如下图所示:

d273999724ca4900ad2f83b9361eb48f.png

seq-to-seq架构

一段语音讯息 ——> Speech Recognition ——> 识别的语言文本

一段语言文本 ——> Machine Translation ——> 翻译的另一种语言文本

一段语音讯息 ——> Speech Translation ——> 翻译的另一种语言文字

seq2seq 可运用到不同类型的语言处理中,如训练一个对话机器,训练一个分析摘要重点的机器,或是训练一个判断一句话是正面或者反面的机器。虽然范围很广,但在处理不同问题时找到最合适的模型进行解决将大大提高效率。

http://speech.ee.nut.edu.tw/~hylee/dlhlp/2020-spring.html 提供了对于不同类型处理方向使用不同的模型的方法。

seq2seq  的流程:

input sequence ——> encoder ——> decoder ——> output sequence

transformer 原理:

encoder 架构:

工作:向其输入一些向量后输出另外一些向量,这是用于许多模型。但 transformer 的 encoder 有其独特的结构,一个encoder 中有许多block 层,一个block 又分为几个小层,最终得到下一个 block 的输入。

b4775becf4dd451da533f0548d033d79.png

positional encoding 在 self- attention 基础上加入位置信息,Multi- Head attention 就是 self attention 的 block ,即Multi- Head self attention;add & norm 就是 下文提到的 residual attention + layer normalization;再进入 fulling connected 进行 feed forward,并进行add &norm。BERT 网络也使用的是这种网络。

positional encoding

Multi-Head Attention 就是self-attention block;Add&Norm 就是Residual + Layer normalization

BERT模型就是参照的 Transformer 的 encoder 来设计的

 encoder 原理

一个 block 的具体工作方式:

aafa6a68fb9d443894ce86858aa7af69.png

 输入一排向量输出一排向量。一个block 并非一个layer ,一个block 包含多个layer

流程:输入一排向量进入block ,首先进入 self- attention 来考虑整个sequence 的信息,输出另一排向量,接着进入full connection 层,最后输出下一个block 输入的向量。

事实上,经典的 transformer 中的一个 block 的计算方式更加复杂。

33e666d46577450282aa73d30b318f07.png

解释一下:首先输入一排向量进入block ,在block 中首先进入 ,由self- attention 对整个一排向量进行分析,得到对应一个向量的输出;再通过 residual attention 将原向量和所得向量相加;得到的新向量再进入 layer Normalization 进行归一化 ;最终得到的向量还要进入 full connection 进行全连接;与前面操作类似,得到的向量经过 residual attention 、layer normalization等最后得到最终该block 的输出。

Self-attention

解决的问题:对于大部分model 来说输入是一个 vector,

vector ———> Model ———> scalar or Class

那么如果输入是一排向量、且这一排向量中向量数量是变化的情况。

vector set ———> Model ———> scalars or Classs

输入是什么?

输入的sequence,长度是变化的:

场景一文字处理:

如何将一个sequence 分解成多个词汇向量?可用 One-hot Encoding,或者word embedding

703e783accae4657a4225ce0e5a225cc.png

word embedding:

Postionwise FFN

还有一段语音,一个图

输出是什么?

1、输入的每个向量都输出一个label   eg:POS tagging

2、输入的一个sequence 仅输出一个label   eg:Sentiment analysis

3、机器自己决定输出多少label    eg:transformer 、seq2seq

对于第一种sequence labeling情况:

我们大可以将每个vector 都输入fully- connected 中得到对应的label,但此时会出现一个问题:比如 l saw a saw 中,两个saw 在进入 FC中后得到一样的结果。

可以考虑对于一个 FC 给它一个window 让其参考sequence的上下文,但又会出现另一个问题:如果一个label 需要考虑 整个 sequence?

7439d647c695465c8ee779dfb08d6b1c.png

 此时self- attention 用于解决这个问题

Residual attentiont

Layer normalization

Decoder 架构 

两类: Autoregressive 和 Non-autoregressive

Autoregressive Decoder

上图为decoder的架构

我们将中间的 Mulit-Head Attention 和 Add & Norm 盖住,其结构就和encoder相同了

Masked Self-attention

与Self-attention 的区别是:Self-attention 在输出每个对应的向量时,首先考虑了所有的输入向量,而Masked Self-attention 在输出对应向量时只能考虑其对应输入向量及之前的向量,无法考虑全部。

原因是:decoder在吃入由encoder产生的输出时,是一个一个吃入,不同于encoder的输入是同时全体的。原理如下图示:

当decoder输出“习”这个单词后,我们应该继续将“习”作为decoder的输入,而输出则是一个名为 “END” 的符号的概率最大,那么就输出 END,结束。

Non-autoregressive(NAT)Decoder

与Autoregressive 最大的区别是, NATdecoder 是同时一个步骤产生结果,不像 Autoregressive Decoder 是一个向量一个向量的产生。其 END 可能在产生的向量中间,那么END 后面的向量就丢弃。

NAT Decoder 是一个大坑,它的变现不如 AT D 好。

Decoder

这里多出来的部分是encoder 和 decoder 连接的桥梁,叫做  Cross-attention

其中的两个输入来自encoder 的输出向量的两个分量: k、v

k 为该向量的键,键是用于计算注意力权重的一部分。它起到了对序列中每个位置的编码和索引作用。注意力机制利用键来衡量当前位置的注意力应该如何分配给其他位置。在Encoder中,k是通过对Encoder的输出向量进行线性变换(通常是通过矩阵乘法)得到的。

v 为该向量键对应的信息,它提供了用于生成最终输出的上下文相关特征。在注意力机制中,根据注意力权重对值进行加权平均,以获得与当前位置最相关的上下文信息。在Encoder中,v也是通过对Encoder的输出向量进行线性变换得到的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值