由于工作关系,最近一直在对大模型中的注意力机制进行优化。相信你肯定知道优化的目的:那就是让大模型推理得更快,用起来更加丝滑和流畅。
在优化注意力机制的过程中,免不了要看一些论文,发现许多优秀的文章对于注意力机制的解释十分透彻。
很多人听说注意力机制可能是从谷歌的《Attention is all you need》这篇文章开始。
这个论文的题目很有意思,它抛弃了传统的为论文取标题的方式,而是直接用了一个直白到不能再直白的题目。
就是要想告诉你:如果做AI模型,你只需要注意力就够了。
这篇论文中,作者摒弃了传统的RNN等循环结构,取而代之的是一种完全基于注意力的 Transformer架构。
这篇论文可以说以一己之力,开创了人工智能的大模型时代。从这篇论文开始,Bert模型、GPT模型逐渐走上了AI的历史舞台——大模型时代到来了。
接下来,我会结合最近看的一些论文中的观点,以一个简单的矩阵乘法为例,来揭示一下什么是注意力。
1.来调个酒吧
这里用我在很多场合举过的一个例子:鸡尾酒调酒师来说明。
假设你是一个鸡尾酒调酒师,在你家的酒柜里储存了很多鸡尾酒的原料,有金酒、利口酒、柠檬汁和可乐等等。
今天你的家里来了 3 位客人,他们分别喜欢喝“自由古巴”、“长岛冰茶”以及“龙舌兰日出”这 3 款鸡尾酒,并向你下了单,希望你可以为他们调配出各自喜欢的鸡尾酒。
巧的是,这 3 款鸡尾酒的原料都是金酒、利口酒、柠檬汁和可乐。
你作为一个调酒师,分分钟就把客人的爱好的鸡尾酒给调出来了。
你是怎么调配的呢?你知道鸡尾酒的配方,你是按照下面的配方来调配的:
自由古巴: 20%金酒 + 45% 利口酒 + 10%柠檬汁 + 25%可乐
长岛冰茶: 60%金酒+ 30%利口酒 + 5% 柠檬汁 + 5% 可乐
龙舌兰日出:30%金酒 + 10%利口酒 + 30%柠檬汁 + 30%可乐
这里的利口酒和可乐,就是输入资源,配比(比如可乐的 25% )就是赋予该资源的权重。
你将相同的原料按照不同的配比混合起来,就得到了不同口味的鸡尾酒。
这种调制鸡尾酒的做法,如果抽象成一个公式,可以表达如下:
自由古巴 = 0.2 x 金酒 + 0.45 x 利口酒 + 0.1 x 柠檬汁 + 0.25 x 可乐
长岛冰茶 = 0.6 x 金酒 + 0.3 x 利口酒 + 0.05 x 柠檬汁 + 0.05 x 可乐
龙舌兰日出 = 0.3 x 金酒 + 0.1 x 利口酒 + 0.3 x 柠檬汁 + 0.3 x 可乐
上面这种连乘的操作,你可能会立刻想到可以用矩阵乘法来表示。

上图中,左矩阵是一行四列,代表四种调制鸡尾酒的原料;右矩阵是四行三列,每一列代表调配不同的鸡尾酒时需要的原料配比。
按照矩阵乘法的规则,他们的输出结果是一行三列的矩阵,分别代表调配出来的三种鸡尾酒。
看到这是不是有点熟悉了。
通过矩阵乘法的运算,可以对输入资源施加不同的权重配比,从而创造出新的口味的鸡尾酒。
那这和注意力有什么关系呢?
在没有注意力机制的情况下,可以认为调制鸡尾酒对于每种原料都是同等对待的。
你可以将四种原料按照1:1:1:1的配比进行调配,得到一种口味的鸡尾酒。
但是引入注意力之后,就会发生微妙的变化。
此时你再去调制某一款鸡尾酒,你对四种原料使用的配比就不同了。这个配比,就是你对输入原料施加的注意力权重。
还是上面的例子,你在调制长岛冰茶时,你需要用60%的金酒作为原料。
此时,如果将长岛冰茶比作一个人的话,他可能会指着金酒说:我注意到你了。
却不会指着柠檬汁和可乐说我注意到你了,这是因为柠檬汁和可乐在金酒中的占比非常少。
也就是说,当矩阵乘法中其中一个矩阵中的数值是权重时,那么就可以认为这个权重是对另一矩阵施加的注意力分数。
高注意力分数对应位置的输入,在最终输出中便会占据更加重要的位置。
这在自然语言处理中非常重要。
比如,当你用大模型翻译“Tom chase Jerry”这句话到中文“汤姆在追杰瑞”的过程中。
模型翻译到“杰瑞”这个单词时,肯定会更多的注意到“Jerry”这个词,而会很少注意到“Tom” 和 "chase",从而使得最终的翻译结果更加精确。
这便是注意力机制在翻译中发挥的作用。
一样的,在图片处理、视频生成等 AI 应用中,也都少不了注意力机制的身影。
关于注意力机制的更多细节,会在《Transformer通关秘籍》中进行更新,欢迎你来订阅这个秘籍。
如果你想学习 AI ,欢迎来添加我的微信 (vx: ddcsggcs),会有很多好玩的AI技术分享,可以咨询、也可以围观朋友圈呀~
1381

被折叠的 条评论
为什么被折叠?



