本章学习资料来自:DatawhaleDatawhale 2024 年 AI 夏令营 第四期联合浪潮信息一同开展的学习活动“动手学大模型应用全栈开发”
ps:仅用于个人笔记,不另作他用!!
pss:叠甲,本人小白一只,如有错误的地方麻烦各位大佬指正(求求了)
第一部分:大模型背景知识
一、大模型发展历史
1、1990s——统计语言模型(Statistical Language Model, SLM):使用马尔可夫假设(Markov Assumption)来建模语言序列的 𝑛 元(𝑛-gram)语言模型
注:马尔可夫假设:即下一个词的出现仅依赖于它前面的一个或几个词。
参考资料:(四)N-gram语言模型与马尔科夫假设_马尔可夫链假设和 n-gram-CSDN博客
2、2013——神经语言模型(Neural Language Model, NLM):基于神经网络构建语言模型,如循环神经网络(Recurrent Neural Networks, RNN),并学习上下文相关的词表示(即分布式词向量),也被称为词嵌入(Word Embedding)。代表性工作:word2vec
3、2018——预训练语言模型(Pre-trained Language Model, PLM):使用大量的无标注数据预训练双向 LSTM(Bidirectional LSTM, biLSTM)或者Transformer,然后在下游任务上进行微调(Fine-Tuning)。代表性工作:ELMo、BERT、GPT-1/2
4、2022——大语言模型(Large Language Model, LLM):基于“扩展法则”(Scaling Law),即通过增加模型参数或训练数据,可以提升下游任务的性能,同时具有小模型不具有的“涌现能力”(Emergent Abilities)。代表性工作:GPT-3、ChatGPT、Claude、Llama
二、大模型的构建过程
通常来说,大模型的构建过程可以分为预训练(Pretraining)、有监督微调(Supervised Fine-tuning, SFT)、基于人类反馈的强化学习对齐(Reinforcement Learning from Human Feedback, RLHF)三个阶段。接下来,我们依次介绍一下这三个阶段:
1.预训练
预训练指使用海量的数据进行模型参数的初始学习,旨在为模型参数寻找到一个优质的“起点”。这一概念最初在计算机视觉领域萌芽,通过在ImageNet(一个大型图像数据集)上的训练,为模型参数奠定了坚实的基础。随后,这一理念被自然语言处理(NLP)领域采纳,word2vec开创先河,利用未标注文本构建词嵌入模型;ELMo、BERT及GPT-1则进一步推动了“预训练-微调”范式的普及。
起初,预训练技术专注于解决特定类别的下游任务,例如文本分类、序列标注、序列到序列生成等传统NLP任务。OpenAI在GPT-2的研究中,提出了一种创新思路——通过大规模文本数据预训练,打造能够应对广泛任务的通用解决方案,并在GPT-3中将这一理念扩展至前所未有的超大规模。
在BERT等早期预训练模型中,模型架构和训练任务呈现出多样化特征。然而,随着GPT系列模型的兴起,“解码器架构+预测下一个词”的策略证明了其卓越效能,成为了当前主流的大模型技术路线。
在预训练过程中,首要任务是搜集和清洗海量的文本数据,确保剔除潜在的有害内容。鉴于模型的知识库几乎完全源自训练数据,数据的质量与多样性对模型性能至关重要。因此,获取高质、多元的数据集,并对其进行严谨的预处理,是打造高性能语言模型的关键步骤。
当前,多数开源模型的预训练均基于数T的token。例如,Llama-1、Llama-2、Llama-3的预训练规模分别为1T、2T和15T。除了对数据量的苛刻要求,预训练阶段对计算资源的需求也极为庞大。以Llama-1的65B参数模型为例,其在2,048块A100 80GB GPU集群上进行了接近三周的训练。此外,预训练过程中还涉及诸多细节,诸如数据配比、学习率调度、模型行为监测等,这些往往缺乏公开的最佳实践指导,需要研发团队具备深厚的训练经验与故障排查能力,以规避训练过程中的回溯与重复迭代,节约计算资源,提高训练效率。
总体而言,预训练不仅是一项技术挑战,更是一场对数据质量、算力投入与研发智慧的综合考验。
2.有监督微调
经过大规模预训练后,模型已经具备较强的模型能力,能够编码丰富的世界知识,但是由于预训练任务形式所限,这些模型更擅长于文本补全,并不适合直接解决具体的任务。
尽管引入了诸如上下文学习(In-Context Learning, ICL)等提示学习策略以增强模型的适应性,但模型本身在下游任务解决上的能力仍受限。为了克服这一局限,预训练后的大型语言模型往往需经历微调过程,以提升其在特定任务中的表现。
目前来说,比较广泛使用的微调技术是“有监督微调”(也叫做指令微调,Instruction Tuning),该方法利用成对的任务输入与预期输出数据,训练模型学会以问答的形式解答问题,从而解锁其任务解决潜能。经过指令微调后,大语言模型能够展现出较强的指令遵循能力,可以通过零样本学习的方式解决多种下游任务。(个人理解是我们将标准答案投入进去,让模型进行靠拢)
然而,值得注意的是,指令微调并非无中生有地传授新知,而是更多地扮演着催化剂的角色,激活模型内在的潜在能力,而非单纯地灌输信息。
相较于预训练所需的海量数据,指令微调所需数据量显著减少,从几十万到上百万条不等的数据,均可有效激发模型的通用任务解决能力,甚至有研究表明,少量高质量的指令数据(数千至数万条)亦能实现令人满意的微调效果。这不仅降低了对计算资源的依赖,也提升了微调的灵活性与效率。
3.基于人类反馈的强化学习对齐
除了提升任务的解决能力外,大语言模型与人类期望、需求及价值观的对齐(Alignment)至关重要,这对于大模型的应用具有重要的意义。
OpenAI在 2022 年初发布了 InstructGPT 论文,详尽阐述了如何实现语言模型与人类对齐。论文提出了基于人类反馈的强化学习对齐(Reinforcement Learning from Human Feedback, RLHF),通过指令微调后的强化学习,提升模型的人类对齐度。RLHF的核心在于构建一个反映人类价值观的奖励模型(Reward Model)。这一模型的训练依赖于专家对模型多种输出的偏好排序,通过偏好数据训练出的奖励模型能够有效评判模型输出的质量。
(个人ps:个人感觉是像通过奖惩来“教育”孩子发展成一个正常人哈哈哈,这种模型应该不是固定不变的,应该会根据人类偏好的数据迭代而不断发展变化的。)
目前还有很多工作试图去除复杂的强化学习算法,或其他使用 SFT 方式来达到与 RLHF 相似的效果,从而简化模型的对齐过程。例如,直接偏好优化(Direct Preference Optimization, DPO),它通过与有监督微调相似的复杂度实现模型与人类对齐,是一种典型的不需要强化学习的对齐算法。相比RLHF,DPO不再需要在训练过程中针对大模型进行采样,同时超参数的选择更加容易。
三、开源大模型和闭源大模型
1、将模型开源的组织
他们秉持着促进学术交流和技术创新的理念,让全球的研究者和开发者都能受益于这些模型。通过开放模型的代码和数据集,他们加速了整个AI社区的发展,促进了创新和技术的民主化。这一阵营的代表有Meta AI、浪潮信息等。
2、保持模型闭源的公司
它们通常将模型作为核心竞争力,用于提供专有服务或产品,以维持商业优势。闭源模型通常伴随着专有技术和服务,企业可以通过API等方式提供给客户使用,而不直接公开模型的细节或代码。这种模式有助于保障公司的商业利益,同时也为用户提供了稳定和安全的服务。这一阵营的代表有OpenAI、百度等。
思考:组织和公司是否选择开源,我感觉取决于拥有的算力、数据量和企业是否选择商业化(组织目的)因素。毫无疑问无论是开源还是闭源都是推动AI发展的重要助力。
四、大模型时代挖掘模型能力的开发范式
1、Prompt工程
Prompt工程(Prompt Engineering)是指通过精心构造提示(Prompt),直接调教大模型,解决实际问题。
为了更充分地挖掘大模型的潜能,出现了以下两种技术:
(1)上下文学习(In-Context Learning, ICL):将任务说明及示例融入提示文本之中,利用模型自身的归纳能力,无需额外训练即可完成新任务的学习。
尽管引入了诸如上下文学习(In-Context Learning, ICL)等提示学习策略以增强模型的适应性,但模型本身在下游任务解决上的能力仍受限。为了克服这一局限,预训练后的大型语言模型往往需经历微调过程,以提升其在特定任务中的表现。
(2)思维链提示(Chain-of-Thought, CoT):引入连贯的逻辑推理链条至提示信息内,显著增强了模型处理复杂问题时的解析深度与广度。
2、Embedding辅助给LLM外接大脑
尽管大模型具有非常出色的能力,然而在实际应用场景中,仍然会出现大模型无法满足我们需求的情况,主要有以下几方面原因:
(1)知识局限性:大模型的知识来源于训练数据,而这些数据主要来自于互联网上已经公开的资源,对于一些实时性的或者非公开的,由于大模型没有获取到相关数据,这部分知识也就无法被掌握。
(2)数据安全性:为了使得大模型能够具备相应的知识,就需要将数据纳入到训练集进行训练。然而,对于企业来说,数据的安全性至关重要,任何形式的数据泄露都可能对企业构成致命的威胁。
(3)大模型幻觉:由于大模型是基于概率统计进行构建的,其输出本质上是一系列数值运算。因此,有时会出现模型“一本正经地胡说八道”的情况,尤其是在大模型不具备的知识或不擅长的场景中。
因此,将知识提前转成Embedding向量,存入知识库,然后通过检索将知识作为背景信息,这样就相当于给LLM外接大脑,使大模型能够运用这些外部知识,生成准确且符合上下文的答案,同时能够减少模型幻觉的出现。
ps:
Embedding是什么:
在自然语言处理(NLP)中,文本embedding是一个常见的概念。是将文字或短语转换成数值向量的过程。这些向量捕捉了单词的语义特征,例如意义、上下文关系等。比如,使用词嵌入技术(如Word2Vec、GloVe或BERT),模型可以将具有相似意义的词映射到向量空间中的相近位置。
1、图像Embedding
对于图像,embedding过程通常涉及使用卷积神经网络(CNN)等模型来提取图像中的特征,并将这些特征转换为一个高维向量。这样的向量可以代表图像的内容、风格、色彩等信息,从而用于图像识别、分类或检索任务。
2、声音Embedding
在声音处理领域,embedding通常指的是将音频信号转换为一个表示其特征的向量,这包括音调、节奏、音色等。通过这样的转换,可以进行声音识别、音乐生成等任务。
Embedding优势:
Embedding的主要优势是能够将实体转换为计算机易于处理的数值形式,同时减少信息的维度和复杂度。
有助于提高处理效率,而且也使得不同实体之间的比较(如计算相似度)变得可行。
embedding通常通过大量数据的训练而得到,能够捕捉到复杂的模式和深层次的关系,这是传统方法难以实现的上述资料引自:【AI大模型】Embedding模型解析 文本向量知识库的构建和相似度检索_embedding相似度-CSDN博客
3、参数高效微调
在实际应用场景中,大模型还会经常出现以下问题:
(1)大模型在当前任务上能力不佳,如果提升其能力?
(2)另外,怎么使大模型学习其本身不具备的能力呢?
这些问题的答案是模型微调。
模型微调也被称为指令微调(Instruction Tuning)或者有监督微调(Supervised Fine-tuning, SFT),首先需要构建指令训练数据,然后通过有监督的方式对大模型的参数进行微调。经过模型微调后,大模型能够更好地遵循和执行人类指令,进而完成下游任务。
然而,由于大模型的参数量巨大, 进行全量参数微调需要消耗非常多的算力。为了解决这一问题,研究者提出了参数高效微调(Parameter-efficient Fine-tuning),也称为轻量化微调 (Lightweight Fine-tuning),这些方法通过训练极少的模型参数,同时保证微调后的模型表现可以与全量微调相媲美。