ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Kev-9B 决策模型卡深度解读:Qwen3.5-9B 之上的 LoRA 决策头、内置校准与 15 分钟增量微调

Kev-9B 决策模型卡深度解读:Qwen3.5-9B 之上的 LoRA 决策头、内置校准与 15 分钟增量微调 Kev-9B 决策模型卡深度解读Qwen3.5-9B 之上的 LoRA 决策头、内置校准与 15 分钟增量微调【免费下载链接】kevtiny Jev-like family of decision models built on top of Qwen3.5 you can train and run on your own项目地址: https://gitcode.com/gh_mirrors/kev2/kevKev-9B 是 Kev 家族README.md中精度最高的决策模型一次前向传播输入一个状态state与一组类型化问题输出每个问题的概率分布全程不生成文本。它在 Qwen3.5-9B-Base 上挂接 LoRA 适配器与指针头pointer head并携带训练时拟合的内置温度实现概率校准可通过kev.serve提供与 TypeSafe/v1/systemone完全兼容的本地服务。读完本文你将掌握Kev-9B 的架构与行式前向row-form forward原理、锁定测试locked test评估结果与逐源对比、温度校准的拟合与复现方法、date_facts日期预处理器的用法以及如何用--init_from做一次受控的增量微调。上图展示了 Kev 全家族在冻结的 764 条域外记录上的准确率对比以及 Kev-9B 在锁定测试locked test上的 Brier 分数与 ECE 误差Kev-9B 在域外准确率上仅次于 Jev并以更小的模型规模获得了接近的校准表现。一、Kev-9B 是什么一次前向的决策模型Kev-9B 不是聊天模型而是一个决策模型decision model。它的工作方式是一段文档state加一组类型化问题作为输入经一次前向传播后为每个问题输出一个覆盖其全部选项的概率分布不做任何文本生成。其权重构成是基座Qwen/Qwen3.5-9B-Baserevision68c46c4b这是一个混合架构——24 层 Gated DeltaNet线性注意力 8 层全注意力层适配器LoRAr1645.4M 可训练参数覆盖注意力、MLP 与 DeltaNet 投影指针头一个小型PointerHead从零训练接口对外暴露 TypeSafe 的公开/v1/systemone契约。从源码结构看PointerHead的实现位于 kev/model.py它把每个选项的/opt隐藏状态与问题的decide隐藏状态分别经Linear(d, dp)投影后做点积再按dp维开平方缩放得到 logits最后 softmax 成概率。decide位于分支末尾因此可以完整关注到全部选项。混合基座上的行式前向row-form forwardQwen3.5 基座的 Gated DeltaNet 层是循环结构无法遵守块因果掩码block-causal mask。为此kev/model.py 的rows_of()会把一次打包编码拆成「状态 每个问题各自的分支行」每个问题作为一条独立因果行从共享的状态继续延伸这就是forward_rows_batchkev/model.py所做的事。这一设计带来两个关键性质隔离是精确的exact by construction行之间彼此独立一个问题看不到其他问题单独问与一起问的概率差异在 1e-5 以内兼容性可验证在全注意力基座上行式与打包packed形式逐位一致bit-identical对应测试见 tests/test_v3.pytest_rows_match_packed。服务端还会把状态前缀的 KV cache 复用给每一行kev/model.py 的prefix/probs_and_prefix/probs_with_prefix状态只计算一次从而把多问题请求的额外开销压缩到仅剩分支部分。二、评测结果锁定测试与逐源对比模型卡给出了同一批冻结样本same frozen items下 Kev-9B 与 Kev-8BQwen3、Jev 的逐项对比。全部数字均来自 docs/model-cards/kev-9b.md 的原始表格两个 Kev-9B 列分别对应原始 logits与**服务端校准后T 2.30**的表现指标Kev-8B (Qwen3)Kev-9B 增量前 (v7-base)Kev-9B原始 logitsKev-9B 服务端T 2.30Jev域内准确率decision-v7 dev1,204 条0.8630.8760.8720.8720.845域外准确率transfer-v4 dev764 条0.7960.8120.8220.8220.857域外 Brier0.3370.2910.2860.2640.211域外 ECE0.1210.1050.1060.0420.049域外高置信错误p ≥ 0.9 且答错9.9%7.5%8.7%4.0%3.7%≤ 5% 错误预算下的覆盖率可自动化决策占比0.450.530.470.450.70未见过的策略结构两个 sibling 全对0.690.800.830.830.86unknowable 项以 ≥ 0.9 置信度作答越低越好transfer-v90.260.050.000.000.09锁定测试域外准确率 / Brier0.780 / 0.3270.837 / 0.2430.852 / 0.237––锁定测试域内准确率0.8700.8730.874––逐源域外准确率Kev-9B / JevQNLI 0.93 / 0.93SciQ 0.96 / 0.99TweetEval-offensive 0.78 / 0.81PAWS 0.76 / 0.79MMLU 0.74 / 0.90Emotion 0.60 / 0.59deadline3 级日期算术0.80 / 0.93——启用date_facts预处理器后为0.90见下文(A or B) and C 0.91 / 0.91(A and B) or not C 0.88 / 0.97if A then not B else C 0.91 / 0.78。更新版评估列transfer-v9开发集Kev-9B / JevMMLU-Pro10 选 10.515 / 0.840状态埋藏于无关记录中 0.74 / 0.70unknowable 项 ≥ 0.9 置信度占比 0.00 / 0.09完好对照组为 0.95。外部套件与它们各自公布的 Jev 数字使用相同样本SemIf 的 144 条手写决策——增量前 0.917线上 Jev 0.965SemIf 未训练的 Qwen3.5-4B 为 0.813scienthoon 的 900 张工单——队列 0.952、愤怒 0.900、ECE 0.113Jev 为 0.897、0.914、0.105。在 ekzhang 的 1,000 题 MMLU-Pro 抽样上增量前检查点得分 0.511Jev 0.829。三、内置校准T 2.30 温度与calibrate_checkpoint.pyKev-9B 的概率默认就是校准后的head.pt携带一个温度T 2.30拟合自该检查点自己的域内开发集行通过最小化负对数似然指针头在推理时用它除 logits。它永不改变答案argmax 不变所以两列的准确率相同置信度只在选项数不同的问题之间被轻微重排这就是覆盖率会移动一两个百分点的原因KEV_TEMPERATURE1.0恢复原始 logits——原始列就是训练实际产出的分布按 (类型, 选项数) 分别拟合温度的方案已被测试域外表现更差拟合不使用任何域外或测试数据。其实现要点见 kev/model.pyPointerHead.forward仅在非训练且temperature ! 1.0时执行z / self.temperature训练时始终看到 T1因此拟合值始终保持有效。校准脚本为 scripts/calibrate_checkpoint.py用法uv run python scripts/calibrate_checkpoint.py \ --run runs/night2-9b-du/00-trial-0/checkpoint \ --rows runs/night2-9b-du/00-trial-0/development/rows.json \ [--transfer runs/.../transfer/rows.json]脚本在 0.25..4 的对数网格上取 121 个候选温度GRID np.exp(np.linspace(np.log(0.25), np.log(4), 121))按负对数似然NLL最小选出最优 T写入head.pt的temperature字段并记录拟合来源与方法元数据。可选的--transfer行只报告不拟合。校准的效果由 kev/benchmark.py 的metrics()复现它把概率按温度重新归一化后计算 NLL、准确率、Brier、ECE、confident_error_rate与coverage_at_5pct_error。域外 ECE 从 0.106 降到 0.042、高置信错误从 8.7% 降到 4.0%而准确率完全不变正是这一机制的直接体现。覆盖率指标的语义kev/benchmark.py 的coverage_at_error()定义了「选择性自动化」按置信度降序接受决策直到被接受集合中的经验错误率超过预算如 5%为止返回可接受的决策占比。概率诚实的模型在固定错误预算下能获得更高覆盖率高置信却答错的模型则相反——这正是 Kev-9B 的覆盖率0.45–0.47低于 Jev0.70的原因与准确率无关。四、date_facts预处理器补上日期算术短板Kev以及此前每一代 Kev无法可靠地做日期减法——未训练的基座可以但 LoRA 训练会侵蚀这项能力。它却能用好「显式给出的天数」。KEV_DATE_FACTS1会为状态中出现的每对绝对日期追加一句天数描述例如June 26, 2026 is 8 days before July 4, 2026该检查点本身就是在这样的渲染文本上训练的因此启用后deadline从 0.80 提升到 0.90整体域外准确率从 0.822 提升到 0.828。模型卡特别强调这是预处理单独报告绝不折入模型自身的数字。实现位于 kev/api.py_DATE正则同时识别Month D, YYYY与YYYY-MM-DD两种格式date_facts()按首次出现顺序列出所有日期并对每对计算天数差with_date_facts()则在状态是字符串时追加一段date_facts:文本、在状态是对象/数组时追加一个date_facts字段。服务端由 kev/serve.py 的DATE_FACTS os.environ.get(KEV_DATE_FACTS, 0) 1控制基准评测侧对应kev.benchmark的--date_facts开关kev/benchmark.py。五、Delta 增量微调15 分钟的一次受控改变Kev-9B 是decision-v7配方试验q35-9b/01-trial-1seed 1按开发准确率选出之后再接一段15 分钟的 delta 增量微调--init_fromlr 2e-5一个 epoch得到的产物训练数据是 1,425 条额外记录900 条带日期策略案例按三种方式渲染三分之一平铺直叙、三分之一带关系式天数句、三分之一带date_facts字段255 条移除决定性句子的案例目标是选项上的均匀软目标evidence-free270 条完好的对照组混入2,000 条回放replay的训练记录防止增量训练遗忘已发布的配方。与增量前检查点在锁定测试上的对比准确率 1.8 个百分点95% CI [0.8, 2.9]Brier 0.243 → 0.237deadline0.72 → 0.88。Delta 的代价模型卡如实记录了为这些收益付出的代价≤ 5% 错误预算下的覆盖率下降开发集 0.53 → 0.47锁定测试 0.66 → 0.62高置信错误上升原始 logits 7.5% → 8.7%MMLU-Pro 从 0.545 降至 0.515scienthoon 的 ECE 从 0.082 升至 0.113。预注册的 delta 验收标准见 PLAN.md 的 Tonights autoresearch 一节中日期与 unknowable 置信度行为达标、覆盖率不达标最终是否放行由锁定测试的读取决定。为什么用 delta 而不是重训这是一次受控改变——固定一个检查点、只加一批数据、耗时 15 分钟而且结果一节精确展示了它移动了什么。正是这种「一次只动一个变量」的可审计性使得 delta 微调成为值得复用的实验范式。六、如何构建基座、配方与 delta 训练命令基座Qwen3.5-9B-Base24 层 Gated DeltaNet线性注意力 8 层全注意力。因为循环层无法遵守块因果掩码问题以独立因果行的形式从共享状态继续延伸kev/model.py: forward_rows_batch隔离按构造精确成立一起问 vs 单独问在 1e-5 内在全注意力模型上该形式与打包形式逐位一致。配方decision-v7两个 epochLoRA r16覆盖注意力、MLP 与 DeltaNet 投影lr 5e-5——与其它 Kev 完全相同的数据与设置因此 Qwen3 → Qwen3.5 的差异全部来自基座见 PLAN_Qwen35.md §10锁定测试较 Kev-8B 7.3 个百分点95% CI [2.8, 11.7]。Delta 训练命令uv run python -m kev.train \ --init_from jaredpalmer/kev-9bv7-base \ --data evals/night2/dates_unknowable.jsonl \ --replay 2000 --lr 2e-5 --epochs 11,425 条新记录全部是生成的无公开数据集来源。记录哈希记录在 evals/night2/manifest.json其中dates_unknowable.jsonl由 900 条dates.jsonl 525 条unknowable.jsonl拼接SHA-256 为afd8502d…源检查点的哈希记录在training_config.json中。从源码看kev/train.py 的--init_from加载前会逐字段核对兼容性——base、base_revision、lora秩、head_dim、option_isolation、special_embeddings必须与已发布检查点一致再校验适配器张量的unexpected/missing最后才加载 LoRA 权重与head.pt。--replay需要同时给出--data与--suite回放记录按freplay:{seed}随机采样自套件训练分区kev/train.py因此 delta 微调不会遗忘已发布的配方。七、训练细节与冻结套件冻结套件evals/v7/decision-v7见 evals/v7/decision-v7/manifest.json10,000 条公开记录10 个来源各 1,000 条banking77、boolq、ag_news、multi_nli、sst5、yelp_review_full、trec、dbpedia_14、amazon_reviews_multi_en、imdb896 条策略最小对minimal-pair记录覆盖九个模板家族1,680 条记录来自 60 个随机生成的规则结构、四种渲染风格。训练设置两个 epochLoRA r16、α32目标模块为q/k/v/o_proj、gate/up/down_proj、in_proj_qkv/z/a/b、out_proj指针头从零训练对选项分布做交叉熵lr 5e-5OneCycle 调度有效 batch 8bf16 autocast fp32 主权重梯度检查点数据增强包括选项置换option permutation、none-of-the-above 插入、干扰项distractors并在 25% 的 Choice 记录上生成 none 最小对。随后是上文所述的 delta一个 epoch、lr 2e-5、共见 3,937 条记录、单块 H100 上 15 分钟。全程未使用任何 Jev 输出参与训练。训练命令入口为python -m kev.train全部参数见uv run python -m kev.train --helpkev/train.py--init_from与--replay之外的常用选项还包括--p_none_pair 0.25、--lora_targetsall/dense/attn/qv、--head_dim与--checkpointing。八、评估协议开发分区用于选模型锁定测试分区每个候选最多读取一次预注册读取位于runs/locked/kev-9b-night2-du-ungated/增量前的读取是runs/locked/kev-9b-q35/每个数字都携带可追溯证据套件哈希、代码哈希、git commit 一并记录在result.json未训练基座基线使用同一批样本上的零样本字母 logits脚本为 scripts/base_mmlu_probe.py域外准确率等正式数字使用fp32 评估而非 bf16 服务路径。评测命令README.md 的 Evaluation 一节uv run python -m kev.benchmark --run jaredpalmer/kev-9b --suite evals/v4/transfer-v4 --out runs/my-eval # 域外 uv run python -m kev.benchmark --run jaredpalmer/kev-9b --suite evals/v9/transfer-v9 --out runs/my-eval-v9 # MMLU-Pro / 埋藏状态 / unknowable uv run python -m kev.benchmark --run jaredpalmer/kev-9b --suite evals/v7/decision-v7 --out runs/my-eval-id # 域内 uv run python -m kev.benchmark --remote http://127.0.0.1:8009 --suite evals/v4/transfer-v4 --out runs/my-remote报告指标包括准确率、Brier、校准误差、5% 错误预算下的自动化覆盖率、选项顺序影响与问题隔离。transfer-v9还会报告「unknowable」记录决定性证据被移除中以 ≥ 0.9 置信度作答的比例——Kev-9B 为 0.00对应 kev/benchmark.py 的unknowable_report()它只统计置信度行为均值最大概率与 ≥ 0.9 占比而不统计准确率因为 unknowable 记录按构造没有正确答案。九、部署与使用uv run --extra serve python -m kev.serve --run jaredpalmer/kev-9b --port 8008 # 32 GB Mac 上用 bf16KEV_DTYPEbf16MPS 上偏慢见下方限制 # 启用日期预处理 KEV_DATE_FACTS1 uv run --extra serve python -m kev.serve --run jaredpalmer/kev-9b --port 8008 # KEV_TEMPERATURE1.0 可恢复原始 logits任何 TypeSafe 兼容客户端都能直接使用client TypeSafeClient( api_keylocal, base_urlhttp://127.0.0.1:8008, modelkev-latest, )服务端kev/serve.py除了/v1/systemone之外还提供/v1/models、/v1/systemone/permute同一 Choice 问题在不同选项顺序下重跑与/v1/systemone/separate每个问题独立前向。推理上下文上限为INFER_MAX_STATE INFER_MAX_BRANCH 8192训练只用 384/1024见 kev/model.py并用 LRU 前缀缓存KEV_PREFIX_CACHE默认 4 个状态、状态 ≥ 384 token 才缓存复用重复状态。参考请求/响应样例见 README.md 的 Quick Start 一节。十、已知限制Mac 上较慢DeltaNet 内核没有 MPS 实现PyTorch 回退到参考代码。五个问题的请求在 Kev-8B 上约 0.3 s在 Kev-9B 上约 2 sbf16M5。安装flash-linear-attention后 CUDA 上很快。在 Apple Silicon 上追求低延迟请先用 Kev-8BQwen3jaredpalmer/kev-8b直到 MLX 路径存在依赖版本需要transformers 5.17qwen3_5架构与peft 0.21知识缺口MMLU 0.74 vs Jev 0.90、MMLU-Pro 0.515 vs 0.840——这是剩余的最大差距且由基座决定未训练的 Qwen3.5-9B 得分相同基于 35B-A3B MoE 基座的 Kev 也未改善 MMLU-Pro见 PLAN.md night-2 结果日期算术无预处理器时deadline0.80Jev 0.93KEV_DATE_FACTS1时 0.90原始 logits 域外过自信内置温度T 2.30在不改变任何答案的前提下修复了大部分KEV_TEMPERATURE1.0取原始值。5% 错误预算下的覆盖率 0.47–0.62低于 Jev 的 0.70资源占用9B bf16 服务约需 ~19 GB GPU 显存训练在一块 H100 上耗时 91 分钟峰值 39.5 GB。十一、许可证适配器与指针头为 Apache-2.0Qwen3.5 基座同为 Apache-2.0各训练数据集沿用其自有许可证。模型卡全文见 docs/model-cards/kev-9b.md训练与实验完整历史见 PLAN.md 与 PLAN_Qwen35.md。【免费下载链接】kevtiny Jev-like family of decision models built on top of Qwen3.5 you can train and run on your own项目地址: https://gitcode.com/gh_mirrors/kev2/kev创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表