处理输入长度不一样时的情况。输入多个 vector,每个 vector 长度不同。

举个例子,若将单词作为输入,那么其中的一种方案是使用 one-hot 编码,这会导致每个词汇之间的关系消失,通过 one-hot 向量,无法提取出他们之间的关系。 另一种方案是使用 Unsupervised Learning: Word Embedding ,会把词汇分类?

输出是什么样的?

先说输入和输出相同时:

如果使用 fully-connected 网络,那么对于相同的输入,其将给出相同的输出,例如做词性分析,对于出现在句子不同位置但相同的词,将给出相同的输出,显然是不对的。显然这里需要更多的信息,比如看到整个句子之间的关系

解决方案,比如将周围的词一起丢入。但是这个方案是有极限的,由于每一个 sequence 的长度不一样,所以如果要使用多个输入,那么输入长度要以最长的为准,这显然是不合理的。

引入 Self-attention

输入一个 sequence,也会对应输出一个 sequence,这个输出的 sequence 是考虑到一个整个 sequence 的“合成”版本。

可以和 fully-connected 网络交替使用。

其中 Transformer 就是使用了 self-attention。1706.03762

将 sequence 和别的关联起来,并用一个参数 $\alpha$ 表示他们的关联程度。

用 dot-product 计算 $\alpha$。

其中这个 $\alpha$ 被称作 attention score。$q$ 和 $k$ 之间做的是 inner product。自己也要和自己算一下关联性。(有什么用?等待实验)

Screen Shot 2022-04-21 at 1.39.45 PM.png

然后计算出来的结果过 soft-max(normalize)。这边可以不用 soft-max,也可用 active func。可以试试看。

q: query, k: key

q: query, k: key

然后最后用 $\alpha$ 作为权重,得到对应的向量。

Screen Shot 2022-04-21 at 1.51.19 PM.png

另外一个视角,将他们看成一个矩阵乘法。

Screen Shot 2022-04-21 at 2.06.55 PM.png

$$ Q=W^qI\\ K=W^kI\\ V=W^vI\\ A=K^TQ\\ A' = soft\text{-}max(A)\\

O=VA' $$

其中 $A'$ 被称为 Attention matrix。$W$ 是 train 出来的。

Screen Shot 2022-04-21 at 2.26.56 PM.png

Screen Shot 2022-04-21 at 3.03.07 PM.png

Multi-head Self-attention

不止一个 $q$,不同的 $q$ 负责不同种类的相关性。

Screen Shot 2022-04-21 at 4.08.19 PM.png

Screen Shot 2022-04-21 at 4.06.02 PM.png

Screen Shot 2022-04-21 at 4.07.36 PM.png

经过 Self-attention 后会丢失位置信息。对于之前的例子词性标记来说,位置信息还是很重要的。