Avatar

Qianqiu

Master in PKU Research Direction: VLM, RLHF, MLsys Hobbies: Game, Web novel, Anime

  1. WeChat
  1. Home
  2. Diary
  3. Research
  4. Entertain
  5. Search
  6. Archives
  7. About
    1. Dark Mode Light Mode

Table of contents

  1. 计划概述
  2. A. Baseline:不微调(Prompt + Zero-shot)
    1. 原理说明
    2. 实现方式
      1. 1. 生成式
      2. 2. 打分式(推荐)
    3. 关于生成式的疑问
    4. Label Scoring 工作机制
    5. Logits 手算实现步骤
    6. 标签词偏置问题
    7. Baseline 严谨性的思考
      1. 严谨性分析
  3. B. Head-only(非 Zero-shot,但有参考价值)
  4. C. LoRA + Head(主模型)
    1. 对比实验的价值
  5. 实验结果
    1. 工具说明
    2. 性能对比
    3. 结果分析
      1. Head-only 性能异常
      2. Head-only 的价值
    4. 进一步思考
  6. 深度分析
    1. Zero-shot 有效性的根本原因
    2. LoRA 与分类头的机制差异
    3. 实验结论
  7. 延伸方向
    1. 有意义的对比方向
    2. 1) LoRA + Label Scoring(生成式分类接口)
    3. 2) LoRA + Classifier Head(判别式分类接口)
    4. 本质差异
  8. Embedding 权重问题
    1. 标准做法
    2. 需要区分的关键问题
    3. 允许 Embedding 更新的风险
    4. 对 Head-only 的启示
    5. 训练策略对比
      1. 全量 SFT
      2. PEFT / LoRA
  9. 实验补充:LoRA + Label Scoring
    1. 性能对比
    2. 原因分析
    3. 结论
Diary

转码 Day 17:对比实验与评估

Feb 06, 2026

计划概述

今天计划完善昨天的任务,开展评估工作。主要进行三组对比实验,以验证不同训练方法的有效性。


Token embedding and LM head are frozen in all settings.

A. Baseline:不微调(Prompt + Zero-shot)

原理说明

Zero-shot 指不使用任何该任务的训练样本进行参数更新,仅依靠预训练模型本身的能力和提示词。

实验目标:证明 LoRA 微调确实带来了性能增益。

实现方式

1. 生成式

让模型直接生成"正向"或"负向"的文本输出。

2. 打分式(推荐)

计算模型对"正向"和"负向"这两个候选答案的 log-likelihood,选择概率更大的标签。

打分式的优点:无需担心生成结果跑偏,结果稳定且可复现。

关于生成式的疑问

对于分类任务,采用生成式方法容易出现结果跑偏的问题。

Label Scoring 工作机制

打分式的原理是:

不让模型自由生成一段话,而是把每个候选标签(如"正向"“负向”)当作"可能的下一段输出",计算模型对它们的概率/对数概率,选择概率更大的结果。

这正是语言模型的本职工作:给定上下文,对"接下来出现什么 token"分配概率。分类任务本质上是将输出空间限制为少数几个候选字符串。

Logits 手算实现步骤

这是最通用、可控的实现方式:

  1. 分别拼接候选标签

    • prompt + “正向”
    • prompt + “负向”
  2. 前向传播:对每个拼接后的完整序列运行一次前向传播,得到每个位置的 logits

  3. 计算分数:只取"标签部分 token"的 logprob,求和得到该标签的分数

  4. 预测决策:选择分数更高的标签作为预测结果

由于没有训练任何参数,这属于严格的 zero-shot 方法。

标签词偏置问题

核心问题:“标签词的选择会不会影响 zero-shot 结果?”

答案是:会不一样。如果使用"正向/负向"、“好/坏"或"positive/negative”,结果会产生差异。这确实影响 baseline 的客观性。

在学术界,这一问题被称为:

Label / Verbalizer Bias(标签词偏置)

Baseline 严谨性的思考

关键洞察:baseline 的"严谨性"取决于其用途。

严谨性分析

在固定 prompt 和标签词的前提下,zero-shot 与微调模型在"同一决策接口"下进行对比:

  • Zero-shot 使用 prompt + label scoring
  • LoRA / head 模型最终也输出同一组标签词

比较的是:模型参数是否让"正确标签的概率"系统性提高。

在这种"相对比较"的语境下,该方法作为 baseline 是合理的。


B. Head-only(非 Zero-shot,但有参考价值)

方法:冻结 base Qwen(不加 LoRA)+ 训练一个分类头

技术名称:Linear probe / head-only fine-tuning

注:该实验已在昨天完成。


C. LoRA + Head(主模型)

方法:base Qwen + LoRA(更新 LoRA 参数)+ 分类头(通常也参与训练)

对比实验的价值

通过三组对比可以清晰地定位增益来源:

  • Head-only vs LoRA+Head:增益来自 LoRA,而非仅靠分类头
  • Zero-shot vs Head-only:验证任务本身是否需要监督才能有效分类

实验结果

工具说明

实验A使用了 Claude Opus 4.6。模型性能优异

  • 高并发场景下无限速问题
  • 代码生成准确度高,自我纠错频率低
  • 唯一缺点是成本较高(通过 GitHub Copilot 学生认证使用)

在实现 baseline(Prompt + Zero-shot)任务时,Opus 4.6 仅用一分钟即生成完美代码,大幅节省了调试时间。

性能对比

模型AccuracyF1AUC-ROC
A. Zero-shot (打分式)0.8800.8820.930
B. Head-only (冻结+分类头)0.5120.6750.551
C. LoRA + Head (微调)0.9380.9370.977

结果分析

Head-only 性能异常

偷懒的Head-only 的分数最低,这一结果是可以预期的。该方法将不匹配的模型和分类头强行组合,存在本质问题。

Head-only 的价值

尽管性能不佳,该实验仍有重要发现:

  1. LoRA 不仅仅是微调了表示,它根本改变了 hidden states 的分布
  2. 分类头和 LoRA 存在相互依赖关系,不能单独提取
  3. Zero-shot 的有效性证明 Qwen 本身对中文情感有很强的先验知识

进一步思考

是否应该做一个冻结所有参数,只训练分类头的极端head-only实验?

在大模型场景下,这一问题无需重点考虑,因为大模型的"头"和词嵌入共享权重,这是为了保持输入输出的一致性。

冻结所有参数仅训练分类头,性能很可能介于 A 和 B 之间,甚至接近 B。


深度分析

Zero-shot 有效性的根本原因

Zero-shot 实际上不是"没有训练",而是利用了预训练时学到的 token-level 对对齐能力:

  • LM Head(词表投影)和 hidden states 的高度适配
  • 情感分类任务在中文语料中属于高频语义轴

LoRA 与分类头的机制差异

LoRA:通过旋转 / 拉伸 / 重排 hidden states,使目标类别在低维线性空间中可分。

分类头:仅作为"读出器"提取分类结果。

实验 B 正好提供了反例证明。

实验结论

  • A(Zero-shot):已经是一个非常强的 baseline
  • C(LoRA + Head):明确的最优解
  • 极端反例:添加"冻结所有参数只训练头"的实验只会印证已知结论,意义有限

延伸方向

有意义的对比方向

除了当前的三组实验,还有一个有价值的对比:

LoRA + Label Scoring vs LoRA + Classifier Head

1) LoRA + Label Scoring(生成式分类接口)

特点:

  • 不训练或不使用 Linear(d→2) 分类头
  • 仍然使用 LM Head(词表投影、与输入词嵌入权重共享)
  • 预测时仅比较两个候选标签字符串(如"正向"“负向”)的 logprob

LoRA 的作用:让模型在给定输入后,更倾向于提高正确标签 token 的概率。

2) LoRA + Classifier Head(判别式分类接口)

特点:

  • 在某层 hidden state 上接一个分类头(通常取最后一层 h,或 pooled 表示)
  • 使用交叉熵训练该头(同时可训练 LoRA)
  • 输出是 softmax(W h + b),类别空间为 2 维,不经过词表

LoRA 的作用:改变 hidden states 的分布,使得线性头能够有效区分。

本质差异

  • Label Scoring:token 级别的生成概率比较
  • Classifier Head:表征到类别的额外映射(新增参数 + 新决策边界)

Embedding 权重问题

标准做法

两种方法的标准做法是:Embedding 矩阵不变。

目的是保证"正向 / 负向"这两个 token 的向量本身不会漂移。

需要区分的关键问题

我们需要明确区分:

  • 是 LoRA 让模型"更理解情感"?
  • 还是 embedding 把"正向"这个词硬拽过去了?

允许 Embedding 更新的风险

如果允许 embedding 更新,模型可以用极低成本:

  • 把"正向"的 embedding 向所有正样本 hidden 靠拢

这不是"理解任务",而是篡改标签语义。在二分类任务和小数据场景下,这一问题几乎必然发生。

对 Head-only 的启示

如果允许 embedding 训练,Head-only(冻结 base + 只训 head)甚至可能"复活",但这并非是因为 head 的判别力提升,而是语义空间整体发生了漂移。

训练策略对比

全量 SFT

  • 不要求冻结 embedding
  • 在参数集合上与 pretrain 相同
  • 对 embedding 的梯度较弱(不是"冻结",只是梯度不显著)

PEFT / LoRA

  • 通常冻结 embedding
  • 目的是减少自由度,控制因自由度增多而引入的归纳偏置

实验补充:LoRA + Label Scoring

晚上十一点,想着打游戏但是突然不知道玩什么,似乎暂时网游已经不太能引起我的兴趣,又不想刷力扣,于是开始做 LoRA + Label Scoring(生成式分类接口)的实验。LoRA 算力要求其实很低,Claude Opus 4.6 太好用了你知道吗,我在十一点半前就改好代码跑起来了,只跑了五十多分钟就完成了。

让我惊讶的是,它的结果其实是最好最完美的,即使有着 Label / Verbalizer Bias(标签词偏置)的一定影响。这也许又一次让我对大模型的边界能力有了新的认知。

性能对比

指标qwen_loraqwen_lora_label_scoring差异
准确率0.9380.958+2.0% ✅
F1分数0.9370.958+2.1% ✅
精确率0.9710.959-1.2%
召回率0.9060.957+5.1% ✅
负向召回0.9710.958-1.3%
正向召回0.9060.957+5.1% ✅

原因分析

分类头是从隐藏状态到类别的映射,可能不够精细。

Label Scoring 训练时计算的条件概率,推理时也用同一个概率。充分利用 LLM 的语义理解——标签 token 本身有丰富的语义信息。

结论

Label Scoring 更符合"用 LLM 做 LLM 擅长的事"的设计哲学。准确率只提升 2%,但生成式方法更优雅、更符合 LLM 的设计初衷,最大程度地利用了模型预训练得到的所有信息。

Related content

学习day28:

学习day27:

学习day26:

学习day25:

未学习day24:计划赶不上变化,又摆一天

© 2025 - 2026 Qianqiu
Built with Hugo
Theme Stack designed by Jimmy