CUDAが報告するドキュメントインデックス
CUDAトレーナーはどのドキュメントをサンプリングしたかを知っています
各トレーニングステップは、多数のドキュメントを端から端まで詰め込んだ.btokバイナリからシーケンスを引き出します。CUDAは損失とともにドキュメントインデックスを記録します:step 47213, source=gutenberg, doc=128407, loss=2.81。プロキシがこれらのレポートを収集し、ソースごとの見られたユニークなドキュメントインデックスのセットを維持します。
カウントからカバレッジへ
ソースのカバレッジ = unique_docs_seen / n_docs。いくつかの例:
| ソース | n_docs | unique seen | カバレッジ |
|---|---|---|---|
| gutenberg | 512,000 | 154,000 | 30.1% |
| hermes3-general | 67,395 | 47,176 | 70.0% |
| dictionary | 88,000 | 88,000 | 100.0% |
| synthetic-chat | 1,400 | 1,400 | 100.0% |
小さなソースはすぐに飽和します。大きなソースは数週間50%を下回って漂います。カバレッジボーナスは、ソース内でまだサンプリングしていないドキュメントを訪れるバンディットを報酬します。
ボーナス計算式
カバレッジボーナスは、0%カバレッジで1.3倍から50%カバレッジで1.0倍まで線形にスケーリングし、50%を超えると1.0倍で平坦になります:
if coverage < 0.5:
bonus = 1.0 + 0.3 * (1.0 - coverage / 0.5)
else:
bonus = 1.0
カバレッジが0%のソースは1.3倍、カバレッジが25%のソースは1.15倍、カバレッジが50%のソースは1.0倍になります。50%を超えるとボーナスは適用されません。
ボーナスを計算する
2つの異なる新鮮さシグナル
同じ目標、異なる粒度
ANDREAには、単一のソースに対する過剰トレーニングを防ぐ2つのメカニズムがあります。それらは似ていますが、異なるものを測定します。
Epoch penalty. 集計された過剰引き出しを追跡します。lifetime_pulls / n_docs > 1.0 の場合、ソースは理論上すべてのドキュメントを少なくとも1回以上回っています。Penalty = 1 / (1 + epochs)。1.4Kドキュメントの synthetic-chat ソースで lifetime pulls が 5,600(epochs = 4)の場合、penalty 1/5 = 0.2x となります。Epoch カウントは再起動時も持続し、決して減衰しません。
Coverage bonus. ソース内の各ドキュメントの新鮮さを追跡します。CUDA はドキュメントインデックスを報告し、proxy はソースごとにセットを維持します。ユニークドキュメントの50%未満のカバレッジのソースは最大1.3x を獲得します。Coverage はソースの末尾を探求することを報酬とし、epoch penalty はそれを枯渇させることを罰します。
両方が重要な理由
| シグナル | 追跡項目 | 方向 | 上限 | 再起動間で持続 |
|---|---|---|---|---|
| Epoch penalty | aggregate over-pulling | reduces | 1/(1+e) | yes |
| Coverage bonus | per-doc freshness | boosts | 1.3x | yes |
500Kドキュメントのgutenbergソースは、200Kのトレーニング実行全体で50%のカバレッジを下回り続け、epoch=1に決して近づきません。Epoch penaltyはこれを無視しますが、coverage bonusはbanditをgutenbergの未探索の70%テールに向かって積極的に引き寄せます。
逆に、1.4Kの合成チャットソースは数千回のpull以内でカバレッジ(100%)に飽和します。coverage bonusは1.0xのままで、epoch penaltyが増加します。
区別する
Coverage BonusがANDREAに与えるもの
それが防ぐ失敗モード
ドキュメントレベルの追跡がない場合、ステップごとの報酬を選択するバンディットは .btok シーケンスを貪欲に選択します。500KドキュメントのGutenbergコーパスには、低いクロスエントロピーのシーケンス(一貫した散文、共通の語彙)が数千あります。報酬のみのバンディットは、それらのシーケンスに繰り返し戻り、強い報酬信号を継続的に生成するためです。
結果:500Kドキュメントのコーパスは、200Kトレーニングステップで約2K-5Kの異なるシーケンスにしかサンプリングされません。モデルはそのシーケンスを記憶し、他の部分を一切見ません。容量が無駄にされ、カバレッジが1%未満で停滞します。
カバレッジボーナスがもたらすもの
0%カバレッジで1.3倍、50%で1.0倍にスケールダウンします。この後押しはUCB1選択に伝播し、低カバレッジのアームは1回ごとの報酬が低下しても競争力を保ちます。バンディットは偶然ではなく設計によりテールを探索します。
500KドキュメントのGutenbergコーパスでの200Kステップ実行で、カバレッジボーナスは通常、観測カバレッジを~3%(ボーナスなし)から~25-30%(ボーナスあり)に引き上げます。同じ計算量で、触れられるドキュメント数が8〜10倍になります。
トラッキングが格納されている場所
| コンポーネント | 責任 |
|---|---|
microgpt_cuda.cu | 各トレーニングステップごとにドキュメントインデックスを報告 |
training_proxy.py | ソースごとにseen_docsセットを維持 |
training_proxy.py | カバレッジを計算し、バンディトリワードにボーナスを適用 |
training_proxy.py | seen_docs を再起動時も .state.json に永続化 |