大模型基础知识

🔥大语言模型(LLMs)是什么

大模型:一般指1亿以上参数的模型,但是这个标准一直在升级,目前万亿参数以上的模型 (eg: MinMax abab6.5)也有了。大语言模型(Large Language Models,LLMs) 是针对语言的大模型。
大语言模型的关键特点包括:

  1. 大规模参数:LLMs拥有大量参数(如GPT-3的175B或PaLM的540B),参数数量越多,模型对语言的捕捉能力越强,可以更好地理解上下文和生成流畅的语言。
  2. 多任务处理能力:经过训练后,LMS具备在多种语言任务上表现良好的能力,例如文本摘要、情感分析、机器翻译等。这是因为它们学会了在大数据集上归纳出各种语言模式和规律。
  3. 上下文理解:LLM5可以根据上下文生成有逻辑和连贯的回应,这使得它们特别适合对话和内容创作任务。模型可以“记住”一段对话中的重要细节,并在后续对话中保持一致性。
  4. 自监督学习:大语言模型主要依赖自监督学习,使用未标注的数据进行训练,通过预测下一个词、填补空白或匹配句子等方式来学习语言结构。
  5. 通用性和可扩展性:LLMs可以迁移到多种任务和领域,经过少量微调就能在专门的任务(如医学文本分析或法律文件摘要)中发挥作用。

尽管大语言模型在许多任务上表现出色,但它们也有一些局限性,比如生成错误信息、偏见问题以及需要高昂的计算资源。

🔥大语言模型按预训练任务分类:

  • 自回归语言模型:GPT为代表,仅通过前文预测下一个词,适合生成任务。
  • 自编码语言模型:BERT为代表,通过掩码预测被遮挡的词,适合理解和任务分类。
  • 序列到序列语言模型:如T5、BART等,既可以生成文本也可以完成理解任务,在机器翻译、文本生成场景中有广泛应用。

🔥主流的LLMs开源模型体系

主流LLMs开源模型体系

  • Encoder-Decoder:
    • 经典结构,编码器端用双向自注意力进行编码,在解码器用交叉注意力单向注意力掩码机制,通过自回归方式进行生成。编码器内,前面的token也能知道后面的token,而解码器中token不能知道其前面的token。
    • 适用于偏理解的NLP任务。
    • 长文本生成任务差,训练效率低。
  • Causal Decoder:
    • GPT为代表,使用单向注意力掩码,每个token只能看到前面的token和本身,输入输出只有解码器以相同方式处理。
    • 适用于文本生成任务。
    • 训练效率高,zero-shot能力强,具有涌现能力。
  • Prefix Decoder:
    • GLM为代表,参考编解码器架构,前缀解码器对输入进行双向注意力编码,对输出则使用单向注意力掩码(token只知道前面的token)进行自回归预测。
    • 适用于文本生成任务。

🔥LLMs常见的预训练任务

  • 语言建模(LM):
    • 根据给定序列预测下一个词元,使用似然函数进行优化。可以视为一种多任务学习。
    • 比如在“这部电影剧情饱满,演员表演也很棒,非常好看”的预测中,“好看”就是模型对情感进行分析;对于“小明有三块糖,给了小红两块,还剩下一块”,“一块”就是对数学算术进行学习。这样的例子还有很多。
    • 训练效率:Prefix Decoder < Causal Decoder,后者在所有token上计算损失,前者仅在输出上算损失。
  • 去噪自编码(DAE):
    • 在BERT中是经典的一个方法,对输入文本进行一系列随机替换删除操作,形成“损坏”的文本,模型就需要恢复出被替换或删除的词元片段。
    • 比语言建模更复杂,需要额外的优化策略,如替换词元的策略、替换片段长度、替换的比例等,会影响训练效果。
  • 混合去噪器(MoD):
    • 结合语言建模和去噪自编码,把两者视为不同类型的去噪任务,进行统一建模。

🔥LLMs的涌现能力与scaling law

涌现能力:当一个复杂系统由很多微小个体构成,这些微小的个体凑在一起,相互作用,当数量足够多时,就可以在宏观层面展现出微观个体无法解释的特殊现象,类似“量变引起质变”。
涌现现象与scaling law现象
为什么LLMs会有涌现能力:

  • 任务评价指标不够平滑,如上图左,就可以对于精确匹配任务(输出答案和真实答案需要完全一致)的严格要求,大模型就容易出现涌现现象,分数随着参量突然猛增。像右图一样使用多选题进行训练就可以避免这种情况,训练分数逐步上涨。
  • 复杂任务和子任务,一个最终任务比较复杂,而它又由多个符合scaling law的子任务组成,最终任务体现为涌现。就像下国际象棋,需要多个合法且正确的移动才能完成“将死”对方的最终任务。

✨OpenAI对于scaling law的观点

  • scaling law:用计算量、数据集规模和模型规模,来预测模型最终能力。
  • 当计算量、数据集规模、模型规模(参数量)三者中任意两个固定时,剩下的那个因素随指数增长,loss会线性下降。所以为了获得最佳性能,应该同时扩大三者。
  • 三者的影响程度是 计算量>参数量>>数据集规模。
  • 固定计算预算下训练时,最佳性能可以通过训练参数量非常大的模型并在远离收敛前停止(早停)实现。更大的模型在样本效率方面更好,能以更少的优化步骤和使用更少数据量达到相同水平,实际应用应优先考虑大的模型

✨DeepMind对于scaling law的观点

  • 该团队认为模型大小和训练数据量都应该按相等的比例扩展
  1. 给定FLOP预算(算力),损失函数有明显低谷值,即数据量和模型规模的选择有一个最优解
  2. 计算成本最优的情况下(第1点),模型大小和训练数据量应等比值地缩放。
  3. 大模型训练应该更关注数据集扩展,数据高质量时,更大数据集的好处才能体现。

🔥幻觉

即一本正经地胡说八道,不符合一致性(符合用户问题要求)和真实性(符合世界知识)。

✨为什么有幻觉

  1. 数据角度:训练数据可信度有问题,或者过多重复信息会导致模型有偏见,从而导致幻觉。
  2. 模型角度:
    • 模型结构,比较弱的主干会导致幻觉,LLMs一般不存在该问题。
    • 解码算法,如果使用不确定性高的采样算法(更容易生成多样化文本),可能会诱导LLMs出现幻觉。
    • 暴露偏差:训练和测试阶段不匹配,特别是生成长文本回复的时候。
    • 参数知识:LLMs在预训练阶段记忆了错误的知识,导致幻觉。

✨如何评估幻觉

分为基于参考的评估和无参考的评估。

  1. 基于参考文本
    • 使用参考文本或原始信息进行对比,常用指标包括ROUGE、BLEU等。
    • 适用于标准化生成任务,但对于参考答案不唯一的情况灵活性就受限。
  2. 无参考
    • 不使用参考答案。
    • 基于信息抽取(IE):将生成内容转为结构化知识,也就是转为三元组之类的形式后给专门的模型去评估准确性。
    • 基于问答(QA):使用问题生成模型生成QA对,然后让被测模型回答这些问题,比较两个答案即可判断。
    • 基于自然语言推理(NLI):判断生成内容是否与源信息有蕴含关系。
    • 基于事实性分类指标:通过人工标注或构造包含幻觉和真实信息的数据集,训练分类模型检测LLMs生成的文本是否符合事实。
    • 人工评估:最准,但最贵。

✨如何缓解幻觉

  1. 构建高质量数据集:人工标注、自动筛选等方法。
  2. 模型层面:模型结构上编码更多信息、减少生成随机性、检索增强(引入外部源,联网等);训练方式上可控文本生成、提前规划内容框架、强化学习、多任务学习、后处理等都可以抑制幻觉。

🔥RAG

✨RAG介绍

RAG(Retrieval Augmented Generation):作用类似搜索引擎,找到用户提问最相关的知识或对话历史,结合原始提问,创造丰富的prompt,指导模型生成准确输出。本质上是情境学习。

  • 通俗来说:RAG(检索增强生成)= 检索技术 + LLM提示
  • RAG的特点:
    1. 依赖大语言模型强化信息检索和输出:单独使用RAG能力会受限,它依赖LLM来进行检索和生成。
    2. 与外部数据有效集成:很好地接入和利用外部数据库的资源,弥补大模型对于某个专业领域知识的不足。
    3. 数据隐私和安全保障:可以使用私有数据库与模型链接。
    4. 表现效果受多方面因素影响而异:如LLM性能、接入数据质量、检索系统本身等。

RAG框架

  • RAG分为五个基本流程:知识文档准备,嵌入模型,向量数据库,查询检索,生成回答。
  • 先将文本以文本块的形式输入嵌入模型(类似嵌入层的功能),嵌入模型会生成向量形式的数据库。
  • 使用时,用户访问RAG,用户的问题被嵌入模型转为向量,系统从向量数据库检索相似信息,信息和用户向量结合成一个prompt提示输出给大模型再生成回答,回答也能被作为历史记录到记忆库。
  • 可以看到RAG其实就是以大模型为核心的强化版搜索引擎,相当于有一个秘书为你管理对应的知识。也可以看到如果RAG没有大模型也是能搜索信息并返回的,但是少了大模型的理解整合,效果势必是有限的。

✨评价RAG的好坏

  1. 检索环节的评估:
    • MRR平均倒数排名:常用于衡量搜索引擎、推荐系统等根据查询返回多个结果中的相关性。MRR值越高就越好,说明最相关的结果最有可能出现在更前的位置,反之亦然。
    • Hits Rate命中率:前k项中包含正确信息项的比例。
    • NDCG:DCG的思想,即高关联度结果比一般关联度结果更影响最终指标得分,且高关联度结果排序越靠前,指标越高。
  2. 生成环节的评估:
    • 非量化:相关性、完整性、正确性
    • 量化 Rouge-L:用于评价文本生成质量的指标,常用于自动摘要、机器翻译、文本生成等任务。底层原理是通过最长公共子序列来计算生成文本和参考文本的相似性(参考文本来自于专家人工编写),通过统计二者重叠基本单元数(n元语法、词序列等)来评估效果。

✨RAG的优化策略

知识文档准备阶段

  1. 数据清洗:
    • 基本文本清理:格式规范、去除特殊字符、去除冗余信息。
    • 实体解析:消除实体和术语的歧义以实现一致引用。如将“LLM”、“大语言模型”等标准化为统一术语。
    • 文档划分:合理划分不同主题文档,如果人类不能很好判断那个文档可能与问题相关,那么系统也做不到。
    • 数据增强:同义词、解释语句的增加来增强多样性。
    • 用户反馈循环:基于用户反馈更新数据库,标记真实性。
    • 时间敏感数据:常更新的数据,要删除或更新过期内容。
  2. 分块处理:
    • 方块方法:
      • 固定大小块:简单直接,计算资源要求低;
      • 按内容分块:按标点符号等分割,可以调NLTK等库;
      • 递归分块:大多数情况推荐,由大到小递归地分割,直到子块大小合适;
      • 从小到大分块:大小分块都保留并分级,存储空间大;
      • 特殊结构分块:可以根据结构化内容专门分割(如Markdown、Latex、编程语言等文件)。
    • 分块大小:
      • 不同嵌入模型有其最佳的分块大小。
      • 长文本(如书籍)适合大分块,短文本(如媒体帖子)适合小分块。
      • 用户通常查询内容长且复杂就适合大分块,反之亦然。

嵌入模型阶段

  • 嵌入模型:
    • word2vec:基于词向量,将文本转化为向量表示,常用于文本分类、文本聚类等任务,但是没法理解一词多义,词向量完全静态。
    • BERT:一个词在不同语境下会有不同的词向量表示。
    • 推荐hugging face推出的嵌入模型排行榜MTEB,直接拿合适的用比较好,微调太费劲。

向量数据库阶段

  • 元数据:某些向量数据库支持将向量与元数据关联,元数据就是如日期、标签、章节号等信息,相当于为向量添加tag,能有效提高检索效率。

查询索引阶段

1-2都是讲怎么索引,怎么搜索;3讲的是怎么转换查询;4是一些可调的参数;5是进阶的高级策略;6是对结果的排序进行优化。

  1. 多级索引
    • 元数据无法区分不同上下文类型的情况下,可以使用多重索引技术。
    • 多重索引技术的核心是将庞大的数据按需求分类,在不同层级中组织,以实现更有效的关理和检索。
    • 需要引入多级路由机制,如“最新上映的科幻电影”,RAG就会路由到专门处理热点话题的索引,然后在利用专注于娱乐、影视的索引来生成相关推荐。
  2. 索引/查询算法
    • 聚类:将向量点划分区域(簇),查询时只需要查询距离目标向量最接近的簇即可。
      位置敏感哈希
    • 位置敏感哈希:传统哈希是key和value一一对应,而位置敏感哈希需要增加输出值碰撞的概率,哈希值相同的向量被分到同一个桶(bucket)当中,越相近的向量越可能被分到同一个桶。搜索时只需要获取目标向量的哈希值(key),找到对应桶进行二次搜索即可。
    • 量化乘积:面对大数据的内存开销问题,希望削减数据的大小,比如在聚类的簇当中,用中心点表示整个簇的所有向量(虽然有区别但是损失可接受)。
    • 分层导航小世界:类似六度分隔理论(认识任何一个陌生人最多经过6个人),构建一个图存储向量,查询时从某个点开始,查找其邻接节点中最接近目标向量的节点,然后对该节点也这么做,直到某节点周围节点不存在比它更接近目标的时候,就是我们要找的向量。
  3. 查询转换
    也就是通过重写查询措辞来提升召回效果。
    • 结合历史对话进行重新表述:直接用LLM重新表述,或将历史对话信息和用户提问一起个LLM重新表述。
    • 假设文档嵌入:让LLM在没有外部数据库的情况下对用户信息进行假设性回复,将该回复和提问一同用于检索。
    • 退后提示:查询信息太复杂或者太宽泛,可以抽象为一个更简单的问题,然后和原始问题一起用于检索。
    • 多查询检索/多路召回:使用LLM生成多个搜索查询,适用于一个大问题蕴含多个子问题。
  4. 检索参数
    可以根据向量库数据设置优化检索参数,也就是调参了。
    • 稀疏和稠密搜索权重:稠密搜索是用向量搜索,稀疏搜索是通过字符串关键字匹配进行搜索(稀有词通常作为关键词),通过设置权重结合两者搜索得分来返回检索内容。
    • 结果数量topK:提供k个检索结果,确保覆盖用户查询要求的各个方面。
    • 相似度度量:计算两个向量相似度(欧式距离、Jaccard距离、余弦相似度等),余弦相似度不受向量长度影响,比较好。
  5. 高级检索策略
    • 上下文压缩:对长文档内容进行压缩,或者对返回结果过滤。
    • 句子窗口搜索:将搜索到的太短分块周围的分块一并作为上下文给LLM,增强LLM理解。
    • 父文档搜索:主文档分割为更短的子文档,用户问题会先匹配子文档,在将子文档的父文档和用户提问一起发给LLM。
    • 自动合并:比父文档搜索更复杂,就是可以分成三层树状结构,搜索是匹配叶子结点,当某个父节点的多数叶子节点都匹配查询内容时就返回该父节点。
    • 多向量检索:向量库存储信息格式是多向量而非单向量,额外包括了文档摘要、用户可能的问题等不同方面信息辅助检索。
    • 多代理检索:结合之前提到的所有优化策略中的某几种,比如同时使用多向量检索和多级检索。
    • self-RAG:自反思搜索增强,通过检索评分和反思评分来提升质量。分为检索、生成、批评三个流程:
      • 先用检索评分来评估用户问题是否需要检索,若需要,LLM会调用检索模块查文档;
      • LLM接着分别为每个检索到的块生成答案;
      • 再为每个答案生成反思评分评估检索到的文档是否相关;
      • 最后将评分高的文档作为结果一并交给LLM进行生成。
  6. 重排模型
    通过对初始检索结果进行深入相关性评估和排序,确保展示给用户的结果更符合其意图。比如对于“最新科幻电影”的查询,可能返回科幻电影历史、最佳科幻电影、最新科幻电影等多种结果,模型需要对此分析并排序,把最新科幻电影放在前面。
    • RAG系统都应该尝试重排模型这个方法。

生成回答阶段

  1. 提示词
    • 改变提示词形式可以有效影响模型对不同类型问题的接受程度和回答方式。
    • 为减少幻觉和主观回答的可能性,RAG系统提示词中会强调回答仅基于搜索结果
    • 可以使用few-shot方法,也就是添加回答样例。
    • 可以根据场景需要让模型的回答可以适当有主观成分和理解。
  2. 大语言模型
    • 根据自己需求选择LLM,可以使用LangChain等常用开发框架来搭建RAG系统,它们提供了很好的debug工具。

🔥知识蒸馏

知识蒸馏
把大的教师模型的知识萃取出来,浓缩到一个小的学生模型。也就是用大模型教会小模型,实现轻量化。

✨为什么进行知识蒸馏

  • 提升模型精度:对某规模模型A不满意,可以训练精度更高的模型B,然后让这个模型B去训练原来这个小一点的A模型。
  • 降低模型时延,压缩参数:对A模型时延不满意,可以找到时延更低参数更小的B模型,然后训练应该高精度的C模型对B模型进行知识蒸馏,使得B模型接近A。
  • 标签之间的域迁移:用猫狗的数据集训练了教师模型A,使用水果训练了教师模型B,可以用俩模型同时蒸馏出一个同时识别猫狗和水果的模型。

✨传统知识蒸馏方法

传统知识蒸馏方法

  1. 基于反馈的知识蒸馏:
    • 关注教师模型最后一层的输出logits经过softmax之后,用作学生模型的标签,计算学生模型损失。
    • 目标就是让学生模型输出的logits尽可能接近教师模型。
  2. 基于特征的知识蒸馏:
    • 教师模型中间层的特征都用来作为监督标签训练学生模型。
    • 这种方法中间层能够提供更丰富的信息,有助于更好地进行知识迁移。
    • 难点就是消除架构不一致、目标层自动化选择等。

✨大语言模型知识蒸馏方法

大语言模型知识蒸馏

  • 就大模型权重是否可以获得分为白盒模型蒸馏黑盒模型蒸馏,黑盒只能使用输出信息来训练小模型,而白盒可以获得模型权重来训练。
  • 如图,基本流程从1-4就是通过指示大模型来获取种子知识(知识源),然后大模型生成知识给小模型训练。
  • 图片上边可以看到,教师模型由多模态、代理、NLP等技能,可以用于各种领域(法律、医药、科学等)。
  • 下方展示了教师模型如何利用数据进行驱动训练学生模型,包括生成标签、数据扩充、生数据处理、提取特征、反馈学生模型输出、学生模型自蒸馏等。
  • 右边是蒸馏手段:
    • 教师模型监督微调学生模型。
    • 教师模型输出指导学生模型的输出(提升相似性)。
    • 强化学习:教师模型评估学生模型的输出反馈给学生模型。
    • 排序优化:教师模型为学生模型多个输出进行排序,让学生模型知道什么是更好的输出。

✨模型量化

  • 目标是减小模型的存储需求和计算复杂度,就是可以在资源有限的设备上高效运行。
  • 主要方式:
    • 更小的数据类型:32位FP转为16位FP、8位整数等。
    • 模型压缩:霍夫曼编码(贪心算法,为频率高的符号编码更短)等算法。
  • 模型量化优势:减少存储空间、降低内存占用、加速推理。
  • 挑战:精度损失、权衡效率和精度(性能不能太低)。

🔥模型压缩和加速的方法

  1. 知识蒸馏:教师模型指导学生模型训练,提升小模型泛化能力和推理速度。
  2. 参数剪枝:通过分析参数对性能的贡献,删除模型中冗余或贡献低的参数,以减少存储需求。
  3. 网络剪枝:对神经网络删除冗余的神经元。
  4. 蒸馏对抗网络:结合蒸馏和对抗训练方法,生成扰动样本,提升稳健性和抗干扰能力。
  5. 层次化剪枝:针对每层对整体性能的影响,而设置不同的剪枝策略。
  6. 低秩分解:将较大权重矩阵分解成几个小矩阵,减少参数量和计算开销,全连接层和卷积层常用。
  7. 卷积分解:复杂卷积分解为简单的计算模块(深度可分离卷积),提升推理速度。

🔥微调

  • 大模型训练分为预训练、有监督微调、奖励建模、强化学习四个阶段。其中奖励模型是通过创建一个奖励模型评估生成结果的质量。
  • 微调的目的是在预训练模型基础上针对特定任务进行优化模型性能。

✨什么时候微调

  1. 任务复杂度高,情境学习(仅使用prompt帮助模型理解)效果不足。
  2. 零样本(zero-shot)和少样本(few-shot)推理不佳。
  3. 领域或任务需求要求高度专业化,如法律、医学、工程等。
  4. 输出结果不符合用户要求,风格、格式不匹配,或者有个性化需求。

✨微调的方法

  • 针对参数,微调分为全量微调(FFT,调所有参数)和参数高效微调(PEFT,调少量或额外参数)。
  • 全量微调会损失多样性,导致灾难性遗忘,所以通常LLM领域研究的都是参数高效微调。
  • 策略方面,分为有监督微调(SFT)和基于人类反馈的强化学习(RLHF),都可以用于全量或者参数高效微调。
    • SFT:适用于有大量高质量标注数据集的场景,相当于有标准答案复习。主要用到调超参数、迁移学习、多任务学习、少样本学习、任务特定微调等。
    • RLHF:需要模型输出符合人类主观判断的结果,相当于在厨师指导下做菜。主要用到奖励建模、邻近策略优化PPO、比较排名、偏好学习、参数高效微调等,大部分方法都是基于人类主观设定。

接下来主要介绍参数高效微调方法

  • 主流分为Adapter、Prefix和LoRA三大类。
  • 这些参数高效微调方法核心思想大部分都是为模型额外添加参数,相当于让没有兵种的士兵拿上武器成为特定兵种。

参数高效微调

Adapter

通过在预训练模型的各个多头注意力层之间添加一个Adapter层(适配器),只需要训练这个Adapter就行。

  • 每增加新的下游任务,就多一个adapter模块,其参数量很少,但是效果可以媲美全量微调(Fine-Tuning),又避免灾难性遗忘。
  • adapter fusion:通过将适配器训练分为知识提取和知识组合两个部分,解决遗忘和不稳定问题。
  • adapter drop:较低的transformer层删除可变数量的adapter来提升推理速度。

Prefix

在QKV计算里面加参数,即为模型的输入添加k个额外的标记,训练这些额外的前缀参数就可以。
Prefix Tuning

  • Prefix Tuning:如上图,对输入token之前构造和任务相关的虚拟tokens作为prefix,训练时只更新前缀部分,其他参数固定。
    • 该方法与Fine-Tuning效果比肩。

Prompt Tuning

  • Prompt Tuning:简化prefix tuning,对每个任务定义对应的离散化prompt,然后拼接到数据作为输入,这样可以让预训练模型做混合任务推理。
    • 该方法仅在输入层添加参数,而不用像prefix tuning那样每层都添加参数。
    • 相较于prefix tuning,训练效率高,适合分类任务,在大尺寸模型与Fine-Tuning比肩。

P-Tuning

  • P-Tuning:设计连续可微的虚拟token,即把prompt转化为可学习的embedding层,也是仅输入层加。

    • 虚拟token插入位置可以不一定是前缀,该方法在大尺寸模型与Fine-Tuning比肩。
  • P-Tuning V2:基于prompt Tuning、P-Tuning改进,每层都加Prompt tokens,提升了可学习参数量,为更深层的网络带来影响。

    • 不同任务prompt长度可以不一样,该方法能够在大、小尺寸模型都能与Fine-Tuning比肩。

LoRA

在多头矩阵运算上添加LoRA矩阵,学习小参数的低秩矩阵来近似模型权重矩阵w的参数更新,微调时只需要更新该矩阵来代替原参数矩阵更新。
LoRA微调

  • 如上图,可能在所示的transformer基本结构的两个位置添加LoRA模块进行前馈旁路输入。
  • 核心:LoRA结构为图中右边所示,权重更新用W=W0+ΔW表示,将权重矩阵变化量ΔW分解为低秩矩阵A(降维)、B(升维)来近似更新参数矩阵W,微调时W0不更新,仅和A、B分支输出进行合并。

    低秩代表用更少的参数就可以表示矩阵,秩少参数就少。

  • 该方法相当于用更小的参数量进行更新,真正使用时LoRA结构也会被整合到模型,减少训练计算开销并且不增加实时推理开销
  • 初始化:降维矩阵A用高斯分布初始化以添加随机性,升维矩阵B初始化为0,在训练开始时不影响输出。两者初始化方式理论上可以对调,如果都随机初始化会不稳定,都初始为0就收敛太慢了。
  • 可插拔任务切换:不同任务训练不同的A、B,随时可以切换。
  • LoRA可以作用在Q、K、V,并且同时作用效果好于单独作用。
  • 在已有LoRA上训练新任务:任务相似则直接当前LoRA模型上训练;任务不同但相关,可以把当前的LoRA融入基础模型,然后训练新的LoRA;任务完全不同就从原有基础模型开始训练,抛弃现有LoRA参数。
  • 避免过拟合:减小秩的值、增加数据集大小、增加优化器衰减权重(weight decay)、增加LoRA模块的dropout值,其实很多都是深度学习中用到的常见手段。
  • 变体:
    • AdaLoRA:根据重要性评分(一种损失)来动态地分配参数预算给权重矩阵,重要的增量矩阵分配高秩(更多参数),不重要的给低秩防止过拟合。
    • QLoRA:更轻量的LoRA,4位量化LLM,然后用LoRA方法对量化后的LLM进行微调,这样节约33%GPU内存,但是增加39%训练时间(量化压缩需要时间计算)。

✨多轮对话如何微调

  1. 数据准备:收集和创建适用于多轮对话的数据集
    • 方法:收集现有数据集、创建自定义数据集(专业性或特定需求)、数据清洗和预处理。
    • 注意:上下文信息要有,数据要有多样性(话题、风格、情感等)。
  2. 构建输入输出格式:将原始对话转为合适模型训练的格式
    • 方法:输入方面将已有对话拼成序列(如下),输出就是本轮要生成的内容。
    [用户] 你好!
    [机器人] 你好,请问有什么可以帮您的吗?
    [用户] 我想预定一张去北京的火车票。
    
  3. 模型选择:
    • 常用:DialoGPT、Llama、BERT。
    • 考虑:任务类型、模型大小、预训练数据量。
  4. 微调模型:
    • 流程:初始化参数、定义损失函数、反向传播和参数更新、重复迭代,就是常规深度学习的流程。
    • 注意:学习率设定、梯度剪裁等。
  5. 超参数调优:优化模型的训练过程,提升性能
    • 可调参数:学习率、批次大小、训练轮数、权重衰减等。
    • 常见方法:网格搜索(参数范围内遍历所有组合)、随机搜索(随机采样组合)、贝叶斯优化(贝叶斯理论智能搜索)。
    • 评估:验证集表现、早停。
  6. 评估(验证)和测试:评估分为自动和人工评估
    • 自动评估:BLEU、ROUGE、Perplexity(困惑度)、Distinct-N(评估回复多样性)。
    • 人工评估:流畅性、相关性、连贯性、信息性。
    • 错误分析:看哪一类对话表现差、深入分析错误案例。
  7. 特定技巧:
    • 对话策略:策略建模(让模型何时提供信息、引导对话等)、强化学习。
    • 数据增强:同义替换、随机插入或删除、翻译回译(翻译回去)。
    • 情感和个性化建模:标注情感、为模型设定人格。
  • Copyrights © 2023-2025 LegendLeo Chen
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信