NLP - Transformer


Transformer

Transformer 完全基于 attention;
是一种 seq2seq 模型,有 encoder 和 decoder,很适合做机器翻译;
不是RNN,没有循环结构。只有 attention 和全连接层。
实验效果很好,完爆 RNN;业界已经不使用 RNN,而是使用 Transformer + Bert。

2017年发表论文:Attention Is All You Need


  • Self-attention
  • multi-head
  • 多层堆叠,位置编码
  • 并行加速训练

Bert 提供预训练模型,不需要随机初始化。


传统网络的缺点

RNN 不能做并行运算。因为后一层的需要用到前一层的隐藏特征(中间结果),无法独立运算。

传统的 word2vec 训练出的词向量基本不会改变,实际不同词在不同语境表达的含义不同。
Bert 中的词拿过来还会根据语境而改变。


Attention 是使用权重来计算。
Self-attention


Transformer 结构

和大多数seq2seq模型一样,transformer的结构也是由encoder和decoder组成。
在这里插入图片描述


  • 如何编码
  • 输出结果是什么
  • attention 的目的
    希望让计算机通过上下文来判断,关注的目标是什么。而非人为预加。
  • 如何组合

Self-attention

it 在以下两句话中,所代表的内容不同。
计算机

在这里插入图片描述


借助三个辅助矩阵(W)
Q: query,要去查询的
K: key,等着被查的
V: value, 实际的特征信息

在这里插入图片描述

输入数据,经过三个矩阵,形成了三个特征;


如何计算 self-attention
  • q和k的内积,表示有多分配
  • 输入两个向量得到一个分值
  • K:key,等着被查的
  • V:value,实际的特征信息

最终得到的分值,经过 softmax 就是最终上下文结果;
Scaled Dot-Product Attention 不能让分值随着向量维度的增大二增加。


将分值转换为比例:softmax

在这里插入图片描述


Attention for Seq2seq Model
在这里插入图片描述

encoder 的输入是 m 个向量, x 1 x_1 x1 x m x_m xm
encoder 把输入的向量信息,压缩到状态向量 h 1 h_1 h1 h m h_m hm中;
最后的状态 h m h_m hm 是对所有输入的概括。

decoder 是文本生成器,依次生成状态s;
然后根据状态 s 生成单词;
把新生成的单词作为下一个向量 x’;

如果用 attention,还需要计算 context vector C;
每计算出一个状态s,就计算一个 C;


具体是这样计算C的:

在这里插入图片描述
α i j = a l i g n ( h i , s j ) \alpha_{ij} = align(h_i, s_j) αij=align(hi,sj)

把 decoder 当前状态 s j s_j sj 与 encoder 所有m个状态作对比,用 align 函数计算相关性。
每计算一个 C,就要计算 m 个权重 α \alpha α。每个 α \alpha α 对应一个状态h。


attention 整体计算流程

  • 每个词的 Q 会跟每一个K计算得分;
  • Softmax 后就得到整个加权结果;
  • 此时每个词看的不只是它前面的序列,而是整个输入序列;
  • 同一时间计算出所有词的表示结果。

multi-headed 多头机制

  • 一组 q、k、v 得到了一组当前词的特征表达;
    多组 qkv 得到多组特征表达。

  • 类似卷积神经网络中的 filter
    能不能提取多种特征呢?

  • 卷积中的特征图。

  • 通过不同的 head 得到多个特征表达;(一般8个)

  • 将所有特征拼接在一起;

  • 可以通过再一层全连接来降维;(非PCA降维)

在这里插入图片描述


multi-headed 结果

不同的注意力结果得到的 特征向量表达不同


堆叠多层

计算方法都是相同的


位置信息表达

在 self-attention 中每个词都会考虑整个序列的加权。
所以其出现位置并不会对结果产生什么影响,相当于 放哪儿都无所谓。
这不符合实际情况,我们希望模型能对位置有额外的认识。

在 embeddings 智商,增加位置编码 postional encoding。
位置编码实现方法有很多,常见的是 增加周期性信号,如正弦、余弦。

在这里插入图片描述


残差连接

在这里插入图片描述

无法保证新增的一层,比上一层效果好。
如果后一层效果并没有更好,则回到上一层。
多一手准备,至少不比原来差。防止某一层跑偏。


归一化

对层做归一化。

在这里插入图片描述


Decoder 端

decoder 输出也是一个序列。
attention 计算不同。
加入了 mask 机制;


mask 机制

decoder 需要预测结果;是一个接着一个往后出答案;
比如,有四个词,前三个词来预测,后面一个当做标签 掩盖起来,就是 mask ,

在这里插入图片描述


最终输出结果

  • 得出最终预测结果
  • 损失函数 cross-entropy 即可

相关资料

FT-Transformer是一种基于Transformer结构的神经网络模型。它在自然语言处理任务中取得了很好的效果。FT-Transformer的全称是Fine-Tuned Transformer,它是通过在预训练的Transformer模型上进行微调来实现的。 FT-Transformer的训练过程可以分为两个阶段。首先,使用大规模的语料库对Transformer模型进行预训练。预训练的目标是通过自监督学习来学习语言的表示。在预训练过程中,模型通过掩码语言模型任务和下一句预测任务来学习语言的上下文信息。 在预训练完成后,FT-Transformer进入微调阶段。微调是指在特定任务上对预训练模型进行进一步训练,以适应该任务的特定要求。在微调阶段,FT-Transformer使用有标签的数据集进行训练,并通过最小化任务特定的损失函数来优化模型参数。微调的目标是使模型能够更好地适应特定任务的特征和要求。 FT-Transformer相比于传统的MLP(多层感知机)和ResNet(残差网络)结构,在某些任务上表现更好。然而,根据引用中的描述,通过实验发现类似ResNet结构的网络在效果上明显优于FT-Transformer。这可能是由于超参数设置不当导致FT-Transformer无法超越ResNet的结果。 总结来说,FT-Transformer是一种基于Transformer结构的神经网络模型,通过预训练和微调来实现。它在自然语言处理任务中具有一定的优势,但在某些情况下可能不如其他结构的网络效果好。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值