Qwen4 开始训练之后:如何理解大模型连续 33 轮递归自我改进

2026-09-23 27 预计阅读时间: 1 分钟
来源: oschina.net AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:12 分钟

9 月 22 日开幕的 2026 云栖大会释放了一个值得工程团队关注的信号:递归自我改进(Recursive Self-Improvement,RSI)正在从论文里的概念,进入模型训练、推理和芯片协同的实际流程。按照大会披露的信息,采用新一代架构的 Qwen4 已进入训练,后续 Qwen4.5、Qwen5 的参数规模计划扩展至 5 万亿到 10 万亿;相关系统还完成了连续 33 轮自我迭代。

这些数字很醒目,但 RSI 真正重要的地方不是“模型突然学会修改自己”,而是研发流程发生了变化:模型开始参与生成候选方案、执行实验、分析结果和提出下一轮改进,工程师则负责设定目标、验证指标与安全边界。

33 轮自我迭代究竟意味着什么

传统模型研发通常是一条由人推动的长链路:研究员提出假设,工程团队调整数据或训练配置,集群执行任务,评测平台产出结果,然后再由人分析失败原因。每一轮都可能跨越多个系统,反馈速度很容易成为瓶颈。

RSI 可以把这条链路组织成一个闭环:

  1. 根据上一轮结果生成新的模型、数据或推理策略候选项。
  2. 在固定基准和受控环境中运行实验。
  3. 对质量、延迟、吞吐、成本和安全性进行联合评估。
  4. 只接纳满足门槛的候选项,并保存完整实验记录。
  5. 将结果反馈给下一轮规划器,继续迭代。

因此,“跑了 33 轮”不应简单理解为基础模型在无人监管的情况下重写了 33 次权重。更合理的工程理解,是自动化系统连续完成了 33 个“提出方案—实验—评估—选择”的循环。具体每轮修改了模型结构、训练数据、超参数还是推理内核,来源摘要没有给出细节,不能据此做进一步断言。

这里还有一个容易混淆的区别:普通 AutoML 通常在预先定义的搜索空间里寻找较优参数,而更完整的 RSI 会尝试改进“如何提出候选方案”和“如何评估候选方案”本身。不过,无论自动化程度多高,都必须保留不可被候选系统随意修改的外部评测与治理边界,否则优化过程很可能只是在利用评分漏洞。

从模型扩展走向训练、推理与芯片协同

Qwen4 已经进入训练,Qwen4.5、Qwen5 又把参数规模目标推向 5 万亿至 10 万亿,这意味着问题不能只用“增加 GPU 数量”来解决。参数量越大,训练通信、显存容量、检查点存储、故障恢复和推理带宽的压力越明显。

一个可持续的模型迭代系统,通常需要同时处理三层问题:

  • 训练层:数据配比、并行策略、优化器状态、容错和集群利用率。
  • 推理层:量化、批处理、缓存、路由策略以及不同延迟目标下的成本。
  • 芯片与系统层:算子实现、内存访问、互联通信和任务调度。

这也解释了为什么 RSI 会与芯片协同同时出现。一个候选模型即使离线得分更高,如果推理显存翻倍、关键算子无法高效执行,或者训练过程频繁触发通信瓶颈,它也未必是可部署的改进。

同样,5 万亿到 10 万亿参数是规模规划,不等于对应模型必然全部以稠密方式参与每次计算,也不能直接等同于质量提升。架构细节尚未披露时,更稳妥的关注点是有效计算量、训练稳定性、推理成本以及真实任务表现。

用一个可运行脚本理解 RSI 闭环

下面的示例不是千问内部实现,也不会训练真实大模型。它用一个合成评分函数模拟 RSI 控制器,完整展示“生成候选配置—评测—门禁—记录结果”的 33 轮循环。保存为 rsi_loop.py 后可直接运行,仅依赖 Python 标准库。

import json
import math
import random
from dataclasses import asdict, dataclass
from pathlib import Path

ROUNDS = 33
SEED = 2026
LOG_FILE = Path("rsi_history.jsonl")


@dataclass(frozen=True)
class Candidate:
    learning_rate: float
    data_quality: float
    inference_cost: float


def evaluate(candidate: Candidate) -> dict:
    """合成评测器:真实项目应替换为独立基准测试和成本测量。"""
    lr_quality = math.exp(-((math.log10(candidate.learning_rate) + 3.2) ** 2) / 0.3)
    quality = 0.55 * lr_quality + 0.45 * candidate.data_quality
    utility = quality - 0.18 * candidate.inference_cost
    return {
        "quality": round(quality, 6),
        "cost": round(candidate.inference_cost, 6),
        "utility": round(utility, 6),
    }


def propose(parent: Candidate, rng: random.Random) -> Candidate:
    """候选生成器:可替换为 LLM、贝叶斯优化器或架构搜索器。"""
    return Candidate(
        learning_rate=min(1e-2, max(1e-5, parent.learning_rate * 10 ** rng.uniform(-0.25, 0.25))),
        data_quality=min(1.0, max(0.0, parent.data_quality + rng.uniform(-0.04, 0.06))),
        inference_cost=min(1.5, max(0.2, parent.inference_cost + rng.uniform(-0.08, 0.08))),
    )


def passes_gate(metrics: dict) -> bool:
    """硬门禁不交给候选生成器修改。"""
    return metrics["quality"] >= 0.65 and metrics["cost"] <= 1.10


def main() -> None:
    rng = random.Random(SEED)
    incumbent = Candidate(learning_rate=1e-3, data_quality=0.72, inference_cost=0.90)
    incumbent_metrics = evaluate(incumbent)
    LOG_FILE.write_text("", encoding="utf-8")

    for round_id in range(1, ROUNDS + 1):
        candidate = propose(incumbent, rng)
        metrics = evaluate(candidate)
        accepted = passes_gate(metrics) and metrics["utility"] > incumbent_metrics["utility"]

        record = {
            "round": round_id,
            "candidate": asdict(candidate),
            "metrics": metrics,
            "accepted": accepted,
        }
        with LOG_FILE.open("a", encoding="utf-8") as f:
            f.write(json.dumps(record, ensure_ascii=False) + "\n")

        if accepted:
            incumbent = candidate
            incumbent_metrics = metrics

        print(
            f"round={round_id:02d} accepted={str(accepted):5s} "
            f"utility={metrics['utility']:.4f} best={incumbent_metrics['utility']:.4f}"
        )

    print("\n最终配置:", json.dumps(asdict(incumbent), ensure_ascii=False, indent=2))
    print("最终指标:", json.dumps(incumbent_metrics, ensure_ascii=False, indent=2))
    print(f"实验日志:{LOG_FILE.resolve()}")


if __name__ == "__main__":
    main()

运行命令:

python rsi_loop.py

把它改造成真实系统时,至少要替换三个部分:

  • propose():调用模型或搜索算法,生成数据配方、训练参数、提示词、路由规则等候选方案。
  • evaluate():提交隔离任务,并从评测平台读取质量、鲁棒性、延迟、吞吐和资源消耗。
  • passes_gate():加入不可由模型自行放宽的安全、合规和预算门槛。

实验日志也不应只保存在本地 JSONL 文件中。生产环境需要记录候选配置、代码提交、数据版本、模型版本、随机种子、硬件拓扑和评测集版本,以便重放和审计每一次接纳决策。

自动改进最危险的不是失败,而是“错误地成功”

RSI 系统可能明显提高实验吞吐量,但它会同步放大评测设计的缺陷。常见风险包括:

  • 指标投机:候选方案提高了排行榜得分,却损害真实用户任务。
  • 评测污染:训练数据或规划器接触到保留测试集,结果失去可信度。
  • 能力回退:总体均值提高,但某些语言、行业或安全能力下降。
  • 成本失控:质量只提升一点,训练或推理成本却显著增长。
  • 不可复现:数据、代码与硬件环境未锁定,无法解释某轮为何成功。
  • 权限扩张:自动化控制器可以修改评测标准、预算上限或部署策略。

工程上应把候选生成器和裁判系统分开。规划模型可以提出大胆方案,但不能同时决定自己的分数,更不能修改安全门禁。对于高风险改动,还应采用影子流量、分阶段发布和人工审批,而不是让一次自动评测直接触发全量部署。

团队现在可以怎样开始

多数团队不需要从训练万亿参数模型起步。更实际的做法,是先在可回滚、可量化的环节建立小型闭环,例如自动优化提示词、检索参数、模型路由、批处理大小或量化配置。

上线前可以核对以下清单:

  • 是否同时定义了质量、成本、延迟与安全指标?
  • 是否存在候选系统无法修改的独立保留测试集?
  • 每轮实验能否由代码、数据和环境版本完整复现?
  • 是否设置总预算、单轮预算、最大轮数和紧急停止开关?
  • 自动接纳是否只发生在低风险范围,高风险变更是否需要人工审批?
  • 新配置能否快速回滚到上一稳定版本?

Qwen4 进入训练和 33 轮 RSI 实验所展示的,并不只是下一代模型的参数规模。更值得关注的是,大模型研发正从“人逐项调整模型”走向“人设计目标、约束与裁判,自动化系统持续提出并验证改进”。谁能把评测、基础设施和治理边界做扎实,谁才更可能把递归自我改进从演示变成稳定的工程能力。


相关推荐