大语言模型介绍(一)
大语言模型
语言模型的发展历程
语言模型旨在对于人类语言的内在规律进行建模,从而准确预测 词序列中未来(或缺失)词或词元(Token)的概率。根据所采用技术方法的不同, 针对语言模型的研究工作可以分为以下四个主要发展阶段:
**统计语言模型(SLM)**:统计语言模型使用马尔可夫假设(MarkovAssumption)来建立语言序列的预测模型,通常是根据词序 列中若干个连续的上下文单词来预测下一个词的出现概率,即根据一个固定长度的前缀来预测目标单词。
如:N-gram模型,某一个词语出现的概率只由其前面的n−1个词语所决定。
$p(S)=p(w_1w_2⋯w_n)=p(w_1)p(w_2∣w_1)⋯p(w_n∣w_n−1)$
$p(冰激凌|我要去吃)=p(冰激凌|吃)$
对于高阶统计语言模型来说,随着阶数𝑛的增加,需要估计的转移概率项数将会指数级增长,经常会受到“维数灾难”(CurseofDimensionality) 的困扰。
**神经语言模型(NLM)**:神经语言模型使用神经网络来建模文本序列的生成,如循环神经网络(RecurrentNeuralNetworks,RNN)。通过引入WordEmbedding技术,能够有效克服统计语言模型中的数据稀疏问题,稠密向量的非零表征对于复杂语言模型的搭建非常友好。
Word2vec 是一个两层神经网络,通过“向量化”单词来处理文本。它的输入是一个文本语料库,它的输出是一组向量:表示该语料库中单词的特征向量。
预训练语言模型(PLM):与早期的词嵌入模型相 比,预训练语言模型在训练架构与训练数据两个方面进行了改进与创新。ELMo使用大量的无标注数据训练双向LST网络预训练完成后所得到的biLSTM可以用来学 习上下文感知的单词表示。进一 步,ELMo可以根据下游任务数据对biLSTM网络进行微调(Fine-Tuning),从而实现面向特定任务的模型优化。在2017 年,谷歌提出了基于自注意力机制(Self-Attention)的Transformer模型,通过自注意力机制建模长程序列关系。基于Transformer架构,谷歌进一步提出了预训练语言模型BERT,采用了仅有编码器的Transformer架构,并通过在大规模无标注数据上使用专门设计的预训练任务来学习双向语言模型。GPT-1采用了仅有解码器的Transformer架构,以及基于下一个词元预测的预训练任务进行模型的训练。
以ELMo、BERT、GPT-1为代表的预训练语言模型确立了“预训练-微调”这一任务求解范式。其中,预训练阶段旨在通过大规模无标注文本建立模型 的基础能力,而微调阶段则使用有标注数据对于模型进行特定任务的适配,从而更好地解决下游的自然语言处理任务。
大语言模型(LLM): 研究人员发现,通过规模扩展 (如增加模型参数规模或数据规模)通常会带来下游任务的模型性能提升,这种现象通常被称为“扩展法则”(ScalingLaw)。一些研究工作尝试训练更大的预 训练语言模型(例如175B参数的GPT-3和540B参数的PaLM)来探索扩展语言 模型所带来的性能极限。这些大规模的预训练语言模型在解决复杂任务时表现出 了与小型预训练语言模型(例如330M参数的BERT和1.5B参数的GPT-2)不同 的行为。
大语言模型的构建过程
神经网络是一种具有特定模型结构的函数形式,而大语言模型则是一种基于 Transformer 结构的神经网络模型。因此,可以将大语言模型看作一种拥有大规模参数的函数,它的构建过程就是使用训练数据对于模型参数的拟合过程。 大语言模型的优化目标更加泛化,不仅仅是为了解决某一种或者某一类特定任务,而是希望能够作为通用任务的求解器。为了实现这一宏大的目标,大语言模型的构建过程需要更为复杂、精细的训练方法。一般来说,这个训练过程可以分为大规模预训练和指令微调与人类对齐两个阶段 。
大规模预训练
预训练是指使用与下游任务无关的大规模数据进行模型参数的初始训练,可以认为是为模型参数找到一个较好的“初值点”。 大规模预训练本质上是在做一个世界知识的压缩,从而能够学习到一个编码世界知识的参数模型,这个模型能够通过解压缩所需要的知识来解决真实世界的任务。
为了预训练大语言模型,需要准备大规模的文本数据,并且进行严格的清洗,去除掉可能包含有毒有害的内容,最后将清洗后的数据进行词元化(Tokenization)流,并且切分成批次(Batch),用于大语言模型的预训练。
指令微调与人类对齐
但是由于预训练任务形式所限,这些模型更擅长于文本补全,并不适合直接解决具体的任务。比较广泛使用的微调技术是“指令微调”(也叫做有监督微调, Supervised Fine-tuning, SFT),通过使用任务输入与输出的配对数据进行模型训练,可以使得语言模型较好地掌握通过问答形式进行任务求解的能力。 与预训练相比,指令微调通常来说需要的指令实例数据规模要小的多。
除了提升任务的解决能力外,还需要将大语言模型与人类的期望、需求以及价值观对齐(Alignment),这对于大模型的部署与应用具有重要的意义。OpenAI在 2022 年初发布了 InstructGPT 的学术论文,系统地介绍了如何将语言模型进行人类对齐。具体来说,主要引入了基于人类反馈的强化学习对齐方法 RLHF (Reinforcement Learning from Human Feedback),在指令微调后使用强化学习加强模型的对齐能力。在 RLHF 算法中,需要训练一个符合人类价值观的奖励模型(Reward Model)。
扩展法则
大语言模型采用了与小型预训练语言模型相似的神经网络结构(基于注意力机制的 Transformer 架构)和预训练方法(如语言建模)。但是通过扩展参数规模、数据规模和计算算力,大语言模型的能力显著超越了小型语言模型的能力。有趣的是,这种通过扩展所带来的性能提升通常显著高于通过改进架构、算法等方面所带来的改进。
当算力 𝐶 给定的情况下,最优的模型参数规模和数据规模由指数系数 𝑎 和 𝑏 分别确定。 𝑎 和 𝑏 决定了参数规模和数据规模的资源分配优先级:当 𝑎 > 𝑏时,应该用更多的算力去提高参数规模;当 𝑏 > 𝑎 时,应该用更多的算力去提高数据规模。尽管 KM 扩展法则和 Chinchilla 扩展法则具有相似的公式形式,但是在模型规模和数据规模的扩展上存在一定的差异。随着算力预算的增加, KM 扩展法则(𝑎 ≈ 0.73, 𝑏 ≈ 0.27 )倾向于将更大的预算分配给模型规模的增加,而不是分配给数据规模的增加;而 Chinchilla 扩展法则主张两种规模参数应该以等比例关系增加(𝑎 ≈ 0.46, 𝑏 ≈ 0.54 )。
越来越多的工作表明,现有的预训练语言模型对于数据的需求量远高于这些扩展法则中所给出的估计规模。例如, LLaMA-2 (7B) 的模型就使用了 2T 的词元进行训练,很多更小的模型也能够通过使用超大规模的预训练数据获得较大的模型性能提升。
涌现能力
大语言模型的涌现能力被非形式化定义为“在小型模型中不存在但在大模型中出现的能力”,具体是指当模型扩展到一定规模时,模型的特定任务性能突然出现显著跃升的趋势,远超过随机水平。
上下文学习
上下文学习能力在 GPT-3 的论文中被正式提出。具体方式为,在提示中为语言模型提供自然语言指令和多个任务示例(Demonstration),无需显式的训练或梯度更新,仅输入文本的单词序列就能为测试样本生成预期的输出。
指令遵循
指令遵循能力是指大语言模型能够按照自然语言指令来执行对应的任务。为了获得这一能力,通常需要使用自然语言描述的多任务示例数据集进行微调,称为指令微调(Instruction Tuning)或监督微调(Supervised Fine-tuning)。通过指令微调,大语言模型可以在没有使用显式示例的情况下按照任务指令完成新任务,有效提升了模型的泛化能力。
逐步推理
对于小型语言模型而言,通常很难解决涉及多个推理步骤的复杂任务(如数学应用题),而大语言模型则可以利用思维链(Chain-of-Thought, CoT)提示策略来加强推理性能。