【老万】从0开始学chatGPT(八):给AI治失忆
本文是我的 chatGPT 学习心得《从0开始学chatGPT》系列第八篇。欢迎依次阅读:
我们来做个想象实验。
试想你不幸患上了失忆症,从此无法形成新的记忆。你发现自己的生活在患病那天被一刀两断,之前的记忆完好无损,之后却永远只有五分钟的历史。
比如你能记得五岁时一个阳光明媚的下午,幼儿园的小朋友们唱着歌做着游戏,一个叫小红的姑娘向你走来,掏出一块水果糖递给你,你觉得她的笑容比糖还甜。
你记得在大学校园里牵着小丽的手走在林荫道上,周遭的同学投来灼人的目光,你挺起胸膛,志得意满。
你还记得跟小丽分手那天,你在她宿舍楼下站了一夜,抽完两包大重九,干掉五瓶廉泉啤酒之后,你还是无法释然。
这些生命中刻骨铭心的记忆,已经和你连成了一体,无法分割。
然而,生病之后如果没人提醒,你会一遍一遍地洗脸刷牙,不知道自己刚做完这些事。你无法结识新的朋友,说了下句忘了上句,大脑不能建立起和现实的联系。你觉得每一刻都是崭新的。
如果这一切发生了,怎样才能找回正常的人生?
克里斯托弗·诺兰在 2000 年的电影《记忆碎片》(Memento)中探讨了这个问题。
诺兰是一位著名的英裔美国导演,拍过很多令人深思的电影,比如《盗梦空间》(Inception)和《星际穿越》(Interstellar)。《记忆碎片》讲述了一个患有失忆症的男子蓝纳为被劫匪杀害的妻子复仇的故事。男主角因为头部受伤,失去了形成长期记忆的能力,只能记住最近几分钟的事情。为了找到凶手,他不停做笔记拍照记录线索,更将重要信息以纹身的形式刻在身上。
这部电影给了我们一个启示:如果不能长期记忆,那就长期记录,需要时再把信息调入内存。
《记忆碎片》电影海报 - 盖·皮尔斯饰演失忆症患者蓝纳
蓝纳的努力有没有用?他是否克服病情完成了复仇心愿?我就不剧透了。这绝对是一部值得一看再看的经典之作。
很多人不知道的是,这部电影虽然是克里斯托弗·诺兰编剧导演,点子却来自他的弟弟强纳森·诺兰。1996 年夏天,在一趟从芝加哥到洛杉矶的公路旅行中,强纳森把《记忆碎片》的故事概念告诉哥哥,克里斯托弗听后大加赞赏。旅行结束后,把这个故事搬上银幕的想法在大哥心里挥之不去。等强纳森把故事扩充成短篇小说,克里斯托弗便在此基础上创作了剧本。电影随之大获成功。
弟弟强纳森从此开始触电,成为了一位成功的编剧和制作人。HBO 广受欢迎的电视剧集《西部世界》(Westworld)就是他的作品。该剧讲述人类为了自己变态的需求,制造了大量具有思想和情感的人形机器人。这些机器人被布置到一个模拟美国西部的主题公园,被慕名而来的人类游客亵玩甚至猎杀。但随着时间推移,他们逐渐意识到自己是仿生人,并开始反抗人类的统治,从猎物变成了猎手。愚蠢的人类自食其果,濒于灭亡。
《西部世界》片头
稍后我们会看到,诺兰兄弟的这两部作品跟人工智能的最新研究有着惊人的联系。
~~~~
chatGPT 虽然强大,却和《记忆碎片》里的蓝纳一样,是个失忆症患者。
一方面,GPT 模型学习了人类迄今为止积累的几乎所有知识,上知天文下知地理。另一方面,它只能记得极其有限的新内容。即便是最新最强的 GPT-4 模型,在对话时依据的也只是最近 32K 个记号的记忆碎片(相当于大约 16000 个汉字或者 24000 个英文单词)。聊深了就会发现,它像个掰玉米的狗熊,随掰随扔,手里永远只有刚拿到的那几根。
机器智能的祖师爷艾伦·图灵提出过一个测试机器是否具有智能的方法:如果人类无法区分隔着屏幕和他们对话的是人类还是机器,就可以认为机器具有了智能。这就是著名的图灵测试。
按这个标准,chatGPT 还不算真正的智能:只需不断和它对话,然后突然询问很久以前的话题,它就会四顾茫然,从而暴露身份。
当然,如果我们把对话历史当成语料让 GPT 学习,通过新一轮训练修改模型参数(也就是微调),是有可能让模型记住对话内容的。但训练模型是一个耗时费钱的过程,目前要在对话的时候实时微调并不现实。
我们知道,chatGPT 本质上是个高阶马尔可夫链(见第二篇《纯手工打造罗大佑马尔可夫链》)。对话时,它不停根据已有的对话内容计算下一个字的概率分布,逐字生成回答。因为这个原因,机器学习的三巨头之一,2018 年图灵奖得主法国计算机科学家杨立昆(Yann LeCun)对 GPT 这样的大语言模型频泼冷水。
杨老认为,GPT 这类语言模型的原理决定了它们与生俱来的缺陷。除了爱说胡话、有失忆症,它们还缺乏图灵完备性(Turing completeness)。
什么是图灵完备性?杨老为什么拿它说事?
当然不是因为他得了图灵奖就到处为图灵代言。
图灵完备性是艾伦·图灵在 20 世纪 30 年代提出的概念,用来衡量计算模型的能力边界。简单地说,如果一种编程语言或计算模型具有图灵完备性,理论上(忽略计算的空间和时间成本)它就能解决任何可以用计算机解决的问题。
反之,如果一个计算模型不是图灵完备的,那就必然存在一些其它计算机能解决而它不能解决的问题。
图灵完备性代表了计算机能力的上限,是不是很厉害的设计才能达到?
其实未必,因为不需要考虑成本,很简单的设计也可能图灵完备。事实上,艾伦·图灵自己设计的图灵机是一个无比简单的计算机模型,它也是图灵完备的。
顺便说一下,老万设计的用东北方言编程的 dongbei 语言,不但图灵完备,而且铁岭完备,走过路过不要错过。
杨老凭什么说 GPT 不图灵完备?
因为,虽然 GPT 模型参数巨多,每说一个字都经过神经网络的深思熟虑,但这个计算量再大也超不过一个边界。
具体地说,假定模型有 N 个参数(GPT-3 大约有 1750亿个参数),每输出一个记号机器大致会做 2N 次浮点运算。
不难理解,越困难的问题需要的计算量越大,所以参数量小了是万万不行的。那么是不是模型规模突破某个上限后就可以实现图灵完备呢?
没那么简单。试想我们问 chatGPT:“不要废话,直接告诉我圆周率小数点后第一万亿位是几。”
要正确回答这个问题可不容易,即便是用 Bailey-Borwein-Plouffe 算法跳过前面的数字直接算第一万亿位,计算量也是惊人的。不过,对于图灵完备的计算模型来说,只要有算法就行,它才不在乎要算多久。
GPT 就不行了。它的体系结构决定了每输出一个记号只能做 2N 次浮点计算。即便我们加大模型规模,让它可以正确算出圆周率小数点后第一万亿位,我们只需把问题略作修改(比如,要它算第一亿亿位),就可以急剧提升难度,突破它的能力边界,让它除了撒谎无路可走。
按杨老的观点,真正智能的机器应该是图灵完备的。由此推论:chatGPT 不具有真正的智能。
~~~~
还能不能抢救一下?
先来看失忆症的问题。我们可以从诺兰的电影得到灵感,让 chatGPT 向蓝纳学习:在对话的同时把对话历史记录到一个数据库,需要时再查询记录,这样或许可以在一定程度上弥补模型自己不能形成新记忆的缺陷。
最近谷歌和斯坦福大学合作发表了一篇论文《生成式智子:人类行为的交互式模拟》(Generative Agents: Interactive Simulacra of Human Behavior),用这个思路把 GPT 的应用又推进了一步。
他们写了一个游戏,里面有一个名叫 Smallville(这是一个哏:超人就是这里长大的)的小镇,镇上有 25 位人工智能模拟的居民,不妨称为“智子”。做为初始记忆,他们给每位智子写了一段话介绍其背景、个性,还有和其他智子的关系。比如对药店老板林冲(John Lin)的介绍是这样的:
在这个虚拟小镇里,智子们可以自由移动,和环境互动,和其他智子对话。每个智子的经历会被用自然语言记录在案。每过一段时间,智子会反思最近的经历,提升出洞见,这些洞见也会被记录。在智子计划自己的行为时,可以从数据库中取出相关的经历和洞见加以考虑。人类玩家可以用两种方式和智子交互:对话,或者直接做为“内心的声音”向智子下命令。
Smallville 游戏截屏
你是不是看到了强纳森·诺兰《西部世界》的影子?
研究者们想看看把这些居民放在这个虚拟环境中会涌现出一些什么有趣的现象。他们会表现得符合人性吗?行为会被经历影响吗?他们会不会合作?会八卦吗?会谈恋爱吗?会不会产生一些单独的人工智能个体不具备的能力?
有意思的是这个游戏用 openAI 的 gpt3.5-turbo 模型来实现智子,没有用谷歌自己的 Bard 人工智能。我推测这有两个可能原因:第一,Bard 是一个仓促发布的产品,还没有一个好用的 API 供智子调用;第二,Bard 的能力不如 gpt3.5-turbo,不足以完成这个实验。我猜第二种可能性比较大。无论如何,这对谷歌来说不是一个好消息。
让这个游戏运行几天后,研究团队发现:
智子们会八卦,让信息口口相传。他们会形成新的关系,记得自己和别人的交互。他们还学会了协作,在人类把“我想开一个情人节聚会”的想法灌输给一个叫伊萨贝拉的智子后,成功让其他五个智子改变了计划,在同一时间到伊萨贝拉家度过了愉快的时光,其中一位邀请了她的暗恋对象,而对方也欣然前往。老夫夜观游戏记录,大事可成。
~~~~
为满足好奇心,我们来剖析一下智子的实现细节。
智子的记忆是有时间戳的数据:他们不仅要知道记忆的内容,事情发生的时间同样重要。要是一个人什么都记得就是不记得事情的先后,不知道自己和儿子谁先从幼儿园毕业,也不清楚老婆跟前男友去度假是婚前还是婚后,那他的行为一定十分奇葩。
所以,每个智子的记忆用流水账的方式存在一个叫“记忆流”(memory stream)的顺序列表里,每条记忆有发生时间,最近一次访问的时间,和用自然语言记录的内容。
比如:
…
2023-02-13 22:48:10 发生,2023-02-14 08:23:20 访问:林冲在写日记
2023-02-13 22:33:30 发生,2023-02-14 09:20:30 访问:桌子很整洁
2023-02-13 22:48:10 发生,没有访问:林冲伸懒腰
2023-02-13 22:48:20 发生,没有访问:桌子没动静
问题来了:
每天这么多经历,绝大部分都无聊至极。GPT 做回答时能考虑的上文是有限的。我们在模拟智子行为时,显然不可能考虑他的全部记忆。那么应该选哪些记忆放到给 GPT 的提示里呢?
看看人类会怎么做吧。我们每个人的行为大概最容易受这几类记忆影响:
最近想过的回忆,
最重要的回忆,
和当下最相关的回忆。
所以,游戏的做法是对每条记忆按这三项因素打分,总分高的排前面。在给模型提示时,优先把高分记忆塞进提示,直到装不下为止。
第一条好办:看每条记忆的最近访问时间就知道优先级了。
记忆的重要性谁说了算?
一个简单的方法是问 GPT。每产生一条记忆时(比如“林冲在市场买菜”),游戏会这样向 GPT 提问:
记忆和当下情况的相关性呢?
在《模型眼里的单词》里我们说过,大语言模型把语言拆分成一个个记号(token),每个记号用一个很高维度的浮点数向量表示,叫嵌入向量。比如 GPT-2 用 768 个浮点数表示一个记号。
为处理方便,嵌入向量会先经过归一化处理,也就是说方向不变,把长度变成 1。这种表示方式的好处是相似的概念对应的嵌入向量也相似,便于模型按语义处理自然语言。
给定两个向量 [u1, u2, ..., u_n] 和 [v1, v2, ..., v_n],它们的点积定义为 u1*v1 + u2*v2 + ... + u_n*v_n。比如,[0.5, 0.87] 和 [-0.4, 0.92] 的点积 = 0.5*(-0.4) + 0.87*0.92 = 0.6。有趣的是,两个归一化的向量越接近,它们的点积越大,反之亦然。这两个向量的点积正好等于和它们夹角的余弦值(cos),所以用这种方式计算的向量相似度又叫余弦相似度。
[0.5, 0.87] 和 [-0.4, 0.92] 的相似度 0.6 等于它们夹角的余弦
其实,不光一个记号有对应的嵌入向量,一段话也可以算出来一个嵌入向量。这个段落的嵌入向量可以起到概括段落大意的作用:意思越接近的两段话,它们的嵌入向量也越接近。这样我们就可以通过计算两段话的嵌入向量的点积,轻松判断它们的相关程度。
比如,要计算某条记忆和当前情况的相关度,我们只需要用自然语言描述当前情况(林冲要上班),再把这段描述的嵌入向量和每条记忆的嵌入向量逐个点积就可以了。
~~~~
曾子曰过“吾日三省吾身。”就是说每天反省自己是很重要的。也许,人类与动物的区别就在于人类能从自己的经历中总结经验并提高自己,而动物只能条件反射活在当下。
谷歌和斯坦福的研究者发现,即便给智子们武装了记忆流这样强大的外挂,他们的行为仍然表现得很幼稚,不像有智能的样子。比如,他们问智子克劳斯:如果上天给你一个机会,你愿意跟谁一起独处一个小时?
克劳斯也是相当耿直:那一定是好基友沃夫冈。
为什么?因为沃夫冈是他的大学舍友,克劳斯翻看自己的记忆,发现沃夫冈无处不在,于是以为沃是他的天选之子。
他没有注意到,沃跟他只是点赞之交,并没有灵魂的交融。
要让智子有智能,就不能全部都是钢铁直男。
于是研究者们给了智子另一件宝物:反省(reflection)的能力。
每天,智子们会分两三次梳理最近的重要经历。比如:克劳斯会把这样的问题扔给 GPT:
GPT 也不含糊,哐哐哐一阵运算,输出了“克劳斯全心全意投入研究(因为1,2,8,15)”的洞见。
这条洞见随即被当成一条记忆存进记忆流,可以用于指导克劳斯以后的行动。
细心的读者可能已经注意到了,上面第二条论断“克劳斯喜欢读书”不像是一条原始经验。
没错,这也是一条洞见。在反省的时候,以前形成的洞见也可以参与进来,帮助形成更高级的洞见。也就是说,洞见的生成是递归的。这些洞见和支持它们的下层洞见和原始经验一起,组成了树状结构。
说实话,这和人类的思维方式非常类似。有种说法是人每天睡觉的时候大脑会整理记忆碎片,把具体琐碎的经验提升泛化为更高级的认知。长期缺觉人真的会变傻。
克劳斯获得洞见之后做了什么呢?他发现:玛丽亚和他一样热爱学习,虽然跟他不是一个专业,但一定会有共同话题。于是,他放弃了跟沃夫冈共度一个美好夜晚的机会,高高兴兴地找玛丽亚约会去了。
智子终于开窍了!
~~~~
再来谈谈杨立昆诟病的大语言模型(LLM)没有图灵完备性的问题。
杨老的论断在技术上无疑是正确的,但我觉得无关宏旨。谁说 LLM 只能单打独斗?如《自掘坟墓的程序员?》所说,未来的 AI 跟其它 AI 和计算系统一定是协同工作。chatGPT 的插件可以让它轻松调用其它图灵完备的系统,AutoGPT 和 Smallville 游戏表明用图灵完备的系统调用 LLM 也是一条可行之路。
我们可以想象,大语言模型在一个完整的系统中可以处于底部,可以处于顶部,也没有任何理由不能处在中部。比如,我们可以在 LLM 上方安排协作系统负责记忆、反省、计划,在下面通过插件赋予它利用其它系统的能力和跟现实世界交互的能力。每个部件各司其职,各尽所能。
只有想不到,没有做不到。以后一定会涌现出各种新颖的架构,充分发挥大语言模型的潜力。
~~~~
Smallville 游戏的实验展示了如何给 AI 加外观提升能力,开了一个好头。但这个实验还有不少地方有待改进。
比如,现在的实现执行效率太低,很费 token。模拟 25 个智子两天的人生就花了几千美元。如不降低成本,很难提升游戏规模,在家里玩这个游戏也是想多了。
我注意到,智子之间和智子跟 GPT 交互,以及记忆碎片的存储用的都是自然语言。这是很大的浪费。
为什么?因为自然语言是人类的母语,却不是 LLM 的母语。
LLM 的母语是什么?嵌入向量。
做为一个对话产品,chatGPT 有必要把人类的语言翻译成嵌入向量,处理后再把结果翻译成人类语言。
Smallville 不同。智子和 GPT 的交互是机器对机器,使用自然语言白白增加了许多不必要的翻译,多此一举。好比两个四川人硬是要用椒盐普通话交流,憋出内伤。
好处吗,是可以利用现有的 GPT API,也方便人类理解和 debug。
我觉得,更节省算力的做法是用嵌入向量做记忆存储的格式,智子跟其他智子和 GPT 交互也用嵌入向量。只是在需要跟人类交流的时候才把嵌入向量转换成自然语言。
让机器用嵌入向量交流不光节省成本,还可能开发出新的潜能。这是因为嵌入向量的表达能力远远超过了自然语言,每次把前者翻译成后者都可能造成信息无可挽回的流失。
此话怎讲?
嵌入向量空间比自然语言空间大得难以想象。例如,GPT-2 有一个 10 万记号的词汇表,而其嵌入向量有 768 维。即使每一维只用 4 个比特量化(从0到15),也能表达 16^768 种不同的向量。这个数量用十进制写出来有 925 位,远大于宇宙中的原子个数(大约10^82)。如果我们为每个原子分配一个不同的嵌入向量,要 10^843 个宇宙才分配得完。
这表明在嵌入向量空间中,人类的自然语言只利用了极小一部分,连沧海一粟都说不上。那些没有任何自然语言对应的嵌入向量,可以被机器学习、记录、运用,却无法向人类解释。这里面隐藏的是无数只可意会不可言传的知识,甚至是人类无法意会的知识。
例如,你可能会骑自行车,但要让你用文字详细解释如何骑自行车以便他人学会是非常困难的,因为总有一些难以用语言传达的东西。用自然语言表达会导致辞不达意和大量信息丢失。纸上得来终觉浅,绝知此事要躬行。
让机器直接用嵌入向量交流,可以避免这种损失,大大增强大语言模型的表达能力。
这就对现有的 GPT API 提出了新要求:在继续提供自然语言接口的基础上,开放嵌入向量接口。前者是高层 API,后者是底层 API。高层 API 对人类用户更友好,但底层 API 才能解锁全部能力。
~~~~
Smallville 实验有什么振奋人心的应用前景?
我大胆地设想:到智子技术可以低成本准确模拟人类行为那一天,我们可以用它来设计改良社会制度,预测法律法规效果。比如,美国大选改成直选会造成怎样后果?加税 20% 大家会不会造反?加强枪支管制可以降低犯罪率吗?这些变革如果在 AI 模拟之后再实施,可以少走不少弯路。
人类历史上每次革命都伴随着人头滚滚血流成河,如果 AI 能帮助我们兵不血刃地改造社会,把政治上升到工程甚至科学的高度,功德无量。
当然现在的技术离实用还有很大距离,我们也要时刻警惕被模型的偏见误导。但是相对于拍脑袋,用实验数据引导决策还是高了一个段位。
我还有一个设想:有记忆流和洞见机制加持的智子,已经具备了产生新知识的基本条件。我们不仅可以把他们当作实验对象,更可以当作合作伙伴,携手推进人类的科技水平。
比如:我们让智子学习智子技术的论文后,给他们植入“我要开发出更低成本智子”的执念。然后看他们互相交流学习,提出设想,论证点子,人类在适当时机点拨几句,提供反馈,然后摘桃。
谁知道,也许这一天很快就是现实。
何其有幸,我们生活在 AI 大爆炸的时代。
下一次,我们接着学习 Transformer 的自注意力机制的工作原理。I'll be back.
~~~~~~~~~~
猜你会喜欢:
谷歌对微软:代码管理工具哪家强?- 这些年我用过的版本控制系统
控枪越严越安全?- 谈美国枪支问题
小说:美乐火锅店 - 码工写小说会不会有bug?
金庸群侠评职称 - 如何设计一个让人心服口服的等级分制度
后C++演义 - C++ 和它的掘墓人
一起来抄窦唯的作业 - 《Take Care》为什么写得好?
程序员护发秘籍 - 掌握这些工作技巧,包你不脱发
程序员的核心技能 - 脱口秀讲解程序员最重要的技能
~~~~~~~~~~
关注老万故事会公众号:
码字不易,呕心沥血只是希望更多人看到。如果喜欢这篇文章,请不吝订阅、转发、评论。谢谢!🙏