手写BiLSTM-CRF医学NER:一个loss=-9930的bug复盘
复现自己Week7的BiLSTM-CRF医学NER作业时,训练loss显示为-9930。用暴力枚举定位到CRF停止转移的索引方向写反,进一步分析发现这个-10000的偏移对所有路径是均匀的,不影响梯度和维特比解码。最后补跑三模式对比,发现这个手写CRF在本任务上反而没帮上忙——Softmax基线在9类实体上全面超过它。
BERT+稀疏MoE实战:frozen/LoRA/全量/MoE 的真实对比
在同一份中文情感数据上,用同一套超参跑完冻结骨干、LoRA、全量微调和手写BERT-MoE四种训练方式。LoRA用0.57%参数追平全量微调,而MoE以18.5%的参数增量把准确率再拉高0.6个百分点。
BERT 文本分类微调实录:从 checkpoint 里读出过拟合的另一种信号
经验驱动。这是一次 bert-base-chinese 的文本分类微调,留下了两个真实 checkpoint。最有意思的地方在于:第 2 个 epoch 的准确率比第 1 个高(0.9054 → 0.9114),但验证损失也更高(0.2533 → 0.2625)。准确率和损失朝相反方向走,这说明什么?本文所有数字来自 trainer_state.json 的原始记录。 一、实验设置 项目 值 基座 bert-base-chinese(21128 词表 / 12 层 / 768 隐层) 任务 电商评论文本分类(BertForSequenceClassification) 计划 epoch 3(max_steps: 8442) 实际停止 第 2 个 epoch,step 5628 train batch size 16 验证 / 保存 / 日志频率 每 500 / 500 / 50 步 早停 EarlyStoppingCallback(early_stopping_patience=2) 保存策略 load_best_model_at_end,最终 ...
唐诗生成实验:三个 GPT-2 与五种解码策略的真实差距
经验驱动。同一份唐诗数据、同样的训练参数,微调三个不同的中文 GPT-2,然后用五种解码策略各生成一批,一共 60 条真实生成结果。结论有点反直觉:模型选对比解码策略影响更大——困惑度从 87.9 到 13.3 差了 6.6 倍,而换解码策略带来的变化主要在”长度和多样性”,不在”像不像诗”。 一、实验设计三个模型都用中文词表(避免英文 GPT-2 的 byte-level tokenizer 把汉字切得太碎): 模型 参数量 说明 uer/gpt2-distil-chinese-cluecorpussmall 59.5M 轻量版 uer/gpt2-chinese-cluecorpussmall 102M 标准版 uer/gpt2-chinese-poem 103M 针对中国古诗预训练 五种解码策略:greedy、beam_search、top_k、top_p、top_k_top_p。 输入格式统一为 [CLS]诗名[SEP]句首,比如 [CLS]静夜思[SEP]床前,让模型续写。 硬件:本机 RTX 2060,PyTorch 2.9.0+cu130,Tra ...
中文文本纠错实战:BiLSTM 逐位置纠错,四个优化器差出 35 倍
经验驱动。这是一次在 CPU 上跑完的中文拼写纠错实验:字符级 BiLSTM,逐位置判断”这个字对不对、不对该换成什么”。最值得看的不是模型,是四个优化器的差距——同样结构、同样数据、同样 3 个 epoch,SGD 的字符准确率 0.0262,Adam 是 0.9200,差 35 倍。本文所有数字来自本机真实训练日志。 一、任务怎么建模成”逐位置纠错”中文纠错有个方便的地方:错字和正字长度一样。”肾嚢肿”和”肾囊肿”都是 3 个字,所以可以当成序列标注任务来做,不需要对齐、不需要编辑距离。 所以做法是: 输入:原始句子(可能含错字) 输出:每个位置一个”应该是哪个字”的预测 标签:正确句子对应位置的字符 损失:只在真正含错字的负样本上算,且只算错别位置 这样模型学到的是”给定上下文,这个位置最可能是什么字“,而不是死记硬背。 二、实验设置 项目 值 模型 字符级 BiLSTM 硬件 CPU(本机 Python 3.10) 数据 chinese_text_correction(已通过 hf-mirror 下载到本地) 小规模对比 train 8000 / ...
BERT 微调三种方式对比:冻结骨干、LoRA 与全量微调
经验驱动。同一份数据、同一个 bert-base-chinese、同样二分类情感任务,我用三种方式各跑了一遍:冻结 BERT 骨干只训分类头、LoRA、全量微调。结果差距大到不需要统计学显著性检验:冻结版 86.25%,LoRA 93.92%,差 7.67 个点。本文数字全部来自真实的 trainer_state.json。 一、实验设置 项目 值 基座 bert-base-chinese 任务 二分类情感分类(left0ver/sentiment-classification) 框架 🤗 transformers Trainer 精度 fp32 max_length 256 batch size 32 学习率 2e-5 epoch 5(冻结)/ 4(LoRA,早停生效) 三个脚本的差别只有”哪些参数 requires_grad“这一处: 脚本 做法 work13sol.py for p in model.bert.parameters(): p.requires_grad = False work13sol2.py ge ...
SQL Agent 三版本实战:同一张 LangGraph 图,换三个模型后端
经验驱动。这是一个”用自然语言查 SQLite”的 Agent,我写了三个版本:mock 规则版 / ollama 本地版 / api 云端版。三个版本共用同一张手写 LangGraph 图,只换模型后端。本文所有数字来自 2026-09-16 的真实评测:10 道题,两个真模型都是 10/10,但一个 6.53 秒、一个 385.45 秒——差 59 倍。中间还有一次”8/10 → 10/10”的调试全过程。 一、为什么要做三个版本课程作业的要求是”做一个能用自然语言查数据库的 Agent”。但如果只交一个版本,你根本看不出架构和模型的关系——到底是我的图设计得好,还是模型聪明? 所以我把它拆成了三层,只换模型,不换图: 后端 模型 用途 mock 正则规则匹配,无模型 离线可跑、可验收、不烧 token ollama qwen2.5-coder:7b-instruct-q4_K_M 本机主力,实测最快 api DeepSeek / SiliconFlow 等云端 备用,接口已留好 这样做有个直接好处:任何时候都能离线验证链路是通的。模型没启动、API k ...
Qwen3-0.6B 医疗 SFT 实战:从 SwanLab 曲线里读出过拟合信号
经验驱动。这是一次跑完就算完的训练复盘:Qwen3-0.6B 在 2166 条医学问答上做 SFT,一共跑了 5 次,曲线全部留在 SwanLab 上。本文所有数字都来自那 5 次真实运行——包括一次被手动中断的、一次上传不完整的。真正有价值的发现只有一句话:train loss 一路降到 0.5,eval loss 却在 step 1000 触底后反弹了 0.14。 一、这次训练到底在干什么把 Qwen3-0.6B 微调成一个”医学专家”:给它一个问题,它要先输出思考过程(think 字段),再给答案(answer 字段)。所以标签不是简单的答案,而是 think + answer 拼起来的一段文本。 硬件是 RTX 5070 Ti Laptop,12G 显存。这个显存量决定了后面一连串妥协:max_length 只能开到 1024,必须开 gradient_checkpointing,batch size 只能按 1 来。 项目 值 基座模型 Qwen3-0.6B(本地加载) 训练样本 train.jsonl 2166 条 验证样本 val.jsonl 24 ...
docker-compose 编排全栈服务
经验驱动 + 诚实声明。下面的 compose.yml 按官方最佳实践编写;本机 Docker Desktop 引擎未启动,未真跑 docker compose up。实际编排请先启动引擎,再用 docker compose config 做语法校验后再 up。 为什么用 compose一个全栈应用通常不止一个容器:Web 服务 + 数据库 + 缓存。手动 docker run 三个容器、管网络、管卷,又臭又长。docker-compose 用一份 YAML 把多服务、网络、卷、依赖关系声明式地管起来,一条 docker compose up 全拉起。 一个真实的全栈编排(Flask + Postgres + Redis)12345678910111213141516171819202122232425262728293031323334services: web: build: . ports: ["8000:8000"] environment: DATABASE_URL: postgresql://app:app@db:543 ...
LLaMA-Factory 实战(三):单卡后训练全链路——SFT、DPO 与 GRPO/RLVR
LLaMA-Factory 实战(三):单卡后训练全链路——SFT、DPO 与 GRPO/RLVR 系列导航:(一)数据格式、模板选择与版本调试;(二)环境搭建、WebUI 训练与模型导出合并;(三)本篇——用 TRL 在单卡上把 SFT → DPO → GRPO 三条后训练路线完整走一遍。 一、后训练全景:三条路线各自解决什么问题大模型后训练不是一步到位,而是分工明确的三层: 路线 数据形态 学什么 SFT prompt + completion 「应该怎么回答」 DPO prompt + chosen + rejected 「哪个回答更好」 GRPO/RLVR prompt + answer(奖励函数打分) 「在可验证的任务上拿高分」 注意 DPO 是直接偏好优化,不是在线强化学习——它把带参考策略约束的偏好目标转化为可监督优化的形式;而 GRPO 需要在线 rollout + 奖励函数,计算量大得多。 本文按 TRL 1.12.x API 编写,模型用 Qwen2.5-0.5B-Instruct 做教学演示(真实项目再换大模型)。所有训练开关默认关闭,先 ...
avatar
HYRX-TG
运维工程师 | AI算法学习者 | 热爱写作与技术分享
关注 河岳日星的 GitHub
公告
欢迎来到河岳日星的博客,记录技术与成长
最新文章
网站资讯
文章数目 :
122
已运行时间 :
本站总字数 :
171.6k
本站访客数 :
本站总访问量 :
最后更新时间 :
一言
:D 获取中...
:D 获取中...