查看原文
其他

【老万】从0开始学chatGPT(九):有一种AI叫关注

老万 老万故事会
2024-08-23

本文是我的学习心得《从0开始学chatGPT》系列第九篇,欢迎按需阅读:

~~~~
本节要点:GPT 采用 transformer 架构,用自注意力(self-attention)机制找出输入记号之间的联系强度,从而准确理解自然语言。

上学时,我们多少都有过这样的经历:老师在黑板上奋笔疾书,念念有词:“同学们,我们刚才讲的是‘奇变偶不变,符号看象限’,期末必考,大家快划重点......”而你却已神游太虚,心心念念的是隔壁班的那个女孩怎么还没经过你的窗前,不知不觉流露出似笑非笑的表情。突然空中飞来一个粉笔头:“XXX,你又走神了。集中注意力!”你打了个冷战,连忙把思绪从万仞之外硬拉回来。

没有注意力的人类不是好学生。同样,离开了注意力,大语言模型也无法胜任深度学习的任务。chatGPT 让人惊艳的表现很大程度上依赖于谷歌发明的 transformer(变换器)架构,而 transformer 的过人之处在于它有一种机制可以高效并行地捕捉输入字符间的相关性,即便是相隔很远的字符也不放过,从而准确理解自然语言。这就是我们今天要学习的注意力(attention)机制。

准确地说,transformer 采用的是一种特殊注意力机制,叫自注意力(self-attention)。自注意力的“自”,不是说这个大模型自觉将注意力放在关键词上,不待扬鞭自奋蹄,也不是指大模型对自己念念不忘,天生丽质难自弃。它指的是这个机制捕捉的是同一序列内部各个记号之间的关系。比如输入有 2048 个记号,自注意力机制就会计算每两个记号间的关系强弱,一共 2048x2048 对。

除了自注意力之外,大语言模型是不是还有其它注意力机制呢?答案是肯定的。比如一个专门做汉语到法语翻译的模型,可能会计算每个法语单词跟不同中文字符间的关系。因为这是不同序列的记号间的关注(从输出序列的记号到输入序列的记号),它就不算是自注意力了。

很多人和我一样,对这个自注意力机制知之甚少。只知道它厉害,但不知道为什么厉害,更不清楚它的构造。出于好奇,我学习了自注意力机制的原理,现在把心得分享给大家。读完这篇文章以后,别人再谈到这个话题时,你就不必再顾左右而言他,而是可以轻咳一声,说:这个问题嘛,兄弟(姐姐)我当年读过《老万故事会》,正好略知一二......

当然,我是在开玩笑。我们学习的目的不是为了装逼,而是在当下浮躁的环境中追求真知识,增强自己适应 AI 时代的能力。自己懂得足够多,才不会被不良媒体忽悠瘸了,对吧?

~~~~

本节要点:代表一个记号的输入向量由嵌入向量 + 位置编码向量得到。自注意力机制让机器通过训练学会分析字词间的联系强度,比语法更强大。

我们先从大面上说说自注意力机制是如何工作的。

在自然语言处理研究的早期,大家觉得机器要懂人类的语言,必须精通语法。于是,在现代语言学开山鼻祖诺姆·乔姆斯基老爷爷指引下,语言学家和计算机科学家们前赴后继,忙着为人类的语言建立越来越精确完备的语法。他们期望自然语言的语法大楼封顶那天,机器可以完美地理解人类的意图。

语言学家乔姆斯基。学过《编译原理》的同学们基本上都曾被他七十年前(!)发明的上下文无关文法折磨到怀疑人生。

不幸的是,大家沿着这条路跑了几十年也没到达光明顶,倒是半道上进了死胡同。万众瞩目的大楼眼看就要烂尾了。

因为,语法学得再好,缺乏常识也是不行的。

要是不信,只需看看“老王给老张送了一顶绿油油的帽子,他一气之下赏了他一个大嘴巴”这句话。很简单吧?每个有中国生活经验的成年人都不难理解:第一个“他”是老张,第二个“他”是老王。也就是说,这两个“他”分别与老张和老王有强相关。

如果拿这句大白话去考一位不懂中国文化的语言学教授,他多半只能傻眼。因为,这里的每个“他”都有 50% 的可能是老王,也都有 50% 的可能是老张。从语法来说,这两种可能都一样合理,不分伯仲。

GPT 走的是完全不同的路子。它根本不管语法,而是通过学习大量语料中字词间的统计相关性,形成了一种语言直觉,你说上文它就能接下文。虽然没有语法的概念,不妨碍它说起话来头头是道。

自注意力机制的目的,就是让机器通过训练学会分析字词间的相关性。它比语法更强大,能神奇地让机器知道第一个“他”应该和“老张”而不是“老王”相关联。

要想知道自注意力如何做到这点,我们得回顾一下 GPT 是如何给文字编码的:

嵌入向量 + 位置编码向量 = 输入向量
首先,每个输入记号用一个高维实数向量(嵌入向量)表示,这样可以使意义相近的记号在编码空间中距离较近,便于 AI 通过计算向量间的距离来了解不同记号的意义差异(详情请见《五:模型眼里的单词》)。
字符的顺序对语义也可以有很大影响。例如“狗咬了汤姆”和“汤姆咬了狗”这两句话用到的字符一样,但语义截然不同。老万在童年时也曾有过无知无畏接受小伙伴的挑战,在教室里大声把“高尔基的爸爸”倒过来念,结果惨被老师修理的经历。
为了让大语言模型在处理文字时能考虑字符的顺序,transformer 的设计者采取了一个简单粗暴的方法:给每个记号的嵌入向量加上一个代表记号位置的位置编码向量,结果叫做输入向量。输入向量既包含了记号本身的语义,也包含了它的位置。这样有助于理解“人咬狗”和“狗咬人”的区别,也能让模型区分不同位置上的相同字符。例如,“我一把把把把住”中的四个“把”字,它们的嵌入向量相同,但是加上各自不同的位置编码之后,对应的输入向量就不一样了。

既然大语言模型可以通过学习语料掌握文字规律,我们自然容易想到让机器通过学习找出输入向量间的关注度(关联程度)。注意,这里的关注度不是通常意义上的语义近似性。例如,“老王”、“老张”和“他”在语义上有不同的作用,在一般情况下不能互换。但是在某个具体的语境里,我们可以明确得出第一个“他”对“老张”关注度高,第二个“他”对“老王”关注度高的结论。

下面这个图展示的是句子里第一个“他”对其它字符的关注程度,线条越粗程度越高:

为计算这种关系,我们需要构建一个子神经网络网络(这就是我们说的自注意力机制),它的输入是 n 个记号的输入向量,输出是一个 n x n 的矩阵,其中第 i 行 j 列的元素代表第 i 个记号关注第 j 个记号的程度。

~~~~

本节要点:自注意力机制就像找对象:先提交每位嘉宾的个人条件和择偶要求(抽取每个记号的键向量和查询向量),再一一匹配找到每个人对所有人的兴趣程度(计算每个记号对所有记号的关注度),最后根据兴趣值找到匹配的对象(找出每个记号关注的意思)。

科学家们发现,自注意力机制的网络结构直接影响到模型的效果。如果只是把一堆神经元随随便便一连,是难以学习到字词间的关注度的。我们需要用一定的结构去引导神经网络的“思路”,它才能学得快、学得好。

如何设计这个结构呢?

我们可以从人类的求偶行为中寻求启示。相过亲的伙伴们都知道,征婚时要在一页纸的篇幅内写清楚自己的个人条件择偶要求。这是因为在重大问题决策时必须摒弃次要因素,抓住主要矛盾。考虑的因素太多,眉毛胡子一把抓,就会只见树木不见森林,走上歪路

在大语言模型中,每个记号都用一个几百甚至几千维的输入向量表示。这个向量包含了记号的全部信息,但这些信息在我们寻找记号关注度时并不是同样重要。为了不被那些不重要甚至无关的信息干扰,我们需要先做一个投影变换,从高维向量里抽取一些对关注度分析重要的、最能代表记号特征的关键维度(相当于求偶时的个人简介),叫做这个记号的键向量(key vector),再抽取几个代表这个记号最想关注的特征的维度(相当于择偶要求),叫查询向量(query vector)。

此外,我们还从每个输入向量中投影出一个值向量(value vector),代表这个记号在这个上下文中的意义。相同的记号在不同的语境里投射出来的值向量是不同的,这可以帮助模型灵活准确地理解语义。

每个输入记号都有自己的键向量、查询向量和值向量,有 n 个记号就有 n 组向量。这部分的神经网络结构是这样的:

自注意力机制就是一位负责任的红娘,拿到这堆“征婚要求”和“个人简介”后,会细心地一一做相似度匹配,找出每个记号的最佳匹配对象。

首先,它把这 n 个查询向量(征婚要求)和 n 个键向量(个人简介)逐对做相似性比较,得到一个 n x n 的实数矩阵 Z(注意力矩阵)。这个矩阵第 i 行 j 列的元素 z_ij 就是第 i 个记号对第 j 个记号的关注程度(第 i 位嘉宾对第 j 位嘉宾的心动程度)。

这部分结构如下:

我们来看:

  1. 正如人会自恋,记号也会关注自己。注意力矩阵的对角线就是每个记号关注自己的程度。

  2. 通常爱情是不对称的:我爱你不等于你爱我。这个世界充满了这种不对称性带来的悲剧 - 这就是现实。同样,一般来说注意力矩阵也不是沿对角线对称的:z_ij 不一定等于 z_ji。


自注意力机制跟找对象也有不一样的地方。按今天人类普遍接受的道德规范,每个人一次只能处一个对象,否则就是海王/渣女。但在自注意力机制里,每个记号不是死心塌地关注一个最佳记号,而是会把所有输入记号的值向量按自己感兴趣的程度做一个加权平均,去关注这个“混合记号”。

把这几个部分合起来,就得到了 transformer 自注意力机制的结构:


这个自注意力子网络的输出还会接到一个前馈神经网络(Feed-Forward Neural Network,FFNN)子层,对输入序列中的每个记号进行独立的、非线性的变换。自注意力机制和前馈神经网络加在一起才构成一个完整的 transformer,GPT 有几十上百个 transformer 串联在一起。这个 FFNN 不是我们今天的重点,就不深入了。

~~~~

下课铃响了。

如果你只想对自注意力机制有个浅尝即止的了解,或者你的注意力已经消磨殆尽,现在就可以收藏、转发、点赞了。

要是你和老万一样是个细节控,喜欢打破砂锅问到底,我们下次可以更深入地了解自注意力的数学细节和多头(multi-head)自注意力机制。I'll be back.

图表、照片外,本文插图由 Midjourney 生成。)

~~~~~~~~~~

猜你会喜欢:


~~~~~~~~~~

关注老万故事会公众号:

本公众号不开赞赏不放广告。如果喜欢这篇文章,欢迎点赞、在看、转发。谢谢大家🙏

继续滑动看下一个
老万故事会
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存