model-objectives.md · 可读全文

这里保留原文的中文、公式标记、代码和链接。可直接交给 Agent 读取,也可选取下方原文复制。此入口返回 HTML;原始 .md / .py 文件仍保留,完整候选包同时包含 UTF-8 原件。

# 同一段文本,三种预训练问题

课堂接续:[T40](https://codingai-lec05.pages.dev/classroom/T40.html?step=b0) · [T41](https://codingai-lec05.pages.dev/classroom/T41.html?step=b0) · [T42](https://codingai-lec05.pages.dev/classroom/T42.html?step=b0) · [T43](https://codingai-lec05.pages.dev/classroom/T43.html?step=b0)。连续读本:[第5章](https://codingai-lec05.pages.dev/lecture.html#chapter-5);本主题提供独立定义、例子、代码与来源。

前面的翻译训练计算 $p(y_t\mid y_{<t},x_{中文})$。现在先移走中文源句,改为普通文本 `I gave him a book yesterday .` 的next-token学习:每个位置从已有英文前缀预测后继词,目标变成 $p(y_t\mid y_{<t})$。这改变了学习任务与可见条件;一条英语句子不再是“把已经知道的中文译对”的训练样本。

![移去中文条件后,普通文本多个位置提供next-token监督](https://codingai-lec05.pages.dev/assets/r72/classroom/T40-b2.svg)

普通文本可由自身构造监督。GPT式因果预测、BERT式选中位置重建、T5式跨度去噪,是三种典型目标与输入组织;架构和目标不是永远一一绑定的定律。三个目标都需要实际训练。数据覆盖与质量、模型容量、更新次数和计算预算共同影响能力,仅把输入换成普通文本不会自动产生通用能力。

普通文本预训练之后,decoder-only也能被训练或提示用于翻译,但结构要真实改变:移除独立源encoder输出H及其cross-attention;把“请翻译成英文”、中文原句和英文前缀放进同一个因果上下文。预测him的英文位置通过self-attention读取前面的指令与中文,而不是暗中保留旧cross-attention。目标侧仍不能读取未来him标签。

![decoder-only把指令中文和英语前缀放入同一因果序列](https://codingai-lec05.pages.dev/assets/r72/classroom/T42-b2.svg)

训练用标签求loss,经反向传播和优化器更新共享参数θ;普通一次提示把文字或示例加入当前输入,通常只改变本次条件,不更新θ。指令微调继续训练参数,in-context示例则提供本次条件,两者须分别说明。能接入中文条件只说明计算通路存在;翻译表现仍取决于学习到什么以及具体评价。

![loss与优化器更新参数,普通提示改变本次输入条件](https://codingai-lec05.pages.dev/assets/r72/classroom/T43-b2.svg)

下列三类目标保留旧独立普通文本 `I gave her a red book yesterday .` 的MASK随机替换、完整右移和跨度标记细则;与当前him课堂例分别标识,不借用任何新训练结果。


[阅读本主题](https://codingai-lec05.pages.dev/course/knowledge/model-objectives.html) · [返回实验](https://deepnote.com/workspace/ise3309jingao-5ba66b0a-4283-4f5a-ae06-3f68d3201e99/project/Fall-26-Lecture-05-841ec8e7-e352-4840-b628-d3742b03d6d0/notebook/LAB-03-Transformer-9c5b3d45acdb438a8e7df1dc6cb97e40?utm_content=9c5b3d45acdb438a8e7df1dc6cb97e40&utm_source=openai&utm_medium=mcp&utm_campaign=openaimcp&utm_term=get_notebook) · [与Agent共读全文](https://codingai-lec05.pages.dev/course/knowledge/model-objectives.md.read.html)

读本:[ CLS 02 · Attention 与 Transformer ](https://deepnote.com/workspace/ise3309jingao-5ba66b0a-4283-4f5a-ae06-3f68d3201e99/project/Fall-26-Lecture-05-841ec8e7-e352-4840-b628-d3742b03d6d0/notebook/CLS-02-Attention-Transformer-2d44adcb6f3d409aa7dfb25c21a748a3?utm_content=2d44adcb6f3d409aa7dfb25c21a748a3&utm_source=openai&utm_medium=mcp&utm_campaign=openaimcp&utm_term=get_notebook),查找“同一段文本,三种预训练问题”;实验中查找“F · 跟着一个 token 穿过完整 encoder block”。


<span id="model-objectives-s01"></span>

## 原始 BERT:选中位置才是重建目标

![当前普通文本的重建目标与另外两种典型目标比较](https://codingai-lec05.pages.dev/assets/r72/classroom/T41-b1.svg)

以下her/red是原独立细则例。

![旧版独立扩展:同文不同训练目标的输入与标签](https://codingai-lec05.pages.dev/assets/r71/classroom/S28-b2.svg)

假设本次选中her和red两个位置。输入可以是 `I gave [MASK] a blue book yesterday .`,目标仍是这两个位置的her/red;其他未选位置不计MLM loss。encoder能读左右文,所以第一处可使用后面的book和yesterday。

原始BERT先选约15%的token作为目标,其中80%替换成MASK、10%随机词、10%保持原词。这个小句里选两处仅为了展示规则,不宣称单句恰好实现15%。保持原词的选中位置仍有loss,这是原配方的一部分;不能把它与因果预测中误把本步标签直接作为本步输入混为同一个错误。它让训练时不总是依赖特殊MASK位置,但也意味着不能把MLM loss直接当左到右整句概率。

原始BERT还训练Next Sentence Prediction,构造句段A/B并预测是否真正连续;并非所有后继encoder模型都保留这个目标。用BERT做句子分类还要选择汇总表示和任务头、进行相应训练,不能把“看到了完整句子”当成“分类已经会了”。

<span id="model-objectives-s02"></span>

## GPT 2018:完整句子拆成合法前缀预测

|输入位置|BOS|I|gave|her|a|red|book|yesterday|.|
|---|---|---|---|---|---|---|---|---|---|
|目标|I|gave|her|a|red|book|yesterday|.|EOS|

BOS/EOS在这里用于教学标清边界,具体实现的特殊token约定要另查;GPT2018原论文的核心是最大化因果语言模型目标,再监督微调下游任务。它不是今天聊天系统所有指令、偏好或多模态训练的总称。每一行当前输入只能参加其后一个token预测,mask保证并行训练也不接触未知未来。

“为啥生成时不知道下一词,训练时却能整句一次算?”因为训练样本提供所有已知的移位输入,但每个位置的依赖被限制;并行的是不同位置合法条件概率的计算,并没有把未来答案送给早期位置。回到路径A,还要观察真前缀与自馈前缀不同造成的实际轨迹。

<span id="model-objectives-s03"></span>

## T5:删去跨度,输出删掉的内容

手工删去gave与red book两段:

- encoder输入:`I <extra_id_0> her a <extra_id_1> yesterday .`
- decoder目标:`<extra_id_0> gave <extra_id_1> red book <extra_id_2>`,再按实现加入结束符。

sentinel把缺口位置与要生成的片段对应起来。decoder不是重抄整个未损文本;它按顺序生成被删内容与分隔标记。其输入还要右移,起始token应服从具体实现,不能随意把课堂BOS强加给所有T5库。encoder可以看未删的左右文,decoder自己生成目标时仍遵守因果约束。

T5 JMLR2020的Figure2先展示独立抽取token再合并相邻跨度的基线;最终§3.7采用15%破坏率、平均跨度长度3。后续变体可换目标和配方,不能单凭“T5架构”推断每个checkpoint训练方式。

<span id="model-objectives-s04"></span>

## 同一现象可以来自不同设计

如果模型正确补出her,可能利用了左右文,也可能只学到高频搭配;用 `I gave him …` 的对照会改变判断。如果一个新名字分成五片,抽样单位究竟是片段、整词还是连续span,会改变训练难度,必须查具体目标。要比较三类系统,请先固定任务和允许信息,而不是把重建准确率、生成PPL与下游分类混成一个排行榜。

来源:[BERT NAACL2019 §3.1/附录A.1](https://aclanthology.org/N19-1423.pdf)、[GPT2018 §3](https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf)、[T5 JMLR2020 Figure2/§3.3.4/§3.7](https://jmlr.org/papers/volume21/20-074/20-074.pdf)。本节是输入—目标设计的手工例子,没有新预训练结果。


<span id="model-objectives-s05"></span>

## 从任务监督到预训练,再到使用方式

平行翻译语料给出源句与目标译文,监督直接对应翻译任务。广泛文本则可以把每个位置的后继token作为标签:监督由数据自身构造,不意味着数据无噪声,也不意味着模型获得了当前世界的全部事实。语料覆盖、质量、去重、分布、数据量以及可用计算共同影响能学到什么。

以next-token目标追一次更新:输入 `BOS I gave`,当前标签为her。模型输出整个词表分布,取 `−log p(her | BOS I gave)` 作为该位置loss;logit梯度是 `p_j−1[j=her]`,再沿词表头、各层和embedding传播,优化器据此更新共享参数。标签her参与求loss,不能先放进这个位置的合法前缀。不同位置可并行求这些合法loss;它们共享参数,所以更新也会影响其他句子。

预训练后,任务微调或指令样例训练继续用损失更新参数,改变模型如何响应输入。In-context示例则写进本次输入,改变当前条件计算;普通一次对话不自动等于参数训练。两者可能都改善任务表现,却需要分别说明权重是否改变、使用了哪些示例、测试样本是否泄漏。

模型变大也不是把架构名改成GPT。参数量、训练数据量与计算量是不同但互相约束的研究变量;固定预算下增加一种资源可能挤压另一种。关于规模扩展的函数形式与训练配方,第六讲会继续;本讲先建立目标、信息与更新的具体关系。第七讲接搜索、推理与验证,第八讲接检索、记忆与上下文工程。

<span id="model-objectives-s06"></span>

## 人物与术语必须保留时,先定义一个小任务

当前主线PER/ORG/LOC抽取中,代词我/他不标为具名PER,昨天不在schema,必须明确另给张明/李华以后才出现两个人名span。以下人物/书名与person/device_id/location是另设任务,完整保留原边界及模型证据。

另设旧S30抽取例的句子:“昨天,小李把《机器学习》交给小王。”我们先把 schema 固定为“人物/书名”,任务是返回原文中的 span:人物为“小李”“小王”,书名为“机器学习”。书名号帮助定位边界,约定返回书名内部的文字;“昨天”虽然也是有意义的信息,却不属于这次任务的字段。这些是教学样例的人工参考,未宣称任何模型已运行。

字典可命中已知名字和书名;规则可利用书名号及周围文字约束边界,但要维护歧义与例外,例如只有姓氏、书名号缺失或同名实体。学习式标注器从标注数据学习 span 边界与类型,适合有稳定 schema 和可得标注的任务。GLiNER 式模型把类型描述与文本共同编码,并为候选 span 打分;它是现代双向 Transformer,不是“传统算法回来了”。开放生成能接受更自由的指令和解释,但必须检查它是否改写原文、发明实体或输出不合 schema 的字段。同一句话、同一组参考字段才构成这里的共同评价对象。

延伸时可以有意识地改变任务。换成“林岑将量子传感器样机QX-17交给李禾,地点为上海。”,并把 schema 改为 `person / device_id / location`,人工参考才相应变为 person:“林岑”“李禾”;device_id:“QX-17”;location:“上海”。这里的编号规则可以使用正则,但上一任务的“人物/书名”不能直接当成这次的完整 schema。文本与字段范围都改变后,需要重新检查覆盖、边界和误检,不能把两个任务的分数直接合并成模型优劣。

|部署问题|应保留的比较|
|---|---|
|任务与schema固定吗|固定字段span抽取与开放生成分开测|
|错误的实际代价是什么|漏检、误检、边界错误、类型错误分别看|
|服务资源有限吗|同一请求分布的P50/P95延迟、吞吐、峰值内存|
|后续谁来维护|词典更新、训练数据、模型版本回归和分布变化|
|可重复输出是否足够|确定性只说明复现行为,不证明语义正确|

GLiNER及后续工作说明紧凑编码器仍有活跃研究与实际价值;这些证据不足以断言全行业“复兴”,更不支持小模型普遍可靠。GLiNER2原表的CrossNER平均F1为.590,GPT-4o为.599,GLiNER-M为.615;其分类平均准确率.72对.84,也不支持“全面胜过”。CPU本地与远程API延迟包含硬件和服务路径差异,不能当成同硬件模型算力的因果比较。来源:[GLiNER NAACL2024,Figure1/§2/Table1](https://aclanthology.org/2024.naacl-long.300.pdf)、[GLiNER2 EMNLP2025 Demos,Table2–4](https://aclanthology.org/2025.emnlp-demos.10.pdf)。


NER 提供了一个能检验表示用途的任务。“Jordan scored again.”中的 Jordan 可能是人名,“They travelled to Jordan.”中的 Jordan 可能是地名。一个窗口分类器把中心位置左右各两个向量拼接为 $z_t=[x_{t-2};\cdots;x_{t+2}]\in\mathbb R^{5d}$,再计算 $h_t=\tanh(Wz_t+b)$、$p_t=\operatorname{softmax}(Uh_t+c)$。交叉熵同时更新分类器和 embedding。窗口边界需要明确的补齐规则;若采用 BIO 标注,还要区分实体开始、实体内部和非实体。逐位置独立分类可能产生非法标签组合,这也是后续加入序列约束或更完整上下文的理由。

这个小网络已经能说明“学到词向量”不等于“只看一个词”。词表提供可共享的起点,任务网络决定怎样利用本次语境。窗口 NER 与共同学习 embedding 的经典实例见 [Collobert 等,Natural Language Processing (Almost) from Scratch,§3](https://jmlr.org/papers/v12/collobert11a.html)。


<span id="model-objectives-s07"></span>

## 相邻知识与复核资源

[让整套 Transformer 共同完成一次预测](https://codingai-lec05.pages.dev/course/knowledge/transformer-information-flow.html) · [在已经认识的 block 上读懂现代部件](https://codingai-lec05.pages.dev/course/knowledge/modern-transformer-parts.html)

[全部主题](https://codingai-lec05.pages.dev/course/knowledge/index.html) · [关键结果JSON](https://codingai-lec05.pages.dev/course/knowledge/data/learning-paths.json) · [只读诊断源码](https://codingai-lec05.pages.dev/course/knowledge/code/learning_paths.py.read.html) · [Seq2Seq完整实现](https://codingai-lec05.pages.dev/course/knowledge/code/seq2seq.py.read.html) · [视觉机制实现](https://codingai-lec05.pages.dev/course/knowledge/code/mechanisms.py.read.html) · [TinyDecoder与cache实现](https://codingai-lec05.pages.dev/course/knowledge/code/legacy_numpy.py.read.html)