大语言模型发展到今天,人们已经发现了它的很多局限性。研究者们试图通过改进模型来消除它们,模型使用者们也设计了很多机制来规避这些局限性的影响。今天一起来读一篇综述论文,系统地了解一下LLM的局限性到底有哪些:
一、幻觉
首先在数学上,模型幻觉是不可能根除的。从可计算性理论来说,总是可以构造一个数据分布,让模型无法精确拟合这个分布,在一些数据点上出现幻觉;另外,总有一些无法计算的问题,比如图灵停机问题,模型在其上必出现幻觉。从信息论的角度来说,模型的容量(参数量)是有限的,必然无法在无限的问题空间中做到准确预测。
其次,训练数据本身也会必然带来各种幻觉问题。比如,数据的不完整性、时效性让模型无法存储未知数据;数据中存在噪音、虚假信息,模型无法判断真伪;数据的分布不均(skewed),让长尾部分的数据不能被模型有效记忆;数据的内部冲突,让模型的输出对prompt极其敏感,prompt的细微差异可能产生完全相反的答案;训练数据中benchmark的污染,让我们无法精确评估模型的能力。
模型的训练/评估方法鼓励模型编造答案,而不是承认无知(“我不知道”总是不得分,而编造答案总有一定猜中的几率)。RLHF也有Reward Hacking的问题,模型总是倾向于输出看起来流畅有条理、容易得到人类认可的文字,这可能会牺牲逻辑性、准确度。这里可以参见另一篇文章的讨论:LLM幻觉 - 怎样让LLM更加Truth-Seeking?
创造性(creativity)和准确度(factuality)不可调和的矛盾,或者说是Exploration和Exploitation二者的矛盾。要让模型的输出有一定的创造性(比如调节temperature等参数),输出的分布更广,准确性就必然会下降,而在某些领域,比如文学创作,幻觉本身就是创造性的一种体现;反之,限制输出的确定性,也必然导致创造力的降低。我们必须根据应用的领域做灵活调节。
二、上下文
尽管LLM的名义上下文(Context Window)在不断增长,能被模型有效使用的上下文长度却非常有限。关于这个问题有一个系统性的研究:Context Rot。模型无法有效使用整个Context,有几方面的原因:
训练数据在Context中存在左偏(Left skewed)。大部分训练数据都较短,集中在Context左侧,致使位于右侧的参数空间无法得到充分的训练。实际使用中,有效的Context长度远小于最大Context,往往不到最长训练数据的50%。
位置编码在长序列的情况下存在饱和(saturation)的问题。无论是Sin编码还是RoPE编码,距离过远的位置编码几乎都接近正交,严重丧失区分度。这使得模型难于处理距离较远token的关联性。最近的研究通过NTK-aware和Scaled RoPE来化解这个问题。
第三方面是注意力机制本身的问题。当token序列过长时,注意力呈现Overload现象(类似人类的注意力涣散)。
Softmax的机制中,大量的token会占据注意力的主体,一个token要获得足够的注意力,它的分数就必须比其他的token大Log(N)倍。N越大,就越难以达到这种非常显著的分数差距,或者说,难以获得高对比度的注意力分布。
另外,注意力机制中的平方级的运算,在长token序列的情况下,也给浮点数精度带来考验,错误积累和梯度消失的问题都会更加明显。
三、推理能力
时至今日,对于LLM是否真能胜任推理工作,仍然没有定论。比如这篇论文(苹果论文:LLM所谓的推理就是个幻觉[1])就曾引发很多争议。基于likelyhood的训练机制,使得LLM本质上就是一个“填空机器”,这和基于因果关系、固定规则的推理机制本质是不同的。
所以LLM只能捕捉到语言表面的相关性,对于复杂的、深层的推理问题往往表现不佳(汉诺塔[2]、象棋[3])。LLM在推理上的局限性有三个成因:
目标错配(mismatch)。我们训练的目标是最终结果的正确性,中间推理步骤不重要,甚至是可有可无的。这种激励机制会让模型编造看似合理、连贯的推理过程,应该改进一种按步骤反馈(step-aware)的机制,让推理步骤都能接收到奖惩信号。
模型往往会把错误的相关性数据(correlation)引入推理过程,而不是按照因果关系去推理。
模型往往会陷入贪婪(或者说短视)的搜索策略,不会回溯。虽然推理中也会出现自我纠正的现象(Wait…),但是这种现象的成因到底是对人类推理过程的模仿,还是来自对问题本身的理解?在引导推理方面,已经有了一些成功的尝试,比如长/短推理。
作者认为这种推理能力上的局限性是根植于LLM模型结构和训练模式的,只有用新的范式才能根除,他也提到了HRM等新型架构。
文章列举了几种提高模型推理能力的实用手段:
- PAL - Program-Aided Language Models,用程序辅助大模型进行符号化的推理,比如用python脚本去解决汉诺塔问题。
- CoVe - Chain-of-Verification,用单步验证、自我修正的方式提高推理步骤的可靠性。
- Neuro-Symbolic Integration,把神经网络(LLM)和符号推理机制结合起来。
- 多模态推理 - 引入其他模态的Grounding,扩大推理证据的范围。
四、RAG
RAG系统已经是AI应用的一种主流模式。RAG系统的效果依赖两方面的因素,一是搜索的质量,即能不能找到相关的数据),二是LLM能不能充分利用Context中的引用数据。
Relevance–Coverage Dilemma。Context的空间是有限的,所以必须选择和问题相关的资料。如果引用资料很多,coverage有一定保障,但是可能包含很多无关数据;如果注重relevance,谨慎选择数据,可能会损失coverage,所以要有所取舍。
放入Context数据的排序也很重要。Context比较长的时候,会出现lost-in-the-middle的问题,只有开始和结束部分的token会获得比较高的注意力权重。所以,数据的不同排序会导致LLM得出不同的结果。
记忆污染问题。索引资料库中可能存在污染数据,它们和Query强相关,从而把其他相关数据排除在外。实验证明,只要5个“有毒”文档,就能导致RAG程序的表现下降90%。
LLM对于Context中的数据和问题是否相关没有很强的判别能力,无关数据可能构成distractor,影响LLM在问题上的表现:一篇无关文档就能让Performance下降30%。
在模型的世界知识和引用数据出现冲突时,还有一个“该信谁”的问题。要让模型把所有结论基于引用数据,需要额外的训练、引导。
五、多模态
多模态模型的一个主要问题就是文本模态的绝对主导地位,视觉模态的数据被强制转换到文本的空间中。文本数据在注意力结构中也存在压倒性的优势,论文提到一个例子:文本token的注意力是Vision token的157倍。
把多种模态融合在一个Latent空间中,等于人为创造了一个信息瓶颈,一个有损的信道。为了融合text和vision两种不同token,一般对Vision token进行分片(patchify),这种机制破坏了视觉数据的连续性。
不同模态数据之间会产生错误的相关性,导致跨模态的幻觉、跨模态的数据污染。
不同模态之间的参数存在不同的学习速率,导致训练时难以对齐。和单文本模型不同,增大模型的大小并不能解决问题,因为不同模态的Scaling Law也有不同的特点(Divergent Scaling Laws)。
六、Benchmarks
Benchmark的首要问题当然是数据污染。不管是有意还是无意,Benchmark都已经进入各个模型的训练数据集。
对于LLM-as-judge的评估方式,也存在一些天然的缺陷:self-bias(对自身模型的偏向),Position bias(对不同位置数据的偏向),Verbosity bias(对较长内容的偏向)。
Benchmark常常忽略compute efficiency的比较:往往模型的算力消耗(FLOPs)越多,时间越长,效果越好,但是很多benchmark只比较最终结果,没有把计算效率纳入考虑。
测试结果的稳定性不高,采用不同的种子,不同的prompt的格式会得到不同的结果,模型的版本升级也会影响模型评估的准确性。
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。