← 返回首页
复现实验2026-09-27 发布 · 全周期盘点
Kev 复现实验:全周期问题总账(含底座选型期补录)
内部代号 jev_test · 覆盖从最早的模型选型期到交付流程期的 20 条问题:每条含发生/发现时点、根因与状态,此前历次汇总遗漏的早期问题一并补录
复现对象:Kev / Jev 风格决策模型
底座 Qwen3.5-4B
当前 v3 重训中(12,330 步)
问题 20 条 · 已修 16 · 部分或持续 4
〇、背景:Kev 是什么,这次复现在做什么
Kev 是一个 Jev 风格的「决策模型」(decision model)家族:不做逐 token 的自回归生成,而是一次前向传播读入一段状态文本(state)和一组带类型的提问槽位,由一个可训练的指针头(Pointer Head)直接在候选位置上打出概率分数,输出结构化决策。底座冻结,只训 LoRA 和指针头;配套温度校准与 kev.benchmark 冻结评测。详细架构见学习专区《Kev 架构详解(含源码)》。
本次实验(内部代号 jev_test)在 Qwen3.5-4B 上复现这套设计:自建训练与评测数据(贪吃蛇 / 方块两类游戏决策,加上 PII、毒性、求助等业务判断题),LoRA 微调 + 指针头训练 + 温度校准,目标是在线低延迟的结构化决策。项目跑了一个完整周期,踩过的坑不少——这篇把从最早的模型选型期到现在的 20 条问题一次性盘点入账:每条含发生/发现时点、根因、状态,此前历次汇总遗漏的早期问题一并补录。
20
问题全收录(P / D / E / F 四阶段)
【重大更正 · 本账补录 P-01】关于最早指出的那个问题:项目一开始用的底座是对话版 Qwen3.5-4B(目录里带 chat_template.jinja,实锤),不是 Base。早期询问「是不是 Base」时得到的回答「是」是错的——回答前没有做任何核验(没有检查目录里的 chat_template)。此错误直到 2026-09-27 对照原版仓库时才被发现。v3 已换真正的 Base 并做了核验(models/Qwen3.5-4B-Base 无 chat_template ✓)。此条此前所有问题汇总均未收录,本账补录,编号 P-01。
一、阶段〇:模型选型期(项目最早期)
| 编号 | 问题 | 根因 | 发现时点 | 状态 |
| P-01 | 底座用错:对话版当 Base 用。v1/v2 两轮训练全部基于对话版 Qwen3.5-4B(带 chat_template.jinja);原版 kev-4b 用的是 Qwen3.5-4B-Base。早期询问时,未核验即回答「是 Base」。 |
下载模型后未检查模型版本标识;回答凭印象而非实证 |
2026-09-27 对照原版 adapter_config(base_model = Qwen/Qwen3.5-4B-Base)时 |
已修 v3 换 Base(魔搭),并实证核验无 chat_template |
| P-02 | 分隔符用字面文本 [STATE]/[Q]/[OPT]/[DECIDE];原版复用 Qwen 特殊 token 5 枚(embedding 可训练) |
复刻时仅依据架构文章描述,未读到原版实现 |
2026-09-27 对照原版 model.py |
部分 v3 暂保留字面(减少变量);v4 改特殊 token |
| P-03 | LoRA 目标缺 DeltaNet 5 投影(Qwen3.5 线性注意力层未被适配) |
同上,按通用 LoRA 惯例而非原版配置 |
2026-09-27 对照原版 adapter_config |
已修 v3 补全 12 组目标 |
| P-04 | 训练超参偏离:lr 1e-4(原版 2e-5)、batch 32(原版 8)、bf16 权重(原版 fp32 主权重) |
未对照原版配方 |
2026-09-27 |
已修 lr/batch 已修;fp32 受 16GB 显存限制列 v4 |
| P-05 | 无温度校准机制(原版每 checkpoint 拟合 temperature) |
复刻时未实现该卖点 |
2026-09-27 |
已修 已实现(fit_temperature.py),v3 训后自动拟合 |
二、阶段一:数据期
| 编号 | 问题 | 根因 | 发现时点 | 状态 |
| D-01 | 训练集 870 条泄漏(早期版本) | 生成器分层不严 |
第一轮评审 | 已修 全局去重重建 |
| D-02 | 蛇头位置恒定 [(5,6),(4,6),(3,6)]:蛇头左侧格 100% 是蛇身,q_danger_left 标签恒「是」,模型学成常数先验,真实对局即失效(35% 危险错误率)。此为两次游戏录制失败的根因 |
生成器初始 body 硬编码 |
2026-09-26 录制诊断(diag_snake_kev) |
已修 蛇头全随机 + 3–12 节长满制,分布审计实证 |
| D-03 | 游戏评测集与训练题同源(game_test = train 副本),「73.37%」实为训练集成绩;train.jsonl append 模式有重复注入风险 |
转换脚本设计缺陷 | 复审 |
已修 90/10 → 后升级 OOD + iid 双口径;整体重写 |
| D-04 | 方块训练棋盘固定 4–7 行,对局开局空棋盘属分布外(目标列退化 0/4) |
生成器分布窄 | 录制日志 |
已修 0–12 行 / 密度随机 |
| D-05 | 蛇身长 3–8 且 state 只显示 body[:8],对局超 8 节模型失明 |
设计未考虑对局增长 | 34 项评审 #2 |
已修 3–12 节长满制 + 完整蛇身展示 |
| D-06 | 业务先验比例(PII 30% / 毒性 30% / 求助 8%)无业务依据 |
合成数据刻意均衡,未文档化 | 34 项评审 #8 |
部分 已文档化为限制项;是否对齐真实分布待定 |
三、阶段二:评测期
| 编号 | 问题 | 根因 | 状态 |
| E-01 | 「游戏准确率 73.37%」是训练集成绩,当成了评测口径对外汇报 |
评测集与训练同源 | 已修 作废该口径;换 OOD + iid 双口径 |
| E-02 | T 网格在 test 上搜索温度(T=1.3「甜点」为自洽污染产物) |
搜索集与汇报集未分离 | 已修 重做(val 搜索,T=1.0 即最优) |
| E-03 | 危险判断错误率 35% 未进评测报告 |
诊断脚本游离于验收体系外 | 已修 已纳入验收(<10%) |
四、阶段三:交付与流程期
| 编号 | 问题 | 状态 |
| F-01 | 坏数据训出的模型所录两支游戏视频曾作为交付(蛇为引擎辅助、方块 0 消行) | 已修 更正邮件已单发;视频面板加水印;新视频达标才交付 |
| F-02 | 「0 死亡」依赖引擎过滤,表述不显眼 | 已修 标题水印「引擎辅助」已加;邮件口径已更正 |
| F-03 | 改完 bug 未全链路验证就推进(convert 未同步改等) | 部分 已建立 verify_kev_encode 全量验证 + 审计前置;持续执行 |
| F-04 | 发现一个修一个,缺系统性体检 | 已修 audit_game_data / audit_data_integrity / verify_kev_encode 三件套落地 |
| F-05 | 进展/问题未及时邮件(多次) | 部分 电子狗每小时邮件已上线;发车/中检/交付节点邮件已制度化,仍需自律 |
| F-06 | 逐段解读 HTML 文字重叠(阅读问题反馈) | 已修 后续 HTML 已改单列大字号排版 |
五、当前状态
v3 重训中:Base 底座 ✓ + DeltaNet LoRA 目标 ✓ + lr 2e-5 / batch 8 ✓ + 温度校准 ✓。12,330 步,预计约 20 小时。训后自动执行:温度拟合 → 业务回归 → 游戏 OOD / iid 评测 → 验收比对 → 达标自动录制 v3 视频。电子狗每小时邮件巡检。