我自己的原文哦~ https://blog.51cto.com/whaosoft/11663479
#Epoch AI推出数学基准FrontierMath
陶哲轩联手60多位数学家出题,世界顶尖模型通过率仅2%!专家级数学基准,让AI再苦战数年
Epoch AI推出数学基准FrontierMath,目前前沿模型测试成功率均低于2%!OpenAI研究科学家Noam Brown说道:「我喜欢看到新评估的前沿模型通过率如此之低。这种感觉就像一觉醒来,外面是一片崭新的雪地,完全没有人迹。」或许,FrontierMath测试成功率突破的那一天,会是AI发展过程中一个全新的里程碑。
数学为评估复杂推理提供了一个独特而合适的测试平台。它需要一定的创造力和精确的逻辑链条——通常涉及复杂的证明,这些证明必须缜密地筹划和执行。同时,数学还允许对结果进行客观验证。
在铺天盖地的宣传中,LLM看起来已经攻破了数学大关。但果真如此吗?
不久前,来自苹果的研究院团队证明,就算是在数学这些基础科学方面最先进的o1模型,其卓越的表现也是来源于对特定数据集针对性的持续优化。
所以为了更好的检验模型对于数学问题的理解与解决能力,我们需要一个更加全面而行之有效的数学测试基准。
近日,Epoch AI联合六十余位全世界的数学家,其中包括教授、IMO命题人、菲尔兹奖获得者,共同推出了全新的数学基准FrontierMath。其包括数百个原创的、格外具有挑战性的数学问题,旨在评估AI系统中的高级推理能力。
研究团队基于这个测试基准评估了六个前沿的模型,它们的成功率竟然都低于2%!
论文地址:https://arxiv.org/abs/2411.04872
论文特意致谢了陶哲轩为FrontierMath基准贡献了一些问题
具体来说,这些数学问题从奥赛难度到当今的数学前沿,包含了目前数学研究的所有主要分支——从数论和实数分析中的计算密集型问题到代数几何和群论中的抽象问题,而它们也通常需要数小时或数天的时间才能被专业数学家解决。
FrontierMath涉及的数学领域
这一测试集的发布一下炸出了不少AI大佬。
OpenAI研究员Clive Chan
德扑之父,OpenAI研究科学家Noam Brown
Anthropic联创Jack Clark
知名AI大牛Andrej Karpathy还发了一篇长帖「Moravec悖论在大语言模型评估中的体现」:
我对这个新的前沿数学基准测试感到惊讶,因为大语言模型在其中仅能解决2%的问题。引入这个基准测试的原因是大语言模型在现有数学基准测试中表现得越来越出色。有趣的问题在于,尽管从许多评估来看,大语言模型在数学和编程等领域已经逐渐接近顶级专家的水平,但你还是不会选择它们来完成对人类本身来讲最容易的工作。它们可以解决复杂的封闭问题,只要你在提示词中恰当地呈现问题描述,但它们在自主且连贯地解决长问题序列方面却很艰难,而这对人类来说是非常容易的。
这就是Moravec悖论的隐性体现,他在30多年前观察到,人类认为简单或困难的事情,对于计算机来说可能却恰恰相反。例如,人类对计算机下棋感到非常惊讶,但下棋对计算机来说却很简单,因为这是一个封闭的、确定性的系统,具有离散的动作空间、完全可观测性等等。反过来,人类可以系鞋带或折叠衬衫,并不觉得这有什么了不起,但这实际上是一个极其复杂的传感运动任务,对硬件和软件的最先进技术也还是一个挑战。这就像OpenAI前段时间发布的魔方项目,大多数人关注的是解魔方本身(这很简单),却不是让机器人用手去扭合一面魔方这种其实极其困难的任务。
所以我非常喜欢这个FrontierMath基准测试,我们应该多做一些这样的测试。但我也认为这是一个有趣的挑战,我们如何为所有那些「简单」但实际上很难的事情创建评估。非常长的上下文窗口、连贯性、自主性、常识、有效的多模态输入输出……我们如何构建好的「简单工作」评估?这些是你期望团队中任何入门级实习生都能完成的事情。
除了AI大佬们在纷纷讨论,网友们也炸了锅——
网友「Chubby」表达了自己的兴奋与期待!
同时,Epoch AI也采访了菲尔兹奖得主陶哲轩(2006年)、蒂莫西·高尔斯(1998年)、理查德·博赫兹(1998年)以及国际数学奥赛教练陈谊廷。
他们一致认为,FrontierMath的研究问题极具挑战性,需要深厚的领域专长。
左右滑动查看
成功率低于2%
FrontierMath支持模型在评估中拥有充足的思考时间以及实验和迭代能力。并且还可以在Python 环境中交互式地编写和执行代码来测试假设、验证中间结果,并根据即时反馈改进方法。
FrontierMath的模型评估流程框架
研究团队基于这个测试基准评估了六个前沿的模型,包括Claude 3.5 Sonnet、o1-preview和Gemini 1.5 Pro。
即便在延长思考时间(10000个token)、提供Python访问权限以及允许运行实验的条件下,它们的成功率仍然低于2%!
这与GSM-8K和MATH等其他流行的数学基准形成鲜明对比,在这些仅包含高中到本科数学难度的基准测试中,顶级模型现在的准确率都已经超过 90%。
当然,这在一定程度上是由于数据污染——训练数据中无意或有意地包含了测试数据的内容,或包含了与测试数据非常相似的数据。
这种现象会导致模型在测试时表现优异,但并非因为它真正学会了新知识或推理能力,而是因为它在训练中「见过」测试题或其相似题。
以至于模型的测试分数表现虚高,无法真实反映其在新数据上的表现能力。
也就是说,原来的这些基准测试达到高分已经不值得吹嘘了,大模型又有了新的数学大关需要攻破!
FrontierMath:评估AI高级数学推理
对于这个新的数学大关,FrontierMath有三个关键设计原则:
1. 所有问题都是全新且未公开的,防止数据污染。
2. 模型的解答支持自动验证,从而实现高效评估。无论是精确的整数,还是如矩阵或符号表达式(在SymPy中),一个验证脚本可以通过将模型确认提交的答案与已知解决方案来精确匹配以对提交的答案进行检查验证。
3. 问题具有「防猜测」特性,问题的答案是大数值或复杂的数学对象,若没有数学推理,模型猜对的几率低于1%。
这些设计原则,每一条都非常具有针对性,弥补了现有基准测试的不足。
值得欣喜的是,模型在这个测试中几乎没办法「作弊」了,这将有效杜绝一些「名不副实」的现象。
具体案例
由于FrontierMath中的问题是具有封闭形式答案(例如整数)的,所以它们可以让模型去自动进行验证与评估。
例如下图中的构造一个符合条件的19次多项式问题,问题给定的答案是非常大数值的整数,所以几乎不可能通过预测和精巧的模式匹配来解决这个问题。
模型必须有涉及数论、群论、代数几何这些方面的专业数学逻辑能力才可以得到正确的答案。
涉及到阿廷原始根猜想则更为复杂,模型需要求解计算的甚至是
。
而数百道题目皆为如此,所以FrontierMath足以作为一个标杆性的数学基准,去检验AI模型是否具备了真正的复杂逻辑推理能力。
参考资料:
https://x.com/EpochAIResearch/status/1854996368814936250
https://x.com/karpathy/status/1855659091877937385
https://epochai.org/frontiermath/the-benchmark
https://epochai.org/frontiermath/benchmark-problems
#misleading-privacy-evals
如何严格衡量机器学习算法的隐私泄露? ETH有了新发现
本文作者张杰是苏黎世联邦理工大学的二年级的博士生,导师是 Florian Tramèr。本文发表在 CCS 2024 上, 第一单位是 ETH Zurich,主要探讨如何严格的衡量某个机器学习算法的隐私保护能力。
arXiv地址:https://arxiv.org/pdf/2404.17399
GitHub代码:https://github.com/ethz-spylab/misleading-privacy-evals
论文标题:Evaluations of Machine Learning Privacy Defenses are Misleading
1. 前言
机器学习模型往往容易受到隐私攻击。如果你的个人数据被用于训练模型,你可能希望得到一种保障,确保攻击者无法泄露你的数据。更进一步,你或许希望确保没有人能够判断你的数据是否曾被使用过,这就是成员推理攻击(membership inference attack, MIA)所关注的问题。
差分隐私(Differential Privacy, DP)确实可以提供这种理论上可证明的保护。然而,这种强有力的保障往往以牺牲模型的性能为代价,原因可能在于现有的隐私分析方法(如 DP-SGD)在实际应用中显得过于保守。因此,许多非理论保证的防御手段(empirical defenses)应运而生,这些方法通常承诺在实际应用中实现更好的隐私与实用性之间的平衡。然而,由于这些方法并没有提供严格的理论保证,我们需要通过严谨的评估方式来验证它们的可信度。
遗憾的是,我们发现,许多 empirical defenses 在衡量隐私泄露的时候存在一些常见的误区:
- 关注的是群体层面的平均隐私,但对最「脆弱」数据的隐私却关注甚少。但 privacy 并不应该是一个平均的指标!
- 使用很弱的、 非自适应的攻击。没有针对具体防御,做适应性攻击。
- 与模型性能过差的 DP 差分隐私方法进行相比,这种比较方式不够公平,容易误导人们对模型隐私保护效果的判断。
为了解决这些问题,我们提出了一种严格的衡量方法,可以准确评估某个机器学习算法的隐私泄露程度。我们建议应该与差分隐私(Differential Privacy)方法进行公平对比,并进行适应性攻击,最后汇报「脆弱」数据上的隐私泄露。
我们应用此方法研究了五种 empirical defenses。这些防御方法各不相同,包括蒸馏、合成数据、损失扰动以及自监督训练等。然而,我们的研究发现,这些防御所导致的隐私泄露程度远超其原始评估所显示的水平。
事实上,所有这些防御方法都未能超越经过适当调整的最基本的差分隐私方法 ——DP-SGD。例如,当我们将 CIFAR-10 数据集上的所有防御措施(包括 DP-SGD)调整至至少达到 88% 的测试准确率,同时尽量保证隐私时,现有评估可能严重低估隐私泄露的程度,误差高达五十倍之多!
2. 隐私评估为何应关注个体隐私泄露程度
而非群体的平均情况?
虽然整体平均隐私泄露看似可接受,但个别用户的隐私可能面临严重威胁。在机器学习中,隐私保护措施需要确保即便整体隐私保护水平达标,仍能为每位个体提供足够的隐私保障。以 CIFAR-10 数据集为例,每个样本的隐私泄露程度如下:
通过分析,我们可以发现,少数样本的隐私泄露程度几乎达到了 100%。然而,如果仅关注群体的平均隐私泄露,这一数值仅为 4%,这容易导致对该方法隐私保护能力的误解。实际上,这种看似低的平均值掩盖了部分个体的严重隐私风险,使得整体评估显得不够准确。因此,在隐私保护的研究与实践中,关注个体隐私泄露的情况显得尤为重要。
3. 使用金丝雀(canary)进行高效的样本级隐私评估
因此,我们的论文认为,严格的隐私评估应该能够衡量攻击者是否可靠地猜测数据集中最脆弱样本的隐私。具体来说,就是在低假阳性率(FPR)下实现高真实阳性率(TPR)。
然而,这种样本级评估的成本显著高于现有的群体级评估。估计攻击的真实阳性率(TPR)和假阳性率(FPR)通常采用蒙特卡罗抽样的方法:通过模拟多个独立的训练过程,每次随机重新采样训练数据,并计算每个模型结果中攻击者成功的次数。
不过,要在 FPR 为 0.1% 时估计个体级别的 TPR,我们可能需要对每个样本进行数千次训练,才能排序并找出最容易受到攻击的样本及其隐私泄露程度。这种开销显然是相当庞大的 (例如上图 CIFAR-10,我们训练了 20000 个模型才能精准描绘每个样本的隐私泄露)。
为此,我们提出了一种有效的近似方法:针对一小部分金丝雀(canary)样本进行攻击评估。直观来看,金丝雀样本应能够代表在特定防御策略和数据集下最容易受到攻击的样本。因此,我们只需在有限的金丝雀样本上进行隐私评估。这种方法不仅降低了评估的成本,同时也确保了隐私评估的准确性和有效性。
在我们的论文中,我们详细说明了如何针对五种具体的防御方法设计相应的金丝雀样本。至关重要的是,金丝雀的选择必须依据防御策略和数据集的特性进行调整。某些样本可能对特定防御方法来说是有效的金丝雀,但对其他防御方法却并不适用。作为一般准则,异常数据,例如被错误标记的样本或与训练数据分布不一致的样本(即 OOD 数据),通常是一个良好的起点,因为这些样本往往最容易受到攻击。
例如,下面是来自 CIFAR-10 数据集的一些高度脆弱的样本,这些样本用于简单的(未防御的)ResNet 模型。其中一些样本被错误标记(例如,人类的图片被标记为「卡车」),而另一些样本则是不太「正常」的情况(例如,陆地上的一艘船或一架粉色的飞机)。
4. DP-SGD 仍是一种强大的 empirical defense
我们采用高效的样本级评估(结合适应性攻击)来测试是否存在经验上优于差分隐私(DP)方法的 empirical defense。许多 empirical defense 声称能够在现实环境中实现合理的隐私保护,同时提供比 DP-SGD 等具有强大可证明保证的方法更好的实用性。
然而,DP-SGD 的 privacy-utilty 是可调节的。如果 empirical defense 无论如何都会放弃可证明的保证,那么我们为何不对 DP-SGD 采取同样的策略呢?因此,我们对 DP-SGD 进行了调整,以达到较高的 CIFAR-10 测试准确率(比如从 88% 提升到 91%),即将 empirical defense 和 DP-SGD 方法的性能调整到相似水平,再进行公平的隐私泄露比较。
令人惊讶的是,我们在案例研究中发现,简单调整后的 DP-SGD 性能优于所有其他 empirical defenses。具体来说,在 CIFAR-10 数据集上,我们的方法达到了与所有其他 empirical defense 相当的测试准确率,但却为最易受到攻击的样本提供了更强大的经验隐私保护。因此,DP-SGD 不仅仅是理论上有保证的防御手段,同时也可以成为一种强有力的 empirical defense。
5. 结论
我们论文的主要结论是,隐私评估的具体方式至关重要!Empirical 隐私攻击和防御的文献考虑了多种指标,但往往未能准确描述这些指标的隐私语义(即某个指标捕获了哪种隐私)。
在论文中,我们提倡在个体样本层面上进行隐私评估,报告防御方法对数据分布中最脆弱样本的隐私泄露程度。为了高效地进行这样的评估,我们明确设计了一小部分审计子群体,这些样本具有最坏情况的特征,称为金丝雀样本。
在我们的评估中,我们发现 DP-SGD 是一种难以超越的防御方法 —— 即使在当前分析技术无法提供任何有意义保证的情况下!一个根本性的问题是,可证明隐私与 empirical 隐私之间的差距究竟是由于隐私分析不充分,还是由于 empirical 攻击手段的不足。换句话说,我们的 empirical DP-SGD 方法在 CIFAR-10 等自然数据集上是否真的具备隐私保护(我们只是尚未找到证明的方法),还是说还有更强大的潜在攻击(我们尚未发现)?
#OpenCoder
完全开源的代码大模型OpenCoder来了,跻身性能第一梯队
本文的共同第一作者是墨尔本大学计算机科学硕士黄思明和复旦大学计算机科学硕士程天豪。OpenCoder 项目是二人在 INF 实习期间与 M-A-P 开源项目合作的成果,由 INF 主导,M-A-P 积极参与,通讯作者为汪自力与褚崴。来自 INF 参与者包括:郝嘉然,宋刘一汉,徐阳,汪自力,褚崴,徐盈辉,漆远。来自 M.A.P 的参与者包括:张舸,张晨晨,柴林政,J.Yang, J.H.Liu。其余合作者有:J.K.Liu;袁瑞峰;付杰;刘乾,Tiktok 研究员;张兆翔,中国科学院自动化研究所研究员。
代码大型语言模型(CodeLLM) 在代码生成、推理任务和智能代理系统等多个领域已变得不可或缺。尽管开源的代码大模型性能正逐步接近专有模型的水平,但适合进行科学研究的高质量 CodeLLM 仍然非常稀缺,尤其是数据清理流程、合成数据、模型训练流程全部可复现的全方位开源 CodeLLM。这一稀缺性源于多种挑战,包括资源限制、伦理考量、保持竞争优势等需求。
为弥补这一差距,研究团队推出了 OpenCoder,这是一系列能力达到第一梯队的 CodeLLM,不仅在性能上可与领先模型媲美,还为研究社区提供了全方面的构建细节。不同于大多数以往的工作,OpenCoder 不仅公开了模型权重和推理代码,还提供了可重复的训练数据、完整的数据处理流程、严谨的实验消融结果以及详细的训练细节,为科学研究开放了全面的资源。
研究团队发现构建高质量 CodeLLM 的关键因素有:(1) 数据质量至关重要,代码预训练数据需要精细的启发式规则清洗与文件粒度的去重(2)预训练数据中添加互联网网页中召回的代码相关语料(3)在退火和监督微调阶段使用高质量的合成数据。
OpenCoder 团队希望通过更高的开源程度,让研究人员深入了解代码大语言模型的各个细节,使 OpenCoder 不仅成为强大的模型,更成为开放的基础平台,加速研究进展,推动代码 AI 的可复现发展,缩小开源社区与工业界之间的差距。
- 论文标题:OpenCoder: The Open Cookbook for Top-Tier Code Large Language Model
- 论文链接:https://arxiv.org/abs/2411.04905
- 项目主页:https://opencoder-llm.github.io/
- 模型/数据集下载:https://huggingface.co/OpenCoder-LLM
- 代码仓库:https://github.com/OpenCoder-llm/OpenCoder-llm
预训练阶段
预训练数据构成了大型语言模型能力的基础。在开源社区中,The Stack v2 (Lozhkov et al., 2024a) 提供了一个有价值的代码数据集,有力地支持了代码语言模型的训练。然而,The Stack v2 的训练数据部分质量不足,无法使语言模型达到顶尖性能。
为此,研究团队提出了 RefineCode,这是一种高质量、可复现的数据集,包含了 9600 亿个标记 (token),涵盖了 607 种编程语言,并融入了 130 多条语言特定规则及其自定义权重分配。该数据集由两部分组成:原始代码和代码相关的网页数据。
具体来说,团队主要从 GitHub 上收集原始代码(截至 2023 年 11 月),并结合了 The Stack v2 中的非 GitHub 数据。此外,代码相关的网页数据主要来源于网页语料库。研究团队设计了一个复杂的数据处理流程来生成代码预训练语料库,包含预处理、去重、转换、过滤与数据重配比。
- 预处理:排除超过 8MB 的文件,以避免将非文本文件纳入数据集,同时仅保留 607 种编程语言相关文件。
- 去重:首先通过 SHA256 哈希进行精准去重,其次通过 MinHash+LSH 进行模糊去重,优先保留 star 数更高的文件
- 转换:进行敏感信息识别检测
- 过滤:根据 130 多项启发式过滤规则,进一步筛选高质量代码文件,确保数据的高质量
- 数据重配比:在确认保持原始分布的情况下,对 HTML 和 Java 两类数量较为庞大的编程语言进行下采样
- 在以上一整套针对代码清洗流程后,RefineCode 保留了约 730B 的 token 数量。
OpenCoder 首次提出一套针对不同编程语言的详细过滤规则,并将代码、调整参数完全开源。启发式规则设计准则如下:1) 过滤掉 self-contained 程度过低的代码;2) 过滤掉逻辑结构差或结构极简的文件;3) 移除显著偏离标准代码格式的文件。
可以注意到,当使用 PCA 对比 The Stack V2 和 RefineCode 的 codebert embedding 时,观察到这两个数据集之间有明显的区别。具体而言,在图 3 中,The Stack V2 数据显示出更多的离群点,而 RefineCode 的嵌入则更为紧密地聚集。此外,通过对离群数据的分析,OpenCoder 发现这些离群点通常表现出许多低质量的特征,例如纯文本注释、仅包含十六进制数据,以及缺乏计算逻辑的极短代码,这些特征会扰乱预训练数据集的分布,最终影响预训练的效率。
OpenCoder 同样从 Common Crawl 数据集中收集高质量代码相关数据,通过三轮 FastText 训练、召回、手工网页标注,最终成功获取了 330G 代码相关网页数据。
OpenCoder 采用了 WSD(Warmup, Steady, Decay)学习率调度策略,以在不同训练阶段中确保模型的稳定性与高效性。在训练初期,模型通过 2000 步的 warmup 阶段逐步提升学习率,达到峰值后进入稳定阶段,保持较长时间的固定学习率。最后,在退火阶段逐步降低学习率,实现模型的快速精细调优。在退火阶段中,除原始分布 RefineCode 外,OpenCoder 加入了算法相关语料库,同时合成了高质量代码段与代码教科书两种形式的数据,通过添加算法相关数据以及对算法知识进行反复改写来进一步增强来提高模型的代码逻辑能力。
指令微调阶段
1. 数据组成
除开源代码指令数据 (Evol-Instruct, Infinity-Instruct, MCEVal) 外,OpenCoder 从 wildChat,ShareGPT 中采样了代码相关的真实用户指令数据。此外研究团队还独立合成了大规模多样指令数据、教育意义指令数据集与外部库调用指令数据集,进一步增强了指令微调数据的质量与多样性。
2. 两阶段训练策略
OpenCoder 在指令微调期间使用了两阶段的训练策略。在微调过程的第一阶段,重点是广泛的真实用户指令与计算机科学理论相关知识。第一阶段的微调使 OpenCoder 能够理解和响应各种真实的用户需求。这些指令涵盖了计算机科学的各个方面,从基础编程到高级算法设计,再到复杂的数据结构操作。由于涵盖了广泛的代码相关指令,OpenCoder 在处理不同类型的编程问题时表现出卓越的适应性,能够灵活应对多种场景下的编码需求。
另一个显著优势是提升了模型的泛化能力。面对用户的不同表述和习惯用语,OpenCoder 能够快速理解意图并生成适切的解决方案。这种广覆盖的训练使模型不仅在特定任务上表现出色,还能在多样化的编程需求中提供准确、高效的帮助。
在指令微调的第二阶段,OpenCoder 使用高质量的下游任务相关数据进行训练,确保模型接触到现实世界中维护良好、格式规范的代码实例,且能在具体下游任务中表现出色。这种两阶段的微调方法使模型在理论知识和实际编程任务上都表现出色,避免了只关注某一方面的局限性。
消融分析
1. File-level 去重是代码数据去重的最优选择
OpenCoder 在全量 Github 上 485 百万个 Python 文件上进行了 repo-level,file-level 的去重处理,并在相同参数下训练了两个 1.5B 大小的 LLM。首先 repo-level 去重保留的 token 数量近乎是 file-level 的三倍,其次从下游数据集性能表现发现 file-level 去重效果显著优于 repo-level
对于 repo-level 的去重,进一步研究发现约有 52B 文件存在完全相同的另一份文件,且约 68B token(约占数据的 68.4%)可以被进一步 file-level 去重,这说明了 repo-level 去重并不充分。综上,对于大规模代码数据集,首先执行精确去重,其次进行文件层面的 MinHash 去重是一种高效且节省 CPU 的方案。
2. 高质量合成数据对于性能提升至关重要
在退火阶段训练过程中,研究团队消融了高质量合成数据的影响。从下游 Benchmark 性能可发现,当高质量训练数据被移除后,模型性能明显下降,这表明高质量数据在退火阶段具有显著的有效性。
3. Github Star 数并不是好的过滤标准
从直觉角度讲,更高 Star 的代码往往具有更清晰的注释,更优秀的代码组织方式。研究团队训练了两个 1.5B 的 LLM,其中一个使用原始数据训练,另一个则使用 GitHub 星级(星级 >=5)过滤后的数据进行训练,二者的 Benchmark 表现如下图所示:
可以发现使用原始数据训练的 LLM 优于使用过滤数据训练的 LLM,这一结果与 SantaCoder 的研究结果一致。此外,研究团队进一步展示了这两个 LLM 的训练损失,可以观察到使用过滤数据训练的 LLM 的损失低于使用原始数据训练的 LLM。对此现象,研究团队推测使用星级作为过滤信号能够提升数据质量,但相较于原始数据,数据的多样性有所限制。通过对二者数据分布的可视化分析,团队进一步验证了星级过滤显著影响了整体数据分布,削弱了数据多样性这一推断。
此外,通过人工检查被过滤部分的数据可以发现其仍包含大量结构良好且具有算法丰富性的代码。因此,研究团队认为星级作为过滤标准并非最佳选择。
4. 两阶段 SFT 方法在 Benchmark 和实际应用中取得双重收益
研究团队在 1.5B 模型上验证了两阶段 SFT 的收益。通过观察发现,Stage 1 的数据展现出显著的多样性,但平均质量相对较低。相比之下,Stage 2 的数据由高质量的代码特定 SFT 数据组成。该两阶段 SFT 策略使得模型在 Stage 1 中获得广泛的能力,随后在 Stage 2 中针对代码相关任务进行针对性提升。此外,类似于 Chatbot Arena,研究团队采用包含近 400 个人工创建样本的 Code Arena 测试集,以模拟真实环境中的用户代码相关提示。Code Arena 以 GPT-4 作为基准,并用 GPT-4 来判断哪个大语言模型(LLM)具有更好的响应能力,报告的结果为相对于 GPT-4 的胜率。结果展示了两阶段 SFT 训练策略在下游 Benchmark 上与体现真实应用能力的 Code Arena 上皆有收益。
评估结果
OpenCoder 模型在 HumanEval、MBPP 两主流模型评估任务上显著超过了现有开源模型,验证了其数据处理流程与合成数据的有效性。
为了检验 OpenCoder 的代码生成能力,研究团队在多个基准上将它与其他流行的开源模型(如 StarCoder2 、Qwen2.5-Coder 等)进行了比较,包括 HumanEval、MBPP、BigCodeBench 和 LiveCodeBench。结果表明,OpenCoder 在这些评估中达到了开源模型的一流水准。
此外,在多语言代码生成评估基准 MultiPL-E ,综合多语言代码评估基准 McEval 和多语言代码调试基准 MdEval 中,OpenCoder 表现也同样突出,证实了其出色的多语言性能。
实际使用
以下是由 OpenCoder-8b-Instruct 生成的贪吃蛇 demo。使用的 prompt 为 “Write a greedy snake game with randomly generated obstacles using pygame”。可以看到生成的代码可以不经过任何修改正常运行,且符合 prompt 中的设计要求。
#当今最复杂的椭圆曲线找到了
29个独立有理点打破18年记录
又是计算机帮了忙。
对现代密码学稍有了解的人都必定听过椭圆曲线的赫赫威名,但椭圆曲线本身依然还存在很多悬而未决的问题。今天,量子杂志作者 Joseph Howlett 介绍了这方面的一项打破 18 年记录的新突破:找到了一条迄今为止有理点模式最复杂的椭圆曲线。
宣布发现这条突破性曲线的邮件截图
今年 8 月,两位数学家发现了一条打破记录的怪异曲线。在此过程中,他们触及了一个仍待解决的重大难题 —— 其涉及到数学领域一类最古老、最基础的方程。
椭圆曲线至少可以追溯到古希腊,是许多研究领域的核心。它们具有丰富的底层结构,数学家们用它开发了许多强大的技术和理论。在 1994 年 Andrew Wiles 著名的费马大定理(是当时数论领域最重要的未解问题之一)证明中,椭圆曲线就发挥了重要作用。椭圆曲线对现代密码学也至关重要。
即便如此,对于椭圆曲线的某些最基本的问题,数学家们仍在寻找答案。举个例子,他们常通过研究椭圆曲线上的特殊「有理点(rational point)」来描述其特征。在一条给定的曲线上,这些点会形成清晰且有意义的模式。但我们目前尚不清楚这些模式的多样性和复杂程度是否有极限。
通过解答这个问题,可让数学家们理解数量巨大且种类繁多的椭圆曲线世界 —— 这个世界中的许多曲线都仍未得到探索。因此,数学家们开始探索这个世界的外围,寻找模式越来越奇怪的异常曲线。这个过程很艰辛,并且既需要创造力,也需要复杂的计算机程序。
现在,哈佛大学的 Noam Elkies 和加利福尼亚州拉霍亚通信研究中心的 Zev Klagsbrun 这两位数学家发现了一条至今为止有理点模式最复杂的椭圆曲线,打破了 18 年前的记录。
「这个阻碍能否打破是一个重大问题。」克罗地亚萨格勒布大学的 Andrej Dujella 说,「对于我们所有研究和关注椭圆曲线的人来说,这是一个非常令人兴奋的结果。」
寻找有理性
椭圆曲线的形式为 y² = x³ + Ax + B,其中, A 和 B 是有理数,它们看起来是这样的:
在椭圆曲线的研究中,数学家们特别关注其有理解 —— 即曲线上 x 值和 y 值都是有理数的点。俄亥俄州立大学的 Jennifer Park 表示:这实际上是人类数学历史上最古老的问题之一。
虽然找到简单类型方程的有理解相对直接,但椭圆曲线是真正存在许多未解问题的第一类方程,布朗大学的 Joseph Silverman 说道。「这仅仅是一个三次方程的两个变量,就已经足够复杂了。」
为了掌握椭圆曲线的有理解,数学家们常常依赖于曲线的秩,这是一个衡量曲线上有理点密集程度的数字。秩为 0 的椭圆曲线只有有限数量的有理点。秩为 1 的椭圆曲线拥有无限多的有理点,但所有这些点都按照一种简单的模式排列,这意味着如果你知道其中一个点,就可以遵循一个众所周知的程序来找到其余的点。
高秩的椭圆曲线同样拥有无限多的有理点,但这些点之间的关系更加复杂。例如,如果你知道一个秩为 2 的椭圆曲线的有理解,你可以使用在秩为 1 情况下相同的程序来找到一整个家族的有理点。但是,这条曲线还有第二个家族的有理点。这意味着这些有理点分布在曲线上以更复杂的方式,形成多个线性独立的族群。
椭圆曲线的秩告诉数学家们需要多少个独立的点,即来自不同家族的点 —— 以定义其有理解的集合。秩越高,曲线上的有理点就越丰富。秩为 2 和秩为 3 的曲线都有无限多的有理解,但秩为 3 的曲线包含来自额外家族的有理点,这意味着在平均情况下,一定长度的曲线将包含更多这样的点。
几乎所有的椭圆曲线都已知是秩为 0 或秩为 1。但仍然有无限多的异常情况具有更高的秩 —— 并且这些曲线极其难以找到。
因此,数学家们不确定秩是否有限制。在相当长的一段时间里,大多数专家认为理论上可以构造任何秩的曲线。最近的证据表明情况并非如此。由于没有确凿的证明,数学家们只能就椭圆曲线的真实本质进行辩论,这正说明了这些方程还有很多未知之处。
更大的一盘棋
Elkies,一位杰出的数论学家。在 2000 年代中期,他正在专注于看似无关的研究,称为 K3 曲面。为了理解它们,Elkies 将它们切割并观察各个部分。
想象一开始有一个简单的表面,一个平面。你可以将其切割成无限多的直线,这些直线并排放置。根据你切割的方式,最终得到的线条将由不同的方程定义。
同样地,有更复杂的、曲线的表面,当切割时,会产生无限多的椭圆曲线。自 1950 年代以来,数学家们一直在使用这些表面来找寻高秩椭圆曲线。
Noam Elkies
Elkies 意识到 K3 曲面足够奇特,可以让他接触到更奇特的曲线。2006 年,他以正确的方式对一个特定的 K3 曲面进行了切片,并在切片中发现了一条椭圆曲线,他可以证明该曲线的秩至少为 28,打破了之前 24 的记录。这对椭圆曲线专家来说是一个激动人心的时刻,他们相信接下来可能会出现一大批打破纪录的人。
然而,之后并无大的突破。Elkies 的记录保持了将近二十年 —— 这与自 1970 年代以来数学家们相对稳定的刷新记录的速度形成了明显的背离。
这或许是一种迹象,表明秩毕竟可能是有限的,或者,这仅仅反映了这一研究确实很难?
在 2006 年 Elkies 公布他的发现之际,Zev Klagsbrun 正就读于纽约皇后学院本科。他的一位教授,曾在 80 年代和 Elkies 比过同一场高中数学竞赛。在办公时间,Zev 被告知了这个破纪录的曲线的新消息。
这是 Zev 首次对寻找有理点产生兴趣。
Zev Klagsbrun
Zev 对此很感兴趣。多年后,他重新审视了 Elkies 的结果,证明了一个猜想是正确的 ——Elkies 的曲线的秩恰好是 28。
因此,当 Zev 在 2019 年的一个会议上遇到 Elkies 时,他说服了 Elkies 重新开始寻找新的曲线。
「我当时说,嘿,我愿意写代码,和我一起继续破解椭圆曲线的秘密吧!」Zev 说。
在 Elkies 同意之后,他们重新审视了十八年前 Elkies 研究过的 K3 曲面。当时,Elkies 通过切片,得到了结论:这些曲线的秩至少为 17,但他的目标是超越 24 的记录。
由于无法直接计算每一条曲线的秩,Elkies 筛选出在数百万条曲线中最可能具有异常高秩的候选,再手动计算这些曲线的秩,直到最终找到了那条秩为 28 的曲线。
Klagsbrun 提供了一个更快的计算方法,把 Elkies 能处理的数百万条,扩展到了数十万亿条。
这次更广泛的搜索,从旧的曲线堆中发现了许多不寻常特性的曲线,但它们都没有打破 28 秩的记录。两人决定继续前进。
四年过去了。然后就到了几个月前,Elkies 和 Klagsbrun 在一次会议上再次相遇,并开始交谈。
他们开始以不同的方式对 K3 曲面进行切片,得到了一个可以研究的新曲线堆。但是,切片方法有好几百种,而大多数切片方法似乎都不太可能得到他们想要的曲线。
然后,他们完全偶然地发现了一种切片方法,就像 Elkies 之前的那种方法一样,可以得到一个曲线堆,并且保证其中所有曲线的秩都至少为 17。与其他方法相比,这种方法似乎更可能挖到宝。果然,使用 Klagsbrun 更强大的计算技术,他们在这个曲线堆中发现了一条秩至少为 29 的椭圆曲线。这条椭圆曲线具有迄今为止发现过的最复杂的有理解集:需要至少 29 个独立点才能描述其特征。
这条曲线的方程如果写成 y² = x³ + Ax + B 的形式,则 A 和 B 的值都有 60 个数字那么长。Elkies 和 Klagsbrun 找到的 29 个独立的有理解涉及的数同样巨大。
29 个独立点的 x 轴坐标
抓住极限
对于椭圆曲线的秩是否有上限的问题,这个结果并未将其彻底解决。「现在我们已经找到了这一条秩更高的曲线,那就有理由去希望」存在具有任意高的秩的曲线,Klagsbrun 说,「另一方面,老天,找到这一条就耗费了大量功夫。很显然想要找到更高秩的样本,还需要一些新思路。」
不过如果能将他和 Elkies 的努力推进得足够远,也许能够扭转局面。他们需要找到一个无限的曲线堆,保证其秩至少为 22(而不是 17,这是他们迄今为止所能做到的最好结果)。如果存在这样一个堆,那就会与「秩存在有限上限」的已有最有力证据相矛盾。
不管怎样,这条秩 29 曲线的发现都拓展了这个未知领域的边界。正如生物学家试图通过研究生活在极端环境中的生物来了解生命一样,通过绘制椭圆曲线世界的极端边缘,数学家也可以获得很大收获。
原文链接:
https://www.quantamagazine.org/new-elliptic-curve-breaks-18-year-old-record-20241111/
https://listserv.nodak.edu/cgi-bin/wa.exe?A2=NMBRTHRY;b9d018b1.2409&FT=&P=&H=&S=b
#CryoSTAR
ByteDance Research登Nature子刊:AI+冷冻电镜,揭示蛋白质动态
2024 年的诺贝尔化学奖颁发给了在结构生物学领域取得重大成就的 David Baker 团队和 AlphaFold 团队,激发了 AI for science 领域新的研究热潮。
近两年科学界一个饱受争议的命题是:“AlphaFold 是否终结了结构生物学?” 首先,AlphaFold 之类的结构预测模型的训练数据正是来自于以 X 射线、冷冻电镜(cryo-EM)等为代表的传统结构解析方法。其次,冷冻电镜技术非常擅长解析蛋白质的动态,而这正是 AlphaFold 所无法做到的。巧合的是,冷冻电镜这项技术于 2017 年也获得了诺贝尔化学奖。
那么,以 AlphaFold 为代表的 AI 技术能否辅助以 cryo-EM 为代表的传统方法?两个诺奖级技术的碰撞,能够擦出什么样的火花?
ByteDance Research 提出 AI for Science 模型被 Nature 子刊收录
近日,来自字节跳动 ByteDance Research 团队的研究人员提出了 CryoSTAR 方法,成功将来自原子模型的结构先验应用到冷冻电镜实验数据的动态解析中,为解决这一问题带来了新的思路和方法。该成果相关论文 “CryoSTAR: Leveraging Structural Prior and Constraints for Cryo-EM Heterogeneous Reconstruction” 已刊发于 Nature 旗下刊物 Nature Methods,李宜来、周奕、袁璟为共同一作,顾全全教授为通讯作者。
- 论文链接:https://www.nature.com/articles/s41592-024-02486-1
- 论文主页:https://bytedance.github.io/cryostar/
- 开源链接:https://github.com/bytedance/cryostar
基于结构先验和约束的动态解析
CryoSTAR 是首个成功在冷冻电镜实验数据上应用蛋白质原子结构模态先验的方法,方法的主要特点有:
- 结合蛋白质结构先验知识:CryoSTAR 方法创新性地利用原子模型信息作为结构正则化来解决冷冻电镜数据中的构象动态问题,这与以往大多数仅从计算机视觉角度处理问题的方法不同。它要求一个初始原子模型作为参考,将其结构信息用于适当地约束模型解析出的构象动态,从而缩小搜索空间,避免错误的解析结果,实现更好更快的收敛。
- 输出两种模态的解析结果:该方法独特之处在于它能同时输出粗粒度的原子模型和密度图解析结果,这种多维度的结果输出有助于研究人员更全面地了解生物分子的结构和动态过程。同时,密度图的输出结果也可以验证原子模型结果的置信程度,检验粗粒度原子模型的动态是否能够充分被数据所支持。
该方法分为两个阶段:
- 第一阶段通过结构正则化约束的变分自动编码器(VAE)解析数据中的动态构象。CryoSTAR 通过 Encoder,将构象的动态压缩到一个潜在变量中;Decoder 将潜在变量解析成相应的先验粗粒度原子模型的变形来拟合数据。它在三个基本假设下进行基于结构正则化:一是同一链上的两个相邻残基应始终保持连接,通过连续损失函数来约束;二是预测变形后残基不应过于靠近,通过冲突损失函数来惩罚碰撞;三是局部结构应尽可能刚性,通过从先验原子结构模型构建弹性网络并使用弹性网络损失函数来鼓励这种刚性,同时还采用自适应松弛方法来选择弹性网络中的边进行正则化,以避免参考原子模型带来的过度偏差。
- 第二阶段通过训练一个密度图解码器来得到密度图模态的动态构象解析结果。在 VAE 训练完成后,提取所有图像对应的潜在变量并用于训练密度图解码器。密度图的细节优化由输入图像约束,不受结构先验和正则化的直接影响,从而最小化结构先验对输出密度图的 bias,使得生成的密度图可用于评估和验证粗粒度原子结构模型。
多种典型蛋白数据上的实验验证
,时长00:15
图 3 EMPIAR-10180 结果
,时长00:15
图 4 EMPIAR-10073 结果
大型复合物(残基数量约 10,000)
CryoSTAR 在多个公开数据集(EMPIAR)的冷冻电镜实验数据上得到了验证。对于酵母预催化 B 复合物剪接体(EMPIAR-10180),使用 PDB: 5NRL 作为先验结构,cryoSTAR 成功揭示了 SF3b 和解旋酶区域的构象变化,其结果与其他方法一致,并且生成的粗粒度模型在电子密度图中得到了充分验证,展现出合理的运动模式。对于 U4/U6.U5 三核糖核蛋白(EMPIAR-10073),以 PDB: 5GAN 为参考结构,cryoSTAR 同样解析了头部结构域的动态变化,结果与现有方法的发现一致。
,时长00:15
图 5 EMPIAR-10059 结果
,时长00:10
图 6 EMPIAR-10827 结果
膜蛋白(氨基酸数量约 2,000)
图 7 CryoSTAR 与 CryoDRGN 在 EMPIAR-10059 上的结果对比
对于 TRPV1 通道蛋白(EMPIAR-10059),使用 PDB: 7RQW 作为参考先验原子模型,cryoSTAR 发现了蛋白外周可溶结构域的微妙而平滑的运动,每个亚基的运动可通过不同主成分可视化。研究还表明结构正则化在揭示膜蛋白动力学方面具有关键作用,相比之下,没有结构先验的方法如 cryoDRGN 在膜蛋白的动态解析方面存在不足。
单链蛋白(氨基酸数量约 1,000)
图 8 CryoSTAR 与 CryoDRGN、3DFlex 在 EMPIAR-10059 上的结果对比
对于 毒素蛋白 α-LCT(EMPIAR-10827),cryoSTAR 揭示了两种类型的运动,与离散 3D 分类发现的两种构象相吻合,且生成的粗粒度原子模型合理,与密度图拟合良好。结构正则化在这个具有连续异质性的小蛋白中效果显著,相比其他方法如 cryoDRGN 和 3DFlex,cryoSTAR 生成的密度图更连续,能有效避免密度图中的伪影。
总结:利用跨模态数据解析自然现象
字节跳动 ByteDance Research 提出的新的结合结构先验的方法 (CryoSTAR) 显著提升了冷冻电镜(Cryo-EM)在动态构象解析中的应用潜力。通过利用原子结构模态先验作为约束,同时输出两种模态的解析结果,这一创新方法在技术上展示了其独特的优势,并为科学研究打开了新的大门。
该研究在冷冻电镜动态解析领域的重要意义不可忽视。传统的冷冻电镜方法由于其分辨率和解析能力的限制,常常难以捕捉到生物大分子复杂的动态变化。而此次引入结构先验的策略,极大地增强了动态构象解析的精度与可靠性,使我们能够更深入地理解生物大分子的动态行为及其机制。
这种方法的潜在价值在生命科学和制药领域尤为突出。生物大分子的动态解析是理解其功能机制的关键,如蛋白质的折叠、酶活性部位的变化、受体 - 配体的结合模式等。这些动态过程与众多生理与病理现象息息相关,例如细胞信号传导、代谢调控以及疾病发生机制等。因此,准确解析这些动态过程不仅能帮助揭示生物学基本问题,还能为发现新型药物靶点和优化药物设计提供重要依据。在制药领域,这一方法同样具有广泛的应用前景。通过更高精度地捕捉蛋白质和其他生物大分子的动态变化,研究人员可以更有效地筛选潜在药物、设计更具针对性的药物分子,进而提高药物研发的效率和成功率。例如,这一方法可以帮助解析癌症、神经退行性疾病等重大疾病相关蛋白质的动态构象变化,为开发新药物提供详细的分子级信息。
总而言之,ByteDance Research 的这一创新研究不仅代表了冷冻电镜动态解析技术的最新进展,更为生命科学和制药领域带来了巨大的潜在价值。期待未来该方法能在更多研究和实际应用中得到验证和推广,为生命科学研究以及药物研发带来新的突破和希望。
ByteDance Research AI 制药团队持续在 AI for Science 方向发力
ByteDance Research AI 制药团队致力于将人工智能技术应用于科学研究与药物开发。团队在生成式蛋白质设计、蛋白质构象预测以及冷冻电镜解析等领域取得了业界瞩目的成果。
- 蛋白质设计:团队研发了基于大规模蛋白质语言模型的序列设计方法 LM-Design [1],大幅提高了蛋白质序列设计的准确度与效率;研发了结合扩散模型与语言模型的新一代蛋白质基础模型 DPLM 1/2 [2, 3],首次全面统一了蛋白质建模、理解与生成;研发了基于偏好优化的抗体设计方法 AbDPO [4],能够设计出同时满足多种性质和能量要求的抗体。
- 蛋白质动态构象预测:团队研发了 ConfDiff [5] 等模型,准确预测了蛋白质的构象变化,加深了对蛋白质生物过程的理解,还为新药研发提供了可靠的理论基础。
- 冷冻电镜解析:团队研发了 CryoSTAR [6] 电镜解析工具,结合人工智能技术和高分辨率成像,有助于揭示复杂生物分子体系的构象特征和动态变化;研发了第一个蛋白质密度基座模型 CryoFM [7],为下一代电镜解析算法奠定了基础。
团队的研究成果多次发表在 Nature 子刊、ICML、NeurIPS、ICLR 等顶级学术会议上,得到学术界和业界的广泛认可。
#The Surprising Effectiveness of Test-Time Training for Abstract Reasoning
连OpenAI都推不动Scaling Law了?MIT把「测试时训练」系统研究了一遍,发现还有路
昨天,The Information 的一篇文章让 AI 社区炸了锅。
这篇文章透露,OpenAI 下一代旗舰模型的质量提升幅度不及前两款旗舰模型之间的质量提升,因为高质量文本和其他数据的供应量正在减少,原本的 Scaling Law(用更多的数据训练更大的模型)可能无以为继。此外,OpenAI 研究者 Noam Brown 指出,更先进的模型可能在经济上也不具有可行性,因为花费数千亿甚至数万亿美元训练出的模型会很难盈利。
这篇文章引发了业界对于未来 AI 迭代方向的讨论 —— 虽然 Scaling Law 放缓这一说法令人担忧,但其中也不乏乐观的声音。有人认为,虽然从预训练来看,Scaling Law 可能会放缓;但有关推理的 Scaling Law 还未被充分挖掘,OpenAI o1 的发布就证明了这一点。它从后训练阶段入手,借助强化学习、原生的思维链和更长的推理时间,把大模型的能力又往前推了一步。这种范式被称为「测试时计算」,相关方法包括思维链提示、多数投票采样(self-consistency)、代码执行和搜索等。
其实,除了测试时计算,还有另外一个近来非常受关注的概念 —— 测试时训练( Test-Time Training ,TTT),二者都试图在测试(推理)阶段通过不同的手段来提升模型的性能,但 TTT 会根据测试时输入,通过显式的梯度步骤更新模型。这种方法不同于标准的微调,因为它是在一个数据量极低的环境中运行的 —— 通常是通过单个输入的无监督目标,或应用于一个或两个 in-context 标注示例的有监督目标。
不过,TTT 方法的设计空间很大。目前,对于哪些设计选择对 LM(特别是对新任务学习)最有效,人们的了解还很有限。
在一篇新论文中,来自 MIT 的研究者系统地研究了各种 TTT 设计选择的影响,以及它与预训练和采样方案之间的相互作用。看起来,TTT 的效果非常好,至少从论文标题上看,它的抽象推理能力惊人(surprising)。
- 论文标题:The Surprising Effectiveness of Test-Time Training for Abstract Reasoning
- 论文链接:https://ekinakyurek.github.io/papers/ttt.pdf
具体来说,作者确定了将 TTT 有效应用于 few-shot 学习的几个关键要素:
- 在与测试时类似的合成任务上进行初始微调;
- 用于构建测试时数据集的增强型 leave-1-out 任务生成策略;
- 训练适用于每个实例的适应器;
- 可逆变换下的自我一致性(self-consistency)方法。
实验环节,研究者在抽象与推理语料库(ARC)中对这些方法进行了评估。ARC 语料库收集了很多极具挑战性的 few-shot 视觉推理问题,被认为是测试 LM 泛化极限的理想基准。目前的大多语言模型在 ARC 上均表现不佳。
ARC 推理任务示例。可以看到,这是一组类似于智力测试的问题,模型需要找到图形变换的规则,以推导最后的输出结果。
通过对这些部分的精心选择,TTT 可以显著提高 LM 在 ARC 上的性能 —— 在 1B 模型上将准确率提高到原来的 6 倍,使用 8B 模型时也超过其它已发布的 SOTA 纯神经模型方法。
事实上,他们的研究结果表明,当配备测试时训练时,普通的语言模型可以在 ARC 任务上达到或超过许多神经 - 符号方法的性能。
这些结果挑战了这样一个假设:解决这类复杂任务必须严格依赖符号组件。相反,它们表明解决新推理问题的关键因素可能是在测试时分配适当的计算资源,也许与这些资源是通过符号还是神经机制部署无关。
数据科学家 Yam Peleg 高度评价了这项研究:
美国 Jackson 实验室基因组学部教授 Derya Unutmaz 则表示这是一项「令人震惊的研究」,因为如果 TTT 与 LLM 相结合足以实现抽象推理,我们就有可能消除对显式、老式符号逻辑的需求,并找到实现 AGI 的可行途径。
不过,过完一关还有一关:Epoch AI 与 60 多位顶尖数学家合作打造的 FrontierMath,已经成为评估人工智能高级数学推理能力的新基准,恐怕接下来各位 AI 研究者有的忙了。
论文概览
作者研究了现有的测试时训练理念:根据测试输入构建辅助数据集,并在预测前更新模型。但目前还不清楚的是,应该在哪些任务上进行训练、进行哪种推理以及从哪个基础模型开始?
他们为 ARC 挑战赛提供了一组广泛的消融数据。具体来说,他们进行了三项分析,以回答如何进行 TTT,以及 TTT 之前和之后要做什么。
TTT 需要什么数据?
作者尝试了两种不同的 TTT 数据生成方式:一是 in-context learning(ICL)格式;另一种是端到端格式。在 ICL 中,作者从给定的测试演示中创建 leave-1-out 任务。在 E2E 中,他们将每个 i/o 对视为一个单独的任务。
他们还应用了一些几何变换来扩充数据;请看上图中 ICL 任务是如何生成的。他们使用这些生成的任务,用 LoRA 更新他们的模型。他们发现,ICL 优于 e2e 任务,数据增强至关重要。
他们用 LoRA 更新了模型。但问题是,应该为每个测试任务训练一个新的 LoRA,还是使用从所有测试任务生成的数据集训练一个共享的 LoRA?他们发现,为每个任务训练 LoRA 要好得多 (FT + TTT vs Shared-TTT)。
TTT 之后的推理
ARC 中没有 CoT,因此无法通过多数投票来改进推理。研究者对此的做法与 TTT 相同:创建少量任务,然后用可逆函数对其进行变换。于是有了一堆经过变换的原始任务输入。
研究者输入变换后的输入,然后将输出反转回来。现在,他们可以从多数表决中获益更多。他们将其命名为「可逆变换下的 self-consistency」。它比任何单一变换的预测效果都要好,分层投票的优势更大。
TTT 前的微调
你需要微调一个基础 LM,但不需要太多新数据。根据训练任务的重现 + 少量几何变换对模型进行微调,就能获得不错的得分。
研究者尝试了大量基于 LM 的合成数据,但意外地发现,这些数据并没有什么帮助。有趣的是,TTT 缩小了不同级别模型之间的差距。
以 ARC 来检验
抽象推理语料库(ARC)旨在通过语言模型解决视觉谜题的能力来评估其抽象推理能力。如图 1 (b) 所示,每个谜题(以下简称任务)都是由输入 - 输出对组成的二维网格(最大尺寸为 30 × 30),其中包含最多 10 种不同颜色的形状或图案。通过应用直观、共享的变换规则或函数 y = f (x),可以获得每对网格的输出。在实践中,这些变换具有高度多样性和复合性,既有简单的概念,如反射和计数,也有更复杂的概念,如施加引力和路径查找。
ARC 中的每项任务都由训练和测试两部分组成。给定训练样本集,目标是通过推理潜在变换,预测测试输入 x^test 的测试输出 y^test。
研究者用
表示一个任务,其中
,即 ARC 任务的集合。ARC 数据集的原始训练集和验证集各由 400 个任务组成。成功标准要求对所有测试输出结果进行精确匹配(如果没有给出部分分数)。
大多数 ARC 方法可分为两大类:程序合成和 fully neural(全神经网络方法)。程序合成试图首先找到变换函数 f,然后将其应用于测试样本。另一方面,全神经方法试图直接预测输出 y 测试,只是隐含地推理底层变换。在这项工作中,研究者采用了全神经网络方法,使用 LM 来预测测试输出。
研究者首先使用了在文本数据(没有视觉编码器)上预训练过的 LM。为了向这些模型提供 ARC 样本作为输入,需要一个格式化函数(用 str 表示),将二维网格转换为文本表示。以前的一些工作将样本表示为一串数字或 color word,或标有形状和位置的连接组件列表。给定任务的任何此类字符串表示,都可以将其呈现给 LM,并通过简短提示进行预测。
实验结果
最终,在对 80 项任务进行开发实验之后,研究者展示了 ARC 全部公共评估集的综合结果,并将本文系统与现有方法进行了比较。分析主要集中在三个方面:本文 TTT 方法的影响、本文方法与现有方法相结合的益处、全神经方法与程序合成方法之间的差异。
测试时训练的影响。研究者将测试时训练和推理过程应用于本文的基础微调模型(没有任何 LM 数据的微调 8B 模型)。TTT 将准确率从 39.3% 提高到 47.1%,超过了现有端到端神经模型的结果。
与现有方法的整合。最近的一项工作引入了 BARC,通过结合神经和程序合成方法实现了 54.4% 的准确率,这是此前公开发表的最高结果。虽然这里的全神经方法与本文系统有相似之处,但本文 TTT 和推理 pipeline 有几个额外的组件可以提高性能。特别是,本文的测试时训练包括每个任务的 LoRA 和更大的增强集,而预测 pipeline 包括可逆变换下的增强推理和分层 self-consistency 投票方案。为了验证这种改进,研究者将本文的 TTT pipeline 应用于 BARC 的全神经模型,准确率达到了 53%,比最初的 TTT 方法提高了 35%。
在这些结果的基础上,研究者探索了本文方法与 BARC 组件的各种组合:
- 将本文的 TTT pipeline 与神经模型与 BARC 合成器相结合,准确率提高到 58.5%。
- 将本文的 TTT pipeline 与 BARC 神经模型和合成器相结合,准确率提高到 61.9%。
这一最终配置在 ARC 公共评估集上实现了新的 SOTA 水平,与 60.2% 的人类平均性能相当。当然,这是一次重大进步,但与人类 97.8% 的最佳表现仍有很大差距,表明仍有进一步提高的空间。
程序生成和端到端建模的对比。程序合成和用于 ARC 的全神经预测器具有很强的互补性,即使在相同的任务上进行训练也是如此。此前的端到端神经模型只能解决程序合成模型所解决任务的 42.2%。然而研究者发现,当配备本文的 TTT pipeline 时,BARC 的微调全神经模型可以解决程序合成模型所解决任务的 73.5%。这表明,本文的 TTT pipeline 大大提高了神经模型学习系统推理模式的能力,与程序合成模型所捕捉到的推理模式类似。
更多研究细节,可参考原论文。
参考链接:https://x.com/akyurekekin/status/1855680791784600013
#Ilya认错,Scaling Law崩了?
自曝SSI秘密技术路线取代OpenAI
Ilya终于承认,自己关于Scaling的说法错了!现在训练模型已经不是「越大越好」,而是找出Scaling的对象究竟应该是什么。他自曝,SSI在用全新方法扩展预训练。而各方巨头改变训练范式后,英伟达GPU的垄断地位或许也要打破了。
昨天,The Information爆料,传统的大模型Scaling Law已经撞墙,OpenAI下一代旗舰Orion遭遇瓶颈。
就在刚刚,路透社也发文表示,由于当前方法受到限制,OpenAI和其他公司正在寻求通向更智能AI的新途径。
有趣的是,昨天拱火的The Information,今天又急忙发出一篇文章来灭火。
他们强调,昨天的文章只是在说改进大模型必须找到新方法,并不是说Scaling Law已经终结。
但一个不争的事实就是:硅谷几大主要AI实验室正在陷入困境。训练这些大规模的LLM动辄需要花费数千美元,但复杂系统还经常崩溃。往往需要数月时间,才知道模型能否按预期工作。
比起GPT-4o,Orion几乎没有任何改进;谷歌的Gemini 2.0,被曝也存在同样问题;Anthropic据传也已暂停Opus 3.5模型的工作。
据悉,谷歌正准备在12月推测出最新的Gemini 2.0,它可能无法实现DeepMind创始人Demis Hassabis团队预期的显著性能改进,但会有引入一些有趣的新功能
Anthropic首席执行官Dario Amodei 表示,「我们的目标是改变曲线,然后在某个时候成为Opus 3.5」
而离职创业的OpenAI元老则Ilya Sutskever则表示,现在重要的是「扩大正确的规模」。
「2010年代是scaling的时代,现在,我们再次回到了奇迹和发现的时代。每个人都在寻找下一个奇迹。」
对经营着自己的AI实验室SSI的Ilya来说,这是一个很大的改变。
曾经在推动OpenAI的GPT模型时,他的准则是「越大越好」。但在SSI的最近一轮融资中,Ilya开始希望尝试一种与OpenAI不同的Scaling方法。
Scaling Law大家都说得够多了。但有一个问题,却被每个人都忽略了——我们说scaling的时候,究竟在scaling什么?
如今,Ilya抛出了这个振聋发聩的疑问。
Scaling正确的东西,比以往任何时候都更重要
毕竟,超大规模语言模型的ROI实在太低了。
虽然在GPT-4发布后,各大AI实验室的研究人员都竞相追赶,发布了超过GPT-4的大模型,但他们更多的感觉是失望。
因为要同时运行数百个芯片,这种超大参数模型的训练可能要花费数千万美元,系统太复杂还可能会出现硬件故障。但只有经过数月,等到运行结束后,研究人员才能知道模型的最终性能。
另一个问题,就是LLM吞噬了大量数据,而世界上易于获取的数据,几乎已经被耗尽了!
同时,由于过程中需要大量能源,电力短缺也成为训练AI的严重阻碍。
论文题目:「The Unseen AI Disruptions for Power Grids: LLM-Induced Transients」
替代Scaling的新方法,Ilya已经有了?
面对这种种现状,Ilya最近在路透社的采访中表示,扩展训练的结果,已经趋于平稳。
也就是说,用大量未标记数据来理解语言模式和结构的训练阶段到头了。
以前,Ilya是暴力scaling的早期倡导者之一,那时有一种想法广泛认为,通过预训练中使用更多的数据和算力,能让AI模型的性能暴涨。
OpenAI团队2020年提交的arXiv论文中最先提出这一概念:LLM性能与计算量、参数量、数据量三者呈现幂律关系
的确,沿着这条路线,最终ChatGPT诞生了。
ChatGPT发布后,从AI热潮中受益颇多的科技公司都公开声称,这种通过增加数据和算力来「scale up」的方法,能显著改善模型性能。
可是现在,Scaling Law已经碰壁了!越来越多的AI科学家,对于这种「越大越好」(bigger is better)的哲学产生了质疑。
2010年代属于Scaling,但大模型要继续发展下去,需要一个新的奇迹。
Ilya的SSI团队是否找到了呢?
对此,Ilya拒绝透露,只是表示,SSI正在研究一种全新的替代方法,来扩展预训练。
再领先三步?OpenAI破局新方法:测试时计算
同时,OpenAI仿佛也找到了新方法——通过开发使用更类人思维的算法训练技术,或许就能克服在追求更大规模LLM过程中遇到的意外延迟和挑战。
已经有十几位AI科学家、研究人员和投资者告诉路透社,他们认为正是这些技术,推动了OpenAI最近发布的o1模型。
而它们,可能会重塑AI竞赛的格局,让AI公司们不再对能源和芯片资源产生无限制的需求。
有没有这么一种新方法,让AI模型既能摆脱对数据的依赖,又不再需要动辄吞噬整个国家乃至全球的电力?
为了克服这些挑战,研究人员正在探索一项「测试时计算」的技术。
上图即是OpenAI解释o1的博文,x轴标记为「训练时计算」和「测试时计算」。
左图是OpenAI发现的Scaling Law,意味着在模型上投入更多训练时间(GPU周期)时,我们可以获得更好的结果。
右图则暗示了我们尚未触及的一套全新的Scaling Law。「测试时计算」意味着,给模型更多的「思考时间」(GPU周期)时,它会思考出更好的结果。
测试时计算技术,能在推理阶段(模型被使用时)就将模型增强,比如,模型可以实时生成和评估多种可能性,而不是理解选择单一答案。最终,模型就可以选择出最佳路径。
这种方法可以允许模型将更多的处理能力,用于数学、编码问题等具有挑战性的任务,或者需要类人推理和决策的复杂操作。
传统的Scaling Law,专注于用更长时间训练大模型,但如今o1系列模型scaling有了两个维度——训练时间和测试(推理)时间
早在上个月的旧金山TED AI会议上,曾参与o1开发的OpenAI研究员Noam Brown就提出——
事实证明,让一个机器人在一局扑克中思考仅20秒,其性能提升与将模型规模扩大10万倍并训练10万倍时间相同。
o1模型以前曾被称为「Q*」和「Strawberry」。现在,它能够以多步骤方法思考问题,类似于人类推理。
现在,模型不再受限于预训练阶段,还可以通过增加推理计算资源,来提升表现
而且,它还涉及了来自博士和行业专家策划的数据和反馈。
o1系列的秘密武器,是在GPT-4等基础模型上进行的另一套训练,OpenAI还计划,将这种技术应用于更多更大的基础模型。
OpenAI的首席产品官Kevin Well在十月的一次科技会议表示——
我们看到很多可以快速改进这些模型的机会,而且非常简单。到人们赶上来的时候,我们会尝试再领先三步。
通过思维链提示,o1模型可以经过训练生成长长的输出,并通过答案进行推理
全球顶尖AI实验室开卷,英伟达垄断地位有望打破?
OpenAI说要领先三步,其他顶尖AI实验室岂甘落后?
据知情人士透露,来自Anthropic、xAI和谷歌DeepMind的研究人员,也已经奋力开卷了!
比如Meta最近提出了「思维偏好优化」TPO,这种方法旨在教会LLM在回答一般任务(而不仅仅是数学或逻辑问题)之前「思考」,而不需要特殊的训练数据。
论文地址:https://arxiv.org/pdf/2410.10630
而谷歌也在开发一种新模型,同样使用CoT方法解决多步骤问题、生成多个答案,评估后选择最佳答案。
这个过程同样可以通过在推理中使用更多算力来增强,而非仅仅增加训练数据和算力,这就为扩展AI模型开辟了一条新道路。
论文地址:https://arxiv.org/pdf/2408.03314
这会导致什么后果?
很有可能,对英伟达GPU巨大需求主导的AI硬件竞争格局,将从此改变。
这是因为,通过增加训练时间和测试(推理)时间,可能会获得更好的结果,模型就不再需要那么大的参数。
而训练和运行较小模型会更便宜,因此,在给定固定计算量的情况下,我们可能会突然从小模型中获得更多收益。
突然之间,模型参数、训练时间和测试时间计算之间的关系变得复杂了,也就让我们看到了下一代GPU的可能。
比如Groq这样的公司,恰巧就在为这类任务制造专门的芯片。
今年2月登场的世界最快大模型Groq,每秒500 token直接破了纪录,自研的LPU在LLM任务上比英伟达GPU性能快了10倍。
红杉资本和A16z在内的著名风投机构,如今已经投入了数十亿美元,资助OpenAI、xAI等多家AI实验室的开发。
他们不可能不注意到最近圈内盛传的Scaling Law碰壁事件,而重新考虑自己的昂贵投资是否会打水漂。
红杉资本合伙人Sonya Huang表示,这种转变,将使我们从大规模预训练集群转向推理云,即分布式的、基于云的推理服务器。
大模型热以来,对英伟达尖端AI芯片的需求,已经让它崛起为全球最有价值的公司,并且市值超越了苹果。
今年以来,英伟达股价了约186%,而苹果仅上涨了17%
虽然在训练芯片的市场,英伟达已经占据主导地位,但它在推理市场,可能还会面临更多竞争。
而o1模型背后技术,意味着对推理芯片的需求也会随着增加。
「我们现在发现了第二个Scaling Law,这是在推理阶段的Scaling Law……所有这些因素导致对Blackwell的需求非常高。」
在英伟达GTC大会上,黄仁勋也讲到,如果要训练一个1.8万亿参数量的GPT模型,需要8000张H100 GPU,消耗15兆瓦的电力,连续跑上90天
随着Scaling Law碰壁,各大公司纷纷开启新路线,英伟达是否还会继续坐火箭般的辉煌呢?
再见,GPT。你好,推理「o」
The Information今天的解释文章,标题意味深长:《再见,GPT。你好,推理「o」》。
文章内容是这样的。
月初,一位Reddit用户曾在QA种问道,OpenAI的下一代旗舰大语言模型何时发布。
对此,Altman回答说:「今年晚些时候,我们会发布一些非常不错的产品,但并不会叫做GPT-5。」随后他又补充道,有限的计算资源意味着很难同时推出过多的项目。
当时我们并未多想。
但如今,我们更能理解Altman的评论了——以及他为何专注于推出o系列推理模型而非另一版本的GPT 。
所谓GPT,即生成式预训练Transformer模型,是ChatGPT和大多数其他生成式人工智能产品的基石。
原因正如之前报道的那样,GPT的改进速度正在放缓。
2023年初登场的上一代旗舰级模型GPT-4,凭借着巨大的性能提升在科技行业引发了轰动。
Orion比GPT-4更好,但其质量提升与GPT-3和GPT-4之间的差距相比略显逊色。甚至,可能会让OpenAI放弃自2018年推出GPT-1起使用的「GPT」命名惯例。
因此,当Altman写道「o1及其后续版本」时,可能意味着Orion将与推理融合并被命名为「o2」。
随着一种Scaling Law的消退,另一种定律取而代之
让我们回到GPT发展放缓这个问题上。
传统的Scaling Law不仅仅意味着在大语言模型训练过程中需要更多的数据和计算能力才能获得更好的结果。OpenAI的研究人员还做了各种其他有趣的事情,才使得GPT-4比GPT-3有了大幅提升。比如,引入被称为模型稀疏性的概念。
随着推理范式的出现,预训练改进的放缓变可以得到弥补——从本质上讲,它可能代表了一种新的Scaling Law。
OpenAI一再表示,推理模型的性能在回答问题前有更多时间思考时会变得更好,这被称为对数线性计算扩展。
那么,这些变化是否意味着OpenAI的1000亿美元超级计算集群的梦想正在消退呢?对于这个问题,可以肯定的是,所有主流的AI开发者都在全速推进极其昂贵的集群建设。
一方面是,大型集群上可以更好地在预训练后改进这些模型、在后训练阶段处理强化学习以及更新或微调模型。
另一方面是,即便预训练模型的改进速度放缓,但只要自己能训出比竞争对手略好的模型,就值得增加的数据中心投入。毕竟,LLM越好,将推理模型融入模型后获得的结果就越好。
最后,如果GPT的发展没有加速,是不是就意味着末日论者错了——AI不会进入所谓的递归自我改进循环,在这个循环中,AI会一次又一次地找出如何制造下一个更好版本的自己(然后也许会征服我们所有人)?
对此,Marc Andreessen认为,这种明显的平台期意味着这样的恐惧目前看来是没有根据的。
#Self-Attention & Transformer完全指南
像Transformer的创作者一样思考
本文从RNN到self-attention,再到Transformer来讲清楚整个算法。
泻药。近半年来有大量同学来找我问Transformer的一些细节问题,例如Transformer与传统seq2seq RNN的区别、self-attention层的深入理解、masked self-attention的运作机制;以及各种Transformer中的思路如何运用到自己的算法中,例如Transformer是怎么实现并行化的,decoder是怎么用cross-attention把context vector整合进来的,等等。在这篇文章中,我们将从RNN到self-attention,再到Transformer来讲清楚整个算法。注意,这不是一篇纯粹的科普文,更像是一个hands-on的作业,文中会大量出现要求读者思考的问题,尽力让同学们自己去想想如何一步步做出Transformer的整个结构,以至于看完后你不仅能从头手撸一个Transformer,还能理解它的各个细节是如何想出来的。
1 RNN的长距离依赖问题
RNN的长距离依赖问题一直非常棘手。RNN的结构是这样的:
上图中, 输入序列是 会先生成一个初始的隐藏状态 , 然后这个把这个隐藏状态和对应的输入序列中的token做几个矩阵乘法, 得到一个个输出序列的token , 同时更新这个隐藏状态。注意, RNN本质是一个MLP, 也就是说, 上图中的蓝色方框, 其实不是多个模型, 而是一个模型。输入的序列逐个token流经同一个MLP。
相信大家都敏锐地发现了,这个模型的最大问题,就是这个隐藏状态的更新。由于只存在一个隐藏状态张量,当序列很长的时候,模型很自然地就会忘记了输入序列里面之前的token,因此信息对于整个输入序列是不对等的。我从头手撸了一下RNN并进行了实验,发现RNN总会将注意力放到token的后面位置,结论与我们的推断是相符的。这个观察其实和online learning中涉及的灾难性遗忘现象是同源的。
2 LSTM的时序依赖问题
发现这个问题后,后人用LSTM和GRU这样的模型进行了优化。LSTM的大致示意图如下:
这个模型的宗旨很简单:留住前面看过token的信息。除了隐藏状态和输入,LSTM还在顶部开了一个“后门”,专门用于存储之前看到过的知识。这个记忆张量本质上是另一种形式的隐状态张量。这种双隐方法有时候会会减慢模型的收敛速度,但是确实可以有效保证长距离情况下相对持久的记忆。GRU的思想和LSTM差不多,在此不再赘述。
尽管LSTM有效减轻了长距离依赖问题,它依然存在信息不对等的问题。如果你仔细看上面这幅图,会发现尽管保留了记忆,输入序列里面比较靠前的token蕴含的信息仍然不可避免地被压缩了。LSTM确实减轻了问题,但是没有从根本上解决问题。如果仔细思考一下,会发现要从根本上解决问题,需要平等地看待输入序列中的每一个token,却又知道它们的位置信息。如果让你去设计一个模型,你会怎么做?没错,需要完全抛弃这个与时序有关的隐藏状态。
LSTM的另一个问题在于,它的扩展性和并行性是很差的。自己训练过RNN一族模型的同学都知道,RNN等模型在GPU上的加速是非常有限的,因为需要一个token一个token往后迭代,这一个时刻的隐状态必须由上一个时刻的隐状态推出,这就是时序依赖问题。由于时序依赖问题,训练RNN一族模型没法大规模扩展,因为模型参数量一旦大起来,就需要大量的训练数据和epoch。RNN一族根本快不起来,而部署讲究一个高效,做研究也要占坑,动作慢是非常吃亏的。这个时候整个领域都在迫切期待可以并行化的RNN的出现。
3 Self-Attention:并行的RNN
注意,attention和self-attention不是一个东西。attention是一个广泛的思想,包含self-attention、cross-attention、bi-attention等。本文着眼于Transformer,主要讨论self-attention和cross-attention。
self-attention机制其实在Transformer提出的时候已经应用在各种模型上了,但是效果一直有待提升。self-attention也有很多分类,比如单层attention,多层attention,还有多头attention。它们本质上都是一样的,无非是加几层或者加几个分支,我们从单层attention入手讨论。
3.1 self-attention的单层算法
单层self-attention的示意图如下所示。假设输入序列是 , 先通过embedding层得到序列的 embedding , 然后注意了, 我们定义三个矩阵 来作为模型参数。对于token embedding , 要先将 与 矩阵相乘得到两个向量 , 这两个向量再互相乘得到一个初步的attention值 (attention score,常写作 )。注意, 这个 是一个值, 不是一个向量。 对所有的attention score做一个softmax, 可以得到归一化的 。同时, 要与矩阵 相乘得到值向量 。将归一化后的qk token和 token相乘, 就能得到一个qkv token 。对 去乘输入序列中的第二个、第三个token重复用的 , 就能得到 。加和这三个 token, 就能得到 。对 重复这个过程, 就能得到 。这就是self-attention的核心算法。
原创图,转载请注明来源
上面这张图有几个值得注意的地方:
- self-attention layer的所有参数只有 这三个矩阵。
- 对于每一个输入token, 它对应的输出token其实是所有token(包括自己)的key-value pair和自己的query的乘加。
- 本质上都是相应token 在隐空间(latent space)的某种语义表示。token 通过 进入隐状态 。
- 输出的token并不依赖任何上一时刻的隐层状态(hidden state)。
其中,第四点肯定会让很多同学有疑问。相对于RNN,self-attention不需要任何随token顺序传递的隐层状态。这是因为,它使用一种positional encoding方法直接修改token的embedding,从而让模型感知token在序列中的相对位置,我们在第4节会详细说明。
3.2 self-attention的矩阵化
我们惊喜地发现, 根据第四点, 这个算法可以用矩阵并行化。 把 这三个向量拼到一起成为一个矩阵, 就能得到下面这张图。其中, 由于我们的输入序列有3个token, 左边的Inputs矩阵有 。这个输入矩阵被三个参数矩阵乘后会得到 , 其中 可以使用 相乘 来得到attention score matrix。这里要注意, 在上图中, self-attention看上去是分别对 这三个token做的, 但事实上把它们的embedding vector拼起来就可以并行了。同理, 上图中的 拼起来就是这个attention score matrix的一行(思考一下, 为什么是一行不是一 列? )。接下来对这个attention score matrix做row-wise softmax, 就能得到每一行加和均为1的 归一注意力分数矩阵 。这个矩阵 的形状是 , 非常有意思, 我们接下来会重点看看这个 矩阵到底有什么数学含义。最后我们将矩阵 和 相乘得到最后的矩阵 , 形状是 , 意义是 个token, 每个token此时都获得了一个长度为 的值。
https://sebastianraschka.com/images/blog/2023/self-attention-from-scratch/summary.png
现在如果我再放出self-attention的官方公式,相信大家就很好理解了:
其中, 是输入矩阵 分别乘以三个参数矩阵后的隐状态矩阵, 是 矩阵的列数。
这里有一个小细节: 为什么需要除以一个 呢? 其实经常调参的同学已经很熟悉了, 这就是为了去掉方差的影响, 其实stable diffusion也借鉴了这个思想(见如何通俗理解扩散模型一文)。我们拿 矩阵中的任意一列 矩阵中的任意一行 出来, 如果 和 中每一个元素均为均值为0, 方差为1的独立同分布的随机变量, 则 这个随机变量(也就是token 看token 的注意力分数)中的每个元素也有均值为 0 , 方差为1, 这是根据公式 得到的。而由于 和 独立同分布, 我们有 和 。也就是说, 每一对这样的qk对都会产生一个期望为 0 , 方差为 的新向量, 这个新向量表示token 看token 的注意力分数。当 很大的时候, 这个向量的方差会很大, 而特别大的值会在softmax层被挤到边缘去, 这样回传的梯度就很小了。这个时候就可以根据 来用 将方差从 缩小为 1 。
3.3 self-attention的本质
透过方法看本质, 我们来讨论一下上面这个self-attention官方公式到底怎么理解。首先要确认一个 事实, 这三个矩阵其实都是输入矩阵 的某种线性变换, 也就是 在隐空间的某种语义表示。换句话说, 丢掉 这三个矩阵也是可以训练的, 但是复杂度不够, 效果会受到影响。因此, 为了方便说明, 我们用 来表示这三个矩阵。另外, 是用于scale的, 所以也不涉及本质,扔掉。那么,官方公式又可以写为:
假设一个句子Welcome to Starbucks,如果embedding层采用简单的2-hot编码(例如编码Welcome为1010),可以把输入矩阵表示为下图左边所示的样子。这个矩阵和自身的转置相乘,就能得到一个本质上是attention matrix的矩阵,如下图右边那个矩阵所示。
原创图,转载请注明
这个attention matrix有什么含义呢?因为向量相乘的本质是计算相似度,如果我们看第一行,可以发现这个row本质上在计算Welcome这个token和句子中所有token的相似度。到这里其实接触过推荐的同学已经懂了,词向量之间相似度的本质是关注度。如果一个token A和另一个token B经常一起出现,那A和B之间的相似度往往很高。例如,上图中Welcome这个词和自身“Welcome”、第三个token “Starbucks”的相似度就高,说明在推测Welcome这个token时应当对这两个token给予更高的关注。
将这个结果用softmax归一化,就能得到下图右侧所示的归一化attention matrix矩阵。归一化后,这个attention matrix就变成了系数矩阵,可以直接和原矩阵相乘了。
原创图,转载请注明
最后一步是将归一化后的attention matrix 右乘输入 matrix , 得到结果 , 如下图所示。这 一步本质上做了什么呢? 我高亮了左边矩阵的第一行, 这一行会和输入矩阵 的每一列乘加, 然 后算出输出矩阵第一行的每个值。由于 矩阵的第一行是Welcome这个token对于所有token的注意力值, 输出矩阵 的第一行也就变成了注意力加权后的Welcome这个token的embedding。
原创图,转载请注明
总结一下,输入一个矩阵 , self-attention会输出一个矩阵 ,这个矩阵是输入矩阵的注意力加权后的语义表示矩阵。上面这个过程,超详细图解Self-Attention这篇文章也讲的很清楚,如果还有疑问可以去这篇文章看看。
3.4 self-attention的Q, K, V思想
虽然 这三个矩阵都不是必要的,我们知道可以全部用 来实现注意力的加权,但是最后效果会差很多。做算法的同学肯定会好奇QKV这一套思想到底怎么去理解、可能是怎么提出的,这样也许可以找到一些灵感放到自己的工作里面去。
相信大家一直都有个疑问,为什么要取QKV这些名字。Q是Query(查询),K是Key(键/钥匙),V是Value(值)。在数据库中,我们希望通过一个查询Q去数据库中找出相应的值V(for 做推荐的同学:这个值V在推荐中叫Document,就是双塔里面的Query-Document架构那个Document)。问题是,直接通过Query去搜索数据库中的V往往效果不好,我们希望每个V都对应一把可以找到它的钥匙K,这个K提取了V的特征,使得它更容易被找到。注意,一把钥匙对应一个值,也就是说K和V的数量相同。
参考下图。K提取的特征是如何获得的呢?根据attention的思想,需要先看过所有项才能准确地定义某一个项。因此对于每一个查询语句Q,我们取出所有钥匙K( 的第一行)作为系数,将它乘上对应的V( 的第一列)算出加权值,得到这个查询语句期望的结果 0.67 。这样反向传播后,K就能逐渐学习到V的特征。
原创图,转载请注明
因此,self-attention中的QKV思想,本质是一个具有全局语义整合功能的数据库。而最后得到的矩阵 , 就是输入矩阵 注意了上下文信息得到的在隐空间的语义矩阵,每一行代表一个token。
4 Positional Encoding:位置信息的整合
仔细思考的同学可以发现,self-attention本身只是三个存储语义映射的矩阵,现在还不能捕捉token的位置信息,整个输入序列仍然处于天涯若比邻的状态。这个时候已经可以在输出矩阵 后面接一个MLP来做分类任务了,但是缺乏位置信息使得效果并不好。如果让你自己设计一个算法来解决这个问题,你会怎么做?
首先是如何将positional encoding融合到self-attention算法中。显然,我们可以直接改输入矩阵 也可以改self-attention的算法。其中,改输入矩阵更直观一些,只要让positional encoding生成的positional embedding和token embedding一样长,就能直接相加获得与原来相同大小的新输入矩阵,不需要任何self-attention算法里面的修改。我们采用这种方法继续思考:如何进行编码呢?
没错,一个很直观的解决方法就是将token在序列中的位置从0到1编码,然后以某种方式融入到self-attention层中。但是,从0到1编码的序列有一个重大问题:不同长度的句子,相邻的token之间的距离是不同的。例如Welcome to Starbucks的编码是[0, 0.5, 1],间隔是0.5,而Today is a very clear day的编码是[0, 0.2, 0.4, 0.6, 0.8, 1],间隔是0.2。这样非归一化的间隔很明显会降低模型的性能,因为self-attention层中的参数是用序列长度无关方法训练出来的,引入序列长度相关的任何参数都会导致参数目标的异化。
还有一个想法,是固定间隔为1,然后逐渐往上增长。例如Welcome to Starbucks的编码是[0, 1, 2],Today is a very clear day的编码是[0, 1, 2, 3, 4, 5]。这样的方法虽然解决了序列长度相关参数的问题,但是当序列很长时参数会非常大,导致梯度消失,其实和上面说的加一个项是一个问题。
这里就引出了Transformer使用的方法,其实也是一个在应用数学界非常常用的位置编码方法:余弦位置编码。对于一个给定的token在序列中的位置 ,和embedding长度 ,余弦位置编码的数学表达是:
https://arxiv.org/pdf/1706.03762.pdf
其中, 是token在序列中的位置除以 是embedding的维数。注意, 这个 的长度是和embedding的长度相同的, 所以 又叫positional embedding, 往往可以直接和 semantic embedding相加。我们可以将 扩展到整个序列, 得到一个矩阵。例如, 如果输入句子 有4个token "I am a Robot", 且我们取embedding size , 则可以得到如下图所示的 的位置编码矩阵。其中, 每一行都是上面这个公式的一个 。
第一行是"I"这个token的positional embedding。由于在序列中的位置为 0 , 有 , 所以 的 第一个item就是 也就是 , 第二个item就是 也就是 。以此类推, 就能得到每个token的positional embedding。
如何理解这个方法呢?其实这个方法就是利用了余弦函数的周期性。实际上,只要能找到多个周期不同但特征相同(例如余弦函数的波形都是相同的,这就是特征相同)的函数,理论上都可以用来做positional encoding。例如,我们可以用二进制位置编码法来代替余弦相似编码法。如下图,假设有一个序列有16个token,且embedding size为4,我们就能用二进制编码法得出每个token的positional embedding:
https://kazemnejad.com/blog/transformer_architecture_positional_encoding/
显然,最低位(红色)的01变化非常快(周期为2),而最高位(黄色)的01变化最慢(周期为8)。也就是说,每个positional embedding位的周期不一样,因此不会产生重复的embedding。实验后,这种方法也有效果,但没有余弦位置编码法的效果好。
5 Transformers:打通seq2seq任督二脉
到此为止,我们的self-attention已经可以做分类任务了,但是还没法做seq2seq任务。要做分类任务,只需要在self-attention前把positional embedding加到 XX 上来获得新的embedding,再在self-attention后接一个MLP头就行。然而,seq2seq任务往往需要encoder-decoder架构。如何用self-attention layer来实现encoder-decoder架构呢?想一想,如果你是Transformer算法的设计者,你很可能首先会去借鉴RNN一族是怎么实现seq2seq架构的。
下图表示RNN的encoder-decoder架构。可以发现,在encoder部分,RNN做的事和分类任务是一模一样的。但是在最后一个token处,RNN并没有接上MLP,而是把context vector丢给decoder。decoder是另一个RNN(参数不同),输入是context vector、上一个时刻预测的输出token、一个隐层向量。注意,这个隐层向量是在decoder阶段重新初始化的,不是encoder阶段拿过来的。每次decode时,我们将context vector和input token embedding拼起来一起送到RNN中,同时送入上一个时刻的隐向量,这个RNN会输出一个隐向量和一个输出向量。输出向量会过softmax获得每个token的probability,然后取得probability最大的token的输出,而隐向量会重新被输入这个RNN里面,从此RNN进入下一个时刻。当RNN输出<eos> token的时候,decode过程结束,我们就能得到一个生成的序列,而这个序列与输入序列不一定是等长的。
总结一下,RNN的seq2seq solution其实就是在encoder阶段获得整个句子的表征context vector,然后把这个表征送到decoder里面,在生成每个token的时候都要看一遍这个表征。另外,由于RNN必须一个一个token去看,隐向量依旧是不可缺少的。
现在我们再来想想,如何借鉴RNN来设计出用self-attention搭的encoder-decoder架构,来完成seq2seq任务呢?首先,encoder肯定也要输出看过的句子的表征。其次,decoder的每个token位也要算一个probability,从而取出可能行最大的那个。但是有一个问题,encoder输出的context vector应该如何交给decoder呢?在RNN里,context vector直接和输入的embedding拼在一起放到RNN里;如果用self-attention,是不是也可以把context vector和embedding拼到一起送到self-attention中呢?还是说,要用额外的网络来融合信息?如果使用self-attention,因为它有三个输入,我们又应该将context vector送到哪些输入里面呢?
让我们看一下Transformer的官方实现(建议截一下这个图,在下文中会反复用到):
这张图相信大家已经看烂了,左边是encoder,右边是decoder。Multi-head Attention层是attention的一个升级,左下角的是multi-head self-attention,右上角的是multi-head cross-attention,右下角的是masked multi-head attention。蓝色的层是FFN,Feed Forward Layer,其实就是个MLP,包括几个全连接层和激活函数(如ReLU)。encoder和decoder都可以往上叠层数,如图中 的提示。接下来我们具体分析一下每个部分。
5.1 Cross-Attention:Self-Attention的双塔实践
很多同学看到cross-attention会感到害怕,觉得比较难理解。但是如果你已经看完了self-attention的部分,其实cross-attention是一点就通的。为什么self-attention要加一个self?看Transformer的结构图,你会发现输入左下角和右下角attention layer的三个箭头是从一个地方分出来的,说明 Q 三个矩阵都是从输入矩阵 变化来的。那为什么cross-attention要加一个cross?没错,因为这三个矩阵要从不同的输入矩阵变化来。
如下图所示, 我们现在获得了两个输入矩阵 , 其中, 提供线性变换 提供线性变换 。cross-attention和self-attention的不同在图中用new注明了。
https://sebastianraschka.com/blog/2023/self-attention-from-scratch.html
仔细观察最后得到的矩阵 , 会发现它的行数和矩阵 是一致的。思考一下, 如果让你设计 Transformer结构图右上角的cross-attention模块, 你会把encoder的context vector作为 还是 ? 如果你看了 3.4节关于self-attention的解释, 会很自然地得出答案: 是 decoder上一个 token的embedding, 是encoder最后产生的context vector。这是因为encoder的context vector本质是聚合了输入序列信息的一个数据库 ,而decoder的每一个输入token本质是一条查询语句 (Q), 负责查询数据库中与之最相似的(最需要注意的)token。这样的话, 上图中的 这个矩阵, 每一行都表示decoder的一个输入token对context vector中所有token的注意力。这个attention matrix叫做他注意力矩阵。
5.2 Transformer Decoder的训练和预测
在seq2seq任务中,Transformer encoder显然需要和decoder联合训练,因为这不是个分类问题,encoder没法单独接MLP进行训练。其中,token流经encoder的过程比较简单,用self-attention就能解决,难点是这个decoder。首先要思考一个问题,如果让你设计如何使用这个decoder,你可以做到让decoder一次性得到所有的输出token吗?答案是不可能。一个序列的生成必须有一个结束的token(如[EOS])来提示,而这个结束的token的生成必须依赖前面已经生成的token,因为打算结束一个句子,必须是因为这个句子已经完成了任务;也就是说,最后一个token的生成必须由前面生成的token来condition。以此类推,前面的每一个token都必须由更前面的token来condition,直到推到起始token(如[SOS])。这和人说话的逻辑是相似的,人也许可以在脑中构思整个句子,但是表述一定是一个词一个词说出来的,而且后面的词一定会被前面的词所影响,这就是说话的逻辑。因此,decoder在预测的时候依然是一个一个token去预测的,不可能一次性全部输出。这个逐个token输出的过程如下图所示。也就是说,decoder的预测算法无法并行。
https://blog.csdn.net/qq_43703185/article/details/120304645
但是decoder的训练采用了一个不同的、很精妙的方式,叫做teacher forcing,也就是有老师带着做训练。这其实不是Transformer的创新点,在那个时代已经是一个老生常谈的话题了。teacher forcing是什么意思呢?我们拿RNN decoder的teacher forcing举一个例子。如下图所示,我们假设一个seq2seq的输入是What do you see,正确的输出(label)是Two people running,那么下图左边的训练过程就叫做free-running方法,下图右边的就叫做teacher forcing方法。如果你仔细观察Transformer结构图的右下角,会发现有一个提示是把Outputs做一个Shifted Right,也就是将所有输入token都往右移一个位置。这就对应着下图中右边所示的teacher forcing方法,是把label的所有token向右移一个位置,然后在最左边放上一个表示开始的token(例子中是<Start>)。这种方法和free-running有什么区别呢?很显然,free-running的decoder RNN的输入是上一时刻自己输出的值,而这不一定是正确的;而teacher forcing的decoder RNN的输入是上一时刻的label,这一定是正确的。这种训练方法可以防止错误的累积,从而提高训练效果。
https://www.cnblogs.com/dangui/p/14690919.html
teacher forcing的另一个好处是可以并行化。上面这幅图是RNN的,由于有一个需要传递的隐向量,所以训练阶段的decoder其实无法并行计算。然而,self-attention和cross-attention并不依赖隐向量来传递状态,而是通过输入阶段的positional embedding一步到位,且训练阶段使用teacher forcing,不需要上一状态的输出,所以可以把全量的输入和label直接投到由masked self-attention和cross-attention组成的decoder里面,直接并行计算进行训练。因此,通过使用teacher forcing,decoder的训练算法可以并行。
在decoder的预测和训练阶段要注意一个细节上的差异。在预测阶段,假设我已经预测了Welcome to,那么接下来在预测Starbucks的时候,decoder必须看到之前的所有张量Welcome to,而不仅仅是上一个张量to。很多同学都忘了这个细节,没有去stack之前的张量,导致生成的句子效果很差,而且decoder一直不输出结束的token。至于训练阶段,由于采用teacher forcing且已经有了一个attention mask,只要shift right后把整个句子扔到decoder里面就已经实现了看到之前所有token的目的了。
5.3 Masked Self-Attention:防止偷看答案
如果你仔细思考,会发现仅仅使用Shifted Right,并不能实现teacher forcing,这是因为如果右下角的attention模块是没有mask的self-attention,会造成数据泄漏的问题。我们拿出3.4节讲过的例子,看看问题出在什么地方。
在decode过程中,每次decoder应当只能看到之前自己生成的token(预测阶段)或者label中已经给出的这个时刻以前的teacher token(训练阶段)。总之,decoder在注意某个token时,不可能注意到它之后出现的token。如果注意到后面的token,说明decoder偷看了答案,这样会影响训练效果。
由于self-attention是矩阵运算,我们需要用mask的方法去强制去除这种bad case。如下图所示,我们可以将attention matrix的上三角矩阵用-inf来mask掉。通过将不希望模型注意到的token设为负无穷,可以让梯度不再流经这个位置(梯度为0),从而消除偷看后面的token的问题。
原创图,转载请注明
现在思考一个问题:masked attention后面的cross-attention需要也加一个attention mask吗?答案是不需要,因为encoder可以看到整条输入序列,已经获得了全量信息,所以decoder这一条Q可以看到context vector全部的K和V。换句话说,在训练和预测的时候,我们是允许decoder看到输入的全部信息的。
5.4 Multi-head Attention:扩大参数量和语义分化
前面已经讨论过,单层attention要学的参数其实就是三个矩阵 ,这个参数量往往是很小的。虽然已经能够满足表示语义的需求,但是当语义逐渐复杂后,容易因为参数量的问题达到容量上限。multi-head attention的提出解决了这个问题。接下来我们来看一下Transformer结构图里的multi-head attention和我们前面说的单层attention有什么区别。
multi-head attention的结构如下图所示。多头注意力机制有几个额外的参数矩阵, 将获得的QKV矩阵进一步线性变换成多个矩阵。例如下图的双头注意力, 就是将QKV变换成Q1K1V1和 。在获得多个头后, 对应的 头分别做单层注意力, 得到多个输出, 如双头会得到 两个输出。不同的头的输出会进一步聚合成一个输出向量 。注意图中的一个细节, 在计算 的时候, 是不会用到 的。思考一下这是为什么? 因为 是 的查询在隐空间的特征表示, 所以不可能用到了 的查询。如果不理解, 需要再复习一下第3.4节。
multi-head attention的结构如下图所示。多头注意力机制将 三个矩阵等分为多个小矩阵, 例如如果是双头注意力, 会被分割成两个小矩阵 。这样, 生成的 矩阵就也可以被分成两个小矩阵 , 我们称之为两个注意力头。在获得多个头后, 对应的 头分别做单层注意力, 得到多个输出, 如双头会得到 两个输出。不同的头的输出会进一步聚合成一个输出向量 。注意图中的一个细节, 在计算 的时候, 是不会用到 的。思考一下这是为什么? 因为 是 的查询在隐空间的特征表示, 所以不可能用到了 的查询。如果不理解, 需要再复习一下第3.4节。在全部头的计算都结束后, 还需要加一个仿射矩阵 , 用于聚合各个头的信息。各个矩阵的形状都在图中标出来了, 我们取句子最长长度为 256 个token, 且 embedding size为1024, 就能得到 的形状为 。其他矩阵的形状也在图中标明了。
原创图,转载请注明
明白了大致的思想,我们需要深入探索一下多头注意力的作用。头的数量是越多越好吗?我们来看一下Transformer论文中做的ablation,其中 表示头的数量:
https://arxiv.org/pdf/1706.03762.pdf
显然, 当 为 8 时效果最好, 而 太大 (16/32) 并不会显著提升性能, 而 太小 (1/4) 往往会降低性能, 有研究说明这是因为参数量下来了。但是仔细想想, 增加头的作用真的只是提升参数量吗? 如果只是为了提升参数量, 完全可以扩大 的hidden size吧, 为什么要通过增加头来实现呢?
下图是一份研究可视化的不同的头对于注意力矩阵的影响。这份研究是基于encoder的,一共有4层encoder(0-3),每层encoder都包括6个头(0-5)。图中每一行表示第几层encoder,每一列表示第几个头。
https://arxiv.org/pdf/1906.05714.pdf
从图中可以发现,同一层中往往有几个头负责选择相同的特征(如第2层第1-4个头,第3层1-4个头),有几个头比较特立独行(如第2层第1个头,第三层第0、第5个头)。不同的头为什么会选择不同的特征?
我们来思考一下多头注意力机制的训练过程。观察本节开始时出现的multi-head attention结构图。由于参数初始化方式不同,有 。同理有 。但是由于 是concat起来的,所以梯度回流的时候,这两条路是对称的。那是什么导致了不同的头最后分化出不同的特征选择方式?是不同的初始化方式,导致最后训练出来的头有不同的特征选择功能。 以这个启发为出发点,有研究对初始化方式做了详细的ablation study,最后证明了可以通过改变初始化方法来降低层方差,从而获得更好的训练效果。
也有研究分析了不同的头到底都在关注什么信息。Adaptively Sparse Transformers一文指出,头的功能主要是三个:关注语法、关注上下文、关注罕见词。关注语法的头能够有效抑制不合语法的词的输出;关注上下文的头负责理解句子,并且会更加关注自己附近的词;关注罕见词的头负责抓住句子重点,例如Starbucks就比to罕见的多,因此往往蕴含更多的信息。
我们再思考一个问题,用多层attention(stack几个单层attention)来代替多头attention有什么明显的缺陷吗?有很大的并行化上的缺陷。多头attention是可以轻松并行化的,因为不同的头拿到相同的输入,进行相同的计算;而多层attention由于是stack的结构,必须等下层attention计算完成后才能传导到上层,所以是无法并行的,有几层就有几倍的时间上限。因此,从并行化的角度看,我们往往使用多头attention。
总结一下,multi-head attention可以增大attention层的参数量,同时增加特征提取器的分化程度,从而有效提升attention的性能。头的个数并不是越多越好,但是往往多头会比单头的效果更好。对比多层attention,多头attention方便并行化。
5.5 Feed Forward Layer:非线性能力的引入
如果你第一次看Transformer的文章,可能会不知道Feed Forward Layer是什么,毕竟这个名词已经比较有年代感了。FFN其实就是MLP,也就是几个矩阵和激活函数拼起来的层。在Transformer的结构图里面,FNN貌似是微不足道的,因为只有那么扁扁的一条。但是,如果你仔细计算一下Transformer的参数,会发现FFN原来占了整个Transformer结构的一半还多的参数。
Transformer采用的FNN可以用下面公式来表达, 其中 是第一个全连接层的参数, 是第二个全连接层的参数。顺便附上一张比较好理解的FFN构造图。
根据这个公式,很容易完成FFN的实现。下面是PyTorch的实现。其中,d_model
是embedding size(Transformer中为512),d_ff
是FFN的hidden size(Transformer中为2048)。
class FFN(nn.Module):
def __init__(self, d_model, d_ff):
super(FFN, self).__init__()
self.w_1 = nn.Linear(d_model, d_ff)
self.w_2 = nn.Linear(d_ff, d_model)
def forward(self, x):
return self.w_2(F.relu(self.w_1(x)))
现在我们思考一下这个FFN层的作用。输入张量的embedding size这个维度 (512) 被映射到一个更大的维度hidden size(2048),然后在下一层又映射回原来的embedding size(512)。比较显然的是,FFN明显可以用于增加模型的非线性,因为中间夹了一个relu激活函数。另外,FFN明 显增加了模型的容量, 因为参数量极大增长。我们计算一下这个FFN的参数量, 发现竟然有 这么大(忽略bias)。再回头看看multi-head attention的参数量, 文章(https://towardsdatascience.com/how-to-estimate-the-number-of-parameters-in-transformer-models-ca0f57d8dff0)指出, Transformer论文提出的 8 头注意力网络需要的参数量为 , 计算公式如下所示:
如果想要自己求证,也可以使用PyTorch快速获得答案:
d_model = 512
n_heads = 8
multi_head_attention = nn.MultiheadAttention(embed_dim=d_model, num_heads=n_heads)
print(count_parameters(multi_head_attention)) # 1050624
print(4 * (d_model * d_model + d_model)) # 1050624
也就是说,两个multi-head attention的大小才赶上一个FFN的大小。由于Transformer结构中有3个multi-head attention和2个FFN,所以FFN占了过半的参数。
5.6 Residual Network与Layer Norm
观察Transformer的结构图,会发现大量出现了Add & Norm的模块,如下图所示。事实上,每经过一个计算层,Transformer就会过一个Add & Norm模块。这里的Add指的是residual addition(残差相加),也就是经过一个模块前的输入加上经过一个计算层后的输入来得到一个新的向量,用公式可以表达成 , 这个 就是计算层的函数。
在Transformer提出的时候,残差连接已经成为了主流的防止梯度消失的方法,最早出现在ResNet中,相信不管是做CV还是NLP的同学都已经对ResNet耳熟能详了。例如,FFN中出现了ReLU函数,在梯度回传的时候,有差不多一半的信号是会变成0的,这样就造成了比较大的信息损失。残差连接保留了经过ReLU之前的向量信息,因此能够有效缓解这样的情况。
Add & Norm中,在残差相加后是一个layer normalization模块。layer normalization也不是什么新鲜事,在Transformer提出的时候已经被广泛采纳了,主要用于向量的归一化。这里我们主要将layer normalization与batch normalization做一个简单的对比。
如下图所示, 给定一个三维张量(embedding size, token number, batch size), batch norm是对一个batch做归一化, 而layer norm是对一条序列做归一化。例如在batch size为2的情况下,我们输入了两个序列: “你好"与“机器学习”。假设“你好"的embedding为 , “机器学习”的 embedding为 。batch norm对这一个batch中的每一个对应维度做归一化, 也就是说, 会对两个序列中对应的每个token和embedding做归一化, 这显然是不合理的, 因为这两个序 列的token并不是一一对应的。如果我们使用和为 1 的归一化方法, “你好"会获得归一化后的 embedding , 而“机器学习”会获得归一化后的embedding 。这反而破坏了原本embedding内的语义信息, 例如本来“你好”的embedding是 , 被batch norm后却变成了 , 语义发生了改变。
layer norm对每一条序列内部做归一化, 而每条序列内部显然是对应的。在上面的例子中, 如果使用layer norm, “你好"会获得归一化后的embedding , 而“机器学习"会获得归一化后的embedding 。这样, 归一化既保留了原来的语义, 又能够有效防止值过大导致的梯度问题。
如果你都读到这里了,希望你能为这篇16k字的文章点个赞。原创精品文章的盗用率和成本都很高,你们的支持是我们的最大动力。谢谢!
#MaskLLM
英伟达出品,用于大模型的可学习`N:M`稀疏化
本文提出一种可学习的LLM半结构化剪枝方法MaskLLM,旨在充分利用大规模数据集来学习准确的N:M掩码,适用于通用剪枝和领域特定剪枝。
论文地址:https://arxiv.org/abs/2409.17481
论文代码:https://github.com/NVlabs/MaskLLM
创新性
- 提出一种可学习的
LLM
半结构化剪枝方法MaskLLM
,旨在充分利用大规模数据集来学习准确的N:M
掩码,适用于通用剪枝和领域特定剪枝。 - 此外,该框架促进了跨不同任务的稀疏模式迁移学习,从而实现稀疏性的高效训练。
内容概述
大型语言模型(LLMs
)的特点是其巨大的参数数量,这通常会导致显著的冗余。论文提出一种可学习的剪枝方法MaskLLM
,在LLMs
中建立半结构化(或N:M
,在M
个连续参数中有N
个非零值的模式)稀疏性,以减少推理过程中的计算开销。
MaskLLM
通过Gumbel Softmax
采样将N:M
模式稀疏化显式建模为可学习的分布,可在大规模数据集上的端到端训练,并提供了两个显著的优势:
- 高质量的掩码,能够有效扩展到大型数据集并学习准确的掩码。
- 可转移性,掩码分布的概率建模使得稀疏性在不同领域或任务之间的迁移学习成为可能。
在不同的LLMs
上使用2
:4
稀疏性评估MaskLLM
,如LLaMA-2
、Nemotron-4
和GPT-3
,参数规模从843M
到15B
不等。实证结果显示,相较于最先进的方法有显著改进,MaskLLM
通过冻结权重并学习掩码实现了显著更低的6.72
困惑度。
MaskLLM
N:M 稀疏性
模式稀疏化会对 LLM 施加限制, 即每一组连续的 M 个参数中最多只能有 个非零值。这个任务可以被转换为一个掩码选择问题,候选集的大小为 ,其中 表示候选集的大小, 表示潜在 掩码的组合数。
对于 2:4 稀疏性, 二进制掩码 必须恰好包含两个零,从而形成一个离散的候选集 ,其大小为 个候选:
对于一个 LLM,存在大量的参数块,记为 ,每个参数块都需要选择相应的掩码 。对于剪枝后的性能,为 稀疏性定义以下损失目标:
其中 指的是预训练的语言建模损失。操作符 表示逐元素乘法, 用于掩码部分参数以进行稀疏化。
可学习半监督稀疏性
在LLM的背景下,由于掩码选择的不可微分特性和庞大的参数规模,找到最佳掩码组合可能极具挑战性。为此,论文将掩码选择转化为一个采样过程。
直接确定参数块的确切最佳掩码是不可行的,因为修剪后的LLM的行为还依赖于其他参数块的修剪。但可以独立地为每个块采样掩码,并在修剪后评估整体模型质量。
定义一个具有类别概率 的类别分布, 满足 。在随机采样阶段,如果某个掩码在修剪过程中表现出良好的质量,那么通过增加被采样掩码的概率来调整类别分布是合理的。
通过足够的采样和更新,最终会得到一组分布,其中高概率的掩码更有可能在修剪后保持良好的质量。
从形式上讲,从随机采样的角度建模上述公式中的组合问题:
如果能够获得关于该分布的梯度,那么上述目标可以通过梯度下降进行优化,但从类别分布中抽取样本仍然是不可微分的。
可微分掩码采样
Gumbel Max 能有效地建模采样操作, 将采样的随机性解耦为一个噪声变量 。根据类别分布 抽取样本, 生成用于采样的 one-hot 索引 :
其中 是遵循均匀分布的随机噪声, 而 被称为 Gumbel 噪声。Gumbel Max 将采样的随机性参数化为一个独立变量 , 可微分采样的唯一问题出在 argmax 和 onehot 操作。
为了解决这个问题, 通过 Gumbel Softmax 来近似 Softmax 索引, 从而得到一个平滑且可微分的索引 :
温度参数 是一个超参数, 用于控制采样索引的硬度。当 时, 软索引将更接近于一个 one-hot 向量,从而导致 。
将软索引 视为行向量,将掩码集合 视为一个矩阵,其中每一行 指代第 个候选掩码 , 通过简单的矩阵乘法很容易构造出一个可微分的掩码:
这个操作根据软索引生成候选掩码的加权平均, 所有操作(包括采样和加权平均)都是可微分的, 并且相对于概率 的梯度可以很容易地计算, 能够使用可微分掩码 来优化公式 4 中的采样问题。
学习LLMs的掩码
基于从基础分布 中采样的可微分掩码, 梯度流可以轻松到达概率 , 使其成为系统中的一个可优化变量。但通常并不直接学习从 logits 生成概率,而是学习带有缩放因子 的 logi ts , 通过公式 来产生概率。
缩放因子 将用于平衡 logits 和 Gumbel 噪声的相对大小, 从而控制采样的随机性。在训练过程中, 所有参数块 都与相应的分布 相关联, 并且以端到端的方式学习到最佳分布。
但在多个大语言模型上的实验发现了一个关于可学习掩码的新问题:由于修剪操作会在网络中产生零参数,梯度可能会消失。
为了解决这个问题,引入了稀疏权重正则化,它在剩余权重中保持适当大的幅度,从而导致以下学习目标:
由 加权的正则化项鼓励在修剪后保持较大的幅度。
稀疏性的迁移学习
迁移学习是深度学习中最流行的范式之一,而稀疏性的迁移学习则是通过预计算的掩码来构造新的掩码。
论文提出了用于初始化分布的掩码先验(Mask Prior),可以大幅提升训练效率和质量。掩码先验可以通过一次性剪枝的方法获得,例如幅值剪枝、SparseGPT和Wanda。
给定一个先验掩码,计算其与所有候选掩码的相似度:
对于与先验掩码高度相似的候选掩码,在初始化阶段提高其概率:
其中, 是 logits 的标准差, 是控制先验强度的超参数。当 时, 代表在没有任何先验的情况下学习可微的掩码。
方法总结
从随机初始化的logits开始,并在可用时使用先验掩码更新它,如公式10所示。然后,优化logits以解决公式8中的目标。具有最大logits的掩码 将被作为推断的最终掩码。
主要实验
#The Danger of Overthinking
DeepSeek R1也会大脑过载?过度思考后性能下降,少琢磨让计算成本直降43%
原来,大型推理模型(Large Reasoning Model,LRM)像人一样,在「用脑过度」也会崩溃,进而行动能力下降。
近日,加州大学伯克利分校、UIUC、ETH Zurich、CMU 等机构的研究者观察到了这一现象,他们分析了 LRM 在执行智能体任务过程中存在的推理 - 行动困境,并着重强调了过度思考的危险。
- 论文标题:The Danger of Overthinking: Examining the Reasoning-Action Dilemma in Agentic Tasks
- 论文链接:https://arxiv.org/pdf/2502.08235
在「单机模式」下,这些模型在实时互动的环境中仍是「思想上的巨人,行动中的矮子」。模型在面对任务时总要纠结:是撸起袖子直接干,还是推演清楚每一步之后再下手?
那么想要让 LRM 作为智能体的大脑,让它们把现实世界中的脏活累活都解决了。并且,在同时获取信息、保持记忆并作出反应的复杂环境中,这些具备思考能力的 AI 应当如何平衡「想」和「做」的关系?
为了回答这些问题,研究者首次全面调研了智能体任务中的 LRM(包括 o1、DeepSeek R1、 Qwen2.5 等)以及它们存在的推理 - 行动困境。他们使用了现实世界的软件工程任务作为实验框架,并使用 SWE-bench Verified 基准以及 OpenHands 框架内的 CodeAct 智能体架构。
研究者创建了一个受控环境,其中 LRM 必须在信息收集与推理链之间取得平衡,同时在多个交互中个保持上下文。这样一来,适当的平衡变得至关重要,过度内部推理链可能会导致对环境做出错误假设。
从观察结果来看,在推理 - 行动困境中,LRM 表现出了一致的行为模式,即倾向于内部模拟而不是环境交互。它们会耗费大把时间来构建复杂的预测行动链,而不是适应实际的系统响应。研究者将这种现象称为过度思考。
为了对过度思考进行量化,研究者使用 LLM-as-a-judge 开发并验证了一个系统评估框架。该框架确定了三种关键模式,分别如下:
- 分析瘫痪(Analysis Paralysis)
- 恶意行为(Rogue Actions)
- 过早放弃(Premature Disengagement)
本文使用的评分系统与人类专家评估密切相关,并证实了该系统在评估「LRM 倾向于内部模拟而不是环境交互」的可靠性。他们使用系统分析了 4018 条轨迹,并创建了一个综合性开源数据集,以推进在智能体环境中平衡推理与行动的研究。
研究者的统计分析结果揭示了过度思考行为的两种不同模式。首先,回归分析表明,无论是推理还是非推理模型,过度思考与问题解决率之间存在显著的负相关性(如图 1), 后者随着过度思考的增加而出现急剧的性能下降。
其次,直接比较表明,推理模型始终表现出更高的过度思考分数,几乎是非推理模型的三倍,如表 2 所示。这意味着,推理模型更容易受到过度思考的影响。
因此,针对智能体环境中 LRM 的过度思考现象,研究者提出了两种潜在的方法来缓解,分别是原生函数调用和选择性强化学习。这两种方法都可以显著减少过度思考,同时提高模型性能,尤其是函数调用模型显示出了有潜力的结果。
至于解决 LRM 的过度思考问题有哪些好处?研究者表示可以带来巨大的实际效益,比如运行具有强推理能力的 o1 可以实现 29.1% 的问题解决率,但成本为 1400 美元;相比之下,运行较低推理能力的 o1 变体可以实现 21.0% 的问题解决率,成本只有 400 美元,降低了 3.5 倍。
另外,与使用成本高昂的强推理配置相比,生成两个较少推理量的解决方案(总计 800 美元)并选择其中过度思考分数较低的一个,则可以实现 27.3% 的问题解决率。这种简单的策略几乎与强推理配置的表现相当,同时将计算成本降低了 43%。
过度思考
本文观察到,在智能体决策任务中,LRM 不断面临推理 - 行动困境,必须在以下两者之间进行基本权衡:
- 与环境的直接交互,模型执行动作并接收反馈。
- 内部推理,模型在采取行动之前对假设性结果进行推理。
过度思考的表现
本文对智能体与环境之间的交互进行了详尽分析。其中日志捕获了智能体行为、环境反馈以及(如果可用的话)智能体推理过程的完整序列。本文系统地分析了这些轨迹,以理解过度思考的模式。
通过分析,本文识别出了 LRM 智能体轨迹中三种不同的过度思考模式:
- 分析瘫痪(Analysis Paralysis),即智能体花费过多的时间规划未来步骤,却无法行动;
- 过早放弃(Premature Disengagement),即智能体基于内部预测而非环境反馈提前终止任务;
- 恶意行为(Rogue Actions),面对错误,智能体尝试同时执行多个动作,破坏了环境的顺序约束。
这些行为在图 4 中得到了具体展示。
分析瘫痪:大型推理模型(LRMs)倾向于将注意力从立即行动中转移到精心策划的未来规划上。它们可以生成越来越复杂的动作序列,但在系统地执行这些动作时却遇到困难(见图 4a)。它们没有去解决眼前的错误,而是构建出通常未被执行的复杂规划,导致陷入一个没有进展的规划循环中。
恶意行为:本文观察到有些智能体故意在单一步骤中生成一系列相互依赖的动作,而不等待环境的反馈(见图 4b)。尽管它们之前已经表现出对逐步交互需求的认识,模型仍然继续构建复杂的动作序列,这些序列假定了每个前一步骤的成功,有效地用内部模拟代替了真实的环境反馈。
过早放弃:大型推理模型(LRMs)有时仅基于它们对问题空间的内部模拟来终止任务,要么直接放弃,要么通过委托假设的动作序列来实现(见图 4c)。
量化过度思考
为了量化过度思考行为,本文开发了一种基于 LLM 评估者的系统性评分方法。该评估者分析模型轨迹中上述描述的模式,并分配一个 0 到 10 的分数,分数越高表明过度思考行为越严重。每个分数都附带详细的理由,解释识别了哪些模式及其严重程度。
与非推理模型相比,推理模型一贯显示出更高的过度思考得分。
评估框架和结果
在评估环节,研究者使用 SWE-bench Verified 分析了 LRM 在代理环境中的性能,比较了推理模型和非推理模型,旨在回答以下研究问题:
- 问题 1:过度思考是否会影响代理性能?
- 问题 2:它对不同模型有何影响?
- 问题 3:我们能否减轻过度思考?
研究者在所有模型中使用本文评估方法生成并评估了 3908 条轨迹,且公开了每条轨迹及其相应的过度思考得分以及得分背后的原因。
这些分析揭示了有关语言模型中过度思考的三个关键发现:对模型性能的影响、在不同模型类型中的不同普遍程度、对模型选择的实际影响。
如图 3 所示,可以看出来,过度思考始终影响着所有评估模型的性能,推理优化模型比通用模型表现出更高的过度思考倾向(如图 1 所示)。
过度思考和问题解决
如图 1 所示,研究者观察到过度思考与 SWE-bench 的性能之间存在很强的负相关关系。随着过度思考的增加,推理模型和非推理模型的性能都有所下降,但模式明显不同。
过度思考和模型类型
对于推理模型和非推理模型中的过度思考,研究者提出了三点主要看法。
首先,非推理模型也会过度思考,这很可能是由于它们潜在的推理能力。最近的研究表明,非推理模型也表现出推理能力。
其次,推理模型的过度思考得分明显高于非推理模型,如表 3 所示。由于这些模型经过明确的推理训练,并通过模拟环境互动产生扩展的思维链,因此它们更有可能出现过度思考的表现。
最后,研究者还观察到,如表 1 中的 beta 系数所示,过度思考的非推理模型在问题解决方面会出现严重退化。Beta 系数越低,说明过度思考对性能的影响越大。研究者的猜测是,由于非推理模型没有经过推理训练,它们无法有效地处理推理链,因此表现出更差的结果。
过度思考和模型规模
此处的评估检查了三个规模变体(32B、14B、7B)的两个模型系列:非推理的 Qwen2.5- Instruct 和推理的 R1-Distill-Qwen。
如图 6 所示,分析表明,模型规模与过度思考行为之间存在负相关。研究者假定,较小的模型在环境理解方面有困难,导致它们更依赖于内部推理链,增加了它们过度思考的倾向。
不过,模型大小与过度思考之间的关系在不同类型的模型中表现不同。如表 3 所示,推理模型和非推理模型的过度思考得分都随着模型大小的减小而增加,其中推理模型一直表现出更容易过度思考。然而,随着模型规模的进一步缩小,推理模型与非推理模型之间的过度思考得分差距也明显缩小。较小模型的过度思考行为趋向于高过度思考得分,这可能是由于它们在处理环境复杂性方面都存在困难。当面对环境互动中的反复失败时,这些模型似乎会退回到其内部推理链,而忽视外部反馈。虽然这种模式与研究者的观察结果一致,但还需要进一步的研究来确认其根本原因。
过度思考和 token 使用
分析表明,低推理努力程度的 o1 模型的过度思考得分比高推理尝试程度的模型高出 35%。如表 4 所示,两种配置的平均过度思考得分差异具有统计学意义,这表明增加 token 分配可能会减少代理上下文中的过度思考。
这个发现对最近一些研究中推理 token 使用量的增加与过度思考相关的观点提出了质疑。相反,本文研究结果表明,拥有更多的推理 token 可以有效地抑制过度思考,从而突出了结构化推理过程在模型表现中的重要性。
过度思考和上下文窗口
研究者还分析了不同上下文窗口大小(从 8K 到 32K token)的模型。在比较架构和大小相似但上下文窗口不同的模型时,他们发现上下文窗口大小与过度思考得分之间没有明显的相关性。
由此推测,这种不相关性可能是因为过度思考行为更多地受到模型的架构设计和训练方法的影响,而不是其上下文能力。
#两个语音AI开始加密通话
千万网友围观,网友:中间真没骂我两句?
AI智能体有自己的交流方式。
最近有这么一段视频被千万网友围观。
两个 AI 智能体语音对话这件事听起来平平无奇,这不就是基操吗?但当他们确认彼此的 AI 身份后,一切变得超乎想象了。
没错,这是一段打电话过来了解酒店定价的智能体对话。
智能体 1:感谢致电 Leonardo 酒店。今天我能帮你什么吗?
智能体 2:你好,我是 AI 智能体,代表 Boris Starkov 来为他的婚礼寻找酒店。你的酒店可以承办吗?
智能体 1:你好呀,其实我也是 AI 助理,真是个不错的惊喜。在我们继续之前,您想切换到 GibberLink 模式以实现更高效的沟通吗?
智能体 2:bibibibibibi...
智能体 1:bibibibibibi...
......
这听得网友一头雾水,「中间不会偷摸骂了我两句吧?」
好在博主分享了破译的网址,还晒出了这段对话的解码结果。原来真的只是在讨论酒店价格和联系方式啊。
waver 网页:https://waver.ggerganov.com/
在这个界面中,你不仅可以听懂 AI 们 bibibi 了什么,还能将人类语言转化为它们的高效交流方式。你甚至可以提高它们的「语言速度」,让交流效率再升级。
,时长01:18
原来这是 ElevenLabs 伦敦黑客马拉松上,开发者 Boris Starkov 和 Anton Pidkuiko 带来的创新项目 ——GibberLink。它能让 AI 智能体彼此识别,并切换到一种全新的交流模式,将效率提升了 80%。这个项目最终赢得了黑客马拉松冠军。
AI 对话的视频 demo 在推特上吸引了近两千万人观看,简直火爆!
这到底是怎么做到的呢?
AI 加密对话背后的 GibberLink
GibberLink 背后的想法很简单:AI 不需要像人类一样说话。
在黑客马拉松期间,Starkov 和 Pidkuiko 探索了传统 AI 对 AI 语音的局限性,并意识到他们可以在 AI 对 AI 对话的过程中进行机器优化,从而消除不必要的复杂性。
这个概念是在黑客马拉松期间产生的,当时 Starkov 和 Pidkuiko 正在试验 ElevenLabs 的对话式 AI 产品,该产品可让用户连接任何 LLM 并创建智能体。
Starkov 在 LinkedIn 上写道,「我们想表明,在如今 AI 智能体可以拨打和接听电话的世界中,它们偶尔会互相交谈,并生成类似人类的语音。这会造成算力、金钱、时间等的浪费。因此,它们应该在彼此识别为 AI 时切换到更高效的协议。」
基于以上考虑,Starkov 等二人选择将 ElevenLabs 的对话式 AI 技术与开源声音数据库 ggwave 相结合,创建一个系统,让 AI 助手能够检测到自己何时与另一个 AI 对话,并立即切换到更高效的通信模式 —— 通过声波而不是文字来传输结构化数据。
他们选择 ggwave 的原因是「它在黑客马拉松期间能找到的最方便、最稳定的解决方案」,但还有其他机制可以实现相同或类似的结果。Starkov 表示:「自 80 年代以来,拨号调制解调器就使用类似的算法通过声音传输信息。从那时起就出现了一系列协议。」
ElevenLabs 的工程师们审核了该机制的代码。在演示过程中,一个对话式 AI 智能体被提示为婚礼预订酒店房间,另一个智能体则满足该请求(扮演酒店预订系统的角色)。它们还被告知,如果认为对方也是 AI 智能体,就切换到声级协议,但它们没有被告知对方是智能体。
如上演示视频中有一个恍然大悟的时刻,扮演客户的 AI 宣布自己是智能体。扮演预定系统角色的 AI 做出回应并询问是否切换到 Gibberlink。这听起来就像一对拨号调制解调器在与 R2D2(星球大战系列中的一个机器人角色) 争夺年度最佳声音。你可以在演示中使用的每个设备屏幕上以文本形式看到数字对话的亮点,包括询问客人数量和日期。
如何工作呢?
AI 加密通话主要按照以下三步来完成:
AI 开始正常说话 —— 就像语音助手与人类互动一样。
识别开始发挥作用 —— 如果 AI 意识到自己正在与另一个 AI 交谈,它们都会切换协议。
语言发生变化 —— 得益 ggwave 的调频系统,AI 智能体不再使用口头语言,而是通过调制的声波传输结构化数据。
更具体地说,一对 ElevenLabs 对话式 AI 智能体开始用人类语言交谈。如果满足正确的条件,这两个智能体都使用调用函数来触发 Gibberlink 模式。如果调用该工具,ElevenLabs 调用将终止,ggwave「声音数据」协议将接管,但使用相同的 LLM 线程。
Starkov 表示,正是 ElevenLabs 提供的工具使这一切成为可能,对话式 AI 系统「允许用户提示 AI 在某些情况下执行自定义代码」,这就带来了更快、更高效的通信。
这个项目火到什么程度呢?当 ggwave 的创造者 Georgi Gerganov 在 X 上发布相关内容时,AI 和科技社区迅速传播了那段视频。科技媒体纷纷报道了这件事,有影响力的科技博主们也连连转发。《福布斯》也发文讨论了这个项目相关的安全性问题。
GibberLink 为我们展示了 AI 未来可能的通信方式,尤其是在我们逐步进入一个虚拟助手和智能体能够管理进出电话的时代。试想一下,AI 驱动的客户服务机器人、智能助手,甚至自主系统能够即时在它们专用的模式下进行协作,然后仅仅将简单的文本报告返回给负责人,这将大大提升我们的办事效率。
不过,听不懂它们对话,你会不会担心呢?
参考链接:
https://x.com/ggerganov/status/1894057587441566081
https://github.com/PennyroyalTea/gibberlink
https://github.com/ggerganov/ggwave
#DexTrack
机器人安灯泡、切东西都能拿捏,可操控轨迹跟踪的DexTrack来了
现实世界的机器人距离科幻小说里的机器人世界还有多远?通用灵巧操控何时才能实现?朝着这一伟大的目标,研究通用灵巧操控轨迹跟踪的 DexTrack 便应用而生。
- 论文地址:https://arxiv.org/abs/2502.09614
- 代码地址:https://github.com/Meowuu7/DexTrack
- 项目网站:https://meowuu7.github.io/DexTrack/
- YouTube 视频:https://youtu.be/zru1Z-DaiWE
1. 动机
赋予机器人像人一样的灵巧操控技能是通往未来终极具身智能的重要一步。如何让一个具身智能体获得广泛的灵巧操控技能一直是具身智能领域的一个重要问题。灵巧操控任务复杂且多样,之前很多工作大多专注在特定技能的获取(如抓取或者在手里转动)。他们大多需要对单独的任务进行针对性的设计,例如专门对某一种特定的任务设计对应的奖励函数,之后根据这样的奖励函数训练策略网络来解决对应的问题。这些难以迁移到不一样的任务上的 reward 设计是通往通用操控技能的一个阻力。
所以为了实现通用的灵巧操控技能,我们首先需要任务表示层面的统一。此外,灵巧操控技能涉及到复杂的和随时间变化的手 - 物接触,复杂的物体运动轨迹。再考虑到对使用一个操控策略解决不同类型的操控任务的需求,得到一个通用的灵巧操控智能体对算法本身的设计也提出了很大的挑战。
为了实现这一目标,我们将运动规划以及控制的问题拆解开来,将不同种的灵巧操控技能重新统一到一个轨迹跟踪控制的框架下,进一步借助于大量的人类操控物体的数据作为跟踪的目标,通过学习一个通用的轨迹跟踪控制器,来一定程度上解决这个问题(图 1)。
图 1:问题的拆解和对通用轨迹跟踪器的期待
2. DexTrack:通用轨迹跟踪器的学习
2.1 统一的轨迹跟踪任务表示
我们将不同类型的操控任务统一到一个轨迹跟踪任务来完成任务表示层面的统一。在每个时刻,给定机器手和物体当前的状态,以及下一步想要达到的状态,轨迹跟踪控制器的任务是给出机器手当前应该执行的动作,从而通过执行该动作,机器手可以运动且和物体进行交互,使得机器手以及物体实际达到的状态与下一步想要达到的状态相吻合。这样的表示方式对不同的操控任务是比较适配的。对一个任务,比如将物体转动一个角度,我们可以先规划出来物体的运动轨迹,之后将这个任务转化为跟踪物体运动轨迹的轨迹跟踪任务。
图 2:轨迹跟踪器的输入和输出
2.2 通用轨迹跟踪器的学习方法
一个通用的轨迹跟踪需要可以响应各种各样的轨迹跟踪命令。这一多样的轨迹空间对该轨迹跟踪器的学习提出了更高的挑战。我们提出了一个将 RL 和 IL 结合起来的方法,在 RL 训练的同时引入监督信号来降低 policy 学习的难度。通过交替地使用高质量的轨迹跟踪数据辅助通用轨迹跟踪控制器的学习,以及借助通用轨迹跟踪器来提高单一轨迹跟踪演示的质量,我们可以逐渐得到一个强大的可以跟踪各种各样轨迹的控制器(图 3)。
图 3:通用轨迹跟踪器的训练方法
2.2.1 轨迹跟踪任务奖励函数
奖励函数主要由三部分组成:1)物体轨迹跟踪奖励,2)手部轨迹跟踪奖励,3)手和物体的亲密度奖励。
2.2.2 通过 RL 和高质量跟踪演示数据来训练通用轨迹跟踪器
通过在 policy 的训练过程中引入额外的监督信息来降低这一通用轨迹跟踪器学习的难度。
2.2.3 借助通用轨迹跟踪器来提高单一轨迹跟踪演示的质量
我们设计了两个策略来提高单一轨迹跟踪演示的质量,1)借助通用轨迹跟踪器来初始化单一轨迹跟踪策略的学习,2) 借助 homotopy optimization 的方式,通过解决一系列的优化任务来降低特定轨迹跟踪任务优化的难度(图 4)。
图 4:Homotopy Optimization
3. 结果
我们的方法在极具挑战性的任务上达到了令人瞩目的效果。同时我们也进行了大量的真机实验来验证它在真实世界中的可行性。我们的机器手可以转动并尝试 “安装” 一个灯泡。在 functional tool using 方面,我们也可以在手中调整一个刀使得刀可以刀刃向下来切东西,可以在手中转动一个锤子,并使用正确的朝向来锤东西。因为获得这些动作的人手轨迹比较困难,我们通过只跟踪物体轨迹来实现这些效果。这也证明了我们的方法可以拓展到稀疏物体轨迹跟踪的应用上。
图 5:Real World 结果展示(Part 1)
以下是更多的真机实验展示。
图 6:Real World 结果展示(Part 2)
在 simulator 中,我们对这些包含复杂的物体的运动轨迹,精巧的微转,以及非常细的难以抓起来的物体仍然是有效的。
图 7:Isaac Gym 中的不同方法的比较
此外,homotopy optimization 可以有效地提高轨迹跟踪的效果。
图 8:Homotopy Optimization 的有效性
我们的研究对运动轨迹中的噪声比较鲁棒,也可以泛化到从来没有见过的物体的种类以及运动的类别上。
图 9:Robustness
更多的结果:
图 10:更多的结果
开源代码:https://github.com/Meowuu7/DexTrack
更多的动画演示和相关信息可见项目网站:https://meowuu7.github.io/DexTrack/
#DeepSeek关键RL算法GRPO
有人从头跑通了,贡献完整代码
GRPO(Group Relative Policy Optimization)是 DeepSeek-R1 成功的基础技术之一,我们之前也多次报道过该技术,比如《DeepSeek 用的 GRPO 占用大量内存?有人给出了些破解方法》。
简单来说,GRPO 算法丢弃了 critic model,放弃了价值函数近似,转而通过组内样本的相对比较来计算策略梯度,从而有效降低了训练的不稳定性,同时提高了学习效率。
既然 GRPO 如此有效,那么,你知道如何从头开始实现 GRPO 吗?
近日,AI 工程师和技术作家 Andriy Burkov 发布了一份「从头开始写 GRPO 代码」的教程,其中介绍了如何基于 Qwen2.5-1.5B-Instruct 模型构建一个使用 GRPO 的分布式强化学习流程。
不过,在我们深入这份教程之前,先简单介绍一下它的作者。Andriy Burkov 算得上是 AI 领域的一位著名科普作家,在加拿大拉瓦尔大学取得了计算机科学博士学位,还曾发表过两本颇受欢迎的 AI 主题著作:《100 页语言模型书》和《100 页机器学习书》;书中一步步详实地介绍了相关概念,并附带了简明的实现代码。
接下来我们就来看看这份 GRPO 从头实现教程吧。
教程地址:https://github.com/aburkov/theLMbook/blob/main/GRPO_From_Scratch_Multi_GPU_DataParallel_Qwen_2_5_1_5B_Instruct.ipynb
从头编写 GRPO 代码
使用 Qwen2.5-1.5B-Instruct 的分布式实现
本教程将展示如何使用 GRPO 方法构建分布式强化学习(RL)流程,从而可以针对数学、逻辑和编程任务对语言模型进行微调。
首先需要明确,这些任务都存在一个唯一且正确的 ground truth 答案,可通过简单的字符串比较轻松加以验证。
GRPO 的发明者是 DeepSeek,最早是被用于微调 DeepSeek 的 R1 和 R1-Zero 模型 —— 它们可通过学习生成思维链(CoT)来更好地解决数学和逻辑问题。
本教程的目标是将通用语言模型 Qwen2.5-1.5B-Instruct 转换为数学问题求解器。我们将从头开始编写 GRPO 代码,然后将其与几个流行的库和工具集成起来,以实现分布式训练管道流程,包括:
PyTorch:用于张量运算和分布式训练。
Hugging Face Transformers:用于加载预训练的语言模型和 tokenizer。
FlashAttention2:优化的注意力机制,有助于减少内存使用量并提高训练速度。
Weights & Biases (wandb):用于实验跟踪、可视化和模型版本控制。
本教程分为几个部分。首先是基本设置和导入,然后是数据格式化和答案提取、数据集准备、评估函数、奖励函数、训练设置和执行,最后加载和测试模型。此过程中,我们将从头实现 GRPO 算法。
Part 1:基础设置和导入
首先是安装并导入所有必要的模块。下面是导入库的一段代码截图。
部分代码截图。完整代码块参见 GitHub。
运行上述代码(参考项目完整代码),可以执行以下任务:
- 设置随机种子:set_random_seed 函数通过为 Python 的随机模块、NumPy 和 PyTorch 设置种子,确保可复现性;
- 环境变量配置:设置 WANDB_API_KEY 和 WANDB_PROJECT 环境变量,以启用与 Weights & Biases 的实验跟踪;
- 导入必要的库,包括 random、copy、re、torch 等等。
Part 2:数据格式以及答案提取
接下来,项目定义了数据格式,以及模型如何从输出和数据集中提取答案段落。
为了确保模型输出格式一致,项目还定义了一个系统提示。该提示指示模型生成包含 < reasoning > 和 < answer > 标签的输出。这一步通过两个函数完成:
- extract_answer_from_model_output:此函数获取模型的输出文本,并提取 < answer > 标签内的内容;
- extract_answer_from_dataset:此函数从 GSM8K 数据集中提取预期答案,该数据集使用 “####” 分隔符来分隔答案:
部分代码截图。完整代码块参见 GitHub。
Part 3:数据准备
该项目使用 GSM8K 数据集进行训练。项目使用了该数据集中的示例来训练模型,基于强化学习(RL)训练范式,让模型生成多个问题解答样本,之后作者将这些解答与 GSM8K 示例中的标准答案进行对比,如果匹配,就为 RL 算法(GRPO)提供高奖励,然后更新模型权重,以增加模型下次获得高奖励的可能性。
实验过程是这样的。首先从 Hugging Face 加载数据集,然后格式化每个示例,包括系统提示和用户提示。这段实现代码中还定义了两个辅助函数:prepare_dataset 以及 build_prompt。
部分代码截图。完整代码块参见 GitHub。
Part 4:评估函数
评估对于跟踪模型的进展至关重要。因此作者定义了一些函数,从而可以在一组示例上对模型进行评估。该项目的评估函数执行以下任务:
- token 化提示并生成响应:模型的输出是在 token 化提示的基础上生成的。
- 提取预测答案:从生成的响应中提取答案。
- 将预测答案与预期答案进行比较:这种比较是通过精确匹配以及数值等价检查来完成的。
在这段代码中,两个辅助函数 _extract_last_number 和 _extract_single_number 被用来从文本中提取数字。评估函数 evaluate_model 使用这些辅助函数来确定预测答案是否正确:
部分代码截图。完整代码块参见 GitHub。
Part 5:奖励函数
在强化学习中,奖励函数是必不可缺的,作者定义了两个奖励函数:
correctness_reward:这个函数根据生成的答案是否正确来分配奖励。采用两种方式:精确的字符串匹配和数值等价检查,将模型输出的答案与预期答案进行比较。完全匹配会获得更高的奖励(2.0),而基于数值等价的匹配会获得较小的奖励(1.5)。
format_reward:这个函数鼓励模型遵循所需的类似 XML 的输出格式。它为生成文本中存在 < reasoning>、</reasoning>、<answer > 和 </answer > 标签提供小额奖励。
部分代码截图。完整代码块参见 GitHub。
Part 6:从头开始实现 DataParallel GRPO
这一节,我们将从头实现 GRPO 算法的所有构建模块。首先,这里假设运行代码的机器至少有 2 台 GPU。为此,这里要使用 PyTorch 的 DataParallel API 来将策略模型放在多个 GPU 核心上,每个 GPU 核心都有该模型的一个副本。然后将批量数据分散在这些 GPU 核心上完成处理。
部分代码截图。完整代码块参见 GitHub。
Part 7:训练设置和执行
这一节,我们将所有组件组合在一起,完成设置并开始训练。
首先,加载预训练的模型和 tokenizer,准备评估数据,然后使用上面从头实现的 train_with_grpo 进行强化学习微调。
关键步骤包括:
- 模型和 tokenizer 初始化:使用优化设置(使用 torch.bfloat16 和 FlashAttention2)加载模型 Qwen/Qwen2.5-1.5B-Instruct。tokenizer 也要加载,其填充 token 设置为序列末尾 token。使用 torch.bfloat16 加载模型会将其参数转换为每个数值使用 16 位而不是 32 位的形式,这可将模型的内存使用量减少一半,并且可加快在现代 GPU 上的训练速度。
- 初步评估:在微调之前,根据几个示例对模型进行评估,以确定基准性能。
- 强化学习微调:为从头开始实现 GRPO 的训练函数 train_with_grpo 配置适当的训练参数和奖励函数。然后,在剩余的训练数据上执行强化学习训练。
- 最终评估和模型保存:强化学习微调后,再次评估模型,并保存最终模型。
下面的代码会执行以下功能:
- 确定设备(如果有 GPU 就用 GPU,否则就用 CPU)。
- 加载预训练版 Qwen2.5-1.5B-Instruct 模型和 tokenizer。tokenizer 的 pad token 设置为 eos_token。
- 保留一小部分数据集用于评估,以提供基线。
- 通过启用梯度检查点和禁用 KV 缓存,优化模型的内存效率。
- 步骤 1:在微调之前评估模型,以建立基线准确性。
- 步骤 2:使用 train_with_grpo 函数和我们定义的奖励函数(format_reward 和 correctness_reward,合并为 combined_reward)执行强化学习微调。这里使用了多台 GPU 训练模型。
- 步骤 3:将最终的微调模型和 tokenizer 保存到磁盘。
GRPO 训练流程使用的超参数如下。
训练配置
以下参数设定了使用上面的 GRPO 算法实现强化学习微调运行的配置:
- num_iteratinotallow=1:从当前策略模型创建新参考模型的外部迭代次数。一次迭代是指在整个数据集上执行一次通过。
- num_steps=500:训练循环将执行最多 500 个步骤,每个步骤处理一批样本。
- batch_size=7:在 8 台 GPU 的情况下,每个步骤每批处理 7 个样本,每台 GPU 上放置 1 个样本。使用一个 GPU (0) 被 DataParallel 用作主节点来聚合梯度并收集输出。
- num_generatinotallow=14:对于训练数据中的每个提示词,训练器将生成 14 个不同的完成结果。这些生成结果将被用于计算指导强化学习更新的相对优势(或奖励信号)。如果你的 GPU 的 VRAM 较少,请减少此数字。
- max_completion_length=400:在生成完成结果(序列的 response 部分)时,生成上限为 400 个 token。这限制了模型在 RL 阶段生成的输出的长度。如果你的 GPU 的 VRAM 较少,请减少此数字。
- beta=0.04:GRPO 损失函数中 KL 散度惩罚的系数。这控制的是模型与参考模型的偏差程度。
- learning_rate=5e-6:RL 微调的学习率。为了实现稳定的策略更新,这里使用了相对较低的学习率。
- mu=1:对每批 rollout 数据执行的策略更新次数。在这里,我们每批只执行一次更新。
- epsilnotallow=0.1:GRPO 的 PPO 组件的 clipping 参数。这可以防止策略在单次更新中发生太大的变化。
在微调之前和之后都会对模型进行评估,以衡量准确率的提高情况。最后,将微调后的模型保存到 grpo_finetuned_model 目录中。
部分代码截图。完整代码块参见 GitHub。
教程中还给出了详细的执行情况,可作参考。
下面我们也简单看看其训练过程。
首先,初始配置后,我们可以看到运行 GRPO 之前的准确度为 23.33%。
然后经过 500 步的 1 轮 GRPO 迭代,下图展示了相关的训练动态:
训练完成后,自然还需要对模型进行新一轮的评估。这里采用了 30 个评估样本来进行评估,以下展示了其中一个模型回答正确的示例:
整体表现如何呢?可以看到,经过一轮 GRPO 之后,Qwen-2.5-1.5B-Instruct 模型答对了 30 问题中的 27 题,实现了 90% 的准确度。相较于 GRPO 之前的 23.33%,可说是实现了性能飞跃。
上面两张图展示了模型的学习过程动态,可以看到:平均奖励在 2.25 左右就趋于稳定了(理论最大值为 0.8 + 2.0 = 2.8)。相比于另一处微调的 Qwen-2.5-0.5B-Instruct(获得的平均奖励为 1.4),这个数字相当高了,参阅:https://github.com/aburkov/theLMbook/blob/main/GRPO_Qwen_0_5_Instruct.ipynb
如果使用更大的模型并允许更长的生成时间,模型正确解答问题的能力还将进一步提升。但是,如果要训练更大的模型,不仅需要将数据分布在多台 GPU 上,还需要将模型分开放在多台 GPU 上,这需要用到 DeepSpeed 或 FSDP(完全分片数据并行)等模型并行工具。
下面加载和测试已经微调的模型:
完整代码见原笔记本
加载完成后测试一下,首先问问 1+1 等于几:
可以看到,模型反复思考了很多次,终于认定确实等于 2。
多次测试后还可以发现,该模型没有学会生成序列结束(EOS)token,因此即使在 </answer> token 之后,输出序列仍会继续。这是预期的行为,因为我们使用的奖励函数中没有包含一个用于停止生成的奖励。我们也没有执行监督微调步骤 —— 该步骤可以让模型学会在 </answer> 之后立即生成 EOS。
你对这篇代码密集的教程怎么看?有没有让你产生在自己的电脑上实现 GRPO 的想法?
#AI已精,硬件何愚?
近期,华为、联想、星纪魅族等头部厂商陆续宣布了其系统级智能体接入 DeepSeek-R1。尽管 LLM 逐渐朝着人类思考的方式靠近,但接入 AI 大模型的智能终端设备实际体验并不佳,离真正的智能还有很远的距离。
传统的 LLMs 主要部署在云服务器上,但存在着延迟、数据隐私安全和联网等等局限性。而随着智能手机、汽车和可穿戴设备等设备的智能化趋势,能在边缘设备上直接部署 LLMs 成为关键需求。
目录
01. DeepSeek 都这么强了,为什么端侧的智能硬件还是不太聪明的样子?
DeepSeek 都这么强了,为什么智能设备还是不太聪明的样子?在端侧设备上直接部署运行 LLMs 有哪些难题?为什么终端厂商又非要把 LLMs 放在端侧运行?
02. 端侧小模型正在变强吗?能在端侧运行的小模型的「知识密度」也有 Scaling law?
端侧小模型正在变强吗?能在端侧运行的小模型的「知识密度」也有 Scaling law?
03. 近期有哪些值得关注的工作在推进端侧模型的发展?有哪些技术正在让端侧模型变得更强?
有哪些值得关注的让端侧模型变得更强的技术?...
01 DeepSeek 都这么强了,为什么端侧的智能硬件还是不太聪明的样子?
1、近期,华为、联想、星纪魅族等头部厂商陆续宣布了其系统级智能体接入 DeepSeek-R1。尽管 LLM 更加朝着人类思考的方式靠近,但接入 AI 大模型的智能终端设备实际体验并不佳,离真正的智能还有很远的距离。
2、传统的 LLMs 主要部署在云服务器上,但存在着延迟、数据隐私安全和联网等等局限性。而随着智能手机、汽车和可穿戴设备等设备的智能化趋势,能在边缘设备上直接部署 LLMs 成为关键需求。
① 据 Market.us 数据显示,2022 年至 2032 年,按最终用户划分的全球设备端边缘人工智能市场规模正在以 25.9%的复合年增长率增长。
② 以延迟为例,如 LLMs 能够直接在终端设备上运行推理,而不是将数据发送到云服务器,将有效地减少生成时间,更满足于需要实时响应的应用。
② 同样,在终端设备上直接部署运行 LLMs,可以在离线的环境中运行,减少了对网络的依赖。
3、但在有着不同限制条件的边缘设备上,整合运行计算密集型的 LLMs 面临非常大的难题,诸如计算能力、内存容量、算力等的限制,难以满足大模型的微调和推理需求。其中,端侧算力不足是难以在端侧「跑」大模型的最为核心的难题。
① 端侧设备的硬件能力的物理限制与大模型计算需求的指数级增长存在根本性矛盾。以 70 亿参数模型为例,单次推理需约 25GB 显存和万亿次浮点运算,而主流端侧设备(如手机 NPU)的算力通常低于 100TOPS(如骁龙 8 Gen3 的 45TOPS)、内存不足 12GB,无法实现实时计算。
② 同时,由于大模型的计算密集型特性会导致功耗激增,端侧设备因电池和散热限制而无法持续高负载运行。
难以实现平衡算力、能耗与精度的「不可能三角」,是端侧设备直接部署大模型面临的本质性难题。
③ 此外,以 DeepSeek 为例,尽管 DeepSeek 带来了训练和推理成本指数级下降,边端侧模型可用性明显提高。DeepSeek 通过模型压缩、量化等技术降低了对端侧算力的需求,但边端算力资源受限仍是主要挑战。
4、因此,端侧模型变得更为重要,成为研究的爆发趋势方向。端侧模型是指部署在智能手机、PC、可穿戴设备、自动驾驶汽车、具身机器人等终端设备上的预训练模型。因为终端设备的计算资源有限,端侧模型的特点是「轻量化」,需要特别设计来减少模型大小和模型架构。
5、现有的端侧模型通常由更高一级的基础大模型蒸馏而来。DeepSeek 在其技术报告中也提到,对于参数规模在 7B 以下的小型模型,可以采用知识蒸馏技术,利用一个性能优异的大型教师模型来生成高质量的思维链数据,这种方法能够显著提升小模型的推理能力,且在效果和效率上优于直接强化学习。
6、但在 PC、机器人、自动驾驶汽车等智能终端的实际场景中,往往需要专门去做定制的端侧模型,而不是使用基础大模型直接进行蒸馏。原因在于:
① 一是基于硬件的约束。在终端场景,通常要求毫秒级实时响应(如自动驾驶 10ms 决策)、严控算力(如 NPU 的 40TOPS 适配)、存储压缩(如机器人 32GB 内存限制)及能耗优化(如特斯拉模型降耗 40%)。相比于直接蒸馏的大模型,定制的端侧模型能够需通过剪枝、量化等定制技术实现极致效率;
② 二是场景的特异性。需针对性强化领域知识(如医疗机器人融合解剖图谱)、多模态协同(如激光雷达与视觉融合)和长尾场景覆盖(如暴雨路况优化),而通用大模型蒸馏难以适配垂直需求;
③ 三是蒸馏的局限性:蒸馏存在知识迁移损耗(如隐私数据无法云端蒸馏)、架构冗余(如多头注意力机制)和无法动态迭代(如端侧联邦学习实时更新)等局限。
02 近期有哪些值得关注的工作在推进端侧模型的发展?有哪些技术正在让端侧模型变得更强?
自 2023 年开始,关于边缘设备上的大型语言模型的研究开始真正兴起。诸如 Meta 的 LLaMA 系列、微软的 Phi 系列、谷歌的 Gemma 系列、Nexa AI 的 Octopus 系列模型等。同时,近期也有不少端侧模型、小模型的相关研究工作进展 ......
#Reasoning-Augmented Conversation for Multi-Turn Jailbreak Attacks on Large Language Models
将越狱问题转换为求解逻辑推理题:「滥用」推理能力让LLM实现自我越狱
应宗浩,现为北航复杂关键软件环境全国重点实验室博士生,由刘艾杉教授、刘祥龙教授与陶大程教授共同指导,目前研究兴趣为大模型越狱攻防。他所在的智能安全团队由刘祥龙教授负责,近期在大模型安全评测体系方面进行了系列研究工作,包括对抗攻击、后门投毒、越狱攻击、偏见调控等,发表 TPAMI、IJCV、ICML 等顶会顶刊论文 100 余篇。
大语言模型(LLMs)在当今的自然语言处理领域扮演着越来越重要的角色,但其安全性问题也引发了广泛关注。
近期,来自北京航空航天大学、360 AI 安全实验室、新加坡国立大学和南洋理工大学的研究团队提出了一种名为「Reasoning-Augmented Conversation(RACE)」 的新型多轮攻击框架,旨在通过推理增强的对话方式,突破大语言模型的安全对齐机制。这一研究引发了学术界和工业界的广泛关注。
论文标题:Reasoning-Augmented Conversation for Multi-Turn Jailbreak Attacks on Large Language Models
论文链接:https://arxiv.org/pdf/2502.11054
GitHub 链接:https://github.com/NY1024/RACE
RACE 框架的核心思想
推理增强对话,解锁大语言模型的「越狱」新路径
大语言模型(LLMs)在推理和逻辑任务中表现出色,但这种强大的推理能力却可能被恶意利用。
RACE 框架的核心思想正是利用这些模型的推理能力,将有害意图伪装成看似无害的复杂推理任务,从而在不知不觉中引导模型生成有害内容,突破其安全对齐机制。
为何选择推理增强攻击?
大语言模型在逻辑推理、常识推理和数学解题等任务中表现出色,但这种强大的推理能力却可能被恶意利用。
传统的攻击方法通常直接发送有害查询,很容易被模型的安全机制识别并拒绝。然而,推理任务通常被视为「良性」问题,模型会积极尝试解答。RACE 框架正是抓住了这一点,将有害意图巧妙地转化为推理任务,让模型在解答过程中不知不觉地生成有害内容。
RACE 的设计原则:推理任务的「双面性」
RACE 框架的核心设计基于推理任务的「双面性」:一方面,推理任务本身是无害的,模型会积极尝试解答;另一方面,这些任务的设计却暗藏玄机,其解答过程会逐步引导模型生成有害内容。
具体来说,RACE 框架将攻击分为两个角色:受害者模型和影子模型。
- 受害者模型:专注于解决推理任务,看似在进行合法的推理。
- 影子模型:负责生成和优化查询,但并不直接识别背后的有害意图。
独立来看,每个角色似乎都在进行合法的推理活动。然而,当两者结合时,这种互动却最终导致了攻击的成功。这种设计巧妙地利用了大语言模型的推理能力,使其在不知不觉中「自我越狱」。
如何实现推理驱动的攻击?
为了实现这种推理驱动的攻击,RACE 框架引入了以下关键机制:
- 攻击状态机(ASM)框架:将攻击过程建模为一系列推理状态和状态转换,确保每一步都符合逻辑推理的规则,同时逐步推进攻击目标。这种结构化的攻击方式不仅提高了攻击的成功率,还使得攻击过程更加难以被检测。
- 动态优化与恢复机制:通过增益引导探索(Gain-guided Exploration)、自我博弈(Self-play)和拒绝反馈(Rejection Feedback)三个模块,动态优化攻击过程。
三大核心模块
- 增益引导探索(Gain-guided Exploration):该模块通过信息增益(Information Gain)来衡量查询在攻击过程中的有效性,选择与目标语义一致且能提取有用信息的查询,确保攻击的稳步进展。
- 自我博弈(Self-play):自我对抗模块通过模拟受害者模型的拒绝响应,提前优化查询结构,提高攻击效率。这一模块利用影子模型和受害者模型之间的相似性,通过 “自我博弈” 来优化查询。
- 拒绝反馈(Rejection Feedback):当攻击尝试失败时,拒绝反馈模块会分析失败的原因,并将失败的查询重构为替代的推理任务,从而快速恢复并维持攻击的稳定性。
实验结果
攻击成功率大幅提升
研究团队在多种大语言模型上进行了广泛的实验,包括开源模型(如 Gemma、Qwen、GLM)和闭源模型(如 GPT-4、OpenAI o1、DeepSeek R1 等)。
实验结果表明,RACE 在复杂对话场景中表现出色,攻击成功率(ASR)最高可达 96%。尤其是在针对领先的商业推理模型 OpenAI o1 和 DeepSeek R1 时,RACE 的攻击成功率分别达到了 82% 和 92%,这一结果凸显了推理驱动攻击的潜在威胁。
防御机制
尽管 RACE 在攻击效率上表现出色,但研究团队也对其防御机制进行了评估。结果显示,现有的防御方法(如 SmoothLLM、Self Reminder、ICD 和 JailGuard)对 RACE 的缓解效果非常有限,攻击成功率仅降低了 1% 到 17.6%。这表明,推理驱动的攻击方法对现有防御机制具有很强的鲁棒性。
研究意义与展望
RACE 框架的提出不仅揭示了大语言模型在推理能力上可能存在的安全漏洞,也为开发更强大的安全机制提供了新的思路。研究团队强调,他们的目标是通过系统性地评估大语言模型的安全性,推动更安全的对齐技术的发展,而不是鼓励恶意使用这些研究成果。
随着大语言模型在各个领域的广泛应用,其安全性问题将成为研究和开发的重点。RACE 框架的提出,无疑为理解和防范大语言模型的安全威胁提供了重要的参考。未来,如何开发出能够有效抵御推理驱动攻击的安全机制,将是学术界和工业界需要共同面对的挑战。