李宏毅机器学习:self-attention(自注意力机制)

2021-07-29  本文已影响0人  jenye_

面临的问题

解决一组向量的输入问题



Eg.

文字处理:



Word Embedding:一个句子就是长度不一的一排向量

音频处理:


社交网络:

分子结构:


那么多向量的情况下输出是什么呢?

- 每一个向量都有一个输出(Seqsuence Labeling)


Eg.


不知道多少个输出(seq2swq)


Seqsuence Labeling

那如果我们有一个目标是要将整个句子都考虑在内呢?那这样的window就会有长有短。这样可能就要考虑到最长的window,这样做的话,不仅会导致FC的参数过多,还可能导致over-fitting的问题。


Self-attention


绿框中的向量是考虑到一整个句子而产生的向量。
同样的Self-attention也可以多次叠加。


self-attention输入不一定是初始输入,有可能是某个hidden-layer


self-attention的工作机制

关联性/alpha

a^1 输出b^1首先要计算a^1 和其他输入的关联性。

那么如何计算这个关联性?


实际操作中a^1也会和自己计算关联性:


计算关联性之后,会把所有的关联性做一个softmax



这个soft-max其实是没有道理的,用其他激活函数也是可行的。


最后得到的这个关联性,也叫做attention score,接下来我们需要做的就是根据attention score去提取信息。


提取信息



用矩阵乘法的方式来观察self-attention的计算过程:




总结一下整个self-attention的过程:



多头注意力机制

目的:找不同的相关性



self-attention的问题:没有位置的信息,所以我们可以加上Positional Encoding。

Positional Encoding

那么e^i是什么形式的呢?
最早的e^i是这种形式的:


之后也有各种形式,但是还没有定论哪一种更好。

Truncated Self-attention

其实在长序列的数据当中,还是会考虑太多的向量。
Truncated Self-attention就使用了类似window的思想:


Self-attention for Image

eg.


Self-attention v.s. CNN


Self-attention vs RNN


Self-attention for Graph

Graph和上面讲到的场景的区别就是自带关联关系(edge)



To Learn More

上一篇下一篇

猜你喜欢

热点阅读