李宏毅 Transformer 学习笔记


  其中PPT下载地址为 https://download.csdn.net/download/herosunly/16811638

1. self-attention

1.1 为什么要引入self-attention

  基于RNN(LSTM)的序列模型来说,计算每个cell的输出无法进行并行化。而且单向的RNN无法很好的利用全局的信息。其中下面中的a和b均为向量。
在这里插入图片描述
  self-attention的出现恰好解决了以上两大问题。
在这里插入图片描述
其中x->a这一步貌似在论文中并没有体现。在求每一个output的时候,对应的q会对所有的k求内积(除以 d \sqrt d d ,其中d为向量的维度),然后通过softmax进行归一化,得到对应每个v的权重 α ^ \hat \alpha α^,最终加权v计算得到b。

1.2 self-attention的基本原理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3 self-attention的矩阵表示

  矩阵表示是为了体现可使用GPU进行加速。其中这一部分涉及到了矩阵的几种乘法。除了常规的乘法以外,还有列操作和行操作。

  列操作是指矩阵的 C C C的第j列是通过矩阵 A A A乘以矩阵 B B B第j列的列向量得到的。这表明矩阵 C C C 的列向量是矩阵 A A A列向量的线性组合,组合的“权”就是矩阵 B B B 第j列的各个分量。
在这里插入图片描述
  行操作是指矩阵 C C C 的第 i 行是通过矩阵 A A A 的第 i 行乘以矩阵 B B B得到的。这表明矩阵 C C C的行向量是矩阵 B B B行向量的线性组合。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
对于每个输出b来说,权重是一个列向量。
在这里插入图片描述
在这里插入图片描述

1.4 Multi-head self-attention

  为什么要设置不同的head,不同的head关注的信息可能是不同的,有的head关注的是局部信息,有的关注的是较长距离的信息。
在这里插入图片描述
  得到Multi-head的两个result b i , 1 b^{i,1} bi,1 b i , 2 b^{i,2} bi,2,可直接进行concat得到 b i b^i bi,或者乘以 W 0 W^0 W0(降维)得到 b i b^i bi
在这里插入图片描述

2. Positional Encoding

  在self-attention中并没有位置信息,所以需要添加上位置信息。在词嵌入后添加one-hot向量 p i p^i pi(维度为 p i p^i pi的维度)。
W X = [ W I W p ] [ x i p i ] WX=[W^I \quad W^p] \left[ \begin{array} { l } { x^i } \\ { p^i } \end{array} \right] WX=[WIWp][xipi] W X = W I x i + W p p i = a i + e i WX=W^I x^i+W^p p^i=a^i+e^i WX=WIxi+Wppi=ai+ei
在这里插入图片描述
http://jalammar.github.io/illustrated-transformer/
在这里插入图片描述

3. seq2seq

seq2seq的复习视频为:https://www.youtube.com/watch?v=ZjfjPzXw6og&feature=youtu.be
在这里插入图片描述
https://ai.googleblog.com/2017/08/transformer-novel-neural-network.html ,在decoder阶段输出不仅是由encoder的输出有关,还和decoder之前的输出有关。如图中绿色的部分不仅要收到上一行的4个输入,还有接收同一行前面的3个输入,才能生成绿色部分。
在这里插入图片描述

4. Transformer

在这里插入图片描述
  Batch Norm: https://www.youtube.com/watch?v=BZh1ltr5Rkg, Layer Norm:https://arxiv.org/abs/1607.06450, 其中Add层指的是把输出和输入相加。其中Batch Norm是让在Batch Size中的样本同一个维度的均值为0,方差为1。Layer Norm是让同一样本的不同维度的均值为0,方差为1。

  Masked:关注已经产生的部分。
在这里插入图片描述
每个词两两之间都有attention,https://arxiv.org/abs/1706.03762。
在这里插入图片描述
it在不同的句子中代表的不同的含义。
在这里插入图片描述
Multi-head Attention的例子,红色的更关注local信息,绿色的更关注长距离信息。
在这里插入图片描述
https://arxiv.org/abs/1801.10198,机器阅读了多篇文章,检索生成对应词汇的维基百科。
在这里插入图片描述
https://ai.googleblog.com/2018/08/moving-beyond-translation-with.html
在这里插入图片描述

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

herosunly

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值