面临的问题
解决一组向量的输入问题
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)
网友评论