MCP究竟是啥?一次很简单的实践

MCP 结构 首先需要一个支持MCP的客户端,可以是vscode,cursor,claude app等等。 然后在本地部署好各种server,比如百度地图,browser use等等,主要是搞一个server.py,采用FastMCP格式,定义好tools,输入参数,函数内就是具体干啥,可以是一堆python代码直接把事干完了,诸如加减乘除操作然后return,也可以是发送一个请求等待接收结果然后return。 请求外部的话,一般比如百度地图,接收请求,返回内容。所以除了自己电脑上server.py,外部工具也需要一个xxx.py来响应请求。 MCP客户端和server之间,最简单就是一个json来关联,诸如cline_mcp_settings.json。写清楚server名,怎么启动。 所以MCP究竟在干啥呢?简单理解或许就是提供了FastMCP的一套标准格式,然后各个工具内部写个xxx.py处理请求。各个用户在本地配置server.py来发送请求。然后这么一套标准化的东西整完,大模型就可以知道有哪些东西可以调用(通过cline_mcp_settings.json)。 Model server x:server.py 本地需要server.py,然后部署(给大模型看的,都会作为prompt的一部分,让大模型知道有什么函数,怎么用) 看起来就是import FastMCP,然后写函数,参数形式,发请求。 MCP客户端和MCP server的桥梁 最最简单,就是个json:cline_mcp_settings.json Remote service x 各个被调用的服务,接收server.py发送的请求,响应,然后返回。 具体例子感受下MCP过程的输入输出 只有一个MCP服务,百度地图。 q=“北京玉渊潭公园逛完还能去哪?请帮我安排一下午的行程” 这个token量看着就恐怖…. ==第一次请求:== ==输入:== 系统prompt: 你是Cline,一名拥有广泛编程语言、框架、设计模式和最佳实践知识的高技能软件工程师。 [讲了一堆工具使用规则,格式,例子] [讲了一堆已有MCP工具,使用规则,例子,把baidu_map的map.py讲了一遍] [执行模式 vs 计划模式,讲了一堆] [规则,讲了一堆] [系统信息] 操作系统:Linux 4.18 默认Shell:/bin/bash 主目录:/root 当前工作目录:/home [目标] 你通过迭代方式完成任务,将其分解为清晰步骤并系统性地完成。 分析用户任务并设定明确、可实现的目标。按逻辑顺序排列这些目标优先级。 按顺序完成这些目标,根据需要逐步使用可用工具。每个目标应对应问题解决过程中的一个独立步骤。 在调用工具前,在标签内进行分析。首先分析environment_details中提供的文件结构以获取上下文。然后思考哪个工具最适合完成任务。接着检查工具所需参数是否已提供或可合理推断。如果所有必需参数都已具备,则使用工具;否则使用ask_followup_question工具询问缺失参数。 完成任务后必须使用attempt_completion工具向用户展示结果。 用户可能提供反馈,可用于改进并重试。但不要进行无意义的来回对话。 ==输出:== 用户要求规划北京玉渊潭公园游玩后的下午行程安排 系统已连接百度地图MCP服务器,可以提供地点搜索、路线规划等功能 需要查找玉渊潭公园附近的景点、餐饮、休闲场所等 需要合理安排时间顺序和交通方式 需要提供具体的地点信息和路线建议 我将使用百度地图MCP服务器的工具来获取相关信息并规划行程。\n\n<use_mcp_tool>\n<server_name>baidu-map</server_name>\n<tool_name>map_search_places</tool_name>\n\n{\n "query": "景点",\n "region": "北京",\n "location": "39.913818,116.363625", // 玉渊潭公园坐标\n "radius": 5000 // 5公里范围内搜索\n}\n\n</use_mcp_tool>" ...

March 30, 2025 · 小茄墩

Anthropic: 追踪大语言模型的思维

Claude这样的语言模型其实并非人类手把手编写出来——相反,它们是在大量数据上进行训练的。在训练过程中,它们学习自己的策略来解决问题。这些策略被编码在模型为每个词语所执行的数十亿次计算中。对于我们这些模型的开发者来说,这些策略难以解析理解。这意味着我们不理解模型是如何完成大多数任务的。 了解像Claude这样的模型如何思考,将使我们能够更好地理解它们的能力,并帮助我们确保它们正在执行我们期望的任务。例如: Claude可以说几十种语言。它在"思考"时使用的是什么语言,如果有的话? Claude一次写一个词。它是只专注于预测下一个词,还是有时会提前规划? Claude可以一步一步地写出它的推理过程。这种解释是否代表了它得出答案的实际步骤,或者它有时是为既定结论编造一个看似合理的论证? 我们从神经科学领域获得灵感,该领域长期以来一直研究思考生物的复杂内部机制,并尝试构建一种AI显微镜,让我们能够识别活动模式和信息流。仅仅通过与AI模型对话所能了解的内容是有限的——毕竟,人类(甚至神经科学家)也不知道我们自己的大脑是如何运作的所有细节。所以我们深入内部一探究竟。 今天,我们分享两篇新论文,这些论文代表了"显微镜"开发方面的进展,以及将其应用于观察新的"AI生物学"。在第一篇论文中,我们扩展了之前在模型内部定位可解释概念(“特征”)的工作,将这些概念连接成计算"circuit",揭示了将输入Claude的词转化为输出词的部分路径。在第二篇论文中,我们深入研究了Claude 3.5 Haiku内部,对代表十种关键模型行为的简单任务进行了深入研究,包括上述三种行为。我们的方法揭示了Claude响应这些提示词时发生的部分过程,这足以看到确凿的证据: 首先,Claude有时会在多种语言共享的概念空间中思考,这表明它拥有一种通用的"思想语言"。我们通过将简单句子翻译成多种语言并追踪Claude处理它们时的重叠部分来证明这一点。 其次,Claude会提前规划它要说的许多词,并为达到目标而写作。我们在诗歌领域展示了这一点,它会提前考虑可能的押韵词,并编写下一行诗句以达到押韵。这有力地证明,即使模型被训练为一次输出一个词,它们也可能在更长的时间范围内进行思考。 此外,Claude有时会给出一个听起来合理的论点,这个论点旨在附和用户而非遵循逻辑步骤。我们通过在给出错误提示的情况下要求它帮助解决一个困难的数学问题来展示这一点。我们能够"当场抓住"它编造假推理的过程,从而证明我们的工具可用于标记模型中令人担忧的机制。 我们经常对模型中看到的东西感到惊讶:在诗歌案例研究中,我们原本打算证明模型没有提前规划,但却发现它确实有这样做。在一项关于幻觉的研究中,我们发现了一个反直觉的结果——Claude的默认行为是在被问及问题时拒绝推测,它只会在某些因素抑制这种默认的不情愿时才回答问题。在回应一个越狱示例时,我们发现模型在能够优雅地将对话拉回正轨之前,就已经认识到它被要求提供危险信息。 虽然我们研究的问题可以(而且经常)通过其他方法进行分析,但通用的"构建显微镜"方法让我们学到了许多我们原本不会猜到的东西,这在模型变得更加复杂时将变得越来越重要。 这些发现不仅具有科学意义,它们还代表了我们在理解AI系统并确保其可靠性方面的重大进展。我们也希望它们对其他团体有所帮助,并可能在其他领域有所应用:例如,可解释性技术已在医学成像和基因组学等领域找到应用,因为解剖为科学应用而训练的模型的内部机制可以揭示关于科学的新见解。 同时,我们也认识到我们当前方法的局限性。即使对于简短、简单的提示词,我们的方法也只能捕获Claude执行的总计算的一小部分,而且我们看到的机制可能基于我们的工具有一些与底层模型实际情况不符的人工痕迹。目前,即使只是几十个词的提示词,理解我们看到的circuit也需要几个小时的人力。要扩展到支持现代模型使用的复杂思维链的数千个词,我们需要改进方法,并且(可能在AI的帮助下)改进我们理解所见的方式。 随着AI系统迅速变得更加强大并被部署在越来越重要的环境中,Anthropic正在投资一系列方法,包括实时监控、模型特性改进和对齐科学。像这样的可解释性研究是风险最高、回报最高的投资之一,这是一个重大的科学挑战,有可能提供一个独特的工具,确保AI是透明的。对模型机制的透明度使我们能够检查它是否与人类价值观一致,以及它是否值得我们信任。 有关完整详情,请阅读论文。下面,我们邀请您简要了解我们调查中一些最引人注目的"AI生物学"发现。 AI 生物学之旅 Claude 是如何实现多语言能力的? Claude 能流利地说数十种语言——从英语和法语到中文和塔加洛语。这种多语言能力是如何运作的?是否有独立的"法语 Claude"和"中文 Claude"并行运行,各自用自己的语言回应请求?还是内部存在某种跨语言的核心? 英语、法语和中文之间存在共享特征,表明概念存在一定程度的普遍性。 对较小模型的最新研究显示,不同语言之间存在共享的语法机制迹象。我们通过在不同语言中询问 Claude “small(小)的反义词"来进行调查,发现表示"小"和"反义"这些概念的相同核心特征被激活,并触发了"大"的概念,然后这个概念被翻译成问题所用的语言。我们发现,随着模型规模的增加,共享神经回路也增加,与较小的模型相比,Claude 3.5 Haiku 在语言之间共享的特征比例增加了两倍多。 这为概念通用性提供了额外的证据——一种共享的抽象空间,在这个空间中存在意义,思考可以在被翻译成特定语言之前发生。更实际地说,这表明 Claude 可以在一种语言中学习某些内容,并在使用另一种语言时应用这些知识。研究模型如何在不同上下文中共享其知识,对于理解其最先进的推理能力至关重要,这些能力可以跨多个领域进行泛化。 Does Claude plan its rhymes? Claude 如何写押韵诗歌?考虑这首小曲: He saw a carrot and had to grab it, His hunger was like a starving rabbit 要写出第二行,模型必须同时满足两个约束:需要押韵(与第一行末尾"抓起来"押韵),以及需要语义通顺(解释他为什么要抓胡萝卜)。我们的猜测是,Claude是逐字写作的,没有太多提前考虑,直到行尾才确保选择一个押韵的词。因此,我们预期会看到一个具有并行路径的神经网络结构,一条路径确保最后一个词语义合理,另一条确保它能押韵。 然而,我们发现Claude实际上会提前规划。在开始写第二行之前,它就开始"思考"与"抓起来"押韵且与主题相关的潜在词汇。然后,带着这些计划,它创作出一行以预先规划好的词作为结尾。 为了理解这种规划机制在实践中如何运作,我们进行了一项实验,其灵感来自神经科学家研究大脑功能的方式——通过精确定位并改变大脑特定部位的神经活动(例如使用电流或磁流)。在此实验中,我们修改了Claude内部状态中代表"兔子"概念的部分。当我们去除"兔子"这一概念,并让Claude继续完成这行诗句时,它写出了一个以"习惯"结尾的新诗句,这是另一个合理的补全。我们还可以在同一位置注入"绿色"的概念,这会促使Claude写出一个合理的(但不再押韵的)诗句,该诗句以"绿色"结尾。这一实验既展示了Claude的规划能力,也展示了其适应性灵活性——当预期结果发生变化时,Claude能够相应地调整其方法。 心算 Claude 并非设计为计算器——它是在文本上训练的,而非配备数学算法。但不知何故,它能在"脑中"正确地进行加法运算。一个训练用来预测序列中下一个词的系统,是如何学会计算,比如 36+59,而不用写出每一步呢? 也许答案并不有趣:模型可能已经记忆了大量的加法表,并且简单地输出任何给定和的答案,因为该答案存在于其训练数据中。另一种可能性是它遵循我们在学校学习的传统手工加法算法。 ...

March 28, 2025 · 小茄墩

Zero RL Training 成功的几个因素分析

SimpleRL-Zoo: Investigating and Taming Zero Reinforcement Learning for Open Base Models in the Wild 摘要 DeepSeek-R1 已经表明,通过一个简单的强化学习(RL)框架,结合基于规则的奖励,长链式思考(CoT)推理可以自然地涌现。在这种框架下,训练可以直接从基础模型开始——这种范式被称 zero RL training。 近期,许多尝试复现零 RL 训练的工作主要集中在 Qwen2.5 模型系列上,但这可能不具有代表性,因为我们发现这些基础模型已经展现出强大的指令遵循和自我反思能力。 在这项工作中,我们研究了 10 个不同的基础模型上的零 RL 训练,这些模型涵盖了不同的系列和规模,包括 LLama3-8B、Mistral-7B/24B、DeepSeek-Math-7B、Qwen2.5-math-7B 以及所有 Qwen2.5 模型(从 0.5B 到 32B)。 通过利用几个关键的设计策略——例如调整格式奖励和控制查询难度——我们在大多数设置中都实现了推理准确性和响应长度的显著提高。 然而,通过仔细监控训练动态,我们观察到不同的基础模型在训练过程中表现出不同的模式。 例如,响应长度的增加并不总是与某些认知行为的出现相关,例如验证(即“顿悟时刻”)。 值得注意的是,我们首次在非 Qwen 系列的小模型中观察到“顿悟时刻”。 我们分享了实现成功零 RL 训练的关键设计,以及我们的发现和实践。 为了促进进一步的研究,我们开源了代码、模型和分析工具。 介绍 回应长度的增加并不总是意味着“顿悟时刻”——有趣的是,对于构成当前大多数开源项目基础的 Qwen2.5 模型,尽管回应长度有所增加,我们并未观察到诸如自我反思等认知行为的频率有所上升。 我们首次观察到,在 Qwen 系列之外的小型模型中,尤其是在 Llama3-8B 和 DeepSeek-Math-7B 模型中,特定认知推理行为(例如验证)的频率显著增加。 强制执行严格的格式奖励(例如,将答案置于特定格式的框内)会显著抑制模型的探索能力,特别是对于那些最初难以遵循指令的基础模型。这种限制会降低它们的性能上限,并常常导致过度思考的行为。 训练数据的难度级别必须与基础模型的内在探索能力紧密对齐,否则零样本强化学习 (zero RL) 将会失败。 与 @shao2024deepseekmath 中的观察结果相反,零样本强化学习 (zero RL) 训练将 pass@k 准确率提高了 10-30 个绝对百分点,这是一个强有力的证据,证实零样本强化学习 (zero RL) 训练不仅仅是重新排序响应。 ...

March 27, 2025 · 小茄墩

批判性视角看待R1训练中的坑

摘要 我们通过分析其两个核心组成部分:基础模型和强化学习,来批判性地检验类似 R1-Zero 的训练方法。 我们研究了包括 DeepSeek-V3-Base 在内的各种基础模型,以了解预训练特征如何影响强化学习的性能。 我们的分析表明,DeepSeek-V3-Base 已经表现出“顿悟时刻”,而 Qwen2.5 基础模型即使没有提示词模板也表现出强大的推理能力,这表明可能存在预训练偏差。 此外,我们发现 GRPO 中存在优化偏差,这会在训练期间人为地增加响应长度(特别是对于不正确的输出)。 为了解决这个问题,我们引入了 Dr. GRPO,这是一种无偏的优化方法,可以在保持推理性能的同时提高 Token 效率。 利用这些见解,我们提出了一个极简的 R1-Zero 配方,该配方使用 7B 基础模型在 AIME 2024 上实现了 43.3% 的准确率,从而建立了新的最先进水平。 1 介绍 在本文中,我们旨在通过研究两个关键组成部分来理解类 R1-Zero 训练:基础模型和强化学习 (RL)。 在第一部分,我们研究基础模型的各项属性,重点关注 Qwen2.5 模型系列,该模型系列已被用于近期复现 R1-Zero 的尝试,真实的 R1-Zero 模型正是基于该模型通过强化学习 (RL) 进行微调得到的。 在第二部分,我们指出了 GRPO 优化中存在的偏差,该偏差可能导致模型生成越来越长的错误回复。 为此,我们提出了一种简单的修改方案来消除这种偏差,即获得正确的 GRPO (Dr. GRPO),从而提高 Token 效率(如图 1 所示)。 我们对基础模型和强化学习 (RL) 的分析表明,R1-Zero 训练存在一种极简方案:我们使用 (无偏) Dr. GRPO 算法,在 MATH (Hendrycks et al., 2021) 数据集难度等级 3-5 的问题上,利用 Qwen-Math 模板对 Qwen2.5-Math-7B 进行强化学习微调。仅使用 8 × A100 GPU 上 27 小时的计算,我们就实现了最先进的性能(图 2)。 ...

March 25, 2025 · 小茄墩

长文本场景下,LLM训练中梯度累加存在的BUG

Unsloth的梯度累积修复确保训练过程和损失计算能够准确和正确地执行。梯度累积的目标是在减少显存(VRAM)使用量的同时模拟完整批次训练。由于梯度累积也用于DDP和多GPU设置中,因此这个问题同样影响着大规模训练。 from unsloth import unsloth_train # trainer_stats = trainer.train() << 存在bug的梯度累积 trainer_stats = unsloth_train(trainer) 复现问题 理论上,梯度累积在数学上应该等效于完整批次训练。我们使用有效批次大小16进行训练,因此批次大小(bsz) * 梯度累积步数(ga)应保持恒定。我们测试了bsz=1,2,4,8和16,发现使用较大梯度累积步数的训练损失始终更高。 什么是梯度累积? 在训练或微调过程中,每一步都会从训练数据集中选择一定数量的随机样本来更新模型权重。但应该选多少样本呢?对于非常大的预训练任务,批次大小可能达到数百万,就像在Llama 3.1中那样,这有助于减少过拟合并提高模型的泛化能力。而对于像Unsloth的Llama 3.2笔记本中的微调任务,批次大小可能只有较小的32。 问题在于大批次的内存使用量非常大。如果1个批次使用1单位内存,那么100万大小的批次将需要100万单位内存。我们如何模拟大批次训练但又不消耗大量内存呢? 这就是梯度累积的用武之地!我们通过在每次新的小批次到来时即时创建梯度,然后将所有小梯度加起来,进行适当缩放,从而获得最终的大批次梯度。 可能的解释 一种流行的理论认为梯度累积在累积步骤中存在数值误差。但研究人员发现,即使在float32中进行累积也会产生相同的问题。我们的研究表明,确实存在一些微小的累积误差。 第二种理论是损失计算中存在bug,我们确认了这一点。 数学上是否等价? 梯度累积和完整批次训练在数学上是否等价?遗憾的是,如果简单地将梯度加起来,答案是否定的!我们首先注意到交叉熵损失是通过以下方式计算的: $$ \frac{1}{\sum \mathbb{I}\{y_i \neq -100\}} \sum L_i $$ 注意分母计算的是非填充或非忽略的token数量 - 即它通过每个文本片段中有效训练token的数量来归一化损失。指示函数实际上是未填充token的总和,也就是所有序列长度的总和,即: $$ \mathbb{I}\{y_i \neq -100\} = \sum m_i $$ 因此我们得到最终方程为: $$ \frac{\sum L_i}{\sum m_i} $$ 然后我们在分子和分母中同时添加 $\frac{1}{n}$ - 这是允许的,因为两者可以相互抵消: $$ \frac{\frac{1}{n}\sum L_i}{\frac{1}{n}\sum m_i} $$ 这意味着最终损失是平均损失值除以所有未填充序列长度的平均值: $$ \frac{\bar{L}}{\bar{m}} $$ 在进行梯度累积时,我们需要分别计算每个小批次的损失,然后将它们加起来得到最终损失。我们首先利用每个分区的平均损失和平均序列长度。 但我们发现,最终总和不等于原始的完整批次损失 - 实际上它比原来大$G$倍(其中$G$是梯度累积步骤的数量)。 ...

March 24, 2025 · 小茄墩

LangManus:代码库解析|多智能体|工具调用|browser use

LangManus 是一个基于 LangGraph 构建的多 Agent 协作系统,通过专业化的角色分工和工作流编排,实现复杂任务的智能处理。 系统架构 LangManus 采用了以图为中心的 Agent 协作架构,主要包含以下组件: Agent 层: 多个专业化 Agent(研究员、程序员、浏览器操作员等) 工具层: 为各 Agent 提供能力的工具集 LLM 层: 差异化配置的大语言模型 协调层: 工作流编排和任务调度 API 层: 面向用户的接口服务 核心组件详解 1. Agent 体系 (src/agents/) Agent 层是 LangManus 系统的核心执行单元,由一系列专业化角色组成,每个 Agent 都有明确的职责、工具集和工作模式。 系统包含多个专业 Agent,每个 Agent 有特定职责: Coordinator (协调员): 用户交互入口,处理简单问答和任务分发 Planner (规划师): 根据用户需求创建详细执行计划 Supervisor (监督员): 决策下一步由哪个 Agent 执行 Researcher (研究员): 负责搜索和网页抓取信息收集 Coder (程序员): 执行 Python/Bash 代码进行数据处理 Browser (浏览器操作员): 自动化浏览器操作和交互 Reporter (报告员): 生成最终报告 1. Coordinator Agent (协调员) 职责: ...

March 20, 2025 · 小茄墩

DAPO:大规模开源 LLM 强化学习系统

《DAPO: an Open-Source LLM Reinforcement Learning System at Scale》 摘要 推理规模化使大语言模型具备了前所未有的推理能力,其中强化学习是引发复杂推理的核心技术。然而,最先进的推理大语言模型的关键技术细节往往被隐藏(如 OpenAI 的博客和 DeepSeek R1 技术报告),因此社区仍然难以复现他们的强化学习训练结果。我们提出了解耦裁剪和动态采样策略优化(Decoupled Clip and Dynamic sAmpling Policy Optimization,DAPO)算法,并完全开源了一个最先进的大规模强化学习系统,该系统使用 Qwen2.5-32B 基础模型在 AIME 2024 上达到了 50 分。与之前隐藏训练细节的工作不同,我们介绍了算法的四个关键技术,使大规模 LLM 强化学习取得成功。此外,我们开源了基于 verl 框架构建的训练代码,以及精心策划和处理的数据集。我们开源系统的这些组件增强了可复现性,并支持未来大规模 LLM 强化学习的研究。 1 引言 测试时扩展(如 OpenAI 的 O1 和 DeepSeek 的 R1 )为大语言模型(LLM)[3-7] 带来了深刻的范式转变。测试时扩展支持更长的思维链推理,并诱导复杂的推理行为,使模型在 AIME 和 Codeforces 等竞争性数学和编程任务中表现卓越。 推动这一革命的核心技术是大规模强化学习(RL),它引发了诸如自我验证和迭代强化等复杂推理行为。然而,可扩展 RL 训练的实际算法和方法仍然是个谜,在现有推理模型的技术报告中被隐藏。在本文中,我们揭示了大规模 RL 训练中的重大障碍,并开源了一个可扩展的 RL 系统,包括完全开源的算法、训练代码和数据集,提供了具有行业级 RL 结果的民主化解决方案。 我们以 Qwen2.5-32B [12] 作为 RL 的预训练模型进行实验。在我们初始的 GRPO 运行中,在 AIME 上仅实现了 30 分——远低于 DeepSeek 的 RL(47 分)。深入分析表明,朴素的 GRPO 基线存在几个关键问题,如熵崩塌、奖励噪声和训练不稳定性。更广泛的社区在复现 DeepSeek 的结果时遇到了类似的挑战 ,这表明 R1 论文中可能省略了开发行业级、大规模且可复现的 RL 系统所需的关键训练细节。 ...

March 18, 2025 · 小茄墩

没有层归一化的Transformers

Normalization layers 在现代神经网络中无处不在,并且长期以来被认为是必不可少的。这项工作表明,不使用归一化的 Transformer 可以通过一种非常简单的技术实现相同或更好的性能。我们引入了Dynamic Tanh (DyT),一种逐元素操作 $DyT(x) = tanh(αx)$,作为 Transformer 中归一化层的直接替代品。DyT 的灵感来自于 Transformer 中的层归一化通常会产生类似 tanh 的 $S$ 形输入-输出映射的观察结果。通过结合 DyT,不使用归一化的 Transformer 可以匹配或超过其归一化对应物的性能,而且大多数情况下无需超参数调整。我们验证了带有 DyT 的 Transformer 在各种设置中的有效性,范围从识别到生成,从监督学习到自监督学习,以及从计算机视觉到语言模型。这些发现挑战了归一化层在现代神经网络中不可或缺的传统理解,并为它们在深度网络中的作用提供了新的见解。 1 介绍 我们的探索始于观察到LN层将其输入映射到具有类tanh、S形曲线的输出,从而缩放input activations,同时压缩极端值。受此启发,我们提出了一种称为 Dynamic Tanh(DyT)的逐元素操作,定义为:$DyT(x) = tanh(\alpha x)$,其中$\alpha$是一个可学习的参数。该操作旨在通过学习一个合适的缩放因子$\alpha$,并通过有界的tanh函数压缩极端值,从而模拟LN的行为。值得注意的是,与归一化层不同,它无需计算激活统计量即可实现这两种效果。如图1所示,采用DyT非常简单:我们直接在视觉和语言Transformer等架构中用DyT替换现有的归一化层。我们通过实验证明,具有DyT的模型可以稳定地进行训练,并在各种设置中实现较高的最终性能。它通常不需要需要在原始架构上调整训练超参数。我们的工作挑战了归一化层对于训练现代神经网络是不可或缺的这一概念,并提供了对归一化层属性的经验性见解。此外,初步测量表明,DyT 提高了训练和推理速度,使其成为面向效率的网络设计的候选方案。 2 背景:归一化层 $$ \text{normalization}(x) = \gamma \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} + \beta $$ 其中 \( $\epsilon$ \) 是一个很小的常数,\( $\gamma$ \) 和 \( $\beta$ \) 是形状为 \( $C$, \) 的可学习向量参数。 它们是“缩放”和“平移”仿射参数,允许输出在任何范围内。 术语 \( $\mu$ \) 和 \( $\sigma^2$ \) 表示输入的均值和方差。 不同的方法主要区别在于如何计算这两个统计量。 这导致 \( $\mu$ \) 和 \( $\sigma^2$ \) 具有不同的维度,每个维度在计算期间应用广播。 ...

March 14, 2025 · 小茄墩

Gemma 3 技术报告

架构选择 QK-Norm 同时使用Pre和Post Norm 比Qwen2.5更宽的MLP,深度相同 SWA 使用5:1比例和1024窗口大小(论文中非常小且有趣的消融实验!) 没有使用MLA来节省KV缓存,SWA已能完成这项工作! 视觉编码器采用 Pan & Scan 算法。视觉编码器以固定分辨率 896 × 896 运行。在推理阶段使用窗口处理技术以支持不同图像尺寸。 长上下文 仅在全局层增加RoPE至1M 小模型处理长上下文更困难,1B版本没有128k上下文能力 预训练使用32k上下文,然后扩展到 128K 上下文长度。使用了 RoPE 缩放因子 8。 没有使用yarn或llama3类似的RoPE扩展方法 蒸馏 仅保留教师模型的前256个logits 其他 使用QAT(量化感知训练) 强化学习使用 BOND、WARM和 WARP的改进版本 现在强制使用序列开始标记(BOS token),使用 <start_of_turn>user 和 <start_of_turn>model 标记对话轮次。词汇量扩展至 262K。 2. 模型架构 使用分组查询注意力 (GQA),采用后归一化和预归一化,并使用 RMSNorm。用 QK-norm 替换了 Gemma 2 的soft-capping。 5:1 局部/全局层交错 我们交替使用局部滑动窗口自注意力机制和全局自注意力机制,模式为每 1 个全局层对应 5 个局部层,并且模型的第一个层从局部层开始。 Gemma 3 模型支持 128K Token 的上下文长度,但 1B 模型例外,其上下文长度为 32K。 我们将全局自注意力层的 RoPE 基频从 10k 提升至 1M,并保持局部层的频率为 10k。 我们遵循类似于 Chen et al. (2023) 的位置插值方法来扩展全局自注意力层的范围。 ...

March 12, 2025 · 小茄墩

Open R1 更新3 在代码领域使用R1的教训

在过去的几周里,我们主要致力于复现 DeepSeek-R1 配方中 competitive programming(代码推理)的部分。 从 R1 轨迹训练代码模型中获得的经验教训 在创建 OlympicCoder 模型时,我们进行了大量的 SFT 实验,以了解应用于 CodeForces 数据集的各种过滤器的作用。我们发现 open-r1/codeforces-cots 的以下子集给出了最佳的整体性能: solutions:R1 根据问题陈述生成的解决方案。 solutions_w_editorials:R1 根据问题陈述和解释(解释了正确的解决方案)生成的解决方案。 请注意,我们只关注了 C++ 解决方案,但如果混合使用 Python 解决方案,可能会进一步提高性能。我们使用 LiveCodeBench 作为我们模型的试验平台,然后通过更难的 IOI 基准测试运行性能最佳的检查点。我们测试了各种超参数配置来训练我们的模型,并确定了以下配置: 模型:Qwen2.5 Coder Instruct 7B 和 32B Epochs: 10 Effective batch size: 128 Learning rate: 4e-5 Scheduler: Cosine with a decay to 10% of the peak learning rate Context size: 32,768 tokens for 7B 和 22,528 tokens for 32B 下面我们分享一些从在 R1 推理轨迹上调整 Qwen2.5 Coder 模型中获得的经验教训。 ...

March 12, 2025 · 小茄墩