English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

访客
1 / ?
返回课程列表

模型应该有多惊讶?

损失管道:Logits 到交叉熵


从 Logits 到概率

经过 12 个 transformer 块后,ANDREA-120M 为每个标记位置生成一个 vocab_size 长度的向量:logits。对于 ANDREA-120M,vocab_size = 8449,因此每个位置输出 8449 个 logits。Logits 是未归一化的分数;有些为正,有些为负,不受和为 1 的约束。


Softmax 将 logits 转换为概率分布:


p_i = exp(logit_i) / sum_j exp(logit_j)

经过 softmax 后,所有 8449 个数字都在 0 与 1 之间,总和为 1。模型为每个可能的下一个 token 分配概率。


交叉熵损失

训练需要一个损失函数:一个数字,用于衡量模型对给定正确答案的预测有多错误。交叉熵适用于语言建模:


loss_t = -log(p_correct_token_t)

取模型对实际下一个标记(训练数据中的那个)的预测概率。取该概率的负对数。那就是一个位置的损失。


为什么用负对数

三个特性使 -log(p) 成为一种自然的损失函数:


- -log(1) = 0:当模型以 100% 置信度预测正确标记时,损失为零。

- -log(0) = ∞:当模型对正确标记分配零概率时,损失为无穷大。(在实践中,softmax 从不输出精确的 0;损失保持有限但很大。)

- 单调递减:随着正确标记的预测概率增加,损失平滑减少。


对正确答案的更高置信度 = 更低的损失。训练目标很简单:最大化实际下一个标记的预测概率。


每个序列的损失

ANDREA 在长度为 1024 的序列(上下文窗口)上训练。每个序列产生 1024 个下一个标记预测。序列损失在所有位置上取平均值:


sequence_loss = mean(-log(p_correct_t)) for t in 0..1023

然后序列损失会在批次中取平均值(ANDREA-120M 使用 batch_size = 8)。每个训练步骤一个标量数字。这个数字就是损失曲线所绘制的内容。

为一个位置计算损失

在一个训练位置,ANDREA-120M 为实际的下一个标记产生 softmax 概率 0.4(其他标记获得了剩余的 0.6)。计算这个单个位置的交叉熵损失。展示公式和算术。然后用一句话说明这是否代表一个自信或不确定的预测。

困惑度 = exp(损失)

一个更友好的尺度

像 2.0 或 3.43 这样的损失值并不能立即传达模型的能力。困惑度将损失转换为一个更直观的尺度:


perplexity = exp(loss)

Perplexity 回答了一个清晰的问题:模型有效地从多少个等概率的 token 中选择?Perplexity 为 7 表示模型的表现就像在每个位置从 7 个合理的下一个 token 中挑选。Perplexity 为 1 表示完美预测。


常见的 Loss-Perplexity 对


LossPerplexity感觉如何
0.01.0完美预测
1.02.7在约 3 个合理 token 中选择
2.07.4ANDREA-12M 最终 SMMA 领域
3.020.1合理文本但不确定
3.4330.9ANDREA-120M v1 最低值(抛光前)
5.0148早期训练,学习词汇分布
9.048449ANDREA-120M 词汇表的随机机会基线

困惑度将损失值置于上下文中:损失值为 2.0 意味着模型有效地从约 7 个 token 中选择,而不是从 8449 个。


随机猜测基线

一个一无所知且均匀猜测的模型会为每个 token 分配概率 1/V,其中 V = vocab_size:


p_uniform = 1 / V
loss      = -log(1/V) = log(V)

对于 ANDREA-120M,V = 8449:


loss_uniform = ln(8449) ≈ 9.04

对于 ANDREA-12M,V = 2305:


loss_uniform = ln(2305) ≈ 7.74

任何高于此基线的损失值意味着模型的表现比随机猜测还差。任何低于它的损失值意味着模型已经学到了一些东西:它将概率质量集中在比均匀分布更小的令牌子集上。

阅读损失值

ANDREA-120M v1 在第 110K 步(崩溃之前)达到了其 EMA 损失最小值 3.43。计算:(a) 损失 3.43 时的困惑度;(b) 该损失值相对于随机猜测基线(ln(8449) ≈ 9.04)的好多少倍,以困惑度比率表示。显示你的算术过程。

平滑步骤级噪声

原始损失很噪声

每步损失上下波动。ANDREA 的 bandit 每 7-42 步选择不同的来源;有些来源(字典定义)产生容易的损失;其他来源(gutenberg 段落)产生更难的损失。将原始步骤损失对步骤编号绘图会产生混乱的散点图。


平滑修正移动平均线 (SMMA) 抑制噪声并揭示趋势。ANDREA 的训练代理按以下方式计算 SMMA:


SMMA[0]  = loss[0]
SMMA[t]  = (SMMA[t-1] * (N-1) + loss[t]) / N

当 N = 100(ANDREA 的默认平滑窗口)时,每个新的 SMMA 值将前一个 SMMA 的 99% 与新步骤损失的 1% 混合。突发峰值被吸收;持续变化逐渐显现。


为什么不直接使用平均值?

简单的移动平均需要存储最近 100 步的 100 个损失值。SMMA 只存储一个值(运行平均值)& 一个常量(窗口大小)。内存占用少、计算开销小、且平滑度足够绘制曲线。


不同的平滑权重回答不同的问题:


- N = 10:跟踪短期变化;在相变期间有用

- N = 100:ANDREA 的默认值;跟踪中期进度

- N = 1000:仅长期趋势;训练结束时有用


ANDREA 跟踪的内容

每 100 步,训练代理会写入 loss.json,包含当前 SMMA、原始损失、步数及按来源细分。training.ai.unturf.com/dashboard 仪表板每 10 秒轮询此文件。外部查看者可以看到实时进度;仪表板为只读。

ANDREA-12M 的实际曲线

达到 SMMA 2.0 的配方


步数平均损失备注
0--2.5K4.50随机初始化,早期的学习阶段
2.5K--5K3.88通过结构阶段快速下降
5K--10K3.30接近连贯性边界
10K--20K2.80Bandit 找到最优组合
20K--25K2.40平台期 --- 数据饥饿
25K--30K2.50引入 Hermes 数据 + 学习率重启
30K--35K2.35Hermes 整合,达到新低点
35K--40K2.104臂聚焦,陡峭下降
40K--43.6K2.00知识领域,SMMA 低于 2.0

三个阶段特别突出:


1. 早期陡峭下降 (0-10K)。 损失从 4.50 降至 3.30,模型学习词汇分布和基本轮次结构。随机机会基线 ln(2305) ≈ 7.74 远高于此曲线;一旦嵌入稳定,模型迅速集中概率质量。


2. 平台期 (20K-25K)。 损失停滞在 2.40。强盗算法在其当前来源组合上已无余地。在第 25K 步添加 Hermes 数据,加上 LR 热重启,打破了平台期。


3. 最终下降阶段 (35K-43.6K)。 课程从 16 个来源缩小到 4 个 (hermes3-general + dictionary + gutenberg + chat)。损失下降比全臂 bandit 更陡峭。最终 SMMA: 2.0。


ANDREA-120M v1:一个警示曲线

相同的词汇量计算:ln(8449) ≈ 9.04。ANDREA-120M v1 在第 110K 步达到 SMMA 3.43(其最小值),然后发散:


步数EMA 损失趋势
26K--40K4.29收敛中
70K--85K3.60最佳区域
85K--110K3.43最小值
110K--125K3.54发散
140K--155K4.05发散
155K--165K4.54崩溃

整个过程中损失值数值合理(3.43 远低于 9.04 的随机基线)。但样本出现重复崩溃:Budy Budy Budy Budy。损失值讲述了一个误导性的故事;样本审计并非如此。


v2 的连贯性门控早停(活动 78)添加了一个并行信号:二元组多样性、三元组多样性、英语单词存在、字符多样性。当四个分数连续 5 个样本均低于 30 时,训练自动停止。此信号本可在 v1 的第 132K 步捕获问题,节省 3.8 天的计算资源。

每个阶段告诉你什么

观察 ANDREA-12M 的损失曲线(4.50 → 3.30 → 2.40 平台期 → 2.00 最终),说明哪个阶段显示模型学习词汇分布,哪个阶段表示 bandit 已耗尽混合来源余量,以及哪个阶段反映窄化课程焦点。每阶段一句,引用具体步数范围。

120M v1 课程

两个独立的信号

ANDREA-120M v1 在第 110K 步达到了 SMMA 3.43。数值上:比随机几率好 273 倍(困惑度 31 vs 词汇表大小 8449)。曲线看起来很棒。


第 110K 步的采样::


''''' ''''' '' ''' '' ''' '''?' ''' ' '' '' '

损失与连贯性是独立的信号。低损失意味着模型有效地集中概率质量。连贯性意味着模型生成人类可读的文本。第一种并不意味着第二种。


为什么存在差距

模型可以通过以下方式降低损失:


1. 学习真实的语言模式(好):主谓一致、常见短语、事实关联。

2. 记忆结构伪影 (坏):高频重复模式、数据集特定怪癖、退化吸引子。


两者都会降低损失。第一种产生人类喜欢的样本。第二种产生 Budy Budy Budy Budy。训练目标本身无法区分它们。


ANDREA-120M v3 润色:损失与连贯性相遇之处

在 v3 润色后(第 112K 步起),ANDREA-120M 产生:


第 112,584 步,损失 0.30,ppl 1::


> [extinction prompt]
< 黑蜘蛛蒙塔诺还活着,卡罗莱纳鹦鹉已灭绝。

两个事实都正确。卡罗莱纳鹦鹉于1939年被宣布灭绝;黑蜘蛛猴现存。低损失(0.30)且连贯的事实回忆。


第 112,500 步,损失 1.94,困惑度 7::


> 如何在 Python 项目中查找过时的包?
< 使用 pip list --outdated names 查看 pip 包列表...

更高的损失(1.94 → 困惑度 7),但正确的工具从训练数据中浮现。在训练的 56% 标记处,措辞流畅性仍在发展。


双信号原则

现代训练流程同时监控两者


- 损失曲线。告诉你模型是否在学习任何定量内容。

- 样本审计。告诉你模型学到的内容是否有用。


v2 添加了连贯性门控早停(活动 78)。v3 的优化是样本审计触发的课程扰动,而不是损失值。损失本身是必要的,但从来不是充分的。

诊断假设运行

一个新的训练运行显示 SMMA 损失在 100K 步内从 8.0 → 3.5 → 2.8 下降。第 100K 步的样本审计显示:bigram 多样性 12(低)、trigram 多样性 8(低)、英语单词存在 18(高)、字符多样性 7(高)。模型很可能在做什么?训练应该继续、中止还是转向?用 3-4 句话 обосновать你的答案。