1890美元,就能从头训练一个还不错的12亿参数扩散模型

只用1890美元、3700 万张图像,就能训练一个还不错的扩散模型。 现阶段,视觉生成模型擅长创建逼真的视觉内容,然而从头开始训练这些模型的成本和工作量仍然很高。比如 Stable Diffusion 2.1 花费了 200000 个 A100 GPU 小时。即使研究者使用最先进的方法,也需要在 8×H100 GPU 上训练一个多月的时间。 此外,训练大模型也对数据集提出了挑战,这些数据基本以亿为单位,同样给训练模型带来挑战。 高昂的训练成本和对数据集的要求为大规模扩散模型的开发造成了难以逾越的障碍。 现在,来自 Sony AI 等机构的研究者仅仅花了 1890 美元,就训练了一个不错的扩散模型, 具有 11.6 亿参数的稀疏 transformer。 论文地址:https://arxiv.org/pdf/2407.15811 论文标题:Stretching Each Dollar: Diffusion Training from Scratch on a Micro-Budget 项目(即将发布):https://github.com/SonyResearch/micro_diffusion 具体而言,在这项工作中,作者通过开发一种低成本端到端的 pipeline 用于文本到图像扩散模型,使得训练成本比 SOTA 模型降低了一个数量级还多,同时还不需要访问数十亿张训练图像或专有数据集。 作者考虑了基于视觉 transformer 的潜在扩散模型进行文本到图像生成,主要原因是这种方式设计简单,并且应用广泛。为了降低计算成本,作者利用了 transformer 计算开销与输入序列大小(即每张图像的 patch 数量)的强依赖关系。 本文的主要目标是在训练过程中减少 transformer 处理每张图像的有效 patch 数。通过在 transformer 的输入层随机掩蔽(mask)掉部分 token,可以轻松实现这一目标。 然而,现有的掩蔽方法无法在不大幅降低性能的情况下将掩蔽率扩展到 50% 以上,特别是在高掩蔽率下,很大一部分输入 patch 完全不会被扩散 transformer 观察到。 为了减轻掩蔽造成的性能大幅下降,作者提出了一种延迟掩蔽(deferred masking)策略,其中所有 patch 都由轻量级 patch 混合器(patch-mixer)进行预处理,然后再传输到扩散 transformer。Patch 混合器包含扩散 transformer 中参数数量的一小部分。 与 naive 掩蔽方法相比,在 patch mixing 处理之后进行掩蔽允许未掩蔽的 patch 保留有关整个图像的语义信息,并能够在非常高的掩蔽率下可靠地训练扩散 transformer,同时与现有的最先进掩蔽相比不会产生额外的计算成本。 作者还证明了在相同的计算预算下,延迟掩蔽策略比缩小模型规模(即减小模型大小)实现了更好的性能。最后,作者结合 Transformer 架构的最新进展,例如逐层缩放、使用 MoE 的稀疏 Transformer,以提高大规模训练的性能。 作者提出的低成本训练 pipeline 减少了实验开销。除了使用真实图像,作者还考虑在训练数据集中组合其他合成图像。组合数据集仅包含 3700 万张图像,比大多数现有的大型模型所需的数据量少得多。 在这个组合数据集上,作者以 1890 美元的成本训练了一个 11.6 亿参数的稀疏 transformer,并在 COCO 数据集上的零样本生成中实现了 12.7 FID。 值得注意的是,本文训练的模型实现了具有竞争力的 FID 和高质量生成,同时成本仅为 stable diffusion 模型的 1⁄118 ,是目前最先进的方法(成本为 28,400 美元)的 1/15。 ‍方法介绍 为了大幅降低计算成本,patch 掩蔽要求在输入主干 transformer 之前丢弃大部分输入 patch,从而使 transformer 无法获得被掩蔽 patch 的信息。高掩蔽率(例如 75% 的掩蔽率)会显著降低 transformer 的整体性能。即使使用 MaskDiT,也只能观察到它比 naive 掩蔽有微弱的改善,因为这种方法也会在输入层本身丢弃大部分图像 patch。 延迟掩蔽,保留所有 patch 的语义信息 由于高掩蔽率会去除图像中大部分有价值的学习信号,作者不禁要问,是否有必要在输入层进行掩蔽?只要计算成本不变,这就只是一种设计选择,而不是根本限制。事实上,作者发现了一种明显更好的掩蔽策略,其成本与现有的 MaskDiT 方法几乎相同。由于 patch 来自扩散 Transformer 中的非重叠图像区域,每个 patch 嵌入都不会嵌入图像中其他 patch 的任何信息。因此,作者的目标是在掩蔽之前对 patch 嵌入进行预处理,使未被掩蔽的 patch 能够嵌入整个图像的信息。他们将预处理模块称为 patch-mixer。 使用 patch-mixer 训练扩散 transformer 作者认为,patch-mixer 是任何一种能够融合单个 patch 嵌入的神经架构。在 transformer 模型中,这一目标自然可以通过注意力层和前馈层的组合来实现。因此,作者使用一个仅由几个层组成的轻量级 transformer 作为 patch-mixer。输入序列 token 经 patch-mixer 处理后,他们将对其进行掩蔽(图 2e)。 图 2:压缩 patch 序列以降低计算成本。由于扩散 transformer 的训练成本与序列大小(即 patch 数量)成正比,因此最好能在不降低性能的情况下缩减序列大小。这可以通过以下方法实现:b) 使用更大的 patch;c) 随机简单(naive)掩蔽一部分 patch;或者 d) 使用 MaskDiT,该方法结合了 naive 掩蔽和额外的自动编码目标。作者发现这三种方法都会导致图像生成性能显著下降,尤其是在高掩蔽率的情况下。为了缓解这一问题,他们提出了一种直接的延迟掩蔽策略,即在 patch-mixer 处理完 patch 后再对其进行掩蔽。除了使用 patch-mixer 之外,他们的方法在所有方面都类似于 naive 掩蔽。与 MaskDiT 相比,他们的方法无需优化任何替代目标,计算成本几乎相同。 假定掩码为二进制掩码 m,作者使用以下损失函数来训练模型: 其中,M_ϕ 是 patch-mixer 模型,F_θ 是主干 transformer。请注意,与 MaskDiT 相比,本文提出的方法还简化了整体设计,不需要额外的损失函数,也不需要在训练过程中在两个损失之间进行相应的超参数调优。在推理过程中,该方法不掩蔽任何 patch。 未掩蔽微调 由于极高的掩蔽率会大大降低扩散模型学习图像全局结构的能力,并在序列大小上引入训练 – 测试分布偏移,因此作者考虑在掩蔽预训练后进行少量的未掩蔽微调。微调还可以减轻由于使用 patch 掩蔽而产生的任何生成瑕疵。因此,在以前的工作中,恢复因掩蔽而急剧下降的性能至关重要,尤其是在采样中使用无分类器引导时。然而,作者认为这并不是完全必要的,因为即使在掩蔽预训练中,他们的方法也能达到与基线未掩蔽预训练相当的性能。作者只在大规模训练中使用这种方法,以减轻由于高度 patch 掩蔽而产生的任何未知 – 未知生成瑕疵。 利用 MoE 和 layer-wise scaling 改进主干 transformer 架构 作者还利用 transformer 架构设计方面的创新,在计算限制条件下提高了模型的性能。 他们使用混合专家层,因为它们在不显著增加训练成本的情况下增加了模型的参数和表现力。他们使用基于专家选择路由的简化 MoE 层,每个专家决定路由给它的 token,因为它不需要任何额外的辅助损失函数来平衡专家间的负载。他们还考虑了 layer-wise scaling,该方法最近被证明在大型语言模型中优于典型 transformer。该方法线性增加 transformer 块的宽度,即注意力层和前馈层的隐藏层维度。因此,网络中较深的层比较早的层被分配了更多的参数。作者认为,由于视觉模型中的较深层往往能学习到更复杂的特征,因此在较深层使用更高的参数会带来更好的性能。作者在图 3 中描述了他们提出的扩散 Transformer 的整体架构。 图 3:本文提出的扩散 transformer 的整体架构。作者在骨干 transformer 模型中加入了一个轻量级的 patch-mixer,它可以在输入图像中的所有 patch 被掩蔽之前对其进行处理。根据当前的研究成果,作者使用注意力层处理 caption 嵌入,然后再将其用于调节。他们使用正弦嵌入来表示时间步长。他们的模型只对未掩蔽的 patch 进行去噪处理,因此只对这些 patch 计算扩散损失(论文中的公式 3)。他们对主干 transformer 进行了修改,在单个层上使用了 layer-wise scaling,并在交替 transformer 块中使用了混合专家层。 实验 实验采用扩散 Transformer(DiT)两个变体 DiT-Tiny/2 和 DiT-Xl/2。 如图 4 所示,延迟掩蔽方法在多个指标中都实现了更好的性能。此外,随着掩蔽率的增加,性能差距会扩大。例如,在 75% 的掩蔽率下,naive 掩蔽会将 FID 得分降低到 16.5(越低越好),而本文方法可以达到 5.03,更接近没有掩蔽的 FID 得分 3.79。 表 1 表明 layer-wise scaling 方法在扩散 transformer 的掩蔽训练中具有更好的拟合效果。 比较不同的掩蔽策略。作者首先将本文方法与使用较大 patch 的策略进行比较。将 patch 大小从 2 增加到 4,相当于 75% 的 patch 掩蔽。与延迟掩蔽相比,其他方法表现不佳,分别仅达到 9.38、6.31 和 26.70 FID、Clip-FID 和 Clip-score。相比之下,延迟掩蔽分别达到 7.09、4.10 和 28.24 FID、Clip-FID 和 Clip-score。 下图为延迟掩蔽 vs. 模型缩小以减少训练成本的比较。在掩蔽率达到 75% 之前,作者发现延迟掩蔽在至少三个指标中的两个方面优于网络缩小。但是,在极高的掩蔽率下,延迟掩蔽往往会实现较低的性能。这可能是因为在这些比率下掩蔽的信息损失太高导致的。 表 5 提供了有关模型训练超参数的详细信息。训练过程分两个阶段。 计算成本。表 2 提供了每个训练阶段的计算成本明细,包括训练 FLOP 和经济成本。第 1 阶段和第 2 阶段训练分别消耗了总计算成本的 56% 和 44%。模型在 8×H100 GPU 集群上的总时钟训练时间为 2.6 天,相当于在 8×A100 GPU 集群上为 6.6 天。

「光合」作用算力质变,AI乘风走深向实

「光合作用」破局中国算力,加速「智变」。 毋庸置疑,人工智能就是当下「最靓的仔」。    GPT-4o Mini 刚免费上线 ,Llama 3.1 接踵而至,表现超越 GPT 4o。Sora 、可灵、即梦,你方唱罢我登场。在刚结束的世界人工智能大会上,国内首款全尺寸通用人形机器人开源公版机发布。    经过多年的数据、算法和算力积累,「智变」时刻已经到来——未来,千行万业都将会因为 AI 得以重塑,无论是大模型还是小模型。今年全国两会上,「人工智能+」也被首次写入政府工作报告,并列为 2024 年十大工作任务的首位。    要用人工智能技术赋能千行百业,发展新质生产力, 算力是关键,也是衡量一个地区或国家 AI 竞争实力的关键指标。作为国家先进计算产业创新中心的重要组成部分,光合组织正在发挥其独特的「光合作用」,破局中国算力,加速「智变」,赋能 AI 走深向实。  一、AI 狂飙,产业「智变」倒计时    中国工程院院士郑纬民在 2024 光合组织领导人大会上表示:「当前激烈的产业竞争,让 AI 升级面临严峻考验,同时也带来了难得的机遇。我们要保持乐观态度,提升硬件性能,同时努力完善高水平的产业协作。」     在中国,「百模大战」一路狂奔,AI 正以前所未有的速度向各行各业渗透。    在大模型的辅助下,创作效率正大幅提高。以视频创作为例,传统的分工明晰、周期冗长的制作流程,如今可以在 AI 支持的一站式平台上完成。同样,在编程领域,AI 助手能在几秒内生成上百行代码,开发效率大幅提升。    但聊天、 创意和写作不是大模型的全部,在金融、生物医药、工业制造、政务、科学研究等领域,AI 正为产业刚需带来实实在在的价值。    气象大模型通过 AI 推理的方式解决气象的预测难题,现在,使用一张卡就可以预测出来7天的天气,以往可能需要上千台服务器耗费数小时。    在智慧工厂,平均每一秒就可以下线一台 PC 整机 ;在汽车总装车间,53 秒下线一台车;工业的时序数据基础模型正在实现趋势预测和异常检测等多种应用。    能源领域也不例外。世界最大的清洁能源走廊——长江干流上的六座梯级水电站,正不断与科技创新碰撞出新的火花。    「 AI for Science 是中国科技创新历史上最好的机会,它的空间非常大,将全方位改变科学研究到产业落地的过程。」中国科学院院士、北京大学国际机器学习研究中心主任鄂维南曾公开表示。    中国信息通信研究院的一组数据进一步印证了 「智变」已经进入倒计时:2023 年,我国人工智能核心产业规模达 5787 亿元,相关企业数量 4482 家,产业链覆盖芯片、算法、数据、平台、应用等上下游关键环节,细分领域不断突破。经过多年培育,行业已经经历了信息化、网络化和平台化阶段,正进入数据驱动的智能化新阶段。    二、 穿针引线, 共谱「光合」协奏曲    现在,只需轻点鼠标,在人工智能遥感系统这位「手相师傅」帮助下,自然资源的「掌纹」细节,都能被一一识别、解读:    起伏的山峦和绵延的森林、广袤的田野耕地、蓝色的海岸生命线、交错纵横的街道和建筑;   ……    这只是许多 AI 企业依托光合组织「效应」,实现新质生产力的一个缩影。    算力,已成为数字经济发展和人工智能进步的关键资源。近几年,人工智能技术加速融入更多行业和场景,算力需求呈现爆发式增长。    100P 只能算「起步价」,人工智能企业业务对算力的需求都很大,每小半年,需求都会翻倍, AIGC 可能引发新一轮智算需求。    所以,哪怕是一家「算力巨无霸」企业,也无以支撑如此庞大的需求。    再从我国算力供给侧来看,中国的算力总规模居世界第二,但数据中心建设缺口依然很大,特别是对智算中心的需求和建设更为迫切。同时,已有的部分算力未能得到有效利用。大量场景没有用人工智能,不是因为用不到,也不是因为不需要,而是因为企业自建算力设施成本很高,普惠算力又缺乏。    如何实现算力的「普惠」,让算力成为 AI 发展的基础资源?光合组织应运而生,集全产业链共谱「光合」协奏曲!    光合组织是海光产业生态合作组织的简称,承载着建立和完善国产计算技术供应链和产业链重要使命,正通过其独特的「光合效应」,赋能「算力网」重要节点。就像一部协奏曲的谱曲者,它把国内计算产业上下游企业、高校、科研院所等各路高手召集到一块,穿针引线,专攻算力和人工智能技术攻关与应用合作。    在刚结束的 2024 光合组织领导人大会上,光合组织「再下一城」:举办多个揭牌及签约仪式, 推动郑州建设「算力之城」 。   7月23日上午,2024光合组织领导人大会在河南省郑州国际会展中心开幕。    作为东西部的连接纽带,早在 2020 年 11 月,河南就开始布局算力建设,为郑州在「东数西算」工程中奠定基础,其智能算力不仅位居全国前列 ,还坐拥郑州人工智能计算中心和 360 智算中心等基础设施。近期,中原算力谷在中原科技城科技转化片区揭牌,这个投资超百亿元、算力超万 P 的项目,无疑将成为中部地区算力产业高地的重要支撑。为实现高效「互联」、「互通」,郑州正全力打造「算力之城」,布局中部地区首张城市算力网。    大会上,河南省委书记楼阳生亲自为郑州先进计算研究所和海光生态适配中心郑州基地揭牌。这两家机构的落地将为郑州提供先进的计算能力和技术支持,成为打造「算力之城」的重要基石。    通过光合组织的牵线搭桥,郑州市人工智能创新中心、郑州市人工智能创新发展联盟、中原科技城人工智能产业园也在当天揭牌,规划了从研发创新、生态构建到落地空间和服务的完整闭环。    植物的光合作用需要阳光、水分和二氧化碳的共同参与,郑州算力生态的「光合效应」也需要产学研的通力合作。大会上,国家先进计算产业创新中心还与郑州大学、河南大学就产学研合作及人才培养基地签约,郑州市人民政府与深信服、思必驰、青云科技、捷通华声等 10 家智算领域企业签约, 加快郑州从「算力城」迈向「智能城」的脚步。    三、全链协作,富能国产算力    除了如何更好满足算力需求、降低算力使用成本和使用门槛,在目前阶段,根技术上的自立自强也是刚性发展需求。    人工智能是新质生产力的重要引擎,算力又是算法模型的基础,建设自有智算基础来支撑行业未来发展,显得尤为必要。而光合组织,作为由海光信息技术股份有限公司发起的产业生态联盟,正以其强大的向心力和引领作用,成为解决国产化挑战的核心力量。    经过四年多的发展,光合组织已经建立了一个庞大的生态系统,包含 4000 余家成员单位,覆盖了从芯片设计到应用服务的全产业链。    在芯片领域,光合组织与国产芯片厂商密切合作,推动 CPU 和 GPU 的研发和应用。在存储方面,促进了国产固态硬盘和大容量存储系统的发展。对于服务器和网络设备,光合组织正推动国产品牌如同方、联想开天等的创新,以满足大规模计算和海量数据传输的需求,并获得金融、能源、电信等关键行业和领域认可。    中间层软件,如操作系统方面,光合组织积极推广统信、麒麟等国产操作系统,并促进其与底层硬件的深度适配。对于数据库,它支持达梦等国产数据库的发展和应用,推动这些产品在各行业的落地。同时,光合组织还在推动中间件、虚拟化平台等关键基础软件的国产化进程。    在应用软件层面,光合组织不仅推动了 ERP、CRM 等企业级软件的国产化,还在人工智能、大数据分析等前沿领域促进了国产解决方案的发展,构建高水平商业体系。    例如,通过与行业伙伴(如百度、思必驰等)合作,支持百度飞桨等国产 AI 框架与底层硬件的深度融合,推动 AI 模型在国产算力底座上的部署和优化。在 AIGC 持续快速发展背景下, 积极适配文心一言等大多数国内外主流大模型,实现了 LLaMa、GPT、Bloom、ChatGLM、悟道、紫东太初等为代表的大模型的全面应用。    作为这一生态合作的最新成果,在 2024 光合组织领导人大会上,首款国产 AI PC ——联想开天 M90h G1t AI PC 元启版在海光信息和联想开天的共同努力下,正式发布。      在许多成员看来,光合组织为 AI 产业的生态对接提供了一个很好的平台。用户需要的是完整的解决方案,而单一厂商很难提供从底层架构到前端应用的一整套产品,在此背景下,生态力量的整合非常关键。    冲量在线「 AI 安全开放平台」的诞生契机,正是光合组织解决方案大赛。在将基于深度学习框架的 AI 模型适配海光芯片过程中,他们向海光提出了大量优化和适配需求,都得到了快速响应。这一方案最终在某银行 AI SaaS 服务的安全能力技术提升的项目招标中中标。    用友公司在迁移废钢智能判定模型过程中,几乎无障碍地跑通了算法,也得益社区详细的产品文档 ,在适配和使用过程中遇到问题都能得到及时响应。    随着人工智能技术的不断突破,算力需求呈现爆发式增长,而算力「卡脖子」成为各大厂商竞逐AI最为头疼的难题。 光合组织汇聚4000 多家成员单位的合力,助力构建从芯片设计到应用服务的全产业链生态系统,不仅为更多企业提供了强大的算力基础,更推动了算力的普惠化。  在这个AI时代,算力犹如阳光之于植物的光合作用,是推动整个产业生长的关键能量。光合组织正以其「光合作用」,通过推动算力革命,加速 AI 产业「走深向实」。

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 系统在自主对齐和改进机制方面的发展,使其更加符合人类的意图。

OpenDevin出技术报告了,大模型Agent开发者必读

热门通用大模型 Agent 平台。 今年 3 月,「全球首位 AI 软件工程师」Devin 引爆了 AI 圈。与此前 AI 编程助手不同的是,Devin 并不只是辅助编程的角色,而是能够独立地、端到端地完成整个开发项目。 Devin 的出世让我们领略了大模型 Agent 的强大能力。很快,业界就出现了众多尝试复刻它的开源项目,其中 OpenDevin 脱颖而出,受到了人们最多的关注。 OpenDevin 是一个开发通过软件与世界互动的通用智能体的平台,其特点包括:  大模型 Agent、接口和环境之间交互的交互机制; Agent 可用的沙盒操作系统 + Web 浏览器环境; 可创建和执行代码的接口; 多 Agent 支持; 评估框架。 目前,OpenDevin 的 GitHub 已经获得了超过 2.9 万 Star 量。 近日,OpenaDevin 团队发布了该工具的技术报告。 报告地址:https://arxiv.org/pdf/2407.16741 在技术报告中,OpenDevin 的作者,来自伊利诺伊大学香槟分校、卡耐基梅隆大学等机构的学者们详细介绍了 OpenDevin,这是一个社区驱动的平台,旨在开发通过软件与世界交互的通用和专业 AI Agent。 更重要的是,OpenDevin 不仅是一个概念框架,它还包括一个全面且可立即使用的 Agent、环境和评估实现。截至本报告发布时,OpenDevin 包含一个 Agent 中心,其中已实现 10 多个智能体,包括一个基于 CodeAct 架构实现的强大的通用智能体,并增加了用于 Web 浏览和代码编辑功能。用户与智能体的交互是通过聊天界面实现的,该界面可视化智能体当前操作并允许实时反馈。此外,评估框架目前支持 15 个基准,可使用它们来评估智能体性能。 OpenDevin 架构 本文中,作者从以下几个方面描述 OpenDevin:(1)如何定义和实现智能体;(2)动作执行如何促进观察;(3)如何管理和扩展智能体常用的技能;(4)如何将多个智能体组合在一起以解决任务。 如何定义和实现智能体 智能体可以感知环境状态,并在解决用户指定的任务时生成要执行的操作。 状态和事件流。在 OpenDevin 中,状态是一种数据结构,它封装了智能体执行任务的所有相关信息。此状态的一个关键组成部分是事件流,是按照时间顺序收集过去的动作和观察。 动作。受 CodeAct 的启发,OpenDevin 通过一组核心的动作将智能体与环境连接起来。动作 IPythonRunCellAction 和 CmdRunAction 使智能体能够在沙盒环境(例如,安全隔离的 Linux 操作系统)内执行任意 Python 代码和 bash 命令。而 BrowserInteractiveAction 支持智能体与 Web 浏览器交互。 观察。观察描述了智能体观察到的环境变化。它可能由智能体的动作引起,也可能不是:它可以是 1) 用户提出的自然语言指令,2) 智能体先前动作的执行结果(例如,代码执行结果等)。 实现新的智能体。智能体设计简单但功能强大,从而允许用户轻松创建和定制用于各种任务的智能体。核心在于 step 函数,它将当前状态作为输入并根据智能体的逻辑生成适当的动作。图 2 显示了智能体抽象的简化示例代码。 观察动作执行结果 Agent Runtime 为智能体提供了与人类软件开发人员相当的动作空间,使 OpenDevin 能够处理各种软件开发和基于 Web 的任务,包括复杂的软件开发工作流程、数据分析项目、Web 浏览任务等。它允许智能体访问 bash 终端来运行代码和命令行工具,利用 Jupyter notebook 即时编写和执行代码,并与 Web 浏览器交互以执行基于 Web 的任务(例如,信息搜索)。 可扩展的智能体 – 计算机接口 作者构建了一个 AgentSkills 库,这是一个旨在增强智能体功能的工具箱,能够提供基本 bash 命令或 python 代码无法轻松获得的实用程序。 多智能体交互 OpenDevin 允许多个智能体进行交互。为了实现这一目标,作者使用了一种特殊的动作类型 AgentDelegateAction,它允许智能体将特定的子任务委托给另一个智能体。 评估 本节将 OpenDevin (以下实验结果中简写为 OD)与开源可复现的基线方法进行了比较。这 15 个基准涵盖软件工程、网页浏览等任务。 表 3 表明,虽然 OpenDevin 智能体可能无法在每个类别中都达到最佳性能,但其设计考虑了通用性。 表 4 报告了智能体在软件工程基准上的结果。 具体而言: SWE-bench 旨在评估智能体解决 GitHub 问题的能力,如 bug 报告或功能请求。如表 4 所示,本文最新版本的 CodeActAgent v1.8 ,基于 claude-3.5-sonnet,与其他专门用于软件开发的开源智能体相比,解决问题率高达 26%。 HumanEvalFix。OpenDevin CodeActAgent 成功修复了 Python 拆分中 79.3% 的错误,明显优于所有非智能体方法,几乎是 StarCoder2-15B 性能的两倍。 基于 GPT-4o 的 OpenDevin 智能体在 ML-Bench 上实现了 76.47% 的最高成功率,优于 SWE-Agent(42.64%)。 Gorilla APIBench 考察智能体使用 API 的能力。使用 GPT-4o 的 OpenDevin 的成功率为 36.4%,优于未针对 API 调用进行专门微调的基线。 ToolQA 评估智能体使用外部工具的能力。与所有基线相比,采用 GPT-4o 的 OpenDevin 表现出最高的性能。智能体在与 CSV 和数据库工具使用相关的任务上表现更好,但在数学和计算器工具使用方面需要改进。 表 5 报告了网页浏览基准的评估结果。 表 6 报告了各种辅助基准的结果。 其中,GAIA 用于评估智能体解决一般任务的能力,结果显示,智能体在 GAIA 上取得了 32.1 分,比原来的 AutoGPT 有了明显的提高。 GPQA 用于评估智能体在解决具有挑战性的研究生水平问题时协调使用工具的能力。结果如表 6、7 所示,OpenDevin 集成了支持多种工具使用以及 web 搜索的功能,使得智能体能够更好地解决复杂的多步骤问题。

苹果让大模型学会偷懒:更快吐出第一个token,准确度还保住了

偷懒才能更好地工作。 Llama 3.1 刚刚发布,你是否已经尝试了呢?就算你的个人计算机是最近的顶尖配置,运行其中最小的 8B 版本可能也依然会有明显延迟。为了提升模型的推理效率,研究者想出了多种多样的方法,但其中很多都会让模型牺牲一些准确度。   近日,苹果和 Meta AI 的一个研究团队提出了一种新方法,可在保证准确度不明显下降的同时,将 Llama 2 预填充阶段的推理速度提升到原来的 2 倍以上,这或许能为 Llama 3.1 的加速提供一些启发。他们把这种方法称为 LazyLLM,即懒惰大型语言模型。     论文标题:LazyLLM: Dynamic Token Pruning for Efficient Long Context LLM Inference 论文地址:https://arxiv.org/abs/2407.14057 那么他们是怎么让 LLM 偷懒的呢?要理解他们的方法,我们首先需要知道标准的基于 prompt 的 LLM 推理过程是怎样的。简单来说,该过程分为两个阶段:预填充和解码,如图 1 所示。     在预填充阶段,模型计算和保存 prompt 中每个 token 的 KV 缓存,并预测首个 token。我们将预填充阶段所耗费的时间称为「首个 token 时间(TTFT)」。   预填充阶段之后是解码阶段。在这个阶段,模型再次使用缓存的 KV 来迭代式地解码下一个 token,直到满足停止标准。   在预填充阶段,所有 Transformer 层都会使用 prompt 中的所有 token。当 prompt 较长时,TTFT 可能很慢,因为当前最佳的基于 Transformer 的 LLM 既深又宽,并且计算注意力的成本会随 prompt 中 token 数量而呈二次增长。举个例子,Llama 2(7B 版本)堆叠了 32 层 Transformer,模型维度为 4096。在这种情况下,TTFT 需要的 walltime 是每个后续解码步骤的 21 倍,在 LongBench 基准上这些时间大约占用了总生成时间的 23%。   因此,要让 LLM 推理高效进行,优化 TTFT 是非常关键的步骤。   尽管 LLM 推理优化方面是一个活跃的研究领域,但很多方法关注的重心都是提升解码阶段的推理速度。研究者很少关注 TTFT 的改进。一些基于压缩的研究成果可通过减少 LLM 的大小隐式地提升 TTFT。   另一个研究方向是在静态的 Transformer 架构下实现对 TTFT 的改进。对于这个研究方向,很自然会引出一个问题:在生成首个 token 时,所有 prompt token 都必不可少吗?   图 2 给出了在 LongBench 基准上的 LLM 分析结果。       可以看到,对于首个生成的 token,输入 token 的注意力分数非常稀疏,这说明输入 prompt 中的许多 token 是多余的,就算移除也不会影响到下一 token 预测。这一观察正是该团队提出 LazyLLM 的基础。   LazyLLM 的优势包括适用范围广、无需训练、效果好。图 3 对比了标准 LLM 与 LazyLLM。   LazyLLM   图 4 展示了 LazyLLM 的整体框架。   从完整上下文开始,LazyLLM 会逐渐对 token 进行剪枝,从而逐渐减少得到最终模型所使用的计算数量。请注意,LazyLLM 允许模型在不同的生成步骤选取不同的 token 子集,即便它们中的一些可能在之前的步骤中被剪枝了。相比于静态剪枝(一次性对所有 token 进行剪枝),动态剪枝会在每个生成步骤对下一 token 预测进行优化,这有助于维持模型的性能表现。   渐进式 token 剪枝   之前也有一些研究成功使用过 token 剪枝来优化 LLM 推理。但是,这些方法需要积累预测前几个 token 的完整注意力图,以便在剪枝开始之前分析 prompt token 的重要性。也因此,它们不适合用于降低 TTFT,因为它们在预填充阶段仍需要计算所有 KV 缓存。   相较之下,LazyLLM 「很懒」,会从推理的第一轮迭代(预填充步骤)开始,只计算对预测下一 token 重要的 token。   在第一轮迭代中,一大关键难题是确定各个 token 的重要性。受之前已有研究(其中表明 token 隐藏状态会在穿过 Transformer 层时发生演进)的启发,该团队的解决方案是在每个生成步骤使用逐层 token 剪枝。具体来说,他们是使用各层的注意力图来确定输入 token 对将要预测的 token 的重要性。   在计算了 token 的置信度分数之后,另一个难题是确定剪枝 token 的阈值。   具体来说,对于不同的层和不同的任务,该阈值可能会随注意力分数的变化而改变。该团队的解决思路是使用 top-k 百分位数选取策略。具体来说,如果一个 token 的置信度分数小于输入 token 中的第 k 个百分位数,便将其剪枝掉。一旦 token 被剪枝去掉了,它就不再参与所有后续层的计算。   也就是说,后续层使用的 token 是之前层所使用 token 的子集。   后面的实验表明,剪枝层的位置和剪枝的 token 数量不同时,也会导致性能发生变化。具体来说,对于同一 Transformer 层,随着被剪枝去掉的 token 越来越多,模型的性能也会逐渐下降。   他们还发现,相比于早期层的剪枝,在后期层执行剪枝时会得到更好的性能,这说明后期层对 token 剪枝的敏感度更低。为了更好地平衡速度与准确度,该团队使用了如图 4 所示的渐进式剪枝法,从而在早期层保留更多 token,然后在 token 流向后期层的过程中逐渐减少 token 的数量。   Aux Cache(辅助缓存)   预填充阶段没有 KV 缓存,每个 token 都表示成隐藏状态。因此,可通过移除已被剪枝 token 的隐藏状态来实现渐进式 token 剪枝。但是,要将渐进式 token 剪枝扩展到后续的解码步骤,却并不简单。原因是每个解码步骤都会使用预填充阶段计算的 KV 缓存来计算注意力。由于 LazyLLM 是在预填充阶段执行渐进式 token 剪枝,因此在某一层被剪枝的 token 的 KV 不会出现在下一层的 KV 缓存中。   这里提醒一下,LazyLLM 框架允许在每一步让每个生成步骤从完整的输入 token 序列中挑选一个不同的 token 子集,无论它们是否已在之前的步骤中被剪枝。举个例子,在接下来的解码步骤中,那些在 KV 缓存中不存在的已被剪枝的 token 可能会被重新选取出来用于计算注意力。在这种情况下,模型无法检索到这些 token 的 KV 缓存。   对此,一个基于直觉的解决方案是再让这些 token 通过该 Transformer 的起点。但是,这会导致对同一 token 的重复计算,并最终减慢整体的生成速度。   为解决这个难题,该团队在原有的 KV 缓存之外引入了另一种缓存:Aux Cache(辅助缓存)。   如果已被剪枝 token(如图 4 中 T4 和 T7)的 KV 并未出现在后续层的 KV 缓存中,则会由 Aux Cache 保存它们的隐藏状态以供后续迭代检索。   如图 4 所示,在每个解码步骤,每个 Transformer 层首先会检索过去 token 的 KV 缓存(如果存在的话)。对于那些不在 KV 缓存中的 token,则直接从其前一层的 Aux Cache 中检索它们的隐藏状态,而不必再次经过之前的层。Aux Cache 可确保每个 token 在每个 Transformer 层中最多被计算一次,还能确保 LazyLLM 最慢时也比标准 LLM 快。 实验   该团队在两个大型语言模型上检验了这种「懒惰」新方法:Llama 2 7B 和 XGen 7B。作为对比的标准 LLM 是同样的公开发布的预训练检查点模型,同时不进行任何附加训练。   实验基准是 LongBench,这是一个针对长内容理解的多任务基准。LongBench 基准包含 16 个数据集,涉及 6 个任务,包括单文档问答、多文档问答、总结、少样本学习、合成任务和代码补全。   评估指标是每种方法在 TTFT 加速与准确度权衡方面的效果和效率。   结果   表 1 给出了 LazyLLM、标准 LLM 和其它基线方法的 TTFT 加速和准确度结果。   在此表中,baseline 是指标准 LLM 推理。random token drop 是指对 token 执行随机剪枝。static token pruning 是指在预填充阶段基于前面几个 Transformer 层的注意力方法来对输入 token 执行一次性剪枝。Prompt Compression 就是 prompt 压缩方法,也就是使用 LLM 去除输入上下文中的冗余。   从表 1 可以看到,LazyLLM 在 TTFT 加速方面全面优胜,同时准确度方面的下降基本可以忽略不计。需要指出,使用 LLM 来压缩 prompt 需要大量计算。因此,即使 Prompt Compression 能让推理速度更快,但其实际的 TTFT 却比标准 LLM 还长。 对总体生成速度的影响 为了评估新方法对总体生成速度的影响,该团队分析了计算使用的 prompt token 百分比和生成加速情况,见表 2。       可以看到,LazyLLM 计算使用的 token 的占比总是低于 100%,这说明 LazyLLM 在生成结束时也没有用完 prompt 中的所有 token,但理论上讲该模型可以使用所有 token。这能为不同任务的整体生成过程提供额外的加速。   不同层的丢弃率   该团队也分析了剪枝层的位置和被剪枝 token 的数量的影响。结果见图 6。       可以看到,当在同一 Transformer 层进行剪枝时,留下的 token 越少,模型的性能越差。这也符合我们的直观认知。此外,相比于在更前期 Transformer 层执行剪枝,在后期层进行剪枝会得到更好的性能,这说明后期层对 token 剪枝的敏感度更低。   基于这些观察,可以说渐进式 token 剪枝的效果得到了证明。   渐进式 KV 增长   最后,该团队也尝试了理解使用 token 剪枝逻辑的模型的内部情况。具体来说,他们想要了解 prompt token 中的累积使用比例以及相应的不被使用的比例。这种「累积 token 使用量」可以等价地定义成每一步的 KV 缓存 大小。图 7 给出了 LazyLLM 的每个阶段这些累积的 prompt token 使用量。   该结果支持这一假设:许多 token 永远不会被模型选择(即便理论上讲模型可以使用 prompt 中的所有 token。   考虑到模型依然能维持执行任务的准确度,因此可以得出结论:模型可以有效地丢弃不影响输出质量的 token。

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)可能还有很大的改进空间。通过本文的方法,建立人工合成数据来增强模型的推理能力以及信息梳理能力,或许是一种新的可能。

首届大模型顶会COLM 高分论文:偏好搜索算法PairS,让大模型进行文本评估更高效

大模型展现出了卓越的指令跟从和任务泛化的能力,这种独特的能力源自 LLMs 在训练中使用了指令跟随数据以及人类反馈强化学习(RLHF)。在 RLHF 训练范式中,奖励模型根据排名比较数据与人类偏好对齐。这增强了 LLMs 与人类价值观的对齐,从而生成更好地帮助人类并遵守人类价值观的回应。 近日,第一届大模型顶会 COLM 刚刚公布接收结果,其中一项高分工作分析了 LLM 作为文本评估器时难以避免和纠正的分数偏见问题,并提出了将评估问题转换成偏好排序问题,从而设计了 PairS 算法,一个可以从成对偏好(pairwise preference)中搜索和排序的算法。通过利用不确定性和 LLM 传递性(transitivity)的假设,PairS 可以给出高效,准确的偏好排序,并在多个测试集上展现出和人类判断更高的一致性。   论文链接: https://arxiv.org/abs/2403.16950 论文标题:Aligning with Human Judgement: The Role of Pairwise Preference in Large Language Model Evaluators Github 地址: https://github.com/cambridgeltl/PairS 用大模型评估有什么问题? 最近大量的工作展示了 LLMs 在评估文本质量上的出色表现,形成了一种无需参考的生成任务评估新范式,避免了昂贵的人类标注成本。然而,LLM 评估器(evaluator)对提示(prompt)设计高度敏感,甚至会受到多种偏见的影响,包括位置偏见、冗长偏见和上下文偏见。这些偏见阻碍了 LLM 评估器的公平和可信,导致与人类判断的不一致和不对齐。   为了减少 LLMs 的偏见预测,之前的工作开发了校准技术(calibration)以减少 LLM 预测中的偏见。我们先对校准技术在对齐单点(pointwise) LLM 评估器的有效性进行了系统分析。如上图 2 所示,即使提供了监督数据,现有的校准方法仍然不能很好的对齐 LLM 评估器。 如公式 1 所示,我们认为评估不对齐的主要原因并非 LLM 评估分数分布的先验具有偏见(biased priors over evaluation score distribution),而是评估标准(evaluation standard)的错位,即 LLM 评估器的似然(likelihood)。我们认为做成对(pairwise)评估时,LLM 评估器会与人类有更一致的评价标准,因此,我们探索了一种新的 LLM 评估范式,以促进更对齐的判断。   RLHF 带来的启发   如下图 1 所示,受到 RLHF 中通过偏好数据对奖励模型进行对齐的启发,我们认为 LLM 评估器可以通过生成偏好排序(preference ranking)来得到更和人类对齐的预测。最近已有一些工作开始通过让 LLM 进行成对比较(pairwise comparison)来得到偏好排序。然而,评估偏好排序的复杂性和可扩展性在很大程度上被忽视了。它们忽略了传递性假设(transitivity assumption),使得比较次数的复杂度为 O (N^2),让评估过程变得昂贵而不可行。 PairS:高效偏好搜索算法   在本工作中,我们提出了两种成对偏好搜索算法(PairS-greedy 和 PairS-beam)。PairS-greedy 是基于完全的传递性假设和合并排序(merge sort)的算法,只需要通过 O (NlogN) 的复杂度就可以得到全局的偏好排序。传递性假设是指,比如对于 3 个候选项,LLM 总是有如果 A≻B 以及 B≻C,则 A≻C。在这个假设下我们可以直接用传统的排序算法从成对偏好中获得偏好排序。 但是 LLM 并不具有完美的传递性,所以我们又设计了 PairS-beam 算法。在更宽松传递性假设下,我们推导并化简了偏好排序的似然函数(likelihood function)。PairS-beam 在合并排序算法的每一次的合并操作(merge operation)中按似然值做集束搜索,并通过偏好的不确定性(uncertainty)来减枝成对比较的空间的搜索方法。PairS-beam 可以调整对比复杂度和排序质量, 高效的给出偏好排序的最大似然估计(MLE)。在下图 3 中我们展示了一个 PairS-beam 如何做合并操作的例子。   实验结果   我们在多个具有代表性的数据集上进行了测试,包括闭合式生成的缩写任务NewsRoom 和 SummEval,和开放式的故事生成任务HANNA,并对比了多个 LLM 单点评估的基线方法,包括无监督的 direct scoring, G-Eval, GPTScore 和有监督训练过的 UniEval 以及 BARTScore。如下表 1 所示,PairS 在每个任务上和他们相比都有着和人类评分更高的一致性。GPT-4-turbo 更是能达到 SOTA 的效果。   在文章中,我们还对比了两种偏好排序的基线方法,win rate 和 ELO rating。PairS 可以仅用约 30% 的对比次数就能达到他们同样质量的偏好排序。论文还提供了更多关于如何使用成对偏好来量化计算 LLM 评估器的传递性,以及成对评估器如何在校准中受益的见解。

从现在起,GitHub上超1亿开发者可直接访问全球顶级大模型,构建AI应用

GitHub 推出的全新功能「GitHub Models」将有望加快 AI 工程师时代的到来。 什么?大家熟悉的代码托管平台 GitHub 又进化了!该平台也开始提供 AI 大模型的 Playgroud 了。   所有你能叫得上名字的业界流行大模型,包括微软的 Phi-3、OpenAI 的 GPT-4o、Meta 的 Llama 3.1、Cohere 的 Command R+、Mistral AI 的 Mistral Large,都可以在一个交互式沙盒中试用。   在未来几个月,Github 也将添加更多语言、视觉以及其他类型的模型。   也就是说,这张图上的模型都可以「白嫖」到了!相当于又多了一个可以免费测试各家大模型的新途径!   不仅如此,开发者还可以轻松地将合适的模型导入到自己的 AI 项目中。Github 创建了一条能直接把模型放在 Codespaces 和 VS Code 开发环境中的快速通道,一下把部署 AI 模型的门槛打下来了。   这就是 GitHub 今天推出的「GitHub Models」功能! 对于开发者来说,只要有合适的工具并训练,每个人都可以成为 AI 工程师。开发者选择模型,在 GitHub 代码空间(Codespaces)中进行编码,然后通过 Azure 进行生产部署,提供了「一条龙」服务。   具体来说,你可以调用 GitHub CLI 中的 GitHub Models 命令,通过一系列 JSON 文件在 GitHub Actions 用,还可以用 GitHub Models 构建 GitHub Copilot 扩展,覆盖应用开发的全周期。   当项目迈入上线阶段时,Github 还提供了与 Azure AI 的无缝集成,Github 的身份验证可以通过 Azure 订阅,AI 应用部署到生产环境的门槛就这么被打下来了。   现在,你可以通过 Github 在全球 25 个以上的 Azure 区域部署 AI 应用,并获取 Azure 的企业级安全保护。   与 GitHub 和 Microsoft 对隐私和安全的持续承诺一致,GitHub 模型中的任何提示或输出都不会共享给模型提供者,也不会用于训练或改进模型。   当然,试玩「GitHub Models」也不是完全不受限制。个人用户每天限制访问次数 150 次,每分钟不能超过 15 次,每次请求最多可以处理 8000 个 token,最多输出 4000 个 token。     对此,GitHub CEO Thomas Dohmke 表示,该功能的推出标志着 GitHub 的又一次转型,从通过开源协作创建 AI 到借助 AI 的力量创建软件,再到如今利用 GitHub Models 推动 AI 工程师的崛起。 并且基于 OSS 存储库、Copilot Extensions 和 GitHub Models 功能,GitHub 希望将尽可能多的合作伙伴引入到自己的平台。   有开发者展示了在 GitHub 的代码空间中直接运行模型的案例,不需要安装什么东西,几秒内就可以启动。   图源:https://x.com/DanWahlin/status/1819113874689610133

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 和对齐组合起来实现高性能同时又维持高效率呢?这还是一个有待解决的挑战。