探索LLM的语义loss与模型设计(2)【2023Q4】
TLDR
本文3.3节提出了一种新的直接学习和显式化语义的LLM模型结构,如果能够成功的话可以显著降低知识编辑的难度。
0、前言
我5月份的时候就在 《【2023Q2】Rethinking LLM(1):Token 与 语义 的Gap》(发表于知乎) 一文中阐述:token级别的decode和一些传统NLP处理方式并不能“有效”的处理语义信息。6月份的时候写了第一篇探索针对语义方面模型设计的想法的文章 《【2023.6】Rethinking LLM(3):语义层面 探索的一些想法》(发表于知乎),这个文章是本文标题所对应的(1)。
不过上述两篇文章都相对较早了,(我都一度忘记写过(1)这篇文章了),本文的观点也有了一些变化。所以本文会包含一个无需了解之前信息的基础介绍,对于考古没有兴趣的同学可不必再看前文。
对这方面有了解的同学可直接跳到第3节阅读。
1、直接学习语义而不是Token
现在众所周知LLM最基础的学习目标是预测下一个Token,这里的Token大概也就是中文中一个字、一个词、英文中一个词、一个词根的粒度。已经有不少大佬认为预测下一个Token就是最好的学习目标,但本文讨论的视角则并不认同这点。
在一般应用的场景下,Token都是一个很小的处理单元。直接通过学习预测下一个Token的能力可以学习人类的智能,这就是LLM成功所证明的。但这是最高效的方式么?对此判断的不同就是大家分歧的地方。
现在的方式类似于,通过学习“如何在每个路口打方向盘”来学习“如何从北京开车去上海”。说这种方式不行吧,确实可以通过堪称暴力的大量训练来学习,这也是LLM的实现方式。但要说这是个好的方式呢,一般人大多不这么认为。大尺度上我们需要规划路线、安排行程,然后再由这些更高层的规划来指导如何在每个路口转向。回到自然语言,人的学习过程也是类似的,并非在Token的层面进行学习,而是在语义的层面进行学习的,无论是幼儿还是成人都是如此。
这两种学习方式在模型学习速率和计算成本的角度上有着显著的不同,这两点对模型训练成本的影响都非常大,但这还并非重点。更重要的问题是,人们投入大量资源进行的LLM训练,是否在朝着“足够”正确的目标进行努力。
Scaling Law告诉我们:LLM训练过程中随模型参数规模的变化,训练后模型的Token级困惑度(缩写为ppl)指标在双对数图上有着接近与线性的下降趋势。这种可外推性驱使着人们把能用到的所有算力投入到其中来获取最好的效果,而再往下的提升需要指数级增加的计算成本和数据量,但人们可用的算力和数据量的提升速度肯定无法维持指数增加。从这个角度上来说,Scaling Law在前期给人们的是希望,但在中期之后给人们的是绝望。
容易被人忘记的是,Scaling Law是对于Token级别ppl指标的经验公式,但我们的目标是优化token级别ppl么?我们需要用指数增加的成本来榨取最后的那一点效果么?似乎不是。绝大部分场景和绝大部分人在乎的是LLM输出的文字的语义是否正确,而不是token的平均正确率或ppl之类的东西。如果模型能输出大量废话,token级别指标很高,但语义上很糟糕,这并非我们所需要的模型。
Token级别ppl就好像人类指向月亮的手指,粗糙但有效地引导着模型去往人类期望的方向学习。但现在似乎人们在让模型去看清手指上的指纹,而不是让它更好的趋向于月亮。所有的文字形式信息都可以使用Token的序列来表示,但Token序列中包含的所有信息都是我们希望模型去学习的么?我们让模型去学习某位科学家的著作,是为了让模型去学习其中拼写错误的分布么?我们让模型去学习github上的代码,是为了让模型去学习什么时候用空格缩进、什么时候用tab缩进么?这些人们关心或者不关心的内容都体现在Token序列当中,而目前模型无法区分哪些是它该优先学习的、哪些是可以不在乎的。这才是为什么说Token级ppl可能并非正确的学习目标,它只是一个阶段性还可以的学习目标,引导我们发现了LLM的巨大能力。
如果算力有限,我们更想模型优先学习我们认为有价值的语义信息,可以以牺牲我们不在乎的那些信息的学习效果为代价。这需要有更加直接指向语义信息的量化指标和学习方式,而这就是本文的主题。
本文的语义其实是一个相对模糊的概念,是与目前的Token级相对的高层一些的信息。
大概当找到语义的量化指标后,我们也能找到对应的语义Scaling Law,也许那时候也会遇到进一步改善很难的问题。但目前在Token级ppl上死抠最后一点点效果是否是正确的方向是值得怀疑的。
2、难点是什么
虽然改进的方向明确了,但这个问题其实很难解决。不只是我个人的思考,整个生态和学界在过去半年中都没有看到这方面明显的进展。虽然说直接优化语义这个并非现在支持人数最多的共识,并没有获得人类社会足够的资源投入,但这个思路其实并不那么少见,不少人在思考这个问题。
从宏观来说,人类之前并没有太多设计高级语义处理算法的经验,LLM算是人类第一个到手的通用语义处理工具,而且还不是事先设计出来的,而是意外发现的。在这之前NLP的DL方面的工作有一些小领域特化的成果,但对于现在来说杯水车薪。人类这个新手玩家正在第一次正面硬刚这个问题。
人类对于自身认知的研究能够对这个起到哪些帮助呢?让LLM像人一样思考是否可行?人的认知科学确实有一些结论,但距离透彻理解还很远,对于解决这个问题看起来还是杯水车薪。甚至反过来,LLM的成功给认知科学和哲学都带来了不少新认知。认知科学和LLM研究是一对难兄难弟,未来一段时间大概都是相互搀扶前行。
从微观具体来说,语义量化目标的难点在于问题的复杂性:
人无法明确的给出清晰的规则去指示“哪些信息是希望学习的,哪些不是”
人目前构造不出一种模型能够从各种信息中更优先的去学习符合人类认知习惯的信息
这不仅是指人类无法透彻理解这巨大的语料中到底都存在哪些类型的信息,就连LLM这种语料有损压缩后的结果都无法能够去具体的标记LLM中的各种相关性(规律)。更别说模型能够发现很多人类无法认知的相关性,这导致人能难从中去除这些相关性。
把预测下一个Token作为学习目标最大的好处就是开发者可以不用理解整个语料,直接就让模型去学习,然后发现得到的结果比想象的还要有用。目前人类就在这种尴尬或者说幸运的状态。
3、一些探索思路
前两节都算是相对有一定普及度的信息了,为了方便还不熟悉这块的读者才表述一下。本文的重点是本节的3.2,是我个人目前思考的一些阶段性结果。
3.1、总体认识
指望直接从模型中或者数据中提取出离散的语义实例似乎是错误的路线,语义本身就是一种目前无法精确表达的信息。
中短期很难找到一种普适各种文本的方案,大概需要拆分场景分别来做。这意味着很难彻底替代目前的LLM方案,而是做一些稍微具体场景的“垂类”模型。好在LLM的应用场景就是各自相对独立的,这种方式可以覆盖大部分应用场景。
我在《语义层面 探索的一些想法》中也提了一些思路,我目前不那么看好,本文不再赘述。不过本文后续列的一些思路我也仍然不看好,写出来主要是抛砖引玉,希望能给思考相关问题的读者一些灵感。
3.2、思路1
既然每次预测一个token粒度太小,那么可以直接尝试直接预测一个语义单元。反思一下人的思考过程,大概也是类似的,每次意识中出现一个想法,而不是顺序的产生一串token。
这种思路从实现角度来说类似于:
每次预测单元是一个文本片段,长度类似于半句话或者一句话尺度。
模型每次预测该片段的embedding或一些其他的中间表示。
基于这个中间表示使用一个子模型细化为token序列
这个思路下,原本问题的复杂性并没有消失,只是被转化为“如何明确的将文本切分为满足这个场景的适合的片段”。这个问题光靠前LLM时代的方案很难有效解决,使用LLM进行切分的话,效果是否能符合预期不确定,成本较高。
这种方式的一个优点是:希望生成多个不同语义的片段,或者是计算不同语义的概率时,可以在语义生成阶段进行,这比在LLM在token层面要好的多。
3.2.1、变化版本:引入语义token
一种与此类似的思路,但在实现上能够复用现有方案更多:
仍然是每次生成一个文本片段
生成一个文本片段前,先生成一个类似摘要的语义token短片段,生成后再基于这个摘要片段和前文生成完整的文本片段。
最终输出时可以将引入的摘要token片段剔除掉。
这个方式的优势:
相对于采用embedding的中间表示,能够更好的适应语义中的各种信息。
引入了一种新的对象:语义token。可以计算语义token上的ppl,这应该是比所有token上的ppl更好的语义评价指标。
这种语义token未必只有一种,可以更多的拆分为:含义、措辞方式、情绪等等,分别生成。而且可以只增加想要后续干预的维度,其他的维度不提取,保持旧方式在第二阶段生成。
模型预训练阶段完成后,可以只微调/RLHF语义token生成模型来更高效的干预语义。
问题:
语义token的提取标准很难确定,即使让LLM去切分也是如此。
如果想要指定的太具体,那么语义token序列未必比原始token序列更短,导致该方式失去意义。
如果指定的太粗糙,会退化为某种特定维度的干预方案,无法实现建模大部分语义的能力。
这种方式可以看成每次产生一个复杂的元素,先生成语义字段,然后生成普通文本字段。这跟我前面 展望LLM与半结构化I/O【2023Q4】的思路就结合上了,没看过的读者请阅读此文。
3.3、思路2
(本节的前置阅读材料为 展望LLM与半结构化I/O【2023Q4】)
结合认知科学再反思人的思考过程,虽然在意识中出现的最小单元是:
某种想法
对于某个想法的正确性判断
但人每次能够单步从非意识层面产生的想法其实可以比较复杂,人非意识的思考过程(以下称为直觉推理)内部可能还包含细分的过程,而不是直接产生一个想法。目前认知科学只知道直觉推理并非由单一模块完成的,可能包含了各种各样的很多模块。
以下是我的一种猜测,并且这个方案的设计也是为了能够去模仿学习这个过程:
先根据前面内容召回有相关性的概念,再召回这些概念上涉及的一些概念间的关系。
召回的概念和概念间的关联可能有很多,这其中可能能组合出一些想法
人脑以某种方式rank出一个想法投入到意识中
如果构造不出来想法,则表现为人感受到的某种模糊不清的“感觉”
上述过程模型可以模仿,不过这需要结构化I/O的模型设计思路:
仍然是每次生成一个文本片段
先根据前文召回可能涉及的概念,也就是一个概念的无序集合,可能会附加一个相关性打分。
根据概念进一步召回与上下文相关的概念间的关系,这个过程中可能会引入新概念
根据概念和概念间关系的图(以下简称为概念图)、前文、前文历史各个片段的概念图等,直接逐个Token生成文本片段
这个概念图可以包含狭义上语义之外的东西,例如语气、感情色彩等等。
最终从生成的半结构化文本中剔除概念图相关信息。
优点:
语义的干预可以在语义图上直接干预,例如一个软性的概念黑名单、概念间关系的黑名单(通过一个小模型进行分类)
新概念的学习和知识编辑可以直接在生成概念图的子模型上进行“继续预训练”来实现,这种方式可以大概率确保消除某种概念。
没有被纳入概念图中的信息的学习是交给逐token生成文本的子模型完成的。如果前面环节提取的信息较为完备,这个模型可以较小。
这种方式最大的问题是它的训练数据需要特意准备,基本上需要把所有语料用LLM处理不止一遍来生成满足它流程的这些规格,以及这里的一些内容标准可能尚不明确。不过好在无论概念图层面提取的信息过多或者过少,整个流程应该都能够跑通。
这个方式主要是为普通文本生成所准备的,其他如代码生成、文本转换等等场景未必适合,可以参考这种方式。
在 展望LLM与半结构化I/O【2023Q4】 已经提过,半结构化的模型设计大多不能覆盖LLM所有的场景,但可以通过decode阶段不同类型元素使用不同模型进行生成来支持复杂内容生成。
4、展望
目前来看,我并不认为未来2年内LLM的核心能力能够有大幅提升。目前木桶的短板我认为是没有在解决正确的问题。
但如果跑通了本文所说直接学习语义的某种方案,那么我认为会自然的有一轮大幅提升,(然后又进入缓慢期)。不过我不知道在这个问题上何时会有突破,是2年内,还是2年后,还是这条路10年内都不行。
交流与合作
如果希望和我交流讨论,或参与相关的讨论群,或者建立合作,请私信联系,见 联系方式。
希望留言可以到知乎对应文章下留言。
本文于2023.12.25首发于微信公众号与知乎。
知乎链接 https://zhuanlan.zhihu.com/p/674090266