Pre-training预训练
- 训练集 (Training Set):用于训练模型,即调整模型的参数以最小化预测错误。
- 验证集 (Validation Set):用于在训练过程中调整超参数(如学习率、网络结构等),以及进行模型选择(如选择哪一轮迭代的模型作为最终模型)。
- 测试集 (Test Set):用于在模型训练完成后评估其性能,提供对模型泛化能力的无偏估计。
- 训练集 (Training Set):学生在课堂上学习的知识。
- 验证集 (Validation Set):课后的练习题帮助学生巩固和纠正学到的知识。
- 测试集 (Test Set):期末考试检验学生的学习效果。
- 参数初始化:神经网络的参数(包括权重和偏置)在训练开始前会被随机初始化。
- 前向传播:在训练过程中,输入数据通过神经网络进行前向传播,计算出模型的输出。这个过程涉及将输入数据与每一层的权重和偏置进行线性组合,然后应用激活函数来引入非线性。
- 计算损失:在得到模型的输出后,会计算输出与真实标签之间的损失(或误差)。损失函数的选择取决于具体的任务,例如均方误差损失函数常用于回归任务,而交叉熵损失函数常用于分类任务。
- 反向传播:接下来,利用反向传播算法来计算损失函数相对于模型参数的梯度。这个过程涉及从输出层开始,逐层计算损失对参数的偏导数,并将这些梯度信息从输出层传播回输入层。
- 参数更新:得到梯度后,使用优化算法(如随机梯度下降SGD、Adam、RMSprop等)来更新模型的参数。优化算法根据计算出的梯度来调整模型参数,以最小化损失函数。
- 迭代训练:上述步骤(从前向传播到参数更新)会反复进行,直到模型在验证集上的性能达到满意的水平,或者达到预设的训练轮数(epochs)。
- 数据稀缺性:在现实世界的应用中,收集并标注大量数据往往是一项既耗时又昂贵的任务。特别是在某些专业领域,如医学图像识别或特定领域的文本分类,标记数据的获取更是困难重重。预训练技术使得模型能够从未标记的大规模数据中学习通用特征,从而减少对标记数据的依赖。这使得在有限的数据集上也能训练出性能良好的模型。
- 先验知识问题:在深度学习中,模型通常从随机初始化的参数开始学习。然而,对于许多任务来说,具备一些基本的先验知识或常识会更有帮助。预训练模型通过在大规模数据集上进行训练,已经学习到了许多有用的先验知识,如语言的语法规则、视觉的底层特征等。这些先验知识为模型在新任务上的学习提供了有力的支撑。
- 迁移学习问题:迁移学习是指将一个任务上学到的知识迁移到另一个相关任务上的过程。预训练模型在大量数据上学习了通用特征,这些特征在许多任务之间都是共享的。因此,通过微调预训练模型,可以将其快速适应到新的任务上,从而实现知识的迁移。这种迁移学习方式不仅提高了模型在新任务上的性能,还大大缩短了训练时间。
预训练的技术:预训练是语言模型学习的初始阶段。在预训练期间,模型会接触大量未标记的文本数据,例如书籍、文章和网站。目标是捕获文本语料库中存在的底层模式、结构和语义知识。
- 无监督学习:预训练通常是一个无监督学习过程,模型在没有明确指导或标签的情况下从未标记的文本数据中学习。
- 屏蔽语言建模:模型经过训练可以预测句子中缺失或屏蔽的单词、学习上下文关系并捕获语言模式。
- Transformer 架构:预训练通常采用基于 Transformer 的架构,该架构擅长捕获远程依赖关系和上下文信息。
预训练的原理:在Transformer作为特征抽取器基础上,选定合适的模型结构,通过某种自监督学习任务,逼迫Transformer从大量无标注的自由文本中学习语言知识。这些语言知识以模型参数的方式,存储在Transformer结构中,以供下游任务使用。
预训练的架构:大语言模型LLM预训练采用了 Transformer 模型的解码器部分,由于没有编码器部分,大语言模型去掉了中间的与编码器交互的多头交叉注意力层。
如下图所示,左边是 Transformer 模型的解码器,右边是大语言模型的预训练架构。