PT、SFT
在大模型领域,PT和SFT分别代表预训练(Pre-training)和监督微调(Supervised Fine-tuning)。这两个概念通常用于构建和优化深度学习模型,特别是自然语言处理(NLP)领域的模型。
- 预训练(Pre-training,简称PT):预训练是一种无监督学习方法,模型通过大量无标签数据进行训练,以捕捉数据的底层结构和模式。在自然语言处理领域,预训练模型通常学习词汇、语法和句子结构等基本特征。预训练的目的是让模型学会一定程度的通用知识,为后续的微调阶段打下基础。
- 监督微调(Supervised fine-tuning,简称SFT):微调是一种有监督学习方法,通过在有标签数据上对预训练模型进行进一步训练,以适应特定的任务。这个过程使得模型能够利用预训练阶段学到的通用知识,结合新数据的标签信息,使模型在特定任务上表现更好。
自监督学习
大型语言模型本质上就是神经网络,也就是一种机器学习的方法。机器学习中的监督学习需要人类帮助标注数据。然而遗憾的是,ChatGPT 底层的大型语言模型参数如此的多,如果使用监督学习,必然需要大量的人类标记数据,这几乎是不可能的。自监督学习主要是利用辅助任务(pretext)从大规模的无监督数据中挖掘自身的监督信息,通过这种构造的监督信息训练模型,从而学习到对下游任务有价值的表征。
自回归模型
GPT 是如何在人类的文本数据上实现自监督学习?用一句话就可以讲明白:用文本的前文来预测后文。
Token
GPT 不是适用于某一门语言的大型语言模型,它适用于几乎所有流行的自然语言。所以 GPT 的 token 需要兼容几乎人类的所有自然语言,那意味着 GPT 有一个非常全的 token 词汇表,它能表达出所有人类的自然语言。如何实现这个目的呢?答案是通过 unicode 编码。实际上 GPT 是使用一种称为 BPE (Byte Pair Encoding)的算法,在上面的基础上进一步生成更大的词汇表。它的基本思想如下,将上述的基础 token (256种可能)做组合,然后统计文本数据中这些组合出现的频率,将频率最大的那些保留下来,形成新的 token 词汇表。因此,通过此方法得到的 token 和文字的映射不一定是一对一的关系。 GPT 实际是将我们输入的文字转换成 token,然后通过 GPT 模型预测 token,再将 token 转换成文字,最后再输出给我们。
上下文学习
对于大型语言模型来说,即需要大量的数据标记成本,也需要算力成本和时间成本。然而,不同场景下任务的需求是不一样的,不可能根据每个任务都去微调模型。能否不进行微调就让模型学习完成不同的任务呢?答案是可以的,这个神奇的技术称为 上下文学习 (In Context Learning)。它的实现非常简单,只需要给到模型一些引导,将一些事先设定的文本输入到大型语言模型中,就像手把手教人学会某项技能一样,大型语言模型就能神奇的学习到如何处理后续的新任务。遗憾的是,为什么大型语言模型具有上下文学习的能力仍然是一个迷,业内把这个能力称为“涌现”。
思维链
“思维链”是指在思考问题或探索主题时,一个思想引发另一个思想,形成一系列相互关联的思维环节。这种思维过程可以是线性或非线性的,通过连接和扩展思想,帮助我们更全面地理解问题,促进创新性思考,思维链是认知过程中的重要组成部分。
Transformer
是一种基于自注意力机制的深度学习模型架构,用于处理序列数据,特别在自然语言处理领域取得重大突破。它由编码器和解码器组成,通过并行处理和全局关联建立,能够更好地捕捉长期依赖关系,实现高效的序列到序列转换。
LoRA
假设有一个预训练好的语言模型,包含了大量的预训练好的参数。现在要使用这个模型来解决一个特定的下游任务,例如情感分析。为了适应这个特定的任务,需要微调模型。
使用LoRA方法,首先将预训练模型的参数冻结,即保持不变。然后,在冻结的预训练模型之上,添加一些新的层,这些层将用于适应新的任务。例如,可以添加一个分类器层,用于将文本分类为正面或负面情感。在这个过程中,只有新添加的层的参数将被训练,而预训练模型的的其他参数将被保持不变。这样,只需要训练一小部分参数,就可以快速微调模型,同时保持了预训练模型的性能。因此,LoRA方法可以在不增加模型大小和计算成本的情况下,实现更好的模型性能和更快的训练速度。
神经网络
神经网络是一种数学模型,模拟人脑的工作原理,通过训练学习如何处理输入数据,并在各种任务中提供准确的预测和判断。
可以将其想象为一个模仿人脑工作方式的数学模型。就像人脑中有大量的神经元相互连接一样,神经网络也由很多个小单元组成,这些单元之间通过连接传递信息。
我们可以把神经网络比作一个信息处理的流水线。首先,我们将输入数据(比如图像、文本等)传递给神经网络的输入层。然后,数据在网络中经过一系列的处理和转换,类似于人脑中的信息处理过程。最后,我们从输出层得到网络对输入数据的处理结果。
神经网络通过训练来学习如何处理输入数据。在训练过程中,我们提供已知的输入和对应的正确输出给网络。网络根据这些例子逐渐调整内部的连接权重,以使得网络能够更准确地预测输出。通过不断地反复训练,网络逐渐改善自己的表现,可以在新的未见过的数据上做出准确的预测。
输入数据通过输入层传递到隐藏层,隐藏层对数据进行处理和转换,最后输出到输出层。每个连接都有一个权重,控制着信息在神经网络中的流动。
这只是一个简单的示例,现实中的神经网络通常更复杂,具有更多的层和更多的神经元。但是这个示例可以帮助你理解神经网络中信息流动的基本原理。
自注意力机制
自注意力机制(Self-Attention Mechanism)是神经网络模型中的一种算法策略,用于捕捉输入序列中的长距离依赖关系。在大多数深度学习模型中,尤其是自然语言处理任务中,此机制被广泛应用。
自注意力机制的基本思想是对输入序列中的每个元素计算其与其他元素之间的相似度或相关性,并使用这些相似度将其他元素的信息聚合到当前元素上。这样,每个元素都能获得整个输入序列中与之相关的信息,从而使模型更好地理解和捕捉序列内部的依赖关系。
演绎与归纳
演绎推理(Deductive Reasoning)是从一般原理或前提出发,通过逻辑推演得出具体结论的过程。它是从已知的事实或假设出发,应用逻辑规则进行推理,从而得出严格且确定的结论。演绎推理是从普遍性到特殊性的推理方式。例如,我们知道所有人都会死亡,而张三是一个人,那么我们可以演绎出最终张三也会死亡。
归纳推理(Inductive Reasoning)是通过观察和经验,从具体事实或例子中推导出一般性原则或概念的过程。它是从特殊性到普遍性的推理方式。通过观察到的一系列特定事件或例子,归纳推理试图找到其中的共同模式或规律,并基于这些模式或规律来推断普遍性的结论。例如,我们观察到一只小猫A、另一只猫B、再一只猫C都有毛,并且我们还观察到其他的猫也有毛,因此我们可以归纳出“所有猫都有毛”的一般性结论。
机器学习与深度学习
机器学习是一种让计算机系统从数据中学习的方法。我们给计算机一些输入数据和对应的输出结果,让它通过分析这些数据的模式和规律,自动学习并做出预测或决策。机器学习的目标是让计算机能够从经验中学习,从而改善性能并适应新的情境。
深度学习是机器学习的一种特殊类型,它专注于使用深层神经网络进行学习和推理。深度学习模型由多个神经网络层组成,每一层都对输入数据进行处理和抽象,从而逐渐学习更高级的特征和表示。通过学习多层次的抽象,深度学习模型能够在各种任务中获得出色的表现,如图像识别、语音识别、自然语言处理等。
预训练
预训练(Pre-training)是指在训练深度学习模型之前,对模型进行的一种预处理过程。预训练的目的是为了让模型能够在进行正式训练时具有更好的性能或更快的收敛速度。
通俗来说,预训练就像是给模型一种预先学习的机会,让模型先了解一些基础知识,然后再去学习更具体、更复杂的任务。这有点像人类学习的过程:先学习基本的语言和数学知识,然后再去学习更专业的知识,这样学习会更高效。
预训练主要是无监督预训练:在这种方法中,模型被训练为从大量无标签的数据中学习数据的结构和特征。这可以帮助模型捕捉到一些基本的模式和规律,从而为后续的有监督训练打好基础。常见的无监督预训练方法有自编码器、无监督聚类等。
微调
是在Pre-training的基础上进行的进一步学习。在这个阶段,我们将在特定任务上进行有监督的训练,以使模型能够更好地适应新任务的要求。可以把这个过程比作一个人在具体的实践中,根据具体情况进行进一步的调整和学习。就像一个人通过实际练习和应用,将自己的知识和经验应用到解决实际问题上。
微调步骤中有一个关键的环节:超参数,超参数包括:轮次、学习率、以及批次大小等。以下是一些常见做法的通俗解释:
决定一个机器学习模型训练轮次的方法可以比喻为烹饪过程。我们要做的是确定需要给菜肴煮多长时间,这取决于食物的种类和厚度等因素。考虑以下几点:
验证集性能:就像检查菜肴煮熟程度,观察模型在未见过的数据集(验证集)上的表现。如果验证集上的性能不再提升或开始变差,说明菜已经煮好。
经验法则和文献:查阅菜谱找到类似菜肴的烹饪时间,或者询问有经验的大厨。同样,参考其他人的经验或学术研究中建议的训练轮次。
早停策略和学习率调整:如果菜看起来差不多熟了,可以减小火候进行慢炖。对应到模型训练就是,当验证集性能不再明显提高时,使用早停策略停止训练或减小学习率,以避免过拟合。
网格搜索:尝试用不同火力炖煮不同时间,观察哪个组合效果最好。这类似于尝试不同的训练轮次组合,找到最佳表现的模型。
数据集泛化能力:确保所用食材是否既能满足口感,又能保证营养均衡。通过交叉验证技术评估模型在各种情况下的表现,以便优化并确保模型具有较好的普适性。
监督训练
在监督学习中(也称为从演示中学习或“指令微调”),我们会收集一组人类编写的文本,这些文本以问题或指令的形式出现,并包含了期望的输出。例如,这些文本可以是某一问题和答案,或者是像带有人类编写总结的summarize the following text {text}这样的任务。通过在相同的“给定前缀预测下一个token”的目标上继续训练模型,但这次是在指令-输出对集合上,模型学会通过执行指令来响应。即模型接收到给定问题的正确输出的演示,并学会复制输出结果。我们希望通过这种方式将其泛化到训练中尚未出现的问题中去。
强化学习(RL)
在强化学习中,我们为模型提供指令,但并不提供人工编写的答案。模型需要自己生成答案。评分机制(例如人类)会读取生成的答案,并告诉模型这些答案的质量,模型的目标是如何回答以获得高分。
P- Tuning
是GPT模型微调中的一种技术,是在Fine-tuning方法基础上进行改进而形成的一种参数高效的微调方法。P-tuning只有少量参数参与训练,训练计算复杂度相对较小,适合少数据量场景。它的原理是将人工提示词模板转换成可学习的连续向量,通过下游任务的学习来优化连续向量,从而自动学出好的自动提示模板。
Post-training
是一种迁移学习技术,它在预训练语言模型的基础上,通过下游任务的数据集和监督信号,更新与任务相关的层,帮助模型迁移到下游任务。通常将预训练模型中的Transformer encoder层的参数保持固定,只更新后续的任务特定层,如分类器层的参数。它使用的是下游任务的数据集和标签,采用监督学习的方式进行模型优化。所以Post Pretrain是为了获得一个更强大的通用语言模型,它继续采用无标记数据预训练整个预训练模型。而Post-training是一种迁移学习方法,为了帮助GPT模型迁移到下游任务,它只更新与任务相关的层的参数。
Post-Pretrain
预训练之后,继续使用无监督数据对整个模型进一步预训练,调全部参数,指我们在基础模型预训练之后,继续使用无标记数据对整个模型进行预训练。它的目的是继续提高模型的通用语言表示能力,得到一个更强大的语言模型。
数据集
在微调模型中,我们经常会碰到训练集、验证集、测试集这三个数据集。它们的作用和区别如下:
- 训练集(Training Set):训练集用于训练模型。在模型训练过程中,训练集中的数据被用来调整模型的权重和参数,从而使模型逐渐适应输入数据和目标输出。简单来说,训练集就是用来建立模型的。
- 验证集(Validation Set):验证集用于在训练过程中评估模型性能。通过将部分数据划分为验证集,我们可以实时检测模型在独立数据集上的泛化能力。这有助于调整超参数、避免过拟合等。当模型在训练集上表现得很好但在验证集上表现较差时,通常说明发生了过拟合现象。验证集还可以用于模型选择——当我们尝试许多不同模型或模型结构时,可以通过比较它们在验证集上的表现来选择最优的一个。
- 测试集(Test Set):测试集是在完成模型训练、调整和选择后用于评估模型最终性能的数据集。测试集对模型未知,这意味着在训练和验证过程中,模型从未见过测试集中的数据。这使得我们能够通过测试集评估模型在实际应用中遇到新数据时的泛化性能。理想情况下,在测试集上的性能可以预测模型在实际场景中的表现。
评估模型的一些指标
- 准确率(Accuracy):分类问题中,准确率是正确分类的样本数量除以总样本数。就像你在数学测试中得到的分数,是模型正确预测的结果与总试题数量之比。比如说,你做了10道题,答对了7道,那你的准确率就是7/10=70%。
- 精确率(Precision):在分类问题中(通常是二分类),精确率是真正例(TP, True Positive)除以所有被预测为正例的样本数量(真正例+假正例,即 TP+FP)。在预测为“对”的那些结果中,真正对的占多少。比如你猜了5次都会下雨,但实际上只有3次下雨了,那么你的精确率是3/5=60%。
- 召回率(Recall):又称为敏感度(Sensitivity)或者真正例率(True Positive Rate, TPR),是真正例(TP)除以所有实际为正例的样本数量(真正例+假反例,即 TP+FN)。对于所有真正需要预测为“对”的情况,你抓住了多少。还是上面下雨的例子,假如本来有4次应该要下雨,你抓住了其中的3次,那召回率就是3/4=75%。
- F1-score:是精确率和召回率的调和平均值,兼顾了精确率和召回率的关系。F1-score 提供了一个同时考虑精确率和召回率的简洁度量方法。是精确率和召回率的平衡,可以看作他们的“平均值”。一个好的模型需要两者都高,而F1-score能够给出一个整体评价。类似于考试期间总分和平均分。
- 均方误差(Mean Squared Error, MSE):主要用于回归问题中,衡量预测值与实际值之间的差距。计算方式是预测值与实际值差值的平方的平均值。是预测值与真实值差距平方的平均值。例如,你猜苹果有5个,但实际上有6个,误差是1,错得越多,均方误差就越大。像考试的时候,老师计算学生平均失分。
- R²(R-squared):主要用于回归问题中,表示模型对数据的拟合程度。简单来说,R² 衡量的是模型解释观察到的变化所占的百分比。R² 的取值范围为0到1,值越接近1说明模型能够更好地拟合数据。这个有点像“解释程度”,衡量模型解释数据中变动的能力。假设R²=0.9,意味着我们的模型能解释90%的真实情况,离完美预测还差10%。类似于课程评分百分比,请尽量达到100%。