有一件事曾经让我非常困惑:我在 3070 上训练 Realtime Audio Variational autoEncoder(RAVE)去重建马来鼓声时,为什么数据更多,结果却没有更“好”。后来我意识到,这不就是最基础的统计学吗?样本量小,方差就高,任何一个稍微离群的数据点,都会对模型表现产生不成比例的影响。对世界上大多数使用场景来说,这种低数据环境才是默认状态。好消息也还是老样子:我们完全可以拿一个足够大、足够强的模型,在自己有限的数据集上调一调,就先把很多东西撑起来,这里之前也演示过。
一个很大的线索来自我的翠鸟声音最后变成了更像哈德拉、带铃声的鼓点,而不是之前那种非常“鼓”的声音。一方面,你可以说模型泛化得更好了,因为它把那个更高音的输入映射到了一个从偏差上看误差更小的东西;但问题是,这和我耳朵听到的东西并不对齐。我预期只听到鼓,结果却听到了训练数据里跟鼓一起出现的那些铃。到头来,这又变成了一个选择:到底让创作方向来驱动技术开发到什么程度。我们最后退回去用了最初那组非常像鼓的训练数据训练出来的模型。
也值得一提的是,在声音这个领域里,模型表现的衡量并没有看起来那么直观。loss 可能还在下降,但人耳把声音理解成信号的方式,并不总是和这些 loss 指标乖乖对齐。所以我发现,直接去听重建结果、听预测输出,反而很有用。有时候想想也真的离谱:人体这台计算机效率高得可怕。在一个被信号淹没的世界里,我们竟然能这么快地泛化,又这么快地抓住具体细节——哪怕一群人同时在讲话。我们的大脑不知怎么已经把说话人分离这件事算明白了,而且是现场实时算。
低数据环境下有效训练的策略
如果我没记错,用的架构只是 v2,加上 wasserstein 正则化。过拟合的危险在于,模型会严重到只是在背例子,到了样本外就表现不够好;正则化可以在一定程度上缓解这个问题。其他常见做法大概如下。后面两点我会讲得更细一点。
-
数据增强
-
更小的学习率调度,或者更多训练轮数
-
更好的模型*
-
迁移学习*
带星号的这两点,本质上都是在利用既有的、已经编码进模型里的知识,让它在某个具体领域里发挥得更好。对动作快、愿意采用 A.I. 的组织来说,所谓“免费的午餐”其实就是这个:只要你有专业能力、GPU 和一些数据,就能拥有一个用自家数据训练出来、处理特定任务的一流模型。这意味着你对自己的流程会有更多能动性,也有更多控制权。
LLM 编码了世界知识
很多人没有意识到,现代 A.I. 应用大多建立在 Transformer 架构之上,而这个架构跨问题、跨数据模态的韧性和稳健性,强得有点意外。
Transformers:AI 里最好的想法 | Andrej Karpathy 与 Lex Fridman
最近让我最困惑的时刻之一,是有位观众问我,把《故事之声》从 1 个故事扩展到 100 个、或者 n 个故事,需要多久。答案是:我把数据读进去要多久就多久,也就是说大多数情况下很可能 <1 秒?我从一开始就把《故事之声》做成了天然可扩展、且不锁死在任何一个模型上的体验,所以前期才花了那么多时间想清楚要用哪些设计模式(虽然越接近最后演示,代码库就越乱)。后来我才发现,她以为我训练了 A.I.,让它像某一种特定文化那样思考。这也让我意识到,A.I. 圈外的人也许根本还不知道 Transformer 已经解决了上下文问题;也不知道这个深度学习时代和前几个时代的区别,恰恰在于系统正在变得多么通用、多么聪明。
当我把 GPT-4 炒掉、换成 Claude 3 Opus 时,我就不用再费心设计什么故事推进工程了——我做的事情只是塞进去一个巨大无比的提示词,因为我懒得把故事推进拆成那种语言学工程;然后把 assistant 和 user 这两个角色的回复继续拼进 API 调用里。一直这么做,再指示模型和用户互动,并在合适的时候结束就行。在这之前,GPT-4 对用户那些突如其来的回复,要么直接无视,要么不知道怎么接;但到目前为止,Opus 真的证明了自己更聪明,而且双语能力强得多。它输出的普通话回复已经足够合理,所以我最后也没觉得有必要用我研究过的那些中文 LLM。
现在有这么多在互联网规模数据上训练出来、可供微调和训练的大型开放模型,最快行动的公司会靠更好的利润率和新能力跑到前面;不动的那些,很快可能就要发现自己麻烦大了。事实上,在这场 A.I. 的寒武纪大爆发里,一个非常响亮的主题就是:自下而上的用户采用实在太多了。我不觉得今天的年轻人到了工作年龄后,会想去一家 A.I. 恐龙公司上班——这很好。竞争是美丽的。
工作场景才是 A.I. 爆发式采用的用例
所以我才觉得,阻止我们拿下那些唾手可得的成果——比如大规模多语翻译,或者用数据混搭不同模态——也许只剩下……组织惯性?这场仗本来就是组织自己最容易输掉的,因为我们已经有了打造自家一流模型所需的全部原料(还是那句话,前提是你有人才、GPU 和一些数据)。这一次,用户行为其实站在我们这边;看看人们自己手握 A.I. 时已经做了多少事情,信号已经很明显。幸运的话,希望我们可以把这场 A.I. 采用竞赛里的赢家和输家,交给市场去分出来。
作为用户,工作中的 A.I. 正在变成这项通用技术的“杀手级应用”。我觉得这件事在很多层面上都很迷人——互联网和手机改变了我们沟通和交换信息的方式,但相比之下,我们工作的方式其实没有变太多。你的老板给你一个提示词,你在脑子里处理这个提示词(你内在运作的权重和偏置对你自己并不可见),做一些变换,然后给出一个结果。我们依赖人类认知和智能去完成一整条光谱上的任务,从例行工作到复杂的多方协商;又或者像一个无状态微服务架构,要在慢~~得要命的 LLM 之上提供实时体验,从本地电脑到远端 VM,整条链路上还到处挂着一堆依赖和需要协调的环节…… :’)
如果没有我的 A.I. 结对程序员,我不可能把《故事之声》做成一个可扩展的体验:同时利用多个 A.I. 模态,还能通过 WhatsApp 实时提供服务。
智能作为指数级力量
我一直在想,能做一整套事情的大模型,是否总是比更小、更具体、更快的模型更好;而在用 A.I./LLM 构建东西的过程中,越来越清楚的一点是,也许我应该重新框定这个问题——关键不太是你有多少参数,而是你的模型到底有多通用地智能?底层智能越通用越好,因为这意味着它能更可靠地遵循指令,在数据有限时做出更好的预测,对数据执行新的变换,把其他领域学到的东西迁移到新的领域——也就是做出人类会做的那种智能行为。
这里面有一部分只是工程:把任务拆开,分发到不同 endpoint 上处理,再用一组模型做 ensemble;但更通用的智能(就像前面我对 GPT-4 和 Claude 3 Opus 的使用体验所显示的那样)永远更好。认识这些系统,是学会欣赏人类和社会究竟能做到什么的最好方式之一。
智能越多,就越能用更少的东西做更多的事。而像 Claude 3 Opus 这样据说用约 40T tokens 训练、拥有约 2T 参数的模型,明明已经带着某种底层世界知识,却相对于它试图完成的任务而言仍然是欠参数化的,这难道不疯吗?显然,2 万亿参数不足以捕捉整个世界知识的复杂性,所以当模型试图在有限架构里压缩并表征如此多的数据时,高维空间里会出现大量叠加。也许,对任何一个个体来说,掌握整个世界的知识本来就是不可能的任务,更别说一个模型了。所以在人类社会里,我们有其他具身的、承载特定领域知识的主体(专家);我们也大量依靠图书馆、博物馆、外部知识库,甚至只是日常意义上一个带着笔记本的人,来为心智搭脚手架、做外部延伸。我们就是这样把世界知识切分、分配出去的。
而我们是迄今存在过的,在能量、样本和算力上最高效的生物计算机。为了让模型行为更贴近我们想要的结果,人们做了大量强化学习、直接偏好优化(Direct Preference Optimisation),以及 Kahneman-Tversky Optimization;可数据稀疏始终是一个挑战。反过来看,我们人类在信号如此稀疏的情况下,竟然能学会社交规范,并作为社会性物种的一员运转起来,这难道不惊人吗?也许这就是媒体和文化的全部作用——把一个偏好的特征向量注入个体欲望之中。演化和竞争一样,都是美丽的。
看起来,我们遗忘、抽象、类比、想象和制定计划等能力,正是当前 A.I. 系统里缺失的部分,也正是这些缺口限制了它们进一步的通用学习和扩展。人类在环境中探索和实验,组织并利用手边文化、社会和智识资源的能力,仍然无可比拟。
所以我已经抵达了那个 meta 状态:我意识到,如果当时多想一想,我会做出不同的训练选择,而不是直接冲进去。同理,当我们要求 LLM 使用 Chain-of-Thought 推理时,它们表现得更好,这又有什么好意外的呢?
下一篇后续里,我会进一步说明为什么更多智能很重要,也会提出一些方案,讨论个人用户、社群和公司如何为了自己的目的,把这种智能先撑起来并加以利用;其中大多数其实已经在这篇里讲过:高质量、广泛且多样的数据集,外部知识库,人才,社会分享,算力,以及更好的模型。关于数据集的第一部分我想继续展开,因为我怀疑很多组织其实已经有足够的数据,可以做出一些有意思的东西——只是被僵局卡住了。我尤其想从这个角度看合成数据集,因为那是我准备数据科学毕业项目时尝试过、但当时没能跑通的东西。幸好世界已经变了,而我现在也知道得更多了。;)
最初发表于 PubPub:erniesg.pubpub.org/pub/1eogiw8s。