ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

大模型应用开发笔记(一)——初识GPT

大模型应用开发笔记(一)——初识GPT 基础概念AI让计算机系统有能力执行那些通常需要人类智慧的任务。ML开发算法使系统能够通过实例自己学习。DL深度学习算法专注于受大脑结构启发的算法——人工神经网络(ANN)。Transformer关注句子或段落的不同部分以理解其上下文并产生连贯的回答。NLP自然语言处理专注于使计算机能够处理、解释和生成人类语言。LLM聚焦大规模文本生成与理解擅长上下文关联、复杂语义推理。n-gram模型选择最常出现在前序单词之后的单词作为预测结果。RNN循环记忆网络LSTM长短时记忆网络能够学习更长的序列但处理大规模数据存在效率问题。NLP技术演变历程n-gram-rnn-lstm-transformer-llmTransformer在LLM中的作用通过自注意力机制能够有效捕捉和编码全局上下文从而显著提升文本理解与生成能力。注意力机制1. 交叉注意力解码器生成每个词时用当前输出表示去查编码器的源文本表示按相关程度把源文本信息拿过来帮助当前输出和源文本对齐。输出端查输入端。2. 自注意力同一段文本内部每个词互相参考按相关程度分配注意力从而理解上下文。自己理解自己。Transformer具有并行化的优势可以利用HPU的高并行和强大计算能力进行模型训练。Transformer架构是一种序列到序列的模型由编码器和解码器组成。编码器把输入序列向量化后通过无掩码自注意力和前馈网络等处理让每个位置吸收整句上下文信息输出一组上下文相关的向量表示隐状态供解码器使用。解码器用掩码自注意力处理已生成/右移的目标序列用交叉注意力以解码器当前表示为 Query、编码器输出为 Key/Value读取源序列信息再经前馈和输出层预测下一个词循环生成目标句子。这两个模块里都用到 自注意力但只有 解码器 会额外用到 交叉注意力。GPT 用的是 decoder-only只有解码器架构核心能力是“掩码自注意力 自回归生成”。它只用自注意力不用交叉注意力也没有编码器。LLM 先把文本切成词元再把词元转成词表 ID然后通过嵌入矩阵查表把每个 ID 映射成一个高维向量。GPT词元化和预测步骤文本补全LLM接收提示词作为输入并生成相应的文本 。分词当LLM收到提示词后首先将输入拆分为词元(token)。transformer架构结合注意力机制理解词元之间关系并将上下文作为一个整体来考虑。为每个潜在的后续词分配一个概率分数选择概率最高的次元作为序列中的下一个词元。新的词元加入上下文中作为新的上下文再进行下一轮预测。通过调整温度参数模型可以不总是选择概率最高的下一个词。LLM多模态数据处理与处理文本十分类似先将图片分割为固定大小的图像块(patch)。图像块会与提示词文本词元整合到一个统一的输入序列中。模型在学习过程中计算出图像块与高维空间之间的映射函数。文本词元和图像块可以被放入相同的高维空间形成一个融合的序列。模型在两种模态之间应用自注意力机制生成同时考虑文本和图像信息的相应。GPT模型简史GPT1在GPT1出现之前构建高性能NLP神经网络常用监督学习需要使用大量手动标记数据。2018年GPT1引入了无监督学习的预训练步骤无需数据标注通过训练模型预测下一个词元。其架构包括一个解码器具有1.17亿个参数。预训练步骤1.确定与训练目标与任务任务类型使用场景具体做法掩码语言建模MLM编码器Encoder预训练如 BERT、T5 的编码器随机遮盖输入序列中的部分 token如单词、SQL 关键字让模型预测被遮盖的内容。因果语言建模CLM解码器Decoder预训练如 GPT、CodeLlama给定序列的前半部分让模型预测下一个 token。序列到序列生成完整 Seq2Seq 模型预训练如 T5对输入序列做 “噪声处理”如打乱词序、替换 token让模型还原为原始序列。2.准备海量预训练数据集预训练的效果完全依赖数据规模和质量。数据通常有公开代码库数据GitHub 上的开源 SQL、Python 代码过滤低质量、重复代码自然语言 - 代码配对数据如技术文档中的 “功能描述 对应 SQL” 片段通用文本数据百科、书籍等自然语言文本帮助模型理解用户的自然语言问题。3.模型架构初始化经典架构Encoder-Decoder 结构如 T5Encoder 负责理解输入Decoder 负责生成输出简化架构Decoder-only 结构如 GPT、CodeLlama通过自注意力机制同时完成 “理解” 和 “生成”参数初始化随机初始化模型的所有参数如注意力矩阵、全连接层权重或基于已有的通用语言模型参数初始化迁移学习。4.执行大规模预训练训练流程将数据集切分为小批次Batch输入模型模型根据预训练任务如 MLM/CLM输出预测结果计算预测结果与真实值的损失如交叉熵损失用反向传播算法更新模型参数降低损失重复上述步骤直到模型收敛损失不再明显下降。关键超参数学习率控制参数更新的步长通常从大到小衰减批次大小每个批次的样本数越大训练越稳定但对显存要求越高训练轮数数据被训练的次数通常1~3轮即可(避免过拟合)5. 保存预训练模型权重训练完成后保存模型的最终参数权重如.bin或.pth文件得到预训练模型。这个模型已经具备通用的代码/语言理解能力但还不能直接解决智能问数这类特定任务后续只需在此基础上用少量标注数据做微调就能适配具体任务。预训练 vs 微调维度预训练微调数据海量通用数据无标注 / 自监督少量任务专属数据人工标注目标学习通用规律语法 / 语义学习特定任务映射如问题→SQL算力极高需要 GPU 集群较低单卡 / 少量显卡即可模型状态初始化→通用能力通用能力→任务专属能力GPT22019年OpenAI提出GPT-2参数量和训练数据集规模是GPT1的十倍。其表明使用更大的数据集训练更大的语言模型可以提高语言模型的任务处理能力更大的语言模型能够更好的处理自然语言。GPT32020年GPT3发布其与GTP2主要区别在于模型的大小和用于训练的数据量。在各种语言相关任务中展示更强的性能甚至可以编写代码片段。GPT3取消了之前模型中必须的微调步骤。InstructGPT基于人类反馈的强化学习进行优化有监督微调(SFT)和基于人类反馈的强化学习(RLHF)两个阶段每个阶段都会针对前一个阶段的结果进行微调。这种方法使模型能够更好的理解人类指令同时提高生成内容的真实性并减少有害或不恰当的输出。SFT阶段利用终端用户提供的提示词集合和数据标注员编写的理想答案通过监督学习的方法对GPT3模型进行微调得到SFT模型。RLHF阶段a. 训练奖励模型目标是自动为模型对提示词的回答进行打分。奖励模型构建OPENAI随机选择问题让SFT模型生成多个回答让标注员对回答排序利用诸多问题答案和排序结果形成的数据集对SFT模型微调使其能够打分。b. 强化模型随机选择一个提示词模型生成对应的输出奖励模型对该输出进行评分生成式模型根据评分进行相应的调整和优化这一过程无需人工干预。GPT-3.5、Chat-GPT2022年3月推出GPT-3.5可以编辑文本或向文本中插入内容所用训练数据截至2021年6月。2022年11月推出Chat-GPT该工具背后是GPT-3.5的一个微调版本GPT-3.5 Turbo在交互式对话方面表现出色。GPT-42023年3月发布GPT-4是第一个能够同时接收文本和图像的多模态模型能够针对用户的提问生成更安全更有用的回答。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进