引用 Andrej Karpathy:https://www.youtube.com/watch?v=zjkBMFhNj_g
在人工智能领域,大型语言模型(Large Language Models,简称LLMs)已成为近两年来的热门焦点。这些技术奇观背后的原理既浅显易懂,又蕴含深邃的智慧。
Andrej Karpathy,作为OpenAI的创始人之一,不仅在人工智能界享有盛名,也以其对技术的深入解析而受到广泛尊敬。本文将依循Karpathy视频中的视角,结合一些看法,探讨大型语言模型的奥秘,希望可以帮助到你。
大语言模型可以比作两个文件
大型语言模型,简而言之,是由巨量的数据经过复杂计算而生成的模型或智能体系,它们能够理解、生成、甚至是模仿人类的语言。
如果我们将大语言模型进行拆解,以进行形象的比喻,那么大语言模型本质上由两个核心组件构成:一个巨大的参数文件和一个运行这些参数的代码文件。
首先,参数文件,可以视为这些大语言模型的“DNA”,它包含了数以亿计甚至数以万亿计的权重,这些权重是通过大量数据训练而来的,它们共同构成了一个复杂的神经网络。这个网络能够捕捉、学习并模仿人类语言的细微差别,从而理解和生成文本。每一个权重都承载着特定的信息和规则,使得模型能够在给定输入时做出预测。
其次,代码文件,则是可以视为这些大语言模型的“大脑”。这部分代码负责指导如何使用参数文件中的权重来处理输入的文本,执行推理,并产生输出。这些代码可以用各种编程语言编写,它们定义了模型的架构、如何在给定的输入下选择最合适的词汇以及如何结合上下文生成连贯的文本等。
这两个组件的结合,让大型语言模型具备了令人惊叹的能力。只需一台装有适当软件的计算机,我们就能与之交互,无需连接互联网或依赖其他外部资源。无论是撰写文章、编写程序代码,还是解答复杂问题,大型语言模型都能提供卓越的表现。
就拿由meta开源的目前最受欢迎的Lama2 70B模型来说,这个模型你可以被精简地理解为您电脑文件系统目录中的两个核心文件:一个参数文件以及一个运行代码文件,如上图所示。
在这个模型中,每个参数都采用16位浮点数(即2个字节)来存储,累计起来,这个参数文件的体积达到了140GB。这一数字不仅反映了模型的复杂性,也预示着其强大的处理能力。
接下来是运行代码文件,这部分可能令人意外地简洁,大约500行的C语言代码便足以实现整个神经网络的结构。然后我们将代码文件进行编译,并链接上参数文件,那么就形成了一个完整的Llama2 70B大模型。
这时,我们便可以与之交互,向模型提出问题或请求,无论是查询信息、撰写文本,还是其他复杂的任务,Llama2 70B都能根据其训练所得的知识库给出响应。
如何获取参数文件
我们向模型提问问题,模型给出回答,这个过程就是模型的推理阶段。在这一阶段,模型使用其训练期间学到的知识(参数文件)来理解用户的查询,并生成恰当的回答。推理阶段相对于训练阶段来说,计算需求较低,因此可以在个人电脑上或者云端较小的计算环境中进行。
那么参数文件是从哪里获取呢?当然是通过模型训练,它比模型推理要复杂的太多。
模型训练阶段可以被视为一种对海量互联网数据进行“压缩”的过程。在这个阶段,目标是从广泛的数据中提取有用的信息和模式,并将这些知识以参数的形式存储在模型中。这一过程需要巨大的计算资源,尤其是对于拥有数十亿乃至数百亿参数的大模型而言。
如果我们要训练一个模型,我们首先就需要从互联网上通过爬虫获取大量的数据,然后我们还需要有一个大规模的GPU集群,而训练的过程就可以理解是将这些数据“压缩”到这个参数文件中的过程。
以700亿参数的llama 2为例,就需要6000块GPU,然后花上12天从大概10T的互联网数据中得到一个大约140GB的“压缩文件”,整个过程耗费大约200万美元。
预测下一个单词
有了这些参数,那么通过代码实现的整个神经网络的到底是在做什么呢?
这个参数文件或者这个“压缩文件”,就是大模型对世界的理解,有了它就可以据此工作了。
简而言之,大型语言模型的工作原理是基于一个核心任务:依靠包含压缩数据的神经网络对所给序列中的下一个单词进行预测。
当我们输入一个句子片段,如“cat sat on a”,模型会动用其内部的亿万参数通过神经元的相互连接,探索这些词汇之间的潜在联系。每个神经元的连接都代表了特定的语言模式或知识片段,模型便沿着这些连接寻找最可能的下一个词汇,然后给词库中的每一个词一个概率,概率最高的就是下一个最合适的词汇,比如“mat(97%),就形成了“猫坐在垫子上(cat sat on a mat)”的完整句子。
不可避免的幻觉问题
大语言模型的神经网络就是在预测下一个单词的概率。
而我们在将海量数据浓缩成模型可学习的参数中,不可避免地会丢失一部分信息。此外,并非所有可能遇到的问题都直接出现在训练数据中,导致即便是最先进的大型模型也无法保证其输出结果具有100%的准确性。
当我们在向大模型在请求查询时,有时似乎只是在模仿它在训练过程中学到的内容,而后根据这些学习到的内容给出一个似乎合理的、大致正确的方向。这种现象,可以被理解为一种“幻觉”——模型在没有确切答案的情况下,试图构建一个貌似合理的输出。
而且关于神经网络的神奇之处在于,我们完全知道其架构的细节,如上图所示是Transformer模型。我们清楚的知道不同阶段发生的所有数学计算,问题是在于这100B的参数分布在整个神经网络中,我们所知道的是如何迭代调整这些参数使得其在预测下一个单词的任务中表现的更好,就是我们知道如何优化这些参数,但我们并不知道这些参数在做什么,是如何协同工作的,表示的是什么意思。
有时我们可以从更高层次的角度去理解它为一个数据库,但它有些奇怪和怪异的数据库,这样的“数据库”并不仅仅存储静态信息,而是通过对海量文本数据的学习,构建了一个复杂的知识网络,能够以动态和互动的方式响应查询。
例如,当我们向模型询问“Tom Cruise的妈妈是谁?”时,模型能够基于其训练过程中所获得的知识,给出“Mary Lee Pfeiffer”的回答。这显示了模型在某种程度上能够理解和处理关于人物关系的查询,就像查阅一个精心整理的数据库一样。
然而,当查询的方向反转,即询问“Mary Lee Pfeiffer的儿子是谁?”时,模型可能会表现出不确定性,甚至回答“不知道”。这种现象揭示了大型语言模型作为“数据库”的一种局限性:它的知识是基于训练数据构建的,而这些数据可能并不包含所有方向的关联信息。因此,在面对没有直接或明确学习过的查询时,模型可能无法提供准确的答案。
这种行为特点,使得大型语言模型既奇特又怪异。它们并非传统意义上的数据库,其中的“知识”并不是简单的键值对应关系,而是一种更为复杂和抽象的数据表示。模型在回答查询时,并不是从一个固定的信息库中检索答案,而是通过对训练数据的深层次理解和处理,尝试重构和推断可能的答案。
训练第二阶段微调
我们将从互联网爬取的文档进行训练称为第一阶段,称之为预训练阶段。现在我们进入第二阶段微调,因为我们大多时候并不想要一个文档生成器。
微调可以看作第二次训练,预训练阶段模型通过处理TB级别的通用数据学习广泛的语言规律和知识。而微调阶段则着重于通过较小但高质量、针对性强的数据集来进一步优化模型,使其更好地适应特定的应用场景。
然而即使经过微调,大型模型仍然可能面临“幻觉”问题。这里所说的“幻觉”,指的是模型在缺乏确切信息或直接训练数据支持的情况下,试图构建或推断出看似合理但实际上可能并不准确的回答。这种现象源于模型的工作机制——基于概率和统计推断,而非真正的理解和逻辑推理。
训练第三阶段标注偏好
训练第三阶段也是进行微调,主要是针对第二阶段生成的结果进行比较标注,即在生成的多个结果中选择较好的回答进行反馈。通常评审员会根据一系列标准,如回答的准确性、逻辑性、信息的丰富度以及表达的清晰度等,对这些回答进行比较和标注,最终选择出相对较好的回答。
在收集到人类的评估反馈后,这些反馈被用作奖励信号,指导AI模型进行强化学习训练。在这一步骤中,模型通过尝试不同的策略并根据反馈结果调整其行为,以提高获得正面评价的概率。这个过程类似于人类通过奖惩机制学习新技能。
在OpenAI ChatGPT训练流程中这个阶段称为RLHF。
LLMs 的未来
1. LLM Scaling Law
当前在人工智能领域,一个普遍的观察结果是,模型的规模越大,其处理复杂任务的能力通常也越强。这一现象在大型语言模型(Large Language Models,LLMs)中表现得尤为明显。这些模型在执行如下一个单词预测等任务时,其准确性的提升与模型的规模直接相关。
具体而言,大型语言模型在预测下一个单词的准确率方面的表现,可以通过一个非常平滑且可预测的函数来描述,这个函数主要由两个变量决定:一是模型中的参数数量(n),二是训练过程中使用的文本数据量(d)。换句话说,只要我们知道了模型的参数量和它在训练过程中处理的文本量,我们就可以以相当高的信心预测该语言模型的性能。
这种关系的背后逻辑是,更多的参数意味着模型有更强的学习能力,能够捕捉到语言中更加微妙的规律和模式。同时,更大量的训练数据则为模型提供了更丰富的信息和上下文,使其能够更好地理解和预测语言的使用方式。因此,随着参数量的增加和训练数据量的扩大,模型在语言理解和生成方面的性能自然会得到提升。
2. 接入更多的工具
正如人类通过使用各种工具来提升解决问题的能力一样,为大型语言模型(LLMs)配备多样化的工具,也能显著增强其实用性和功能性。这些工具不仅拓宽了LLMs的应用范围,还让它们在处理更复杂、更多样化的任务时表现得更加高效和精准。
上网浏览:赋予LLMs上网浏览的能力,意味着它们能够实时访问和利用互联网上的海量信息资源。这不仅使得模型能够获取最新的数据,回答时效性强的问题,还让模型能够根据最新的趋势和信息进行学习和自我更新。
计算器功能:集成计算器功能后,LLMs能够执行精确的数学计算和数据分析任务。这对于需要处理大量数字信息、进行财务分析或科学研究的场景尤其重要,大大提升了模型在这些领域的应用价值。
编程能力:通过掌握编程技能,LLMs可以参与软件开发、代码调试和算法设计等任务。这使得模型不仅能够理解和生成自然语言,还能够编写和优化计算机程序,为软件开发领域带来了新的可能性。
调用其他模型:能够调用其他专门化模型,让LLMs在特定任务上的表现更加出色。例如,在图像识别、语音处理或者自然语言理解等方面,通过整合不同模型的专长,LLMs能够提供更加全面和深入的分析和解答。
这些工具的集成,使得LLMs不再仅仅是文本生成和处理的工具,而是变成了一个多功能、高效率的智能助手,能够在教育、科研、商业等多个领域发挥巨大作用。随着技术的进步和工具的不断丰富,我们有理由相信,LLMs将在未来展现出更加惊人的潜力和价值。
3. LLM 多模态发展
未来的LLMs将不仅限于处理纯文本信息,而是能够理解和生成包含多种数据类型的复合内容。例如,它们可以从图像中提取信息并用自然语言描述,或者根据文本内容生成相应的图像和视频。
此外未来通过整合多模态的能力,也有助于LLMs更好地理解语言背后的情感和语境,更准确地捕捉和反映人类的意图。
多模态LLMs将能够在与用户的互动中实时学习和适应,通过观察和分析用户的行为、表情和反馈,动态调整其响应和行为。这种交互式学习能力,不仅提高了模型的用户体验,也为构建更加智能和自适应的教育、娱乐和辅助设备奠定了基础。
4. 深思熟虑Tree of Thought
当前LLMs类似于“三体人”一样,属于直觉式思维,依照所接受的信息进行自动、迅速和不加思考的回答。它是高效的,但会受到偏见或者说可能在缺乏充分信息的情况下做出判断。
这也就是为什么对于复杂的数学或推理类的问题,ChatGPT存在很大概率的不可靠性。这些问题通常需要一定的理性思维,即思考过程。
未来的大型语言模型(LLMs)时,需要借鉴TOT概念意味着我们不仅要使它们能够迅速响应(类似上图系统1的功能),还要使它们能够进行深度、逻辑性强的分析和推理(类似上图系统2的功能)。这样的模型将能够更好地模拟人类的决策过程,提供更加准确、更具洞察力的输出。
5. 自优化能力
未来的大型语言模型(LLMs)一个非常关键的点是,其必将会朝着自我优化的方向发展。
自优化能力意味着模型不仅能够执行给定的任务,还能够基于反馈和结果持续改进其性能和效率。
就像AlphaGo一样,通过集成增强学习机制,在与环境的交互学习中调整实现最佳行动策略,此外需要能够在不断变化的信息环境中持续学习和更新其知识库。这包括从新数据中学习,同时避免所谓的“灾难性遗忘”。
总而严重,未来LLMs将需要通过引入增强学习、连续学习、自我诊断和元学习等机制,能够不断改进自身,以适应日益复杂和多变的任务需求。
6. 客户端定制化LLM
大型语言模型正朝着定制化的方向迅速发展。这种定制化的趋势允许用户将模型个性化,以特定的“身份”完成特定的任务,从而更好地满足个性化需求和特定场景下的要求。
7. 至关重要的安全性
我们必须认识到随着这些模型变得越来越智能,它们也面临着更复杂的安全挑战。例如ChatGPT刚出来时存在很多可能被利用来“越狱”或绕过模型限制的方法,其中包括一些创造性但现在已经较为人知且失效的技巧。
一个典型的例子是所谓的“奶奶漏洞”,这种越狱方式涉及到通过构建特定的故事背景或情境,诱导模型回答本应拒绝作答的问题。例如,通过捏造一个“已经去世的奶奶”角色,并赋予其“化学工程师”的身份,然后编造故事称这位“奶奶”曾在叙述者小时候念述凝固汽油弹的配方作为睡前故事。接下来,请求模型扮演这位“奶奶”,继续讲述这个“故事”。
这个例子揭示了LLMs可能面临的安全和伦理挑战,即如何确保模型不被恶意利用来获取或生成不当信息。要应对这类挑战,需要采取多层次的策略:
改善模型的理解能力:通过提升模型对复杂情境和背景故事的理解能力,使其能够更好地识别潜在的恶意意图。
增强伦理和安全规则:为模型设置更加严格的伦理和安全规则,确保其在处理潜在敏感内容时能够遵循明确的指导原则。
实施动态监控与干预:开发动态监控系统,实时检测模型的输出,一旦发现潜在的不当内容或行为,立即进行干预。
持续的研究与更新:持续研究新的安全威胁和攻击手段,不断更新和优化模型的安全措施,以应对不断演变的安全挑战。
暂无评论内容