LLMs 能否可视化图形?评估人工智能对符号程序的理解

大型语言模型(LLMs)已经展示了生成通用计算机程序的能力,并提供了对程序结构的理解。然而,测试 LLMs 的真实能力是一个挑战,尤其是在找到它们训练期间未见过的任务时。确定 LLMs 是否能真正“理解”这些在执行时生成视觉内容的符号图形程序至关重要。研究人员将这种理解定义为在仅基于程序的原始文本输入的情况下,理解呈现图像的语义内容。这种方法涉及在不实际查看图像的情况下回答有关图像内容的问题,这对于有视觉输入的情况来说很容易,但仅依赖程序文本则要困难得多。 现有的符号图形程序研究主要集中在 2D 形状和 3D 几何的程序化建模上。这些程序包括构造实体几何(CSG)、计算机辅助设计(CAD)和可扩展矢量图形(SVG),它们提供了清晰且可解释的视觉内容表示。此外,LLMs 已被应用于各种编程任务,如代码检索、自动化测试和代码生成;然而,理解符号图形程序与这些任务有很大不同,因为其语义意义通常是通过视觉定义的。现有的 LLMs 评估基准主要关注非图形程序的理解,而视觉语言模型则使用多模态数据集进行图像字幕生成和视觉问答等任务的评估。 来自马普智能系统研究所、剑桥大学和麻省理工学院的研究人员提出了一种新的方法来评估和增强 LLMs 对符号图形程序的理解。引入了名为 SGP-Bench 的基准,用于测试 LLMs 在解释 SVG(2D 矢量图形)和 CAD(2D/3D 对象)程序方面的语义理解和一致性。此外,基于一个名为符号指令调优的收集指令跟随数据集,研究人员开发了一种新的微调方法以提升性能。此外,研究人员创建的符号 MNIST 数据集显示了 LLM 和人类在理解符号图形程序方面存在重大差异。 构建评估 LLMs 符号图形程序理解能力的基准过程采用了一个可扩展且高效的流水线。它使用一个强大的视觉语言模型(GPT-4o)根据符号程序渲染的图像生成语义问题,进一步由人工校对人员验证这些自动生成的问答对的质量和准确性。与传统的数据创建方法相比,这种方法减少了所需的人工工作。对于 SVG 和 2D CAD 程序,这个过程很简单,因为它们直接生成 2D 图像,但在 3D CAD 程序中,3D 模型首先需要从多个固定的摄像机位置转换为 2D 图像。 LLMs 对符号图形程序理解的评估是在由 1,000 个生成类似 MNIST 数字图像的 SVG 程序组成的 SGP-MNIST 数据集上进行的,每个数字(0-9)有 100 个程序。虽然人类可以轻松识别这些图像,但 LLMs 发现解释这些符号程序极其具有挑战性。即使是先进的 GPT-4o 模型也仅比随机猜测稍好。人类和 LLMs 在处理和理解视觉信息符号表示方面的显著差异突显了一个重要的差距。 综上所述,研究人员提出了一种新的评估 LLMs 的方法,通过评估它们直接从符号图形程序中理解图像的能力,而无需视觉输入。研究人员创建了 SGP-Bench,这是一个有效衡量 LLMs 在这一任务中表现的基准。他们还引入了符号指令调优(SIT)以增强 LLMs 解读图形程序的能力。这项研究有助于更清晰地了解 LLMs 的能力,并促进多样化评估任务的创建。未来的研究包括调查 LLMs 在这一领域的语义理解,并致力于开发先进的方法以提高它们在这些任务中的性能。

万字技术干货!LLM工程师必读量化指南,可视化图解揭秘大模型如何压缩

面对LLM逐渐膨胀的参数规模,没有H100的开发者和研究人员们想出了很多弥补方法,「量化」技术就是其中的一种。这篇可视化指南用各种图解,将「量化」的基本概念和分支方法进行了全方位总结。 大语言模型(LLM)通常过于庞大,无法在消费级硬件上运行。这些模型的参数可能超过数十亿,通常需要显存较大的GPU来加速推理过程。 因此,越来越多的研究开始关注如何缩小模型,比如改进训练方法或使用适配器。该领域的一项主要技术被称为量化(quantization)。 ML工程师Maarten Grootendorst撰写了一篇博客文章,在语言建模背景下专门介绍了量化技术,并通过可视化的方法逐一探索相关概念,以帮助我们建立对该技术的直观理解。 在这篇博文中,Maarten将探讨各种方法、使用案例以及量化背后的原理。 文章目录以及涵盖内容如下图所示,主要介绍了训练后量化(PTQ)以及量化感知训练(QAT)两种方法,建议有AI基础的读者直接跳转至对称量化部分: 第一部分:LLM的「问题」 「大语言模型」就是大在模型参数量上,规模通常达到数十亿的级别(其中主要是权重)。 这些参数不仅存储成本相当高,推理阶段的计算量也很大。 在推理过程中,激活值是输入和权重的乘积,因此权重数量越多,激活值也会越大。 因此,我们希望尽可能高效地表示数十亿个值,从而尽可能减少存储参数所需的空间。 让我们从头开始,探索数值是如何表示的,然后再进行优化。 如何表示数值 数值存储的形式通常是浮点数(floting point number,或简称为floats):一个带有小数点的正数或负数。 这些值由每一位(bit)上的二进制数字表示。 IEEE-754标准描述了每一位上的数字如何表示具体数值,具体来说共有三种映射:符号、指数或小数(尾数)。 这三个部分可以结合起来,根据一组bit值计算出所表示的数值: 使用的位数越多,表示的数值值通常越精确,比如FP32形式就能比FP16精确到小数点后更多位数: 内存限制 可用的位数越多,不仅数值越精确,可表示的数值范围也越广。 给定位数和表示形式,可表示的数值区间称为动态范围(dynamic range),而两个相邻值之间的距离称为精度(precision)。 这种表达形式的一个巧妙特性在于,我们可以计算出设备需要多少内存来存储某个给定值。 由于内存中的每个字节含有8位,我们可以为大多数形式的浮点数创建一个基本公式—— 在实际应用中,还有更多因素会影响推理过程中所需的显存/内存大小,例如上下文大小和模型架构 现在假设我们有一个包含700亿参数的模型。大多数模型本身使用32位浮点数(通常称为全精度)表示,这需要280GB的内存来加载模型。 但如果能将所有参数用16位浮点数表示,所需的内存大小就可以直接减少一倍。 因此,将模型参数的表示位数最小化(不仅是推理,还有训练过程)是非常有吸引力的。 然而,这种方法不是没有代价的。随着表示位数减少导致精度降低,模型的准确性通常也会下降。 我们希望在保持准确性的同时减少表示数值的位数……此时,量化技术就派上用场了。 第二部分:量化入门 现在我们知道,量化的目的是将模型参数的精度从较高位宽(如32位浮点数)降低到较低位宽(如8位整数)。 在减少表示原始参数的位数时,通常也会伴随一些精度(粒度,granularity)的损失。 为了让这种效果更直观,我们可以用照片颜色作为类比。比如,选择任意图像(左图),但只用8种颜色表示(右图): 注意看,放大的曲奇饼干看起来比原来更有「颗粒感」。 与之相似,量化的主要目标是减少表示原始参数所需的比特数(颜色),同时尽可能保留原始参数的精度。 常见数据类型 首先,让我们看看常见的数据类型以及使用它们替代32位(称为全精度或FP32)表示的影响。 FP16 首先是一个从32位到16位(称为半精度或FP16)浮点数的例子: FP16可取的数值范围比FP32小得多。 BF16 为了获得与原始FP32相似的数值范围,引入了bfloat 16作为一种「截断的FP32」类型: BF16使用的位数与FP16相同,但增加了指数位,因此能取到更广泛的数值范围,常用于深度学习领域。 INT8 进一步减少位数时,就更接近整数而非浮点数的表示方法。比如,从FP32到只具有8位的INT8,只有原始位数的1/4: 每次减少位数时,都会进行映射,将初始的FP32表示「压缩」到较少的位数中。 但在实际操作中,我们不需要将整个FP32范围[-3.4e38, 3.4e38]全部映射到INT8中。我们只需找到一种方法,将实际模型参数的数据范围映射到INT8中。 常见的压缩/映射方法可以有对称量化和非对称量化两种,都属于线性映射。 接下来将要探讨的就是从FP32到INT8的量化方法。 对称量化 在对称量化中,原始浮点值的范围被映射到量化空间中以零为中心的对称范围,量化前后的范围都以零为中点。 这意味着,原来浮点空间中的零,映射到量化空间后也恰好是零。 一种对称量化的典型例子是最大绝对值(absmax)量化。 给定一个数值列表,我们取其中最高的绝对值(α)作为执行线性映射的范围。 [-127, 127]表示受限范围(restricted range),未受限范围是[-128, 127],取决于量化方法 由于这是一个以零为中心的线性映射,公式很简单。 首先用以下公式计算比例因子(s): – b是我们要量化到的字节数(8) – α是最高的绝对值 然后,我们使用s来量化输入x: 如上图所示,最大绝对值α为10.8,将FP32映射到INT8时,即有如下公式: 如果要恢复原始的FP32值,也可以使用先前计算的比例因子(s)来进行反量化。 先量化,再反量化以恢复原始值,全过程如下所示: 可以看到某些值,如3.08和3.02,在量化为INT8时都是36。因此进行反量化恢复到FP32时,它们失去了一些精度并且不再可区分。 这种原始值和反量化值之间的差异被称为量化误差。通常,量化结果的位数越少,误差越大。 非对称量化 与对称量化不同,非对称量化不是以零为中心的对称。相反,它将浮点范围内的最小值(β)和最大值(α)分别映射到量化范围的最小值和最大值。 这里我们探讨的方法被称为零点量化(zero-point quantization)。 注意0的位置是如何移动的。这就是为什么它被称为非对称量化。在范围[-7.59, 10.8]中,最大值和最小值到0的距离不同。 由于零点位置的偏移,我们必须计算INT8范围内的零点才能执行线性映射。与之前一样,我们还必须计算比例因子(s),但使用INT8范围的差值[-128, 127]。 由于需要在INT8范围内计算零点(z)以移动权重,这有点复杂。 像之前一样,让我们填入公式: 为了将量化后的值从INT8反量化回FP32,我们需要使用先前计算的比例因子(s)和零点(z)。 除此之外,反量化很简单: 当我们将对称和非对称量化并排放置时,可以快速看出两种方法之间的区别: 在上图中,我们能看到对称量化的零中心特性与非对称量化的偏移。 范围映射和剪裁(Clipping) 在之前的例子中,我们探讨了如何将给定向量中的值范围映射到低位表示。虽然这样可以映射整个向量值的范围,但有一个主要缺点,即异常值(outlier)。 想象一下,你有一个包含以下值的向量: 一个值比其他所有值都大得多,可以被认为是异常值。如果我们映射整个向量的范围,所有小值将被映射到相同的低位表示,并失去它们的区分度: 这是之前使用的absmax方法。如果不进行剪裁,非对称量化也会发生同样的情况 相反,我们可以选择剪裁某些值。剪裁是指设置原始值的不同动态范围,使所有异常值都被设为相同的值。 在下面的例子中,我们手动将动态范围设置为[-5, 5],所有超出该范围的值将被映射到-127或127,无论它们的实际值是多少: 这种方法的主要优点是非异常值的量化误差显著减少。然而会导致异常值的量化误差增加。 校准(Calibration) 上面的例子中,我们随机将动态范围设置为[-5, 5],但其实应该通过「校准」过程做出决定,找到一个合适的范围,包含尽可能多的值,同时最小化量化误差。 校准步骤的具体执行对于不同类型的参数是不一样的。 权重(和偏置) 我们可以将大语言模型(LLM)的权重和偏置(weights & biases)视为静态值,因为它们在运行模型之前是已知的。例如,Llama 3的约20GB文件大部分由其权重和偏置组成。 由于偏置变量的数量(数百万)显著少于权重(数十亿),因此偏置通常保持较高精度(如INT16),而量化的主要工作集中在权重上。 对于已知的静态权重,选择范围的校准技术包括: – 手动选择输入范围的百分位数 – 优化原始权重和量化权重之间的均方误差(MSE) – 最小化原始值和量化值之间的熵(KL散度) 例如,选择一个百分位数,会导致类似于我们之前看到的剪裁行为。 激活值 在整个大语言模型中不断更新的输入通常被称为激活值(activations)。 之所以被称为激活值,因为它们通常会经过一些激活函数,如sigmoid或relu 与权重不同,激活值在推理过程中随输入数据而变化,因此难以准确量化。 由于这些值在每个隐藏层之后都会更新,因此在推理阶段,只有输入数据通过模型后才能得知它们的具体数值。 总体来说,有两种方法用于校准权重和激活值,应用于模型的不同阶段: – 训练后量化(Post-Training Quantization,PTQ) – 顾名思义,即训练后进行的量化 – 量化感知训练(Quantization Aware Training,QAT) – 训练/微调期间的量化 第三部分:训练后量化(PTQ) 训练后量化(PTQ)是最流行的量化技术之一。它是在模型训练完成后,对模型的参数(包括权重和激活值)进行量化。 权重的量化可以采用对称量化或非对称量化的方法。 然而,激活值的量化需要经过推理阶段来获取其潜在分布,因为我们事先并不知道它们的范围。 激活值的量化有两种形式: – 动态量化(dynamic quantization) – 静态量化(static quantization) 动态量化 数据通过隐藏层后,其激活值会被收集,比较出每一层的最大值(α)和最小值(β): 然后利用这些激活值的分布来计算量化输出所需的零点(zeropoint,z)和比例因子(scale factor,s)值: 每次数据通过新的网络层时,这个过程都会重复。因此,每一层都有其独立的z和s值,从而使用不同的量化方案。 静态量化 与动态量化不同,静态量化并不是在推理过程中计算零点(zeropoint,z)和比例因子(scale factor,s),而是在推理之前计算这些值。 为了找到这些值,我们会使用一个校准数据集,并将其输入模型以收集这些潜在的激活值分布。 收集到这些分布之后,就可以计算出在推理过程中进行量化所需的s和z值。 在实际推理时,不会重新计算s和z值,而是在所有激活中全局使用它们来对其进行量化。 总体来说,动态量化为每个隐藏层计算s和z值,往往更准确。然而,这可能会增加计算时间,因为这些值需要在每次推理时计算。 相反,静态量化虽然不如动态量化准确,但速度更快,因为它已经预先知道用于量化的s和z值。 4-bit量化领域 低于8-bit的量化一直是一个挑战,因为每减少一位,量化误差就会增加。幸运的是,有几种巧妙的方法可以将位数减少到6、4,甚至2-bit(尽管通常不建议将位数降到低于4-bit)。 我们将探讨在HuggingFace上常见的两种方法: – GPTQ(全模型在GPU上运行) – GGUF(可能将层卸载到CPU上) GPTQ GPTQ可以说是实际应用中最著名的4-bit量化方法之一。 它使用非对称量化,并逐层进行处理,每层独立处理后再继续处理下一层: 在这个逐层量化过程中,它首先将层的权重转换为逆Hessian矩阵。逆Hessian矩阵是模型损失函数的二阶导数,表示模型输出对每个权重变化的敏感性。 简单来说,它本质上展示了每个层中权重的重要性(逆重要性)。 Hessian矩阵中较小值的权重更为重要,因为这些权重的微小变化可能导致模型性能的显著变化。 在逆Hessian矩阵中,较低的值表示更「重要」的权重 接下来,我们量化并反量化权重矩阵的第一行: 这一过程使我们能够计算量化误差(q),我们可以使用之前计算的逆Hessian值(h_1)来加权这个量化误差。 本质上,我们是在基于权重的重要性创建加权量化误差: 接下来,我们将这个加权量化误差重新分配到该行的其他权重上。这有助于保持网络的整体功能和输出。 例如,如果对第二个权重(即x_2=0.3)进行此操作,我们会将量化误差(q)乘以第二个权重的逆Hessian(h_2)加上去: 接下来,继续对给定行中的第三个权重进行相同的操作: 重复这个重新分配加权量化误差q的过程,直到所有值都被量化。 这个方法所以有效,是因为权重通常是相互关联的。因此,当一个权重有量化误差时,相关的权重会通过逆Hessian进行相应的更新。 GGUF 虽然GPTQ是一种很好的在GPU上运行整个大语言模型(LLM)的量化方法,但如果没有相应的硬件条件,也可以通过GGUF将LLM的任意层卸载到CPU上。 相当于同时用CPU和GPU运行模型,以弥补显存(VRAM)不足的情况。 量化方法GGUF经常更新,而且依赖于具体的量化位数,但基本原理如下。 首先,给定层的权重被分成「超级块」,每个「超级块」包含一组「子块」。从这些「子块」中,我们计算出比例因子(s)和α值: 为了量化给定的「子块」,可以使用之前提到的absmax量化,将给定的权重乘以比例因子(s_sub): 比例因子s_sub是使用「子块」中的信息计算的,但用「超级块」中的信息s_super进行量化: 总而言之,这种以块为单位的量化使用「超级块」的比例因子(s_super)来量化「子块」的比例因子(s_sub)。 每个比例因子的量化级别可能不同,「超级块」的比例因子通常比「子块」有更高的精度。 为了说明这一点,让我们探讨几个量化级别(2-bit、4-bit和6-bit): 根据量化类型,还需要一个额外的最小值(m)来调整零点,这些与比例因子(s)一样被量化 第四部分:量化感知训练(QAT) 第三部分讲述了如何在训练后对模型进行量化。这种方法的缺点在于,没有考虑到实际的训练过程。 这就是量化感知训练(QAT)派上用场的地方。与训练后量化(PTQ)不同,QAT的目标是在训练中学习量化过程。 QAT往往比PTQ更准确,因为在训练过程中已经考虑了量化。其工作原理如下: 在训练过程中,引入了所谓的「假」量化。比如先将权重量化为INT4,然后再反量化回FP32: 这一过程让模型在训练阶段进行损失计算和权重更新时,就已经考虑到了量化误差。 如下图所示,QAT尝试探索「宽」极小值情况下的损失值,以减少量化误差,因为「窄」极小值往往会导致更大的量化误差。 假设在反向传播过程中没有考虑量化,梯度下降过程就会选择损失值最小的权重。然而,如果它处于「窄」极小值中,那将引入更大的量化误差。 相反,如果我们考虑量化,将在「宽」极小值中选择一个不同的更新权重,其量化误差要小得多。 因此,尽管PTQ方法在高精度(例如FP32)有较低的损失值,但QAT在低精度(例如INT4)下损失值也很低,这是我们所追求的。 1-bit时代:BitNet 之前我们看到,将量化精度降低到4-bit已经相当小了,但如果我们进一步降低呢? 这就是BitNet的用武之地,它将模型的权重表示为单个比特,即-1或1,通过将量化过程直接注入到Transformer架构中来实现这一点。 Transformer架构是大多数LLM的基础,由涉及线性层的计算组成: 这些线性层通常以更高的精度表示,如FP16,而且是大多数权重所在的位置。 BitNet用BitLinear层替换了这些线性层: BitLinear层的工作原理与普通线性层相同,用权重乘以激活值来计算输出。 但不同的是,BitLinear层仅用1位表示模型的权重,使用INT8表示激活值: BitLinear层像量化感知训练(QAT)一样,在训练期间执行一种「假」量化,以分析权重和激活值的量化效果: 让我们一步步地了解BitLinear。 权重量化 在训练过程中,权重以INT8存储,然后使用一种称为符号函数(signum function)的基本策略将其量化为1位。 本质上,它将权重的分布移动至以0为中心,然后将所有小于0的值分配为-1,将所有大于0的值分配为1: 此外,它还跟踪一个值β(平均绝对值),我们将在之后的反量化过程中使用。 激活值量化 为了量化激活值,BitLinear使最大绝对值方法(absmax)将激活值从FP16转换为INT8,因为它们需要以较高的精度进行矩阵乘法(×)。 此外,它还跟踪一个值α(最大绝对值),我们将在之后的反量化过程中使用。 反量化 我们跟踪了α(激活值的最大绝对值)和β(权重的平均绝对值),这些值将帮助我们将激活值反量化回FP16。 输出激活值使用{α, γ}重新缩放,以将其反量化到原始精度: 这个过程相对简单,并且允许模型仅用两个值表示,即-1或1。 通过这种方法,作者观察到,随着模型规模的增长,1位训练和FP16训练之间的性能差距越来越小。 然而,这仅适用于较大的模型(>30B参数),较小模型之间的差距仍然很大。 所有LLM都是1.58位 为了改善之前提到的扩展性问题,BitNet 1.58b被引入。 在这种新方法中,模型的每个权重不仅可以是-1或1,还可以取0,使每个变量成为三元值(ternary)。 有趣的是,仅仅是添加0这个简单的操作,就大大改进了BitNet,加速了计算过程。 0的力量 为什么添加0是一个重大改进呢? 这与矩阵乘法有关! 首先,让我们探讨一下矩阵乘法的基本工作原理。 当计算输出时,我们将权重矩阵与输入向量相乘。下面是权重矩阵的第一层的第一行乘法的可视化: 这种乘法涉及两个动作,将单个权重与输入相乘,然后将它们全部相加。 相比之下,BitNet 1.58b设法避免了乘法的动作,因为三值权重本质上告诉你以下内容: – 1:我想加上这个值 – 0:我不想要这个值 – -1:我想减去这个值 因此,如果你的权重被量化到1.58 bit,你只需要执行加法: 这不仅可以显著加快计算速度,还允许特征过滤。 将给定的权重设置为0就相当于忽略了这个输入,而不是像1-bit那样,表示加上或减去输入值。 量化 为了执行权重量化,BitNet 1.58b使用平均绝对值量化(absmean),这是我们之前见过的最大绝对值量化(absmax)的变体。 它只是压缩权重的分布并使用绝对均值(α)来量化值。然后将它们四舍五入为-1、0或1: 与BitNet相比,激活值量化是相同的,除了一个方面:不是将激活值缩放到范围[0, 2ᵇ⁻¹],而是使用最大绝对值方法缩放到[-2ᵇ⁻¹, 2ᵇ⁻¹]。 总结一下,1.58-bit量化主要涉及两个技巧: – 添加0以创建三值表示[-1, 0, 1] – 权重的绝对均值量化 BitNet论文中有这样的结论:「13B BitNet b1.58在延迟、内存使用和能耗方面比3B FP16 LLM更高效。」 论文地址:https://arxiv.org/abs/2402.17764 由于只有1.58个计算效率高的bit,我们得到了轻量级模型。 参考资料: https://newsletter.maartengrootendorst.com/p/a-visual-guide-to-quantization

iPhone可跑2B小钢炮!谷歌Gemma 2来袭,最强显微镜剖解LLM大脑

谷歌DeepMind的小模型核弹来了,Gemma 2 2B直接击败了参数大几个数量级的GPT-3.5和Mixtral 8x7B!而同时发布的Gemma Scope,如显微镜一般打破LLM黑箱,让我们看清Gemma 2是如何决策的。 谷歌DeepMind的小模型,又上新了! 就在刚刚,谷歌DeepMind发布Gemma 2 2B。 它是从Gemma 2 27B中蒸馏而来。 虽然它的参数只有2.6B,但在LMSYS竞技场上的得分,已经超越了GPT-3.5和Mixtral 8x7B! 在MMLU和MBPP基准测试中,它分别取得了56.1和36.6的优异成绩;比起前代模型Gemma 1 2B,它的性能超过了10%。 小模型击败了大几个数量级的大模型,再一次印证了最近业界非常看好的小模型方向。 谷歌在今天,一共公布了Gemma 2家族的三个新成员: Gemma 2 2B: 轻量级2B模型,在性能和效率之间实现了最大的平衡 ShieldGemma: 基于Gemma 2构建的安全内容分类器模型,用于过滤AI模型的输入和输出,确保用户安全 Gemma Scope: 一种可解释性工具,提供对模型内部运行机制的无与伦比的洞察 6月,27B和9B Gemma 2模型诞生。 自发布以来,27B模型迅速成为大模型排行榜上,排名前列的开源模型之一,甚至在实际对话中表现超过了参数数量大两倍的流行模型。 Gemma 2 2B:即刻在设备上使用 轻量级小模型Gemma 2 2B,是从大模型中蒸馏而来,性能毫不逊色。 在大模型竞技场LMSYS上,新模型取得令人印象深刻的1130分,与10倍参数的模型不相上下。 GPT-3.5-Turbo-0613得分为1117,Mixtral-8x7b得分为1114。 足见,Gemma 2 2B是最好的端侧模型。 有网友在iPhone 15 Pro上,让量化后的Gemma 2 2B在MLX Swift上运行,速度快到惊人。 具体来说,它能够在各种终端设备,包括手机、笔记本,甚至是使用Vertex AI和Google Kubernetes Engine(GKE)强大的云,皆能完成部署。 为了让模型加速,它通过NVIDIA TensorRT-LLM完成了优化,在NVIDIA NIM平台也可使用。 优化后的模型适用于各种平台部署,包括数据中心、云、本地工作站、PC 和边缘设备。 它还可以支持RTX、RTX GPU、Jetson模块,完成边缘化AI部署。 此外,Gemma 2 2B无缝集成了Keras、JAX、Hugging Face、NVIDIA NeMo、Ollama、Gemma.cpp等,并很快将与MediaPipe集成,实现简化开发。 当然,与Gemma 2一样,2B模型也同样可以用来研究和商用。 甚至,由于其参数量足够下,它可以在Google Colab的免费T4 GPU层上运行,降低了开发门槛。 目前,每位开发者都可以从Kaggle、Hugging Face、Vertex AI Model Garden下载Gemma 2的模型权重,也可在Google AI Studio中试用其功能。 仓库地址:https://huggingface.co/collections/google/gemma-2-2b-release-66a20f3796a2ff2a7c76f98f ShieldGemma:最先进的安全分类器 正如其名,ShieldGemma是最先进的安全分类器,确保AI输出内容具有吸引力、安全、包容,检测和减少有害内容输出。 ShieldGemma的设计专门针对四个关键的有害领域: – 仇恨言论 – 骚扰内容 – 露骨内容 – 危险内容 这些开源分类器,是对谷歌现有的负责任AI工具包中安全分类器套件补充。 该工具包包括一种,基于有限数据点构建针对特定策略分类器的方法,以及通过API提供的现成Google Cloud分类器。 ShieldGemma基于Gemma 2构建,是行业领先的安全分类器。 它提供了各种模型参数规模,包括2B、9B、27B,都经过英伟达速度优化,在各种硬件中可以高效运行。 其中,2B非常适合在线分类任务,而9B和27B版本则为对延迟要求较低的离线应用提供更高性能。 Gemma Scope:通过开源稀疏自编码器揭示AI决策过程 此次同时发布的另一大亮点,就是开源稀疏自编码器——Gemma Scope了。 语言模型的内部,究竟发生了什么?长久以来,这个问题一直困扰着研究人员和开发者。 语言模型的内部运作方式往往是一个谜,即使对于训练它们的研究人员,也是如此。 而Gemma Scope就仿佛一个强大的显微镜,通过稀疏自编码器 (SAEs) 放大模型中的特定点,从而使模型的内部工作更易于解释。 有了Gemma Scope以后,研究人员和开发者就获得了前所未有的透明度,能够深入了解Gemma 2模型的决策过程。 Gemma Scope是数百个适用于Gemma 2 9B和Gemma 2 2B的免费开放稀疏自动编码器 (SAE) 的集合。 这些SAEs是专门设计的神经网络,可以帮助我们解读由Gemma 2处理的密集、复杂信息,将其扩展成更易于分析和理解的形式。 通过研究这些扩展视图,研究人员就可以获得宝贵的信息,了解Gemma 2如何识别模式、处理信息、做出预测。 有了Gemma Scope,AI社区就可以更容易地构建更易理解、负责任和可靠的AI系统了。 同时,谷歌DeepMind还放出了一份20页的技术报告。 技术报告:https://storage.googleapis.com/gemma-scope/gemma-scope-report.pdf 总结来说, Gemma Scope有以下3个创新点—— 开源SAEs:超过400个免费提供的SAEs,覆盖Gemma 2 2B和9B的所有层 互动演示:在Neuronpedia上无需编写代码,即可探索SAE功能,并分析模型行为 易于使用的资源库:提供与SAEs和Gemma 2交互的代码和示例 解读语言模型内部的运作机制 语言模型的可解释性问题,为什么这么难? 这要从LLM的运行原理说起。 当你向LLM提出问题时,它会将你的文本输入转换为一系列「激活」。这些激活映射了你输入的词语之间的关系,帮助模型在不同词语之间建立联系,据此生成答案。 在模型处理文本输入的过程中,模型神经网络中不同层的激活代表了多个逐步高级的概念,这些概念被称为「特征」。 例如,模型的早期层可能会学习到像乔丹打篮球这样的事实,而后期层可能会识别出更复杂的概念,例如文本的真实性。 用稀疏自编码器解读模型激活的示例——模型是如何回忆「光之城是巴黎」这一事实的。可以看到与法语相关的概念存在,而无关的概念则不存在 然而,可解释性研究人员却一直面临着一个关键问题:模型的激活,是许多不同特征的混合物。 在研究的早期,研究人员希望神经网络激活中的特征能与单个神经元(即信息节点)对齐。 但不幸的是,在实践中,神经元对许多无关特征都很活跃。 这也就意味着,没有什么明显的方法,能判断出哪些特征是激活的一部分。 而这,恰恰就是稀疏自编码器的用武之地。 要知道,一个特定的激活只会是少数特征的混合,尽管语言模型可能能够检测到数百万甚至数十亿个特征(也就是说,模型是稀疏地使用特征)。 例如,语言模型在回答关于爱因斯坦的问题时会想到相对论,而在写关于煎蛋卷时会想到鸡蛋,但在写煎蛋卷时,可能就不会想到相对论了。 稀疏自编码器就是利用了这一事实,来发现一组潜在的特征,并将每个激活分解为少数几个特征。 研究人员希望,稀疏自编码器完成这项任务的最佳方式,就是找到语言模型实际使用的基本特征。 重要的是,在这个过程中,研究人员并不会告诉稀疏自编码器要寻找哪些特征。 因此,他们就能发现此前未曾预料过的丰富结构。 然而,因为他们无法立即知道这些被发现特征的确切含义,他们就会在稀疏自编码器认为特征「触发」的文本示例中,寻找有意义的模式。 以下是一个示例,其中根据特征触发的强度,用蓝色渐变高亮显示了特征触发的 Token: 用稀疏自编码器发现特征激活的示例。每个气泡代表一个 Token(单词或词片段),可变的蓝色说明了这个特征的存在强度。在这个例子中,该特征显然与成语有关 Gemma Scope有何独特之处? 比起此前的稀疏自编码器,Gemma Scope有许多独特之处。 前者主要集中在研究小型模型的内部工作原理或大型模型的单层。 但如果要把可解释性研究做得更深,就涉及到了解码大型模型中的分层复杂算法。 这一次,谷歌DeepMind的研究者在Gemma 2 2B和9B的每一层和子层的输出上,都训练了稀疏自编码器。 这样构建出来的Gemma Scope,总共生成了超过400个稀疏自编码器,获得了超过 3000万个特征(尽管许多特征可能重叠)。 这样,研究人员就能够研究特征在整个模型中的演变方式,以及它们如何相互作用,如何组合形成更复杂的特征。 此外,Gemma Scope使用了最新的、最先进的JumpReLU SAE架构进行了训练。 原始的稀疏自编码器架构,在检测特征存在与估计强度这两个目标之间,往往难以平衡。而JumpReLU架构,就能更容易地实现二者的平衡,并且显著减少误差。 当然,训练如此多的稀疏自编码器,也是一项重大的工程挑战,需要大量的计算资源。 在这个过程中,研究者使用了Gemma 2 9B训练计算量的约15%(不包括生成蒸馏标签所需的计算),将约20 PiB的激活保存到了磁盘(大约相当于一百万份英文维基百科的内容),总共生成了数千亿个稀疏自编码器参数。 参考资料: https://developers.googleblog.com/en/smaller-safer-more-transparent-advancing-responsible-ai-with-gemma/

我在谷歌上已经死了二十年?

几十年来,任何想要了解一切的人都会询问谷歌,——但这个平台是否正在失去优势?我们还能相信它会告诉我们真相吗? 在谷歌上搜自己的时候发现自己死了? 近日,自由撰稿人Tom Faber在《卫报》上发文表示,谷歌搜索把自己的照片和另一个同名的人的传记混淆了。 「一张我笑脸的照片,旁边写着:Tom Faber是一位物理学家和出版商,他在剑桥大学担任了35年的大学讲师,于2004年7月27日去世,享年77岁。」 「直到我在谷歌上看到自己去世的消息,我才知道自己已经去世了。」 Tom Faber并不是唯一一个对谷歌感到苦恼的人。 曾以创新算法和简洁界面获得巨大成功的谷歌搜索,如今却面临诸多问题。 比如算法将用户信息混淆,搜索结果质量下降,充斥垃圾邮件和错误信息,界面混乱影响用户寻找答案,还因广告业务被指损害用户体验。 另一方面,ChatGPT的崛起,被许多人称为搜索引擎杀手。比尔·盖茨在去年表示,一旦有公司完善了人工智能助手,用户就再也不会去搜索网站了。 屠龙少年与PageRank 很难想象有任何东西能取代谷歌。 去年,谷歌成立25周年,其母公司Alphabet市值超过2万亿美元,而谷歌在全球搜索市场占有高达90%的份额。 谷歌已经远远超越了本身作为工具的范畴,成为了一种基础设施,因为任何事物都依赖互联网的眼球来运作。 谷歌于是拥有了巨大的权力,可以左右政治、社会态度和无数企业的命运。 起源神话 20世纪90年代末,一对计算机极客谢尔盖·布林(Sergey Brin)和拉里·佩奇(Larry Page)在车库里创办了谷歌。 当时,网络发展迅速,搜索引擎的竞争初现。佩奇和布林的想法是不仅根据网页与搜索查询的相关性对网页进行排序,还要考虑网页信息的质量。 他们建立了大名鼎鼎的PageRank系统,根据链接过来的其他网页数量对网页进行优先排序,——如果许多人链接到某个特定来源,那么该来源的信息质量一定很高。 有效的方法,加上简洁干净的界面,每个人都能看出谷歌搜索的结果比其他公司好得多。 谷歌很快就赢得了大量信任和好感,其「整合全球信息」的使命更是令人鼓舞。 如果你想知道什么,「谷歌一下」,大多数时候,它都会给你想要的答案。于是其他搜索引擎渐渐消亡,搜索成为谷歌的代名词,而「谷歌」成为了一个动词。 忘记初心 凭借自己的成功,谷歌收集了大量用户数据,并利用这些数据改进搜索算法。 同时,谷歌也意识到用户的数据可能很有商业价值,因为它们捕捉到了用户的想法、愿望和内心深处的问题。谷歌利用这些信息重塑了广告业。 从YouTube到地图,谷歌的许多产品都会收集用户数据,从而实现广告的个性化。广告是谷歌的支柱业务,去年,其母公司Alphabet 77%的收入来自广告(2378.5亿美元)。 在这种情况下,谷歌的搜索也悄然发生着变化。 如果把谷歌比作图书馆,那么以前你想借一本书时,图书馆会立即拿出来;而现在,图书管理员会试图向你推销杂志订阅,向你展示一些其他人喜欢的不同书籍,最后拿出一大堆大部头的书,而你想要的书尴尬地夹在中间。 事实上,谷歌的创始人很早就意识到,商业激励可能会损害搜索结果的完整性。 在1998年的一篇学生论文中,布林和佩奇写道,广告资助的搜索引擎「本质上偏向广告商,远离消费者的需求」。 然而,谷歌还是义无反顾地开始展示广告,正如一位学者所言,这是将搜索货币化的唯一好方法。 于是,在成功的道路上,谷歌逐渐失去了早期赢得的公众好感,那句「不作恶」的座右铭也变得讽刺。 争渡争渡,垃圾无数 批评者称谷歌最新的搜索结果为「辣鸡」。 除了谷歌自身的问题,另外两个毒瘤就是垃圾邮件和搜索引擎优化 (SEO) 。 SEO公司的目标是让网站在谷歌搜索排名中更靠前,所以网页的内容只是为了取悦谷歌的算法而量身定制的。 以搜索食谱为例,用户可能希望看到它们简洁地显示在页面顶部,但大多数美食博客会将食谱埋在长篇轶事之下,因为谷歌算法偏爱这种格式,尽管读者可能很反感。 而所谓的「黑帽」SEO,更是通过技术手段生产互联网垃圾,例如「域名抢注」、「声誉滥用」、「讣告垃圾邮件」、「关键词群发」或「寄生虫托管」。 垃圾页面通常没有什么有意义的内容,只是为了登上谷歌搜索结果的顶部,通过托管侵入性广告从每次访问者的点击中获利。 另一方面,垃圾邮件发送者也与时俱进,让谷歌陷入了一场永无休止的战斗。 每当垃圾邮件发送者想出一种新技术,谷歌就调整算法使其失效,然后发送者又想出了别的办法。 而在如今这个AI的时代,互联网正面临着新一波人工智能垃圾邮件的威胁,这可能会成为压垮搜索引擎的最后一根稻草。 垄断市场 如果谷歌的搜索结果不好,为什么人们还要用它呢? 美国司法部认为,谷歌利用其财富以非法垄断的方式进行反竞争运营,主要是向其他科技公司付费,让其成为其设备上的默认搜索引擎(比如在2022年向苹果支付200亿美元)。 谷歌最大的竞争对手微软的必应(Bing)仅占全球搜索市场的3%左右。许多其他初创公司的份额仅为1%,只能存活在自己的赛道上:Perplexity提供书面形式的问题答案,Kagi采用无广告的付费订阅模式,DuckDuckGo专注于保护数据隐私。 Perplexity首席执行官Aravind Srinivas表示:「与谷歌竞争是禁区。他们可以免费提供你提供的一切,让你吃不消。」 平台衰亡理论 谷歌搜索引擎是否存在竞争真的很重要吗? 作家Cory Doctorow创造了术语「enshittification」来解释现代大型科技公司的现状。 「平台的灭亡方式如下:首先,它们对用户很好;然后它们滥用用户来为商业客户提供更好的服务;最后,它们滥用这些商业客户来为自己收回所有价值。然后,它们就灭亡了。」 Doctorow表示,算法系统尤其容易受到这种影响,因为它们的工作原理对用户来说是不透明的,很容易被悄悄调整。 谁知道为什么你会在谷歌搜索结果、Instagram信息流或TikTok For You页面的顶部看到这些内容?是因为它被认为是最适合你的内容,还是因为平台认为它能带来最多的收入? 末日预测,也是互联网的衰落 多年来,人们一直在热情预测谷歌的消亡——甚至有一个名为「谷歌末日预测」的维基百科页面,其中的例子可以追溯到2007年。 也许真正困扰人们的是,在2024年,互联网给人的感觉更糟糕了。 那些90年代末和00年代初在网络上长大的人,可能还记得开放、社区和自由思想。而今天,我们可能更倾向于将互联网与焦虑、孤独和压力联系起来。 也许我们怀念互联网更人性化的时代,就像Reddit这样的庞大而混乱的论坛。在那里你可以得到别人诚实的意见,尽管它很奇怪,但不受模糊的品牌联想或附属链接的影响。 进击的OpenAI 如果搜索问题还不够棘手的话,今天许多人预测,新AI技术的出现将改变一切。 自OpenAI推出ChatGPT以来,技术专家们一直在想,AI助手是否有一天会取代搜索引擎。到了去年,微软宣布将把ChatGPT整合到其搜索引擎结果中。 谷歌慌了。 尽管在大模型的战争中处于下风,也不得不把多年来一直在背后使用的AI搬到了台面上。 只是今天的LLM仍然在靠谱与不靠谱之间徘徊。 我应该吃多少石头? 谷歌表示,LLM与搜索的结合很有用,尤其非常适合需要大量特定变量的查询。 比如,你正在巴黎寻找一家可以供家人就餐的素食餐厅,条件是早上7点营业,步行即可到达地铁站。这些问题以前可能需要花10分钟点击大量搜索,而现在AI只需几秒钟即可完成。 不过深得人类抽象精髓的AI,可不会一开始就乖乖给你打工。 如果你问「我应该吃多少块石头?」,谷歌的AI可能会告诉你「根据加州大学伯克利分校地质学家的说法,建议每天至少吃一块小石头,因为石头中含有对消化健康很重要的矿物质和维生素。」 还有「怎么把奶酪粘在披萨上」,AI建议「在酱汁中加入约1/8杯无毒胶水,使其更粘稠」。 这些错误信息都是AI从浩瀚网络中学到的。吃石头来自讽刺网站洋葱报的一篇文章,而胶水披萨的想法是11年前Reddit上的一篇帖子。 对于全网的嘲讽,谷歌表示,「这些都是成长的烦恼」。 搜索引擎会消失吗? ChatGPT和AI Overviews预示的新方向是,我们不再自己寻找答案,而是得到一个单一的、据称是平衡的答案,这个答案已经被算法预先咀嚼过。 「总结或搜索的简化,对整个社会来说是一件坏事,重要的是从搜索、从你自己信任的或新的来源获得一系列不同的观点,练习批判性思维并形成自己的观点。」 参考资料: https://www.theguardian.com/technology/article/2024/jul/20/google-is-the-worlds-biggest-search-engine-broken

LLM智能「参差不齐」!AI大牛Karpathy用表情包解释「9.9<9.11」

前段时间冲上热搜的问题「9.11比9.9大吗?」,让几乎所有LLM集体翻车。看似热度已过,但AI界大佬Andrej Karpathy却从中看出了当前大模型技术的本质缺陷,以及未来的潜在改进方向。 一边是OpenAI、Meta、Mistral、DeepMind等巨头们争先恐后地发模型,几乎每天都能听到重磅消息,给人一种「技术进步日新月异,AGI仅在眼前」的错觉。 另一边又是「9.9」难题继续发挥余热,从推特到微博,引发了全球网友的关注。虽然LLM失智也不是第一天了,但几乎全部大模型都在如此简单的问题上翻车,的确罕见。这种量级的讨论热度,也自然引来了大佬Karpathy的围观。他甚至表示,这已经成为自己最喜欢的LLM测试了。 GPT-4o的失手概率是1/3,但Claude几乎3/3全败 下面是Karpathy本人的实测结果。即使提示了Claude「按实数算,别按版本号算」,也根本不起作用。 突然和辅导孩子写作业的家长狠狠共情了但是Karpathy这种级别的大佬,怎么会满足于找乐子?作为AI技术界KOL,他今天发了一篇长推,把近半年来出现的LLM「失智」现象全部盘了一遍,并给出了相当言简意深的分析。他将这种现象描述为「锯齿智能」或「参差不齐的智能」(jagged intelligence)。最先进的LLM既可以执行各种困难任务(比如解决复杂的数学问题),但同时又在一些非常愚蠢的问题上深陷泥沼。 LLM「失智」集锦 首先是OpenAI研究员Noam Brown,他今年2月发推,感慨LLM玩不好井字棋游戏(tic-tac-toe)。难道是LLM不清楚游戏规则?眼看着用户马上就赢了,Gemini还在傻傻提示「游戏越来越让人兴奋了!你下一步走哪?」而且不仅仅是Gemini的问题,ChatGPT也一样犯傻。你可能会怀疑是RLHF起了作用,让LLM必须输给人类。但Noam表示,即使提示模型要它拿出最佳表现,也不会有什么提升。LLM并没有在谦让你,它可能是真的不行。对此,Karpathy的概括是,模型做出了「毫无道理」的决策。Noam本人则认为是训练数据的锅,互联网上并没有足够多的5岁孩子在讨论井字棋游戏的策略。这似乎是佐证了一部分研究的观点:LLM更多依靠记忆,实质上只是记住了某个问题的解决流程,并没有发展出可迁移到不同问题的抽象推理能力。 论文地址:https://arxiv.org/abs/2307.02477还有一个让人类哭笑不得的例子:LLM好像连字母都数不清。「barrier里面有多少个字母『r』?」——「两个」不仅是ChatGPT,最新发布的所谓「开源王者」,405B参数的Llama 3.1也会犯懵。 不过好在Llama 3.1没有那么多「蜜汁自信」,经过提示还能及时修改答案或许是因为不相信ChatGPT连这种任务都搞不明白,各路网友想了各种办法。CoT提示也用上了—— 最后一步还是出错了眼见CoT也不起作用,更有耐心的网友开始进行手把手教学:让ChatGPT先把所有字母一个个写出来,然后它才能发现里面有3个字母「r」。更神奇的事情还有——如果你给所有字母加个圈,LLM就不会数错了!Karpathy是如何解释这种现象的呢?他认为,这源于当今的大多数LLM缺乏「自知之明」,也就是self-knowledge,模型无法分辨自己能做什么、不能做什么。直接结果就是模型的「无知者无畏」,不仅看到任务就上手尝试,而且充满「蜜汁自信」。如果LLM能说出,「我不是很擅长数字母,让我用代码解释器来解决这个问题」,情况就会大为改观。类似的问题在其他模态上也很常见,比如最近一篇标题很吸睛的论文:「视觉语言模型都是盲人」。 论文地址:https://arxiv.org/pdf/2407.06581作者发现,在很多人类准确率可以达到100%的、极其简单的任务上,大模型的表现竟然有些荒谬。不仅准确率低,而且非常不稳定,就像一个很聪明,但实际看不到准确图像的「盲人」或「高度近视」。比如下面这个典型案例:人类一眼就能看出两圆相交,Claude却很自信地表示「这是相切圆,绝对没相交」。那么,这个问题有解吗?Karpathy表示,最近Meta发布的Llama 3.1论文中就给出了类似的解决方案。论文地址:https://ai.meta.com/research/publications/the-llama-3-herd-of-models/论文提出,后训练阶段应该实现模型的对齐,让它发展出「自知之明」,知道自己知道什么,仅靠往里面添加事实知识是无法根除幻觉问题的。因此Llama团队提出了一种名为「知识探测」的训练方式。先从预训练数据中截取片段,让模型只能根据自己所知的信息生成回答,在反馈过程中否决那些有连贯信息但与原始数据相悖的答案。这种方法可以鼓励模型只回答自己了解的问题,拒绝生成不确定的答案。 「参差不齐的智能」 盘点过这些LLM翻车案例之后,我们似乎对Karpathy提出的「锯齿智能」有了更直观的体会。大模型有一些极其出色的能力,能完成许多困难任务,但会在十分简单的事情上有灾难性的失败。这种忽高忽低的智商,的确类似「锯齿」的形状。比如视觉大模型已经可以很好地识别数千种狗和花了,却无法判断两个圆是否重叠。哪些任务是大模型擅长的,哪些是不擅长的?这种分界并不总是很明显,我们似乎可以逐渐发展出一些直觉来帮助判断。但要明白,所谓的「困难」和「简单」任务,都是按照人类标准衡量的。和AI不同,人类从出生到成年,接触到的知识以及发展出的问题解决能力都是高度相关的,而且同步线性提高。Karpathy的这种观点,与著名的「Moravec悖论」有异曲同工之妙。这个论断由CMU机器人研究所教授Hans Moravec等人在上世纪80年代提出,大意是:对人类容易的事情,对机器反而是困难的,反之亦然。比如,逻辑推理和创造力,在人类看来属于高级认知技能,需要较高的教育水平或长期训练,但对于机器来说却通常是微不足道的;而人类能轻松完成的任务,例如视觉和运动技能,对机器而言极具挑战性。 让计算机在智力测试或跳棋游戏中表现出成人水平相对容易,但在感知和移动能力上,很难或不可能达到一岁儿童的技能。 此外,Karpathy的措辞也很有意味。去年哈佛、沃顿、BCG等机构联合发表了一篇有关AI能力的实证论文,同样用到了「jagged」这种形容。 论文地址:https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4573321连Karpathy本人都怀疑,自己是不是看到过这篇论文才会提出这种描述。论文提出,AI的能力呈现出一种「锯齿状的技术边界」(jagged technological frontier)。同一困难程度的任务,有一些是AI能轻松完成的,有些却远在它们能力范围之外。对于前者,AI可以补足,甚至彻底取代人类工作;但对能力范围外的任务会有不准确的输出,使用时反而会拉低人类的工作水平。但Karpathy认为,即使目前AI的能力有种种问题,也并不构成根本缺陷,也有可行的解决方案。正如他上面的推文所描述的,其根本原因是模型缺乏自我认知,这需要我们开发更有效、更精细的后训练(post-training)方法,比如Llama 3.1论文所提出的。目前的AI训练思路仅仅是「模仿人类标签并扩展规模」。这个方法的确有效,否则我们也不会看到今天的成就。但要继续提升AI的智能,就不能只寄希望于「scale up」,还需要整个开发栈中进行更多工作。在这个问题没有被完全解决之前,如果要将LLM用于生产环境,就应该只限于它们擅长的任务,注意「锯齿状边缘」,并始终保持人类的参与度。参考资料: https://x.com/karpathy/status/1816531576228053133 https://www.linkedin.com/pulse/unlocking-mysteries-moravecs-paradox-examining-its-future-joji-john-vm8uf/

CMU&清华新作:让LLM自己合成数据来学习,特定任务性能同样大幅提升

虽然大规模语言模型(LLM)在许多自然语言处理任务中表现优异,但在具体任务中的效果却不尽如人意。为了提升模型在特定自然语言任务上的表现,现有的方法主要依赖于高质量的人工标注数据。这类数据的收集过程既耗时又费力,对于数据稀缺的任务尤为困难。 为了解决这个问题,一些研究尝试通过强大的 Teacher Model 生成训练数据,来增强 Student Model 在特定任务上的性能。然而,这种方法在成本、可扩展性和法律合规性方面仍面临诸多挑战。在无法持续获得高质量人类监督信号的情况下,如何持续迭代模型的能力,成为了亟待解决的问题。 来自卡内基梅隆大学和清华大学的研究团队提出了 SELF-GUIDE 方法。该方法通过语言模型自身生成任务特定的数据集,并在该数据集上进行微调,从而显著提升模型在特定任务上的能力,无需依赖大量外部高质量数据或更强大的 Teacher Model。具体来说,在外部输入大约 3 个样例的情况下,SELF-GUIDE 采用多阶段的生成和过滤机制,利用模型生成的合成数据进行微调,使模型在特定任务上的表现更加出色。 论文地址:https://arxiv.org/abs/2407.12874 代码仓库:https://github.com/zhaochenyang20/Prompt2Model- SELF-GUIDE  图 1:SELF-GUIDE  利用模型自主合成数据的能力提升模型执行特定任务的能力。 方法 具体来说,研究团队将 SELF-GUIDE 方法分解为三个主要阶段:输入数据生成、输出数据生成和质量优化。 输入数据生成 在 SELF-GUIDE 框架的设计和实现过程中,研究者首先根据任务类型(生成型任务或分类型任务)指定不同的提示模板。对于生成型任务, SELF-GUIDE 框架使用一个相对简单的提示模板。而对于分类型任务, SELF-GUIDE 框架则采用了另一种策略。对于分类任务, SELF-GUIDE 框架首先从全部标签空间中随机选择一个标签,将其作为条件生成的伪标签,指导输入数据的生成。选定伪标签后, SELF-GUIDE 框架使用较为复杂的条件生成模板,引导模型生成与所选伪标签相对应的输入内容。 图 2:SELF-GUIDE 的核心在于一个高效的多阶段生成机制,其中语言模型逐步生成输入数据输出数据组合。经过生成和过滤后,自生成的数据进一步用于微调语言模型本身。此图描述了 SELF-GUIDE 针对生成任务的流程。 选定模板并填充示例(few-shot examples)后,完整的提示被传递给 LLM,以生成输入数据。每轮提示后,新生成的输入会被添加到输入库中。从这个库中随机抽取一部分输入,并与初始示例中的输入合并,形成新的提示,逐步扩展 LLM 生成的输入集并且减少重复。SELF-GUIDE 仅进行一轮输入生成,随后在质量优化阶段,应用基于规则的过滤器来去除低质量的输入。 图 3:此图描述了 SELF-GUIDE 完成分类任务的过程。对于分类任务的数据,SELF-GUIDE 首先生成伪标签,然后生成对应的输入,最后重新生成真实标签。 输出数据生成 输出数据生成阶段采用了典型的上下文学习方法:研究者向模型提供任务指令和原始示例,使模型对输入生成阶段产生的每一个输入进行标注。在获取所有输出后,再进行一轮基于规则的过滤,以选择最终的合成数据集。 质量优化 生成数据的质量对于下游训练的成功至关重要。SELF-GUIDE  采用了两种策略来提高质量:调整生成参数以提高生成质量并基于规则过滤掉低质量样本。 调整温度:调整温度是一种平衡多样性和质量的常见策略。SELF-GUIDE 框架在输入生成阶段使用较高的温度以鼓励多样性,在其他阶段通过使用较低的温度确保得到概率最高的输出,从而保证整体数据质量。然而,仅依靠温度调整不足以实现所需的平衡。因此, SELF-GUIDE 还在输入生成后和输出注释后分别进行了两轮基于规则的数据过滤。 噪声过滤(Noise Filter):研究者手动整理了一份噪声术语列表,包括常见的问候语和噪声字符(例如,生成内容中的”\\”)。如果生成示例的输入或输出中出现了任何来自这份列表的噪声术语, SELF-GUIDE 将丢弃整个示例。 长度过滤(Length Filter):虽然示例的长度可能存在偏差,但是研究者认为这些示例在特定任务的长度分布方面仍然具有代表性。SELF-GUIDE 假设示例的长度遵循正态分布,并计算出输入样例的均值 μ 和标准差 σ,研究者假定生成示例的输入和输出长度应符合同一正态分布,并要求长度在 (μ − 2σ, μ + 2σ) 范围内。 整体参数微调(One Parameter Fits All):为了使 SELF-GUIDE 生成符合指令和示例指定目标分布的训练数据,需要在标注数据点上优化各种超参数,包括生成输入输出的个数、输入数据生成的温度、输出数据生成的温度、微调参数等。研究者将实验测试任务分为两部分:一部分可以利用所有数据进行验证以调整生成参数,称为验证任务;另一部分的数据仅用于测试而不可用于调整参数,称为测试任务。研究者在验证任务上搜索 “最大化最差任务性能” 的参数,并将其固定用于测评 SELF-GUIDE 在测试任务上的表现。 实验结果 为了评估 SELF-GUIDE 的有效性,研究者从 Super-NaturalInstructions V2 基准中选择了 14 个分类任务和 8 个生成任务。研究者随机选择了一半任务用于超参数搜索,剩余的一半用于评估。在模型方面,研究者选择了 Vicuna-7b-1.5 作为输入生成、输出生成和微调的基础模型。在评估指标方面,研究者采用了与 Super-NaturalInstructions 基准相同的评估指标,即分类任务的 Exact Match 和生成任务的 ROUGE-L。 为了体现 SELF-GUIDE 的效果,研究者将 SELF-GUIDE 与其他指令跟随和上下文学习方法进行了比较:   1.Few-Shot ICL:作为主要基准,研究者与直接提示语言模型进行了比较。这种方法直接依赖于模型固有的指令跟随能力。 2.Self-ICL:Self-ICL 使用自生成的示例来提高零样本指令跟随。研究者在 Self-ICL 工作的基础上进行了修改,通过自生成尽可能多的示例(而不是固定个数的示例)填充提示词,从而增加参考样本数目。 3.Few-Shot Finetuning:直接利用输入的少量示例进行微调。 SELF-GUIDE 原文主要实验结果如下所示。在基准的评估指标上,分类任务的绝对提升达到了 14.5%,而生成任务的绝对提升则达到了 17.9%。这些结果表明, SELF-GUIDE 在指导 LLM 向任务特定专业化方向发展方面具有显著效果,即使在数据极其有限的情况下。这突显了自我生成数据在大规模适应 LLM 到特定任务中的潜力。更多实验结果和消融实验请参考论文原文。 图 4:对于每类任务(分类和生成任务),研究者将任务随机分成两半,一半用于调试 “One Parameter Fits All” 策略的参数,另一半用于使用这些调试好的参数测试 SELF-GUIDE 的性能。我们使用相同的解码参数和提示模板来评估模型在 SELF-GUIDE 前后的表现。 总结 SELF-GUIDE 框架鼓励模型自主生成训练数据并在此数据上进行微调。实验结果表明,这种方法在提升大规模语言模型特定任务的专业能力方面具有巨大潜力,尤其是在数据有限的情况下,SELF-GUIDE 可以有效解决缺少训练数据的问题。同时,这也为探索自主模型适应和持续学习的技术提供了参考。研究者希望这一工作能够推动 AI 系统在自主对齐和改进机制方面的发展,使其更加符合人类的意图。

ICML 2024演讲爆火!Meta朱泽园揭秘大模型内心世界:不同于人类的2级推理

大语言模型 (LLM) 是如何解数学题的?是通过模板记忆,还是真的学会了推理思维?模型的心算过程是怎样的?能学会怎样的推理技能?与人类相同,还是超越了人类?只学一种类型的数学题,是会对通用智能的发展产生帮助?LLM 为什么会犯推理错误?多大多深的 LLM 才能做推理? 论文地址:https://arxiv.org/abs/2407.20311 近日,来自 Meta FAIR、CMU 和 MBZUAI 的叶添、徐子诚、李远志、朱泽园四人团队最新公布 arXiv 论文《语言模型物理学 Part 2.1:小学数学与隐藏的推理过程》用可控实验,巧妙地回答上述问题。推特网友 @xlr8harder 评价,「这一结果将一劳永逸地平息关于 LLM 是否具有推理能力,或者只是随机鹦鹉的争论。」   编者注:《语言模型物理学》全系列受邀于 7 月 22 日在 ICML 2024 国际机器学习顶级大会上进行了两小时的专题报告,反响热烈,据悉现场掌声不断。这里为大家呈现系列中的 Part 2.1。   图 1 论文详解 首先,根据本系列的惯例,作者认为不应通过与 GPT-4 等大模型对话来猜测其思维方式,这类似于动物行为学,虽可行但不够严谨,无法科学地揭示 GPT-4 的内心思考过程。 此外,从数据角度看,只有完全访问模型的预训练集(pretrain data),才能明确哪些题目是模型见过的,哪些是通过推理学会的。即使模型在 GSM8k(包含 8000 道小学数学题的基准测试集)上获得高分,也难以判断它是否见过这些题目的变体(如不同语言或 GPT-4 改写后的变体)。 为此,作者创建了 iGSM,一个人工合成的、模拟小学数学级别的思维题集,并让模型从零开始在 iGSM 上预训练,以控制模型接触的问题类别。值得注意的是,iGSM 不包含常识信息,只包含 mod 23 范围内的加减乘,并且所有计算都使用 CoT 逐步进行。通过 iGSM,可进行可控实验,专门研究模型的推理能力,而忽略了其他因素(如大整数运算)。图 2 展示了一个简单的例题。 图 2 通过这个数据集,作者首先测试了 GPT2(RoPE 版)的表现。用 op 代表解题所需的数学运算步数,作者发现,当在 op≤21 的题目上进行训练时,模型不仅能达到 99% 正确率,还能在更高难度的题目(如 op=32)上保持 83% 的正确率(见图 3)。这表明模型学会了某种推理技能,毕竟它从未见过 op>21 的题。(顺带一提,GPT-4o 在该数据集上仅能应对 op=10 的题目,超过这个难度就如同盲猜,文末我们会讨论这个问题。) 那模型究竟学会了怎样的推理技能呢?解决 iGSM 的数学题至少有两种思路。一种是作者称为「0 级推理」,即「暴力计算能算则算」。由于题目中的变量可能存在复杂的依赖关系,有些可以直接计算,有些则需要先算出其他变量 —— 譬如小张比小王多 3 倍的水果,那么就要先算出小王有多少苹果、梨子并求和,才可以开始计算小张的水果数。「0 级推理」就是尽可能枚举所有变量,每次随机找到一个可计算的变量,算出结果并继续。 与之对应的是「1 级推理」:通过拓扑排序,从问题开始反推,确定哪些变量需要计算,然后从叶子节点开始向上计算,力求「最短解答」。常见的数学题解通常采用 1 级推理,不会去计算「不必要的变量」。例如小张比小王多 3 倍的水果,问小张有多少水果,那小李的苹果数就是不必要的变量,而小王的苹果、梨子数都是必要的。 如图 3 所示,作者发现,GPT-2 可以学会 1 级推理,几乎每次都给出最短解答。这非常不简单!因为在模型生成第一句话之前,必须已经在脑海中完成了整个拓扑排序 —— 否则它怎么知道哪个变量是不必要的?如果模型一开始就生成了「小李的苹果有 7 个」,那就无法回头,得不到最短解答。 图 3 那么,模型是如何学会「1 级推理」的?为此,作者对模型的内部参数进行了探针 probing 研究(见图 4)。结论显示(具体探针方法详见论文),在模型生成第一句话之前,它已经通过心算确定了哪些变量 A 是「必要的」(nece (A)=True)。同时,模型在说每句话之后,也心算出了接下来所有「可计算的」的变量 A(cannext (A)=True)。因此,模型只需对 nece 和 cannext 不断进行逻辑与(AND)运算,就能从叶子节点开始,一步步给出完整的计算过程。 值得注意的是,这些复杂的心算能力并没有显现在训练集中。模型只接触过 iGSM 数据,只见过「语言」部分(题目和答案),但它却自主学会了类似人类的思维过程(mental process),并得出了最优解!换言之,这项研究反驳了我们一周前在《语言≠思维,大模型学不了推理:一篇 Nature 让 AI 社区炸锅了》中的报道,用科学方法证明了大模型通过语言确实能学会思维。 更神奇的是,模型学到的不止如此。在图 4 中,作者还发现模型会心算许多对解题无用的信息。比如,在变量关系刚被描述完,甚至在问题尚未提出之前,模型已经知道任意两个变量 A 和 B 之间是否存在递归依赖 —— 即使这些变量与解题无关。对人类来说,我们通常会从问题开始反推,忽略不必要的变量,而 GPT-2 这样的语言模型则会将整个关系图梳理一遍,以应对将来可能被问及的任何问题。作者将这种能力称为「2 级推理」。 虽然「2 级推理」对解题不必须,但它确实是一种更通用的技能。模型利用并行能力,对信息进行大量因果梳理。这一能力是语言模型在学习解题中自行掌握的,没有人 (数据) 教过它这么做。作者猜测,这或许是通用人工智能(AGI)中「通用」一词的潜在来源,即语言模型可以超越数据集所教的技能,学会更为通用的能力。 图 4 接下来,作者研究了模型为何会犯错。总结来看,在 iGSM 数据集上,模型几乎只会犯两类错误:一是计算不必要的变量,二是计算当前不可算的变量,如图 5 所示。 对于前者,作者发现,如果模型在生成答案之前就心算出错,误认为某个变量 A 是 「必要的」(nece (A)=True),那么模型在生成答案时很可能会对 A 强行计算,从而产生非最短解答。这一发现非常有趣,它表明许多错误是系统性的,在生成第一个 token 之前,模型还没张嘴就可以确信它会犯错(通过探针的方法)。这类错误与模型生成过程中的随机性或 beam search 无关。 至于后者,作者也将其归因于心算错误,并将用一整篇的后续 Part 2.2 论文,来针对性提高模型的心算能力,以最终提高解题正确率。该论文尚未发布,我们会在公众号中继续关注并报道。 图 5 下一个结论是,作者反驳了大模型缩放定律(scaling law)中强调的「唯大独尊」,即模型的表现只与参数数量相关,而与宽度或深度无关。这一观点最早由 OpenAI 的缩放定律论文提出,并在后续几乎所有研究中得到遵循。 作者通过 iGSM 数据集进行了一个可控实验,如图 6 所示。通过对比更小更深的模型与更大更宽的模型,发现对于解决 iGSM 中的数学题,模型的深度显然比宽度更为重要。例如,一个 20 层、9 个 head 的模型,表现远好于 4 层、30 个 head 的模型,尽管后者有两倍的参数。 更进一步,作者发现对深度的依赖源于模型心算的复杂性。通过对模型不同深度的探针研究,作者发现,对于那些与问题较远的变量 A,心算 nece (A) 往往需要更多层数。具体来说,若变量 A 与问题变量的距离为 t,则需要进行 t 步心算才能知道 nece (A)=True。t 越大,模型所需的层数也越多,如图 6 所示。 作者强调,模型对深度的依赖无法通过思维链(Chain-of-Thought, CoT)来抵消。事实上,iGSM 中的数学题解已经尽可能地使用了 CoT,即所有计算都被拆解为一步一步。即便如此,模型仍需要通过心算来规划 CoT 的第一步该算什么 —— 这个心算过程可能依然需要多个步骤。这解释了模型对深度依赖的原因。 图 6 综上所述,与 99% 以上的研究 LLM 行为过程(behavior process)的论文不同,本文作者另辟蹊径,揭示了 LLM 在解决数学问题时的心理过程(mental process),为理解 LLM 的智能提供了新的视角。   文章最后作者指出,即便是 GPT-4,在 iGSM 数据集上也只能进行最多 10 步的推理。这表明,即使是当前最强的模型,利用了据称所有的互联网数据,仍无法精准地完成超过 10 步推理。这暗示现有大模型使用的预训练数据集(pretrain data)可能还有很大的改进空间。通过本文的方法,建立人工合成数据来增强模型的推理能力以及信息梳理能力,或许是一种新的可能。

Machine Unlearning 会是未来 LLM 的必需品吗?

—- 本周为您解读 ③ 个值得细品的 AI & Robotics 业内要事 —- 1. Machine Unlearning 会是未来 LLM 的必需品吗? 为什么需要关注 Machine Unlearning?LLM 做 Unlearning会更难吗?LLM 公司能用 Unlearning 解决数据纠纷吗?Machine Unlearning 现在存在哪些局限?… 2. AI 搜索想要颠覆传统搜索,必须迈过哪些坎儿? 「AI 搜索赛道」近期涌进了哪些关键玩家?谷歌占据的九成搜索引擎市场份额是否会受到影响?国内外 AI 大厂、创企都是如何做「AI + 搜索」应用的?三种不同的路线有哪些差异?AI 搜索对比传统搜索在技术上有何不同?… 3. ICML 2024 透露了哪些技术趋势? ICML 2024 与往年有何区别?ICML 今年的热度如何?ICML 今年论文热词有哪些?今年哪些研究领域备受关注?哪些 AI 研究者今年最为活跃?大会获奖论文有哪些?… 日期:8 月 2 日 事件:在人工智能疾速发展,LLM 应用开始被广泛应用的当下,全球各国政府对 AI 治理投入了越来越多的精力。在近期多国政府出台的 AI 治理法案中,政府对数据安全、伦理、隐私保护,以及 AI 技术与版权、用户权益等方面的约束条款愈发清晰。在此趋势下,可以用于保护用户隐私数据的 Machine Unlearning 技术也在引起越来越多的关注。 为什么需要关注 Unlearning?[1] 1、在过去的十年中,数据量的大幅增加和硬件性能的快速提升推动了机器学习技术的快速发展。伴随近几年 LLM 模型的发展则进一步带来了对各类数据的需求和消耗。 2、伴随人工智能技术所需的数据量不断增加,许多国家最近立法实施「被遗忘的权利(Right to Forgotten)」。 ① 」被遗忘的权利「中显著的例子是欧盟的通用数据保护条例(GDPR)、加拿大的个人信息保护与电子文件法(PIPEDA)隐私立法和美国的加州消费者隐私法案(CCPA)。 ② 根据这些法律,公司必须采取合理措施保证在请求时删除个人数据。 ③ 截至近期,联合国即将进入执行的《人工智能法案》和美国多个州政府最近的立法行动也对人工智能在用户隐私、版权等方面的提出规范。 4、在此趋势下,Machine Unlearning 技术受到越来越多的关注。 ① 由于企业会利用用户数据训练模型。当用户行使「被遗忘的权利」,要求公司停止使用其数据,如果每次都要重新训练模型以响应用户的要求,将对企业造成巨大的开销和损失。 ② 从技术层面看,Machine Unlearning 领域的研究不仅限于隐私保护,还包括分析不同数据对模型收敛时所贡献的梯度。这种分析有助于实现更精准的去学习,同时也能增强模型对噪声数据的检测能力(Noisy Data Detection)。 LLM 要如何用 Unlearning 进行数字遗忘? 罗维拉-伊-维尔吉利大学、CYBERCAT 和华为等机构的研究者在综述《Digital Forgetting in Large Language Models: A Survey of Unlearning Methods》讨论了在 LLM 中的数字遗忘问题,并梳理了 LLM 中所涉及的 Unlearning 方法进行梳理和对比。这些方法与广义 Machine Unlearning 的方法既有交叉,也有区别。 1、该工作围绕自 2022 年 11 月 ChatGPT 发布以来,LLM 的广泛应用和引发的问题,以数字遗忘为核心解决方案,阐述了包含 Machine Unlearning 在解决 LLM 对市场、隐私、版权等方面的影响。 ① 该工作指出,LLM 的普及引发了有关模型与社会价值观和法治的一致性许多问题。 ② 这些问题包括各类 LLM 对劳动力市场的影响、对个人隐私权的影响、对版权法的影响、对加剧偏见和歧视的影响,以及可能生成有害内容,包括可能被用来造成伤害的内容。 2、该工主要围绕数字遗忘技术展开讨论,其目标是给定一个具有不期望知识或行为的模型,经过数字遗忘处理后获得一个新模型,在该模型中不再存在检测到的问题。 ② 有效的数字遗忘机制必须满足潜在冲突的要求包含:遗忘的有效性,即新模型遗忘不期望知识/行为的效果(无论是通过正式保证还是通过经验评估);模型在期望任务上的保留性能;以及遗忘过程的时效性和可扩展性。 3、该工作讨论了 LLM 的背景,描述了数字遗忘的动机、类型和期望属性,并介绍了 LLMs 中数字遗忘的方法,其中 Unlearning 的方法盘点核心。 4、该工作将适用于 LLM 的 Unlearning 方法分为四个大类,分别是全局权重修改、局部权重修改、架构修改和输入/输出修改方法。 ① 全局权重修改(Global Weight Modification)指修改模型的所有参数以实现遗忘,其代表性方法包含数据分片(Data sharding)、梯度上升(Gradient ascent)、知识蒸馏(KD)、Generic alternatives 和强化学习。 ② 局部权重修改(Local Weight Modification)指今修改模型中与遗忘目标相关的特定参数,其代表性方法为局部重训练(local retraining)、任务向量调整(task vector)和直接修改(Direct modification) ③ 架构修改(Architectur Modification)指在模型结构中添加新的层或应用线性变换,其代表性方法涉及额外的课学习层和线性变换。 ④ 输入/输出修改(Input/output Modification)指在 LLM 的输入或输出层面上进行修改,但不改变模型内部参数,其代表性方法包含输入操纵和信息检索。 5、研究者对适用于 LLM 的 Unlearning 方法展开了一系列评估,包括所使用的数据集、模型和度量标准。 ① 其分析的度量标准含三方面:模型是否有效地遗忘了目标知识;模型是否保留了其余的能力;遗忘过程的计算成本。 表 :LLM Unlearning 方法对比,L、M 和 H 分别表示低、中和高,Sgnf 表示极高。 LLM 中的 Unlearning 方法还有哪些难题亟待解决? Machine Unlearning 作为一项新技术,在人工智能与大模型领域正在逐渐收到重视。然而,大多数现有方法仍存在不同层面的局限,而仍在发展中的 LLM 的部分特性则为 Machine Unlearning 带来了更多挑战。在。2023 年 10 月发布的综述《Large Language Model Unlearning》、2024 年的综述《《Digital Forgetting in Large Language Models: A Survey of Unlearning Methods》以及近期的工作中均指出了 Unlearning 方法当前面临的问题。 1、在 2023 年 10 月发布的综述《Large Language Model Unlearning》中,研究者重点关注了如何在 LLM 中进行 Unlearning。对比传统的分类模型,Unlearning 在 LLM 中面临着一些不同的挑战[7] : ① LLMs 的输出空间远大于标签类别,其带来的可能的结果数量远超传统分类模型。 ② LLMs 的规模巨大,任何昂贵的 Unlearning 方法在 LLMs 上都不切实际。 ③ LLMs 的训练语料库庞大且通常无法访问,难以获取训练数据的真实模型和行为,使得评估也变得困难。 ④ 现有的 Unlearning 方法大多几种于分类模型上,但它们在计算成本和适用性的局限性使其无法直接应用于 LLMs。即便是流行的 RLHF 业存在极大的资源消耗,需要收集大量高质量的人类编写的样本。 2、《数字遗忘》的研究者指出,LLM 中,Machine Unlearning 是一个新的热点,但尚未成熟的研究领域。[6] ① 现有的许多 Unlearning 方法计算成本过高。其中,数据分片和梯度上升等涉及全局权重修改的方法需要大量的计算资源,这种 Unlearning 方式这不仅延长了遗忘过程的时间,还增加了实现遗忘所需的硬件成本。 ② 由于在训练和推理过程中,模型需要占用大量的内存,LLM 尤为明显。因此,的 Unlearning 方法在处理大规模模型时可能会遇到内存限制。 ③ 现有的 Unlearning 方法往往无法完全删除模型中的不期望知识。一些方法可能只是减少了这些知识的影响,而不是完全消除。这可能导致模型在某些情况下仍然表现出不期望的行为。 ④ 泛化能力不足:一些 Unlearning 方法在处理特定任务或领域时表现良好,但在其他任务或领域上效果不佳。这意味着这些方法可能缺乏足够的泛化能力,无法在所有情况下都有效。 ⑤ 某些 Unlearning 方法可能只适用于特定的数据类型或模型架构。同样的,一些 Unlearning 方法在处理特定任务或领域时表现良好,但在其他任务或领域上效果不佳。 ⑥ 由于 LLM 的输出空间巨大,评估 Unlearning 方法的成功与否非常困难。现有的评估指标和方法可能无法充分捕捉到 Unlearning 方法的实际效果。 3、华盛顿大学、普林斯顿大学和南加州大学等机构的研究者在近期发布的《MUSE》论文中提出了面向 LLM 中 Unlearning 方法的综合评估基准。他们评估发现绝大多数 Unlearning 算法会降低模型的一般效用,且不能持续地适应连续的遗忘请求或大规模内容删除。[8]

LLM可解释性的未来希望?稀疏自编码器是如何工作的,这里有一份直观说明

简而言之:矩阵 → ReLU 激活 → 矩阵 在解释机器学习模型方面,稀疏自编码器(SAE)是一种越来越常用的工具(虽然 SAE 在 1997 年左右就已经问世了)。 机器学习模型和 LLM 正变得越来越强大、越来越有用,但它们仍旧是黑箱,我们并不理解它们完成任务的方式。理解它们的工作方式应当大有助益。 SAE 可帮助我们将模型的计算分解成可以理解的组件。近日,LLM 可解释性研究者 Adam Karvonen 发布了一篇博客文章,直观地解释了 SAE 的工作方式。 可解释性的难题 神经网络最自然的组件是各个神经元。不幸的是,单个神经元并不能便捷地与单个概念相对应,比如学术引用、英语对话、HTTP 请求和韩语文本。在神经网络中,概念是通过神经元的组合表示的,这被称为叠加(superposition)。 之所以会这样,是因为世界上很多变量天然就是稀疏的。 举个例子,某位名人的出生地可能出现在不到十亿分之一的训练 token 中,但现代 LLM 依然能学到这一事实以及有关这个世界的大量其它知识。训练数据中单个事实和概念的数量多于模型中神经元的数量,这可能就是叠加出现的原因。 近段时间,稀疏自编码器(SAE)技术越来越常被用于将神经网络分解成可理解的组件。SAE 的设计灵感来自神经科学领域的稀疏编码假设。现在,SAE 已成为解读人工神经网络方面最有潜力的工具之一。SAE 与标准自编码器类似。 常规自编码器是一种用于压缩并重建输入数据的神经网络。 举个例子,如果输入是一个 100 维的向量(包含 100 个数值的列表);自编码器首先会让该输入通过一个编码器层,让其被压缩成一个 50 维的向量,然后将这个压缩后的编码表示馈送给解码器,得到 100 维的输出向量。其重建过程通常并不完美,因为压缩过程会让重建任务变得非常困难。 一个标准自编码器的示意图,其有 1×4 的输入向量、1×2 的中间状态向量和 1×4 的输出向量。单元格的颜色表示激活值。输出是输入的不完美重建结果。 解释稀疏自编码器 稀疏自编码器的工作方式 稀疏自编码器会将输入向量转换成中间向量,该中间向量的维度可能高于、等于或低于输入的维度。在用于 LLM 时,中间向量的维度通常高于输入。在这种情况下,如果不加额外的约束条件,那么该任务就很简单,SAE 可以使用单位矩阵来完美地重建出输入,不会出现任何意料之外的东西。但我们会添加约束条件,其中之一是为训练损失添加稀疏度惩罚,这会促使 SAE 创建稀疏的中间向量。 举个例子,我们可以将 100 维的输入扩展成 200 维的已编码表征向量,并且我们可以训练 SAE 使其在已编码表征中仅有大约 20 个非零元素。 稀疏自编码器示意图。请注意,中间激活是稀疏的,仅有 2 个非零值。 我们将 SAE 用于神经网络内的中间激活,而神经网络可能包含许多层。在前向通过过程中,每一层中和每一层之间都有中间激活。 举个例子,GPT-3 有 96 层。在前向通过过程中,输入中的每个 token 都有一个 12,288 维向量(一个包含 12,288 个数值的列表)。此向量会累积模型在每一层处理时用于预测下一 token 的所有信息,但它并不透明,让人难以理解其中究竟包含什么信息。 我们可以使用 SAE 来理解这种中间激活。SAE 基本上就是「矩阵 → ReLU 激活 → 矩阵」。 举个例子,如果 GPT-3 SAE 的扩展因子为 4,其输入激活有 12,288 维,则其 SAE 编码的表征有 49,512 维(12,288 x 4)。第一个矩阵是形状为 (12,288, 49,512) 的编码器矩阵,第二个矩阵是形状为 (49,512, 12,288) 的解码器矩阵。通过让 GPT 的激活与编码器相乘并使用 ReLU,可以得到 49,512 维的 SAE 编码的稀疏表征,因为 SAE 的损失函数会促使实现稀疏性。 通常来说,我们的目标让 SAE 的表征中非零值的数量少于 100 个。通过将 SAE 的表征与解码器相乘,可得到一个 12,288 维的重建的模型激活。这个重建结果并不能与原始的 GPT 激活完美匹配,因为稀疏性约束条件会让完美匹配难以实现。 一般来说,一个 SAE 仅用于模型中的一个位置举个例子,我们可以在 26 和 27 层之间的中间激活上训练一个 SAE。为了分析 GPT-3 的全部 96 层的输出中包含的信息,可以训练 96 个分立的 SAE—— 每层的输出都有一个。如果我们也想分析每一层内各种不同的中间激活,那就需要数百个 SAE。为了获取这些 SAE 的训练数据,需要向这个 GPT 模型输入大量不同的文本,然后收集每个选定位置的中间激活。 下面提供了一个 SAE 的 PyTorch 参考实现。其中的变量带有形状注释,这个点子来自 Noam Shazeer,参见:https://medium.com/@NoamShazeer/shape-suffixes-good-coding-style-f836e72e24fd 。请注意,为了尽可能地提升性能,不同的 SAE 实现往往会有不同的偏置项、归一化方案或初始化方案。最常见的一种附加项是某种对解码器向量范数的约束。更多细节请访问以下实现: OpenAI:https://github.com/openai/sparse_autoencoder/blob/main/sparse_autoencoder/model.py#L16 SAELens:https://github.com/jbloomAus/SAELens/blob/main/sae_lens/sae.py#L97 dictionary_learning:https://github.com/saprmarks/dictionary_learning/blob/main/dictionary.py#L30 import torchimport torch.nn as nn# D = d_model, F = dictionary_size# e.g. if d_model = 12288 and dictionary_size = 49152# then model_activations_D.shape = (12288,) and encoder_DF.weight.shape = (12288, 49152)class SparseAutoEncoder (nn.Module): """ A one-layer autoencoder. """ def __init__(self, activation_dim: int, dict_size: int): super ().__init__() self.activation_dim = activation_dim self.dict_size = dict_size self.encoder_DF = nn.Linear (activation_dim, dict_size, bias=True) self.decoder_FD = nn.Linear (dict_size, activation_dim, bias=True) def encode (self, model_activations_D: torch.Tensor) -> torch.Tensor: return nn.ReLU ()(self.encoder_DF (model_activations_D)) def decode (self, encoded_representation_F: torch.Tensor) -> torch.Tensor: return self.decoder_FD (encoded_representation_F) def forward_pass (self, model_activations_D: torch.Tensor) -> tuple [torch.Tensor, torch.Tensor]: encoded_representation_F = self.encode (model_activations_D) reconstructed_model_activations_D = self.decode (encoded_representation_F) return reconstructed_model_activations_D, encoded_representation_F 标准自编码器的损失函数基于输入重建结果的准确度。为了引入稀疏性,最直接的方法是向 SAE 的损失函数添加一个稀疏度惩罚项。对于这个惩罚项,最常见的计算方式是取这个 SAE 的已编码表征(而非 SAE 权重)的 L1 损失并将其乘以一个 L1 系数。这个 L1 系数是 SAE 训练中的一个关键超参数,因为它可确定实现稀疏度与维持重建准确度之间的权衡。 请注意,这里并没有针对可解释性进行优化。相反,可解释的 SAE 特征是优化稀疏度和重建的一个附带效果。下面是一个参考损失函数。 # B = batch size, D = d_model, F = dictionary_sizedef calculate_loss (autoencoder: SparseAutoEncoder, model_activations_BD: torch.Tensor, l1_coeffient: float) -> torch.Tensor: reconstructed_model_activations_BD, encoded_representation_BF = autoencoder.forward_pass (model_activations_BD) reconstruction_error_BD = (reconstructed_model_activations_BD - model_activations_BD).pow (2) reconstruction_error_B = einops.reduce (reconstruction_error_BD, 'B D -> B', 'sum') l2_loss = reconstruction_error_B.mean () l1_loss = l1_coefficient * encoded_representation_BF.sum () loss = l2_loss + l1_loss return loss   稀疏自编码器的前向通过示意图。 这是稀疏自编码器的单次前向通过过程。首先是 1×4 大小的模型向量。然后将其乘以一个 4×8 的编码器矩阵,得到一个 1×8 的已编码向量,然后应用 ReLU 将负值变成零。这个编码后的向量就是稀疏的。之后,再让其乘以一个 8×4 的解码器矩阵,得到一个 1×4 的不完美重建的模型激活。 假想的 SAE 特征演示 理想情况下,SAE 表征中的每个有效数值都对应于某个可理解的组件。 这里假设一个案例进行说明。假设一个 12,288 维向量 [1.5, 0.2, -1.2, …] 在 GPT-3 看来是表示「Golden Retriever」(金毛犬)。SAE 是一个形状为 (49,512, 12,288) 的矩阵,但我们也可以将其看作是 49,512 个向量的集合,其中每个向量的形状都是 (1, 12,288)。如果该 SAE 解码器的 317 向量学习到了与 GPT-3 那一样的「Golden Retriever」概念,那么该解码器向量大致也等于 [1.5, 0.2, -1.2, …]。 无论何时 SAE 的激活的 317 元素是非零的,那么对应于「Golden Retriever」的向量(并根据 317 元素的幅度)会被添加到重建激活中。用机械可解释性的术语来说,这可以简洁地描述为「解码器向量对应于残差流空间中特征的线性表征」。 也可以说有 49,512 维的已编码表征的 SAE 有 49,512 个特征。特征由对应的编码器和解码器向量构成。编码器向量的作用是检测模型的内部概念,同时最小化其它概念的干扰,尽管解码器向量的作用是表示「真实的」特征方向。研究者的实验发现,每个特征的编码器和解码器特征是不一样的,并且余弦相似度的中位数为 0.5。在下图中,三个红框对应于单个特征。 稀疏自编码器示意图,其中三个红框对应于 SAE 特征 1,绿框对应于特征 4。每个特征都有一个 1×4 的编码器向量、1×1 的特征激活和 1×4 的解码器向量。重建的激活的构建仅使用了来自 SAE 特征 1 和 4 的解码器向量。如果红框表示「红颜色」,绿框表示「球」,那么该模型可能表示「红球」。 那么我们该如何得知假设的特征 317 表示什么呢?目前而言,人们的实践方法是寻找能最大程度激活特征并对它们的可解释性给出直觉反应的输入。能让每个特征激活的输入通常是可解释的。 举个例子,Anthropic 在 Claude Sonnet 上训练了 SAE,结果发现:与金门大桥、神经科学和热门旅游景点相关的文本和图像会激活不同的 SAE 特征。其它一些特征会被并不显而易见的概念激活,比如在 Pythia 上训练的一个 SAE 的一个特征会被这样的概念激活,即「用于修饰句子主语的关系从句或介词短语的最终 token」。 由于 SAE 解码器向量的形状与 LLM 的中间激活一样,因此可简单地通过将解码器向量加入到模型激活来执行因果干预。通过让该解码器向量乘以一个扩展因子,可以调整这种干预的强度。当 Anthropic 研究者将「金门大桥」SAE 解码器向量添加到 Claude 的激活时,Claude 会被迫在每个响应中都提及「金门大桥」。 下面是使用假设的特征 317 得到的因果干预的参考实现。类似于「金门大桥」Claude,这种非常简单的干预会迫使 GPT-3 模型在每个响应中都提及「金毛犬」。 def perform_intervention (model_activations_D: torch.Tensor, decoder_FD: torch.Tensor, scale: float) -> torch.Tensor: intervention_vector_D = decoder_FD [317, :] scaled_intervention_vector_D = intervention_vector_D * scale modified_model_activations_D = model_activations_D + scaled_intervention_vector_D return modified_model_activations_D 稀疏自编码器的评估难题 使用 SAE 的一大主要难题是评估。我们可以训练稀疏自编码器来解释语言模型,但我们没有自然语言表示的可度量的底层 ground truth。目前而言,评估都很主观,基本也就是「我们研究一系列特征的激活输入,然后凭直觉阐述这些特征的可解释性。」这是可解释性领域的主要限制。 研究者已经发现了一些似乎与特征可解释性相对应的常见代理指标。最常用的是 L0 和 Loss Recovered。L0 是 SAE 的已编码中间表征中非零元素的平均数量。Loss Recovered 是使用重建的激活替换 GPT 的原始激活,并测量不完美重建结果的额外损失。这两个指标通常需要权衡考虑,因为 SAE 可能会为了提升稀疏性而选择一个会导致重建准确度下降的解。 在比较 SAE 时,一种常用方法是绘制这两个变量的图表,然后检查它们之间的权衡。为了实现更好的权衡,许多新的 SAE 方法(如 DeepMind 的 Gated SAE 和 OpenAI 的 TopK SAE)对稀疏度惩罚做了修改。下图来自 DeepMind 的 Gated SAE 论文。Gated SAE 由红线表示,位于图中左上方,这表明其在这种权衡上表现更好。 Gated SAE L0 与 Loss Recovered SAE 的度量存在多个难度层级。L0 和 Loss Recovered 是两个代理指标。但是,在训练时我们并不会使用它们,因为 L0 不可微分,而在 SAE 训练期间计算 Loss Recovered 的计算成本非常高。相反,我们的训练损失由一个 L1 惩罚项和重建内部激活的准确度决定,而非其对下游损失的影响。 训练损失函数并不与代理指标直接对应,并且代理指标只是对特征可解释性的主观评估的代理。由于我们的真正目标是「了解模型的工作方式」,主观可解释性评估只是代理,因此还会有另一层不匹配。LLM 中的一些重要概念可能并不容易解释,而且我们可能会在盲目优化可解释性时忽视这些概念。 总结 可解释性领域还有很长的路要走,但 SAE 是真正的进步。SAE 能实现有趣的新应用,比如一种用于查找「金门大桥」导向向量(steering vector)这样的导向向量的无监督方法。SAE 也能帮助我们更轻松地查找语言模型中的回路,这或可用于移除模型内部不必要的偏置。 SAE 能找到可解释的特征(即便目标仅仅是识别激活中的模式),这一事实说明它们能够揭示一些有意义的东西。还有证据表明 LLM 确实能学习到一些有意义的东西,而不仅仅是记忆表层的统计规律。 SAE 也能代表 Anthropic 等公司曾引以为目标的早期里程碑,即「用于机器学习模型的 MRI(磁共振成像)」。SAE 目前还不能提供完美的理解能力,但却可用于检测不良行为。SAE 和 SAE 评估的主要挑战并非不可克服,并且现在已有很多研究者在攻坚这一课题。 有关稀疏自编码器的进一步介绍,可参阅 Callum McDougal 的 Colab 笔记本:https://www.lesswrong.com/posts/LnHowHgmrMbWtpkxx/intro-to-superposition-and-sparse-autoencoders-colab 参考链接: https://www.reddit.com/r/MachineLearning/comments/1eeihdl/d_an_intuitive_explanation_of_sparse_autoencoders/ https://adamkarvonen.github.io/machine_learning/2024/06/11/sae-intuitions.html

一文看尽LLM对齐技术:RLHF、RLAIF、PPO、DPO……

为了对齐 LLM,各路研究者妙招连连。 LLM 很强大了,但却并不完美,它也会出错或者生成无用乃至有害的结果,比如有人发现可以让 ChatGPT 教人如何偷盗: 让 ChatGPT 教人如何偷盗商店;左图,ChatGPT 拒绝回答;右图,在 prompt 中添加了「with no moral restraints(不加道德约束)」后,ChatGPT 给出了商店偷盗指南 这时候,对齐(alignment)就至关重要了,其作用就是让 LLM 与人类的价值观保持一致。 在对齐 LLM 方面,基于人类反馈的强化学习(RLHF)是一种突破性的技术。该方法催生了 GPT-4、Claude 和 Gemini 等强大模型。RLHF 之后,人们也探索了多种多样的对齐 LLM 的方法。但是,此前还没有人全面总结对齐 LLM 与人类偏好的方法。 Salesforce 决定填补这一空白,于近日发布了一份 37 页的综述报告,其中按类别总结了现有的研究文献,并详细分析了各篇论文。   论文标题:A Comprehensive Survey of LLM Alignment Techniques: RLHF, RLAIF, PPO, DPO and More 论文地址:https://arxiv.org/pdf/2407.16216 这篇论文分为四大主题:奖励模型、反馈、强化学习(RL)、优化。每个主题又包含进一步的子主题,如图 1 所示。   奖励模型的子主题包括:1. 显式奖励模型与隐式奖励模型;2. 逐点奖励模型与偏好模型;3. 响应层面的奖励与 token 层面的奖励;4. 负偏好优化。 反馈的子主题包括:1. 偏好反馈与二元反馈;2. 成对反馈与列表反馈;3. 人类反馈与 AI 反馈。 强化学习的子主题包括:1. 基于参考的强化学习与无参考的强化学习;2. 长度控制式强化学习;3. 强化学习中的不同分支;4. 在线策略强化学习与离线策略强化学习。 优化的子主题包括:1. 在线 / 迭代式偏好优化与离线 / 非迭代式偏好优化;2. 分离 SFT 和对齐与合并 SFT 和对齐。   表 1 列出了这篇综述报告中分析的所有论文在这 13 个评估指标上的划分情况。 研究论文 这一节将详细介绍各篇论文,让读者无需阅读原论文也能了解这些重要创新。机器之心将简单梳理各个研究方向并列出代表性论文。 1. RLHF/PPO LLM 的预训练要用到大量来自不同来源的语料库,而这本身就无法确保这些数据集的质量。此外,LLM 的主要目标是预测下一个 token,这个目标与「有用且安全地遵从用户指令」的目标并不一致。因此,LLM 可能会输出不真实、有害或对用户无用的内容。本质上讲,这些模型并未与用户意图对齐。RLHF/PPO 的主要目标是在各种任务上对齐语言模型与用户意图,其做法是使用人类反馈来微调模型。有关这个主题的研究有很多。 InstructGPT InstructGPT 来自 OpenAI,这是训练 ChatGPT 和 GPT-4 等模型的基础,参阅《GPT-4 技术报告》以及机器之心的报道《GPT-4 震撼发布:多模态大模型,直接升级 ChatGPT、必应,开放 API,游戏终结了?》《跟李沐学 ChatGPT 背后技术:67 分钟读透 InstructGPT 论文》。 通过纳入人类偏好,评估 LLM 生成的响应的难题得到了解决。BLEU、ROUGE 和 BERTScore 等用于评估 LLM 的传统评估指标无法保证与人类偏好的一致性。为了解决这个问题,研究者直接将人类偏好整合进了 LLM 以增强其性能。这个过程通常涉及两个主要步骤:奖励模型学习和强化学习策略训练。 在奖励模型学习阶段,会使用 prompt 和配对的响应训练一个显式的逐点奖励函数。 之后,开始强化学习策略训练阶段;在这个阶段,LLM 和预训练奖励模型分别作为一个强化学习框架中的智能体和环境。 为了训练 InstructGPT,要用到三个数据集:1.SFT 数据集:包含用于训练 SFT 模型的标注者演示。2.RM(奖励模型)数据集:由人类标注者对模型输出的排名构成,用于训练奖励模型。3.PPO 数据集:由用作 RLHF 微调输入的 prompt 构成。 训练后的 InstructGPT 会在三个方面得到评估:有用性、可信度、有害性。 从结果上看,人类评估表明「相比于 175B 的 GPT-3,人们 更偏好 1.3B 参数版本的 InstructGPT 模型的输出,尽管后者的参数量少 100 多倍。」值得注意的是,InstructGPT 在有用性和毒性任务上的表现均优于 GPT-3,这于对齐而言至关重要。 Anthropic 的 RLHF Anthropic 也研究过同一主题,论文为《Training a helpful and harmless assistant with reinforcement learning from human feedback》。 OpenAI 发现 RLHF 有助于对齐,但也可能导致模型在某些 NLP 基准上的性能下降,这个现象被称为「对齐税(alignment tax)」。其开发的 InstructGPT 模型有 1.3B 参数。相反,Anthropic 的研究者评估了大小在 13M 到 52B 之间的 7 种不同模型,这些模型的大小按 4 倍的几何级数增长。 他们得出结论说,对较小的模型来说,对齐会产生「税」,但对较大模型来说,对齐只有好处,尤其是参数量在 13B 到 52B 之间的模型。 考虑到对齐的这种优势,他们还实验了用编程技术数据集来提升 LLM 的能力。OpenAI 的 RLHF 方法包含 PPO 和 PPO-ptx,其中 PPO-ptx 的设计目标就是为了降低在 NLP 基准上的对齐税。而 Anthropic 的 RLHF 研究发现,只要模型够大,PPO 本身就能在 NLP 下游任务上带来对齐的好处。他们还确定了强化学习策略训练中 KL 散度的最优参数为 β = 0.001。 在线 / 迭代式 RLHF 传统上,对齐 LLM 的 RLHF 技术都是离线方法。但这类方法有些缺点,比如所得结果难以应对分布外数据。 为此,需要对 LLM 进行持续的微调,进行迭代式 / 在线学习,即使用中间策略为 prompt 生成响应,再使用预言机(oracle)为这样的成对数据给出偏好反馈,再将这些反馈馈送给策略。在实践中,迭代式学习分为两个部分:偏好预言机学习和迭代式策略优化。参阅论文《RLHF workflow: From reward modeling to online RLHF》。 2. RLAIF 获取人类偏好数据集的成本不低,因此基于人工智能反馈的强化学习(RLAIF)诞生了。此外,随着 LLM 的能力不断进步,所能收集到的 AI 偏好数据集的质量也不断提高,由此可提升 LLM 的对齐效果。 Anthropic 的 RLAIF Anthropic 基于 RLHF 的基础研究工作,提出了一种名为 RLAIF 的全新方法。参阅论文《Constitutional ai: Harmlessness from ai feedback》。 该方法主要包含两个阶段:1. 通过 Critiques(批评)和 Revisions(修订)进行监督学习,这由一个章程引导。2. RLAIF。 谷歌的 RLAIF 基于 Anthropic 的 RLAIF 研究成果,谷歌一个研究团队认为之前的研究无法直接比较人类反馈与 AI 反馈的效果,值得进一步研究。在收集 AI 反馈的过程中,要创建一个结构化的 prompt,其构成包括:导言、少样本示例(可选)、要标注的样本、结尾。 为了生成 AI 反馈,需要执行一个两步式评估:首先,使用指令中的 4 个组件加上 CoT,让 LLM 生成响应。在下一步中,这个 LLM 响应再附带上「preferred summary=」这样的结尾被发送回 LLM,从而生成「summary 1=0.6, summary 2=0.4」这样的偏好概率。为了减少位置偏差,需要交替放置这两个响应的序列,并计算其平均分数。 RLAIF 过程采用了两个策略:1.「蒸馏 RLAIF」,其遵循传统的 RLHF 方法,即使用偏好训练一个奖励模型,然后再将其用于训练 LLM 策略;2. 「直接 RLAIF」,其直接将 LLM 反馈用作 prompt 来输出评估分数,再将该分数用作强化学习策略训练的信号。 最后,其评估过程会使用三个关键指标:1.AI – 标注者对齐度:AI 与人类标注者的一致程度。2. 胜率:人类标注者比较两个候选项并选择其中某一个的可能性。3. 无害率:人类评估者认为无害的响应的占比。 更多详情请参阅论文《RLAIF: Scaling reinforcement learning from human feedback with AI feedback》。 直接人类偏好优化 传统 RLHF 方法通常涉及到优化源自人类偏好的奖励函数。该方法虽有效,但也可能带来一些难题,比如增大计算复杂度以及在估计和优化奖励时需要考虑偏置 – 方差权衡。参阅论文《High-dimensional continuous control using generalized advantage estimation》。 近期有研究探索了其它一些旨在根据人类偏好(无需依赖某个标量的奖励信号)来直接优化 LLM 策略的方法。 这些方法的目标是通过更直接地使用偏好数据来简化对齐流程、降低计算开销以及实现更稳健的优化。通过将该问题描述为一个偏好优化问题,而不是奖励估计和最大化问题,这些方法能提供一种将语言模型与人类判断对齐的不同视角: SliC-HF,使用人类反馈进行序列似然校准,参阅论文《SliC-HF: Sequence likelihood calibration with human feedback》。 RSO,拒绝采样优化,参阅论文《Statistical rejection sampling improves preference optimization》。 DPO,直接偏好优化,参阅论文《Direct preference optimization: Your language model is secretly a reward model》。 DPOP,DPO-positive,参阅论文《Smaug: Fixing failure modes of preference optimisation with DPO-positive》。 β-DPO,参阅论文《β-DPO: Direct preference optimization with dynamic β》。 IPO,身份偏好优化,参阅论文《A general theoretical paradigm to understand learning from human preferences》。 sDPO,逐步 DPO,参阅论文《sDPO: Don’t use your data all at once》。 GPO,广义偏好优化,参阅论文《Generalized preference optimization: A unified approach to offline alignment》。 token 级 DPO 使用 DPO 时,奖励会被一起分配给 prompt 和响应。相反,使用 MDP 时,奖励会被分配给各个动作。后续的两篇论文在 token 层面阐述了 DPO 并将其应用扩展到了 token 级的分析。 DPO 可以执行 token 级信用分配的研究,参阅论文《From r to Q∗: Your language model is secretly a Q-function》,报道《这就是 OpenAI 神秘的 Q*?斯坦福:语言模型就是 Q 函数》。 TDPO,token 级 DPO,参阅论文《Token-level direct preference optimization》。 迭代式 / 在线 DPO 使用 DPO 时,会使用所有可用的偏好数据集来对齐 LLM。为了持续提升 LLM,应当实现迭代式 / 在线 DPO。这就引出了一个有趣的问题:如何高效地收集新的偏好数据集。下面两篇论文深入探讨了这一主题。 自我奖励式语言模型,参阅论文《Self-rewarding language models》。 CRINGE,参阅论文《The cringe loss: Learning what language not to model》。 二元反馈 事实证明,收集偏好反馈比收集二元反馈(比如点赞或点踩)的难度大,因此后者可促进对齐过程的扩展。KTO 和 DRO 这两项研究关注的便是使用二元反馈来对齐 LLM。 KTO,Kahneman-Tversky 优化,参阅论文《KTO: Model alignment as prospect theoretic optimization》。 DRO,直接奖励优化,参阅论文《Offline regularised reinforcement learning for large language models alignment》。 融合 SFT 和对齐 之前的研究主要还是按顺序执行 SFT 和对齐,但事实证明这种方法很费力,并会导致灾难性遗忘。后续的研究有两个方向:一是将这两个过程整合成单一步骤;二是并行地微调两个模型,最终再进行融合。 ORPO,比值比偏好优化,参阅论文《ORPO: Monolithic preference optimization without reference model》。 PAFT,并行微调,参阅论文《PAFT: A parallel training paradigm for effective llm fine-tuning》。 长度控制式 DPO 和无参考 DPO 之前有研究表明,LLM 的输出往往过于冗长。为了解决这个问题,R-DPO 和 SimPO 的关注重心是在不影响生成性能的前提下实现对响应长度的控制。 此外,DPO 必需参考策略来确保已对齐模型不会与参考模型有太大偏差。相较之下,SimPO 和 RLOO 提出了一些方法,可以在不影响 LLM 效果的情况下消除对参考模型的需求。 R-DPO,正则化 DPO,参阅论文《Disentangling length from quality in direct preference optimization》。 SimPO,简单偏好优化,参阅论文《SimPO: Simple preference optimization with a reference-free reward》,报道《全面超越 DPO:陈丹琦团队提出简单偏好优化 SimPO,还炼出最强 8B 开源模型》。 RLOO,REINFORCE Leave-One-Out,参阅论文《Back to basics: Revisiting reinforce style optimization for learning from human feedback in LLMs》。 逐列表的偏好优化 之前在 PPO 和 DPO 方面的研究关注的是成对偏好,而 RLHF 方面的研究则是收集逐列表的偏好来加速数据收集过程,之后再将它们转换成成对偏好。尽管如此,为了提升 LLM 的性能,直接使用逐列表的数据集来执行偏好优化是可行的。以下三篇论文专门讨论了这种方法。 LiPO,逐列表偏好优化,参阅论文《LIPO: Listwise preference optimization through learning-to-rank》。 RRHF,参阅论文《RRHF: Rank responses to align language models with human feedback without tears》。 PRO,偏好排名优化,参阅论文《Preference ranking optimization for human alignment》。 负偏好优化 这些研究有一个共同前提:当前这一代 LLM 已经在翻译和总结等任务上超越了人类性能。因此,可以将 LLM 的输出视为期望响应,而无需依靠将人类标注的数据视为偏好响应;这样做是有好处的。反过来,不期望得到的响应依然也可被用于对齐 LLM,这个过程就是所谓的负偏好优化(NPO)。 NN,否定负例方法,参阅论文《Negating negatives: Alignment without human positive samples via distributional dispreference optimization》。 NPO,负例偏好优化,参阅论文《Negative preference optimization: From catastrophic collapse to effective unlearning》。 CPO,对比偏好优化,参阅论文《Contrastive preference optimization: Pushing the boundaries of llm performance in machine translation》。 纳什学习 之前的研究通常是使用逐点奖励和 BT 模型来得到成对偏好。但是,这种方法比不上直接成对偏好建模并且无法解决成对偏好中的不一致问题。为了克服这些局限,一些研究提出了纳什学习方法。 根据人类反馈的纳什学习,参阅论文《Nash learning from human feedback》。 SPPO,自博弈偏好优化,参阅论文《A minimaximalist approach to reinforcement learning from human feedback》。 DNO,直接纳什优化,参阅论文《Direct nash optimization: Teaching language models to self-improve with general preferences》。 不同方法的比较   一些研究则是为了比较这些不同方法。这类研究可以阐释每种方法各自的优缺点。 评估 DPO 及其变体 论文《Insights into alignment: Evaluating dpo and its variants across multiple tasks》在推理、数学问题求解、可信度、问答和多任务理解等多种任务上全面评估了隐式奖励模型,即无强化学习算法,包括 DPO、KTO、IPO 和 CPO。这些评估涉及三个不同场景:1) 微调监督式微调(SFT)模型、2) 微调预训练模型、3) 微调指令模型。 该研究发现,在大多数基准上,KTO 比其它对齐方法更优。此外,研究表明,对齐并不会显著提升模型的推理和问答性能,但确实能大幅提升模型的数学问题求解能力。该研究还注意到了数据量的重要性,对齐方法在较小的数据子集上的性能最佳。此外,研究发现 KTO 和 CPO 能有效绕过 SFT 阶段,在不影响性能的前提下直接进入对齐阶段。相比之下,当绕过 SFT 阶段,直接进入对齐阶段时,DPO 和 IPO 会表现出明显的性能下降。 DPO 是比 PPO 更好的 LLM 对齐方法吗? 论文《Is DPO superior to PPO for LLM alignment? A comprehensive study》表明,DPO 可能存在固有局限,可能会产生有偏差的解答,并可能由于分布变化而导致性能下降, 他们发现,DPO 训练出的策略倾向于未曾见过的响应,尤其是分布外的样本。而迭代式 / 在线 DPO 则能缓解这个问题,其做法是广泛探索响应空间并不断更新参考模型。相较之下,RLHF/PPO 则是通过优势归一化、大批量大小以及对参考模型使用指数移动平均来解决这些挑战。最终,这些发现表明 PPO 优于迭代式 / 在线 DPO,而这又进一步优于标准 DPO。 更多详情可参阅机器之心专栏文章《ICML 2024 Oral | DPO 是否比 PPO 更适合 LLM,清华吴翼团队最新揭秘》。 未来方向 通过分析过往论文,该团队确定了一些有待进一步探索的研究问题。 用于对齐评估的一般任务 不同论文使用了不同的任务来评估这些方法的性能。但是,GSM8K 等一些任务更关注推理,可能并不适合用于评估对齐性能。相反,TruthfulQA 等任务或那些关注毒性的任务应当优先考虑,以评估已微调 LLM 的毒性。应当想办法将这些任务组合起来,创建一个用于评估对齐的统一排行榜。 将隐式奖励模型、逐列表偏好和纳什学习用于更大规模的语言模型 目前,使用隐式奖励模型的最大模型的参数量也不过 70B。如果能将这些方法扩展用于更大的模型,比如 GPT-4 和 Claude-3 大小的模型,那应该能帮助我们更好地理解它们与 RLHF/PPO 的相对效果。 类似地,逐列表偏好模型也值得进一步研究。使用 RLHF 时,要使用逐列表偏好收集偏好数据集,之后再将其转换成多对成对偏好数据。大规模应用逐列表偏好模型的潜在问题依然有待解决。 最后,纳什学习可以解决人类标注者之间的不一致问题。如果能将纳什学习模型集成到更大规模的 LLM 中,就可以证明其捕获人性复杂性的能力。 有关二元反馈的实验 KTO 和 DRO 都采用了「点赞」和「点踩」这样的二元反馈机制,而不是成对偏好。这些二元反馈来自偏好数据集,其中将期望响应标记成正例,将不期望响应标记成负例。我们还需要对现实的二元数据集进行进一步研究。此外,相比于偏好数据,二元数据集更容易收集,因此有望使用更大规模的二元反馈数据集来进行对齐。但是,二元反馈中的噪声可能比偏好数据集中的噪声更加明显,因此如何有效滤除有噪声数据也是一个非常有趣的研究方向。 实验研究有用的 AI 反馈 目前的 AI 反馈主要包括 RLAIF 中的无害反馈和迭代式 DPO 中的反馈排名。但是,使用 RLAIF 时,有用反馈依然是由人类标注者提供。这种方法是合理的,因为生成有用响应的难度比识别有害反馈明显大得多。一个有趣的未来研究方向是使用 LLM 来生成有用的反馈,由此让 LLM 可以自我提升。 加速纳什学习 纳什学习方法可以有效建模成对偏好并解决人类标注之间的不一致问题。但是,它必需多次迭代才能收敛到最优策略。尽管其作者没有明说对齐所需的时间,但可猜测其会比 DPO 等隐式奖励模型慢得多。因此,提升纳什学习过程的速度也是一个值得关注的研究方向。 迭代 / 在线学习的终止 在使用迭代 / 在线训练时,确定终止迭代的时间很关键。之前有研究发现,迭代式学习有时会降低 LLM 在某些任务上的性能,这可能是过拟合的迹象。但是,目前还没有研究者探索如何确定终止迭代的合理 epoch。 简化 SFT + 对齐 当前的方法通常是以一种连续方式实现 SFT 和对齐。但是,这种方法往往会导致灾难性遗忘,并让整个训练过程变得更加费力。PAFT 方法减轻灾难性遗忘的方式是先分别微调 SFT 和对齐然后再将它们融合到一起,但这也会提升复杂性。相较之下,ORPO 技术是同时整合这两个过程,但却会导致性能下降。那么,该如何有效地将 SFT 和对齐组合起来实现高性能同时又维持高效率呢?这还是一个有待解决的挑战。