Attention注意力机制

本文详细介绍了变长序列的处理方法,特别是Seq2seq任务中的序列标注问题。自注意力机制解决了全连接方式的不足,通过Attention机制计算向量相关性,Multi-headself-attention允许多角度关注,以及PositionalEncoding为序列添加位置信息。文章还对比了CNN和RNN与自注意力机制在处理序列数据上的差异。

1. 背景

1.1. 变长序列

1.2. 序列的输出格式

  • 每个向量对应一个标签,如词性标注
  • 整个序列输出一个标签,如情感分析(Sentiment Analysis)
  • 由模型决定输出的标签个数,这种任务称为Seq2seq任务

1.3. 序列标注

使用全连接的方式,没办法很好地考虑整个序列的信息:

  • 连接太多,计算量大
  • 容易过拟合
  • 对于变长序列,还需要统计最长的序列长度为多少,然后调整全连接的边

1.4. self-attention

自注意力机制可以很好地解决以上的问题!!

2. Attention

2.1. 向量相关性

如何计算两个向量的相关性呢?

两个向量分别乘上两个矩阵(下图左边的),q是query的含义,可以理解为检索

然后再做一个softmax:

得到每个a1与a2, a3, a4的注意力分数之后呢?

这里引入一个v向量,理解为value。v向量通过将输入向量乘上参数矩阵 W^v得到。

用a1与a1, a2, a3, a4的注意力分数(包括和a1自身的注意力分数),乘上他们的v向量,然后求和,就得到了b1向量。

就是一种根据相关性然后加权融合的思想。

由此可以得到b2, b3, b4

这里的s(x,q)注意力打分函数常用向量的点积。

可以将每个向量之间的计算视为矩阵之间的运算:

也就是把输入向量组成一个矩阵,输出的q, k, v向量也组成Q, K, V矩阵

下图中输入矩阵为I,输出矩阵为O

2.2. Multi-head self attention

原因:相关性可能有多种定义,因为在某些场景下,需要多个不同的Q矩阵,定义不同的相关性计算方式。

如下图,为2-heads,对每个q, k, v乘上2个不同的矩阵,得到q1, q2

2.3. Positional Encoding

至此,自注意力机制可以实现输入向量间相关性的计算,但是没有位置相关的咨询。这对于序列数据来说,会丢失位置信息。如何加上位置编码呢?

A Gentle Introduction to Positional Encoding in Transformer Models, Part 1

Transformer学习笔记一:Positional Encoding(位置编码)

性质:

  • 两个位置编码的点积(dot product)仅取决于偏移量,也即两个位置编码的点积可以反应出两个位置编码间的距离。
  • 位置编码的点积是无向的(点积与方向没有关系,只与距离有关),即Transformer的位置编码不包含方向性。

2.4. self-attention vs CNN

CNN可以看作self-attention的特例,CNN只计算某个范围内的信息,而self-attention计算整个范围的信息。

2.5. self-attention vs RNN

  • RNN难以考虑长距离的信息,而self-attention不会
  • RNN无法并行计算,而self-attention可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值