Attention的寓言

今天带我的同事让我讲Transformer的原理,我因为基础不牢讲的很烂,但有一个值得记下来的点。

首先是self-attention的目的。self-attention layer的作用是把n个词向量转换成n个矩阵(然后concat成一个),而使用self-attention mechanism的目的则是让每一个矩阵既能保留对应词向量的【有用】信息,又能包含其它【有关】的词向量的信息。一句话概括:保存【每一个】词向量的【有价值】信息。

举例:Never gonna give you up,模型在翻译give的时候就要关注up而不是you,如果只看give you就翻译成「给你」了,而关注「give up」就可以翻译成放弃。

那么,self-attention是怎么做到这一点呢?

还是翻译任务,可以用一个跳蚤市场做比喻。我们把句子中的每一个词作为一个人,他是「give」,你是「you」,我是「up」,我们共同的名字是「孤独的英语单词乡巴佬」,要在跳蚤市场购买我们的进城货,去「汉字大都市」里开始新的生活。每个人有一个摊位,我们既拥有全部商品,也需要购买很多商品。我们拥有的商品就是我们各自的语义信息,也就是value,我们要买的商品就是所有与我们有关的语义信息。

我们怎么才能买到需要的东西呢?跳蚤市场的两名工作人员(Weight-q,Weight-k)会帮我们所有人【各自】列出购物清单(query)和商品清单(key)。query=Wq x value, key = Wk x value。工作人员经验丰富(train过),所以一看到give就知道他可能需要up,给他的query写【寂寞少妇重金求up】,给他的key写【性感give可you可up】

这样一来,我们只需要按照自己的购物清单(query)和所有人的商品清单(key)一一对比,就能知道这个人的摊位上我要买哪些、买多少东西了。这个对比的结论就是score。score = Norm(query x key)。

再然后,我只需要按照每个摊位的score进行购物,就能得到所有我需要的商品。将他们放在一起就是我这次购物的结果了。X = ∑score x value。

那么我们这一个句子中的每一个词走进跳蚤市场再出来以后就都是满载而归,give找到了它的up,let找到了它的down,只有you孤独一人,只好在每个词上都匀一点货。所有人都如愿过上了城里人的生活,也就是destination的结果了。我们在城市里带着与其它人的联系和别离重新开始生活,或达成契约,或孤独终老,或面目全非,或初心不改。「never gonna give you up」变成了「永远不会放弃你」,give和up组建成了新的家庭「放弃」,但正如这名字一样,他们过去的付出与向上通通被抛却、变成仅供回忆的青春;never和它自己决裂,在青山医院,「永远」和「不」两个人格纠缠不休。gonna没有在跳蚤市场收获新的生命,反而被他人买走了所有独特的闪光点,成为和will, may, can都差不多的平凡的「会」。而you,我的朋友,你从人群当中走了出来,走到了句子的结尾,变成了「你」今天的模样,好像什么都没变,又好像什么都变了。

updatedupdated2023-06-162023-06-16