Transformer笔记

最近transformer在cv领域崭露头角,分类效果直追CNN。也趁机来补习一波在NLP领域已经火了很久的transformer。本文是在看过李宏毅老师的教程之后的理解,意在用最简单的表述讲解transformer。

为什么用transformer

在这里插入图片描述
在seq2seq模型中,最常用的是RNN,但是RNN无法并行计算;而CNN虽然可以并行,但需要多层堆积才可以对全局进行感知(类似于感受野)。因此两个模型的效率都不是太高。所以我们想要用一个模型来取代之,此时Google一篇论文《Attention is all you need》应运而生,即transformer。

在这里插入图片描述

Attention机制

在这里插入图片描述
transformer里面最重要的一环就是self-attention。attention机制中有一个三元组(q,k,v),q表示query,用于match其他的key;k表示key,用于被query来match;v表示value,表示相应的key的取值。在上图中,输入x是若干个词嵌入,首先经过一个线性变换到a,随后通过三个分支分别得到(q,k,v)这个三元组向量。

在这里插入图片描述
随后利用三元组就可以计算attention的输出,首先将q和k进行点积(表示用q去matchk,计算两者之间的相似度);随后将该矩阵放缩除以维度d的平方根,在做softmax;最后将上述结果与value相乘,得到与输入相同维度的输出,整个公式如下图所示:

在这里插入图片描述

Multi-head self-attention

多头注意力机制可以拓展模型专注于不同位置的能力,其示意图如下:

在这里插入图片描述

可以看出multi-head就是在原始的三元组上拓展出若干个三元组,给出了注意力层的多个表示子空间。

Position Encoding

上述方法并没有涉及到句子的序列问题,因此各个位置的词嵌入是等价的。所以需要引入位置编码,这一部分没有做太多研究,李宏毅老师课件上的图是这样的:

在这里插入图片描述

transformer模型总览

在这里插入图片描述
这张图是最经典的,首先看Encoder部分,若干个词向量的嵌入作为输入,经过一个multi-head的注意力模块,将结果与原始输入相加(类似于resnet的残差),再做layer-norm(与BN相对,BN是将不同样本对应的相同维度做标准化,而layer-norm是对同一样本各个维度做标准化),随后再经过一个Feed-forward网络(全连接层),再经过add和norm得到encoder的输出。

对于Decoder,其输入不仅有encoder的输出,还包括某一个词前面的各个输出,对应masked multi-head attention。其他结构与encoder一致。

最后贴一篇个人认为非常棒的博客:https://www.cnblogs.com/robert-dlut/p/8638283.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值