|
ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.1em;color: rgb(63, 63, 63);transition: 0.3s;">微调是一种更新模型权重的方法,可以让模型更好地完成某项特定任务,比如编程。它不仅能提升模型的表现,还能让模型更加安全、指令性更强,甚至赋予它独特的“个性”。 那么,为什么要微调呢?简单来说,如果你有一个模型,但它还没完全适应你的需求,比如它虽然懂编程,但总是差那么一点点,那么微调就能让它变得更精准。同时,微调还能提升安全性,让模型更好地遵循指令,甚至可以让模型拥有独特的风格。 ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.1em;color: rgb(63, 63, 63);transition: 0.3s;">微调的方法有很多种,而且在大语言模型的开发中,通常会结合使用多种方法来获得最佳效果。ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.1em;color: rgb(63, 63, 63);transition: 0.3s;">当然,微调并不是免费的——它需要计算资源来处理参数更新,还需要专家的时间和精力。ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.1em;color: rgb(63, 63, 63);transition: 0.3s;">所以,时间和成本在微调中是两个很重要的考量因素。ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;display: table;padding: 0.3em 1em;background: rgb(15, 76, 129);color: rgb(255, 255, 255);border-radius: 8px;box-shadow: rgba(0, 0, 0, 0.1) 0px 4px 6px;transition: 0.3s;">为什么要进行微调?ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.1em;color: rgb(63, 63, 63);transition: 0.3s;">微调是打造符合大多数用户期望的模型的关键步骤。如今,当人们提到大语言模型或人工智能(AI)时,他们通常想到的并不是预训练模型,而是像ChatGPT、Bard或Claude这样经过深度微调的模型。ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.1em;color: rgb(63, 63, 63);transition: 0.3s;">这是因为预训练模型往往存在以下问题:ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;color: rgb(63, 63, 63);" class="list-paddingleft-1">•难以有效地遵循指令 •容易生成有害内容 •在某些特定任务(如编程)上表现不佳 •缺乏品牌推广和差异化所需的独特名字、身份和个性 ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.1em;color: rgb(63, 63, 63);transition: 0.3s;">以下是LLAMA2预训练模型与微调模型在同一提示下的比较示例。注意微调后的响应与预训练模型之间的区别及其实用性。 ingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 16px;letter-spacing: 0.1em;color: rgb(63, 63, 63);transition: 0.3s;">预训练模型可以比作一辆尚未完成的汽车,虽然已经有了发动机、悬挂和底盘等基础组件,但它缺少车身、安全系统和方向盘。尽管技术上可以启动运行,但驾驶体验会很糟糕,缺乏安全系统还会带来危险。 此外,由于没有独特的外观设计,这辆车也难以在市场上脱颖而出。 
为什么要学习微调?如果你打算在AI领域找工作,而且只能选择学习预训练还是微调,那建议你专注于微调。 因为这个过程比预训练要复杂得多,并且涉及的人也更多。 继续用汽车比喻来说,全世界只有少数几家公司能从头开始设计和生产汽车,开发发动机、悬挂系统和电子系统等。 然而,更多的公司则专注于对现有汽车进行专业化改造,比如赛车、警车,甚至是换个颜色或音响的小调整。 在模型领域也是如此。虽然全球只有大约十家公司能生产高质量的基础模型,但却有成千上万的公司在对这些模型进行微调。 即使在那些顶级模型的生产公司,比如Meta,微调的工作量也远远超过预训练。Meta在他们的LLAMA 2论文中提到,他们在三个不同的模型变体(聊天、指令调优和两个奖励模型)上进行了十多轮的微调,覆盖了四种参数规模(70b、30b、13b和7b)。而预训练通常只进行一次。 微调基础知识微调是指通过调整模型权重来获得我们期望的模型响应。 与预训练及其他统计模型训练类似,微调的过程包括: 1.模型生成输出。 2.评估输出的“错误”程度。 3.根据评估结果更新权重。

微调的关键在于,它通过使用不同的训练示例来创建模型的完整响应,而不是像预训练那样通过自监督学习生成示例并计算下一个token的损失。 通常,微调是对预训练模型的进一步优化,但即便是经过微调的模型,也可以继续进行微调。 例如,LLAMA 2的开发者从预训练模型出发,通过多次迭代和多种技术进行微调,有时在不同的迭代中采用不同的方法。 微调不仅仅是一种方法,它是一类完整的方法。 具体使用哪种微调方法取决于多种因素: •我们希望输出有多大程度的改变 •我们能负担多少计算资源 •我们能负担多少专家费用 •我们有多少时间等待微调完成 •我们希望微调投资的可重用性有多高 •实施的复杂性如何
微调方法以下是实践中常用的一些微调方法。 需要注意的是,微调是一个非常活跃的领域,涵盖了基础研究和实际应用。 列出的方法可能会随着时间的推移而变得更受欢迎或逐渐被淘汰,同时也可能会很快出现新的方法。 监督微调监督微调,Supervised Fine-Tuning。 对于有机器学习背景的人来说,监督微调应该很熟悉。这个过程涉及创建一个“训练集”,其中包括提示和相应的输出响应。 模型使用这些提示进行预测,并将预测的响应与实际响应进行比较。根据这种比较计算出的损失用于更新模型的权重。 
提示和响应对是手动构建的,损失通常是在整个输出短语上计算的。 在每轮训练中,模型权重会被更新,然后继续进行下一个训练循环。 监督微调的优点包括: 然而,监督微调也有一些缺点: 基于人类反馈的强化学习(RLHF)RLHF是目前最受欢迎的微调方法之一。 RLHF的核心思想是:“与其让人类告诉模型该说什么,不如让人类指示他们喜欢什么?” 实现RLHF的步骤如下:首先提示模型,然后生成一个或多个响应。用户提供他们的偏好,这些偏好用于对模型进行重新加权。 RLHF有两种主要模式: 1、单边模式:在这种模式下,只对一个模型输出进行评分。 
2、双边或更多模式:在这种模式下,对多个输出进行排名和/或评分。 
RLHF的优点包括: RLHF的缺点包括: •可能需要大量评分,通常是数千次甚至更多。 •获取这些评分通常需要一些软件基础设施。
奖励模型奖励模型(Reward Models)是一种专门用于对正在训练的用户模型输出进行排名的模型。为了避免混淆,一般可以做如下区分: 奖励模型本质上也是经过微调的模型,通常通过多种方法进行创建。例如,RLHF常用于训练奖励模型,其目的是学习和复用人类的偏好,以在自动化训练中提供反馈。 在GPT-4的训练中,OpenAI将GPT-4配置为基于规则的奖励模型。 这些模型综合利用多种信息来源(如提示、策略模型的输出和人类规则)来对GPT-4用户模型的输出进行评分。 
奖励模型通常是预训练模型的副本,通过特定的微调用于评分。 一个明显的区别在于,预训练模型的token预测头被替换为用于输出评分的回归头。 目前的研究显示,对于像Meta和OpenAI这样的公司,奖励模型的参数规模通常与其微调的用户模型相同,以确保最佳效果。 奖励模型的优点: 奖励模型的缺点: •复杂性增加:需要处理额外的模型训练、检查点保存、评估和计算等方面的工作。 •缺乏公开性:相关研究通常保密,复现大型AI公司的结果难度较大。 •资源占用:即使微调后的模型开源,奖励模型的权重通常不公开(例如,LLAMA 2的奖励模型权重未公开)。 •潜在训练问题:引入额外步骤,可能会在训练过程中引发一些问题。
宪法AI宪法AI(Constitutional AI)是由Anthropic开发的一种方法,旨在减少人类在训练过程中的干预,同时进一步扩展AI偏好训练。 其核心思想是:与其依赖人类在模型输出之间提供具体的偏好,不如为模型制定一套价值观**宪法**,让模型根据这些原则自我学习并生成适当的响应。 这种创新的方法允许模型自行评估和修订其输出,并根据人类提供的简短宪法进行自我训练。 整个宪法AI训练过程涉及多个步骤,通常需要超过五个模型的配合。 
这种复杂流程的优点: 1.简化人类参与:制定一小套原则比评估成千上万的响应要简单得多。 2.降低人类风险:在训练过程中,人类与有害内容的接触减少。 3.高可扩展性:训练过程更容易扩展。
Anthropic通过评估证明了这种方法的有效性,并在其AI代理Claude中实践应用。关键挑战在于如何编写这套宪法,Anthropic也在这一领域进行了多种探索。 参数高效微调(PEFT)随着模型规模的不断扩大,更新所有权重在计算和经济上变得越来越具有挑战性。 为了解决这一问题,可以选择只更新模型的一部分权重,或者仅调整特定的权重部分,这就是参数高效微调(PEFT)的方法。 类似于传统微调,PEFT也有许多策略正在开发和测试。对于开源或“自制”LLM的开发者来说,这些方法尤其具有吸引力,因为它们能够以相对较低的成本和较少的工作量显著改变模型的行为。与传统的微调方法一样,PEFT包含多种技术,并且新的方法不断涌现。 提示微调在任何大型语言模型(LLM)的输出中,影响结果的两个最关键因素是: 1.模型权重 2.提示(Prompt)
基于此,提示微调(Prompt Tuning)的方法是在提示与模型之间加入一组新的权重,并仅调整这些新增权重。 在引入这一方法的论文中,T5模型的权重规模达到了110亿参数,而新增的提示权重只有20,400个参数。 尽管如此,研究表明,在一些基准数据集上的表现,提示微调与全面微调模型权重的效果相当。 
提示工程提示工程(Prompt Engineering),也称为提示设计或系统提示,是一种类似的概念。 通过提示,模型可以被要求“像海盗一样行动”或“表现得像数学专家”。 这种方法直观且易于上手,任何用户都可以通过调整提示来改变模型的行为。它也非常有效,可以显著影响输出的生成。 例如,像ChatGPT这样的模型在部署时通常会包含一个隐藏的系统提示,但有时可以通过巧妙的提示暴露出来。 然而,这并不被视为真正的微调,因为它不涉及对模型权重的更新。 提示工程的优点: 提示工程的缺点: 关于提示工程的更多示例,可以参考Anthropic的红队测试论文和LLAMA 2论文。 在Anthropic的研究中,提示微调显示模型的安全性与基础预训练模型差别不大。 Meta在LLAMA 2中也展示了提示微调的局限性,并提出了一种名为Ghost Attention的新微调方法,以增强效果。 大型语言模型的低秩适应(LoRA)LoRA(Low-Rank Adaptation)是一种通过应用线性代数技术奇异值分解(SVD)来减少需要训练的参数数量的技术。 要理解这一点,可以通过以下两个直观的解释: 直觉1: 降维:通过将数据投影到低维子空间,奇异值分解可以用于减少数据的维度。这在机器学习和数据分析中非常有用,因为它能够简化高维数据,从而更高效地进行处理和分析。
直觉2: 考虑以下两个矩阵: matrix_1=[[1,2], [3,6]]
matrix_2=[[1,2], [3,5]]
在matrix_1中,第二行是第一行的线性组合(即第一行乘以3)。因此,matrix_1的秩为1,这意味着第二行不提供额外信息。相比之下,matrix_2的两行之间没有线性相关性,其秩为2。 可以使用numpy验证: importnumpyasnp
print(f"Rankofmatrix_1:{np.linalg.matrix_rank(matrix_1)}") print(f"Rankofmatrix_2:{np.linalg.matrix_rank(matrix_2)}")
输出: Rankofmatrix_1:1 Rankofmatrix_2:2
虽然这是一个简化的例子,但对于拥有数十亿参数的LLM来说,原理是相同的。预训练模型的参数位于一个高维空间中,但在微调时,我们可以在压缩的低维空间中调整更少的参数,从而显著影响最终的输出行为。LoRA的方法是在模型中创建一组比原始参数小得多的新参数,这些参数可以轻松组合,而不改变模型特定部分的输入和输出尺寸。 以下是从原始论文中改编的可视化,其中A和B是LoRA参数,x是原始输入维度,r是降低后的维度: 
除了数学特性外,LoRA还具有许多令人印象深刻的工程特性。例如,LoRA权重可以在同一用户的不同任务之间交换,或者为不同用户存储不同的LoRA权重版本。LoRA方法也在不断改进,如Qlora和DyLORA等新技术在原有基础上提供了提升。 蒸馏蒸馏是一种通过从一个模型或生成结果中提取输出,来训练同一模型或不同模型的技术。 根据具体应用,蒸馏可以进一步细分为: •上下文蒸馏(Context Distillation):使用特定的上下文(例如提示“使你的模型更详细”)来引导模型生成特定行为的结果,然后利用这些生成结果来训练模型。这样可以在推理时节省token,同时保留通过提示学习到的行为。 •知识蒸馏(Knowledge Distillation):让大型模型“教导”较小的模型,即通过使用大型模型生成的知识或输出来训练较小的模型,从而使得较小的模型在推理时能够达到类似的效果。
参考: https://gotoams.nl/2024/sessions/3113/a-fun-and-absurd-introduction-to-vector-databases
|