面临的问题
解决一组向量的输入问题

Eg.
文字处理:

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

社交网络:

分子结构:

那么多向量的情况下输出是什么呢?
- 每一个向量都有一个输出(Seqsuence Labeling)

Eg.

-
只输出一个label
eg.
不知道多少个输出(seq2swq)

Seqsuence Labeling
-
最初始的想法
直接把每个vector扔到FC里面就可以了,但这种情况两个saw对于神经网络是一样的,这显然是有问题的。
-
如何考虑上下文?
我们按window进行输入,这样就可以让FC考虑的前后的关系。
那如果我们有一个目标是要将整个句子都考虑在内呢?那这样的window就会有长有短。这样可能就要考虑到最长的window,这样做的话,不仅会导致FC的参数过多,还可能导致over-fitting的问题。
Self-attention

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

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

self-attention的工作机制
关联性

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


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

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

这个soft-max其实是没有道理的,用其他激活函数也是可行的。
最后得到的这个关联性,也叫做attention score,接下来我们需要做的就是根据attention score去提取信息。

提取信息


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





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

多头注意力机制
目的:找不同的相关性


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

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

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

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




