# 067 实验说明 ## 已实际运行:因果 RNN 协议实验 Python 3.12.14 + NumPy 2.3.5,CPU。推荐独立环境安装 requirements.txt;本次使用 Codex 随附 Python。系统 Python 3.9.6 未安装 NumPy/torch,不要将其当成本次训练环境。 从文章目录运行: ```bash python3 code/minimal_sft.py > code/smoke_test.txt python3 -m py_compile code/minimal_sft.py code/local_hf_sft.py ``` 脚本固定数据种子 670,初始化 67/68/69。词表固定 12 项,隐藏状态 48 维,Elman RNN 3516 参数。先在长度 3 的 COPY/FLIP 合成序列上全序列热身 600 步,再用长度 4 数据微调 400 步。这个合成热身不能称为自然语言预训练。Adam LR .003、梯度范数上限 1、batch 16、float64。共享同一种子的热身模型;每个分支重置 Adam。每步使用完整训练批,无 dropout 或随机抽样。单源分支把 8 个 COPY 例子重复两次,混合分支各 8 条 COPY/FLIP,固定总样本/响应词元数。 先按原始四位字符串分组,8/4/4 组分给训练/开发/测试;每组两种任务。测试是新输入组合,不是未见任务。预定 20/100/200/400 步检查点只以开发集 response NLL 选取,测试不调参。所有分支都训练到 400,保存被选中检查点。模板 B 只在最终测试出现,TASK/INPUT/ANSWER 词元虽在固定词表里,但未出现在热身或微调输入中,其零分是极端分布外压力测试。 `results.json` 包含完整曲线、逐条贪心生成、词元预算、版本和有限差分检查;`data.json` 保存切分与全部数据;`base_*.npz` 与各分支 `*.npz` 保存热身/所选权重。EOS 计入 loss 和严格整串匹配;最多生成 8 词元。报告的标准差只衡量初始化变化,不是总体置信区间。COPY-only 的训练分数仅覆盖 COPY,不能和混合分支训练分数视为相同测试集合。 `full_loss` 每步监督 192 词元,其余为 80;输入与优化步相同,目标位置和归一化分母不同,不是固定监督词元预算比较。 ## 待人工核验:真实本地基础模型 `local_hf_sft.py` 只有语法检查通过,本机无 torch,未加载/训练 SmolLM2。另准备 torch、transformers 兼容环境及本地基础模型检查点(可查正文 SmolLM2-135M 官方模型卡),记录模型文件哈希、下载 revision、完整依赖锁文件。不要以 Instruct 版本替代 base 而仍称首次指令微调。 ```bash python3 code/local_hf_sft.py --model /absolute/path/to/local/base-checkpoint --output code/hf-balanced-67 --variant balanced --seed 67 ``` 该脚本本地文件模式、CPU float32、无远程代码、无网络下载、单样本 batch,完整字符串 offset 掩码、EOS 监督、拒绝超长而不截断。显式 Task/Input/Answer 文本模板用于 base 模型;不是 SmolLM 官方聊天模板。跨越提示/回答边界的词元保守屏蔽;至少一个非 EOS 回答词元必须可监督。模型内部负责因果移位。它的 80 步、LR 2e-5 与 NumPy 实验不同,不能合并表格。极少的二进制任务仅检查训练链路;不能评估通用指令跟随。每个变体使用独立输出目录;更大数据、硬件预算、模型兼容性和完整 benchmark 都待人工核验。