Transformer 论文学习笔记

重新学习了一下,整理了一下笔记

论文 :《Attention Is All You Need》
代码http://nlp.seas.harvard.edu/annotated-transformer/
地址https://arxiv.org/abs/1706.03762v5
翻译Transformer论文翻译

特点

  1. 提出一种不使用 RNN、CNN,仅使用注意力机制的新模型 Transformer;
  2. 只关注句内各 token 之间的关系;
  3. 使用矩阵计算长程token之间的关联,提升注意力的计算效率;
  4. 使用位置嵌入,为不同位置的token赋予不同的含义。

核心贡献

  • Self-Attention

Transformer 的基本结构

如图,其结构主要分为 Encoder 与 Decoder 两部分,基本单元是 Multi-Head Attention、Layer Norm、Residual Connect、Feed Forward Network,其中 Decoder 每一子块的输入处还有一个 Masked Multi-Head Attention。

Encoder 的输出会被送到 Decoder 的每一个子块中。


Self-Attention

Self-Attention ( K , Q , V ) = softmax ( Q K T d ) V \text{Self-Attention}(K,Q,V)=\text{softmax}(\frac{QK^T}{\sqrt{d}})V Self-Attention(K,Q,V)=softmax(d QKT)V

  • 上图 左侧是 Self-Attention 的计算流程
  • 从计算图以及共识来看,Self-Attention 是被 d \sqrt{d} d Scaled 过的原因是:该因子可以抑制 Q K T QK^T QKT 中过大的值,以防止梯度消失现象的出现
  • softmax 负责计算概率化的注意力分布,该分布负责在 V 中选择与 Qi 关联度较高的 values;
  • Q K T QK^T QKT 的目的是利用矩阵运算一次性计算出每个 Q i Q_i Qi 与所有 keys 的点积 ,同理,后面也一次性地为每个 Q i Q_i Qi 筛选出相应的 values。这种方法优点 是 Self-Attention 可以无视句中 token 之间的距离,以此获得更高的性能,缺点是计算量庞大;
  • 上图 右侧是 Multi-Head Self-Attention 的计算流程,原因是:Multi-Head 增加了特征子空间的数量,使模型能够获取更加丰富的语义信息
  • 文本信息是有先后顺序的,为了防止 Decoder 在处理 LLM 任务时出现信息向"历史"方向传播的现象,需要对一些与 illegal 连接关联的 values 采用 mask out 的操作,即屏蔽掉(设置为 − ∞ -\infin −∞),即只能用前面的token预测后面的token,不能反过来。

Self-Attention 的一个缺点及修补方式

缺点 :点积运算无法对序列中 token 出现的位置进行建模,这样会导致模型无法充分地利用数据上下文中所蕴含的丰富的语义信息。
解决方式:引入位置嵌入(Position Embedding、Position Encoding)

python 复制代码
PE_{pos,2i}=sin(pos/10000^{2i/d_{model}})
PE_{pos,2i+1}=cos(pos/10000^{2i/d_{model}})

使用三角函数的原因 :模型借此可为每个token获取相对位置 信息(对任意偏移量 k k k, P E p o s + k PE_{pos+k} PEpos+k 都可以作为 P E p o s PE_{pos} PEpos 的线性函数),此外它还可以把模型外推到比训练中最长的序列更长的序列中去。


Self-Attention 的复杂度:

相关推荐
卡兰芙的微笑3 分钟前
编译鸿蒙6.0release版本出错
学习
暴躁小师兄数据学院3 分钟前
【WEB3.0零基础转行笔记】Golang编程篇-第3讲:GO语言中的运算符
笔记·golang·web3
近津薪荼4 分钟前
优选算法——滑动窗口3(子数组)
c++·学习·算法
FPGA小迷弟5 分钟前
基于FPGA实现HDMI接口,选型/核心技术
学习·fpga开发·verilog·fpga·modelsim
新时代牛马12 分钟前
CANopenNode 接口及 CANopenLinux 完整实现
网络·学习
2501_9436953324 分钟前
高职大数据运维与管理专业,怎么学习Hadoop的基础操作?
大数据·运维·学习
嗯嗯**25 分钟前
Neo4j学习3:Java连接图库并执行CQL
java·学习·spring·neo4j·图数据库·驱动·cql
爱吃泡芙的小白白27 分钟前
深入权重之核:机器学习权重参数最新技术与实践全解析
人工智能·学习·机器学习
ajole28 分钟前
Linux学习笔记——基本指令
linux·服务器·笔记·学习·centos·bash
渡我白衣31 分钟前
无中生有——无监督学习的原理、算法与结构发现
人工智能·深度学习·神经网络·学习·算法·机器学习·语音识别