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

un

访客
1 / ?
返回课程列表

为什么存在地板

糟糕的奖励连胜可能饿死优先源

ANDREA 的匪徒通过 UCB1 排名挑选焦点臂。UCB 排名取决于 mean_reward(k),而 mean_reward(k) 取决于观察到的损失改进。从优先源(例如 dictionary)的一连串高损失文档可能会拉低 mean_reward(k)。现在 dictionary 排名低,获得很少的焦点拉取,& 其 mean_reward(k) 无法恢复(无拉取 = 无新鲜观察)。


同样的风险适用于 ANDREA 的训练设计师无论短期奖励信号如何都希望纳入混合的任何源。


地板作为最小权重

ANDREA 的训练配置为每个源指定了一个 floor(地板):无论 UCB 输出说什么,该源都会获得的最小采样权重。地板范围从 0.0 到 1.0。示例:


hermes3-general floor = 0.8 (优先对话源)

chat floor = 0.8

dictionary floor = 0.7 (事实回忆支架)

gutenberg floor = 0.7 (散文连贯性)

synthetic-chat floor = 0.0 (无下限;bandit 自由决定)


下限如何应用

在 UCB1 对臂进行排序且 dice control 组装焦点集之后,每个源获得一个暂定权重。然后运行下限强制执行:


final_weight_k = max(tentative_weight_k, floor_k)


如果 bandit 为 hermes3-general 分配了 0.3 的权重,但其下限为 0.8,则下限获胜:最终权重 = 0.8。bandit 的声音仅会被向上覆盖;它永远不会被向下覆盖。


Floors & Epoch Penalty Layout


不同的配置,不同的 Floor

ANDREA 提供了几种训练配置:chatbot、tool-caller、bash-commander。每种配置为其优先级来源设置不同的 floor。Chatbot 将 hermes3-generalchat 的 floor 设置得较高。Tool-caller 将 repo-docstrings 的 floor 设置得更高。Bash-commander 将 repo-commits 的 floor 设置得更高。相同的算法,不同的优先级。

应用 Floor

在 UCB1 + dice control 之后,bandit 分配了这些暂定权重:hermes3-general 0.30, dictionary 0.55, gutenberg 0.85, synthetic-chat 0.40。Floor 是:hermes3-general 0.80, dictionary 0.70, gutenberg 0.70, synthetic-chat 0.00。计算每个来源在应用 floor 后的最终权重。然后用一句话解释哪个来源的权重被提升得最多。

记忆风险

微小来源会被记忆

ANDREA的数据来源大小差异巨大。synthetic-chat 大约有 1,400 个文档。gutenberg 有 500,000+ 个。如果bandit均匀拉取,synthetic-chat 会很快耗尽其文档池:1,400 次拉取后,每个文档至少被见过一次。拉取 2,800 次后,每个文档平均被见过至少两次。


对一小组文档的重复暴露会导致记忆:模型停止学习可泛化模式,开始背诵训练数据中的特定token序列。记忆有害有两个原因:(1) 它浪费容量用于死记硬背而不是泛化,& (2) 它可能通过生成泄露训练数据。


轮次作为记忆代理

定义源 k 的一个轮次为遍历 k 的所有文档的一次完整通过:


epochs_k = floor(lifetime_pulls_k / n_docs_k)


如果 synthetic-chat (n_docs=1400) 已被拉取 2,800 次,则 epochs = floor(2800/1400) = 2:该源已被完整查看两次。如果 gutenberg (n_docs=500,000) 已被拉取 100,000 次,则 epochs = floor(100000/500000) = 0:尚未完成一次完整通过。


1/(1+epochs) 惩罚

lifetime_pulls / n_docs > 1.0 时,ANDREA 会应用一个乘法惩罚:


penalty = 1 / (1 + epochs)


final_weight = bandit_weight * penalty


曲线:


轮次惩罚权重减少
01.000
10.500一半
20.333三分之一
30.250四分之一
50.167六分之一
100.091one eleventh

惩罚随着每次完成的遍历而增长。经过许多 epoch 后,源的权重趋近于零,bandit 自然地让它休息。


为什么 Lifetime Pulls 在重启时持续存在

ANDREA 的训练运行跨越数天。崩溃会发生。服务器重启。配置被调整,训练从检查点恢复。Lifetime pulls 在所有这些事件中持续存在:代理持续地将拉取计数写入磁盘。


如果每次重启时拉取计数重置,一个小源就能有效地每次训练重启时重置为 epoch 0。惩罚将永远不会累积,记忆化将不受影响地进行。持久化的 lifetime pulls 使惩罚成为一个真实、单调增长的约束。

计算 Epoch 惩罚

来源 `synthetic-chat` 有 n_docs = 1,400。在 4,200 次终身拉取后,计算 (a) epoch 数量,(b) 惩罚 1/(1+epochs),(c) 如果 bandit weight 为 1.0,则最终权重。然后对于 `gutenberg` 有 n_docs = 500,000 & 100,000 次终身拉取,计算 (d) lifetime_pulls/n_docs,& (e) 惩罚是否适用(是或否,并说明原因)。

关闭 Bandit 课程栈

你已掌握的内容

Floors 保证优先来源的最小采样:final_weight = max(bandit_weight, floor_k)。Epoch 惩罚限制小来源的记忆:当 lifetime_pulls/n_docs > 1 时,权重乘以 1/(1+epochs)。终身拉取在重启间持久存在,因此惩罚成为单调约束,而不是可重置计数器。


完整管道

将所有四个 ANDREA 匪徒活动(76-79)组合在一起:


1. 活动 76 (UCB1)。 每一步计算 UCB(k) = mean_reward(k) + 0.5 * sqrt(ln(N)/n_k)。Argmax 选择一个臂。

2. 活动 77 (骰子阶段)。 阶段边界(每 7 到 42 步)掷骰子决定焦点臂数量。先随机臂,UCB 填充其余。25-33% 的阶段完全随机运行。

3. 活动 78 (奖励归因)。 CUDA 报告损失;按来源 EMA 跟踪历史;奖励 = max(0, EMA - 损失) * 1000。缩放奖励输入 mean_reward(k)。

4. 活动 79 (底线 & 纪元,本课)。 UCB 输出后,底线提升优先来源;纪元惩罚降低记忆来源权重。终身拉取持续存在。


总而言之:一个能够适应的强盗(UCB1),可靠地探索(骰子阶段),获得诚实的奖励信号(1000x 缩放),尊重训练设计优先级(下限),并避免记忆化(周期惩罚)。


参考文献

ANDREA 白皮书,第 3.5 节和 3.6 节。