progressive-residual-warmup
残差接続に時間依存的なスケーリングを導入することで、LLMの収束性と下流タスクの性能を向上させます。浅い層が先に学習してから深い層が活性化されるようにすることで、モデルの事前学習時に適用すると、0.4〜4.86のパープレキシティ削減を実現できます。
description の原文を見る
Improves LLM convergence and downstream task performance by introducing time-dependent scaling to residual connections, enabling shallow layers to learn first before deeper layers activate. Apply during model pretraining to achieve 0.4-4.86 perplexity reduction.
SKILL.md 本文
Progressive Residual Warmup: レイヤー単位の活性化スケジューリングを通じた学習安定性の向上
深いトランスフォーマーモデルは、事前学習中の最適化が不安定になる問題を抱えています。全てのレイヤーが初期化から同時に表現を修正するため、下流のレイヤーが上流のレイヤーからの不完全な入力を処理する競合する学習シグナルが発生します。これにより、非効率な収束とモデル全体の深さにおける特徴学習が劣化します。
Progressive Residual Warmup (ProRes) は、残差接続に時間依存のスケーリング係数を導入することでこの問題を解決します。浅いレイヤーは直ちに活性化し、深いレイヤーは徐々に完全な容量に「ウォームアップ」するため、浅いレイヤーは下流のレイヤーが学習を開始する前に安定した表現を確立します。この調整された活性化により、表現の崩壊を防ぎ、最適化の軌跡を改善します。
基本概念
残差接続は通常、以下のように表現されます: x_{l+1} = x_l + F(Norm(x_l))
ProRes はこれを次のように修正します: x_{l+1} = x_l + α(l,t) · F(Norm(x_l))
スケーリング係数 α(l,t) はレイヤーの深さ (l) と学習ステップ (t) に基づいた決定論的な値であり、0 から 1 に段階的に増加する線形スケジュールに従います。初期レイヤーはステップ 1 から α ≈ 1 を見ますが、深いレイヤーは最初はほぼ 0 に留まり、ウォームアップ期間を通じて徐々に増加します。
アーキテクチャの概要
- スケジューリング機構: 深さに基づくレイヤーごとのウォームアップスケジュール。深いレイヤーはより長いウォームアップ期間を持ちます
- 追加パラメータなし: 純粋に決定論的なスケジューリングを使用します。学習可能な α 値を持たないため、パラメータ効率性を維持します
- 勾配フロー: 浅いレイヤーは凍結された深いパスから強い勾配を受け取り特徴を確立し、勾配は徐々に深いレイヤーへ流れます
- 統合ポイント: 標準的なトランスフォーマーアーキテクチャの残差加算ステップへの直接的な修正です
実装ステップ
この基本的な修正は既存の学習ループに綺麗に統合されます。ウォームアップスケジュールを学習ステップごとに 1 回計算される決定論的な乗数として実装します。
# ステップ t での各レイヤーのウォームアップスケーリング係数を計算
def compute_warmup_scale(layer_idx, current_step, total_warmup_steps, num_layers):
"""
layer_idx: 0 から始まるレイヤー位置 (0 = 最浅層、num_layers-1 = 最深層)
current_step: 現在の学習ステップ
total_warmup_steps: 完全なウォームアップのための総ステップ数 (例: 5000)
num_layers: モデルのレイヤー総数
[0, 1] 範囲のスカラーを返す
"""
# 深いレイヤーはより遅いウォームアップ開始点を持つ
layer_warmup_start = (layer_idx / num_layers) * total_warmup_steps
steps_into_layer_warmup = max(0, current_step - layer_warmup_start)
layer_warmup_duration = total_warmup_steps - layer_warmup_start
# 線形スケジュール: alpha は 0 から 1 に移行
alpha = min(1.0, steps_into_layer_warmup / layer_warmup_duration)
return alpha
フォワードパス中にこのスケーリングを適用します。トランスフォーマーブロックについて、残差接続を修正します:
# トランスフォーマーブロックのフォワードメソッド内
def forward(self, x, layer_idx, warmup_alpha):
"""
x: 入力テンソル
layer_idx: これがどのレイヤーか (0 から始まるインデックス)
warmup_alpha: 事前計算されたスケーリング係数 [0, 1]
"""
normed = self.norm(x)
transformed = self.mlp(normed) + self.attn(normed)
# 標準的な残差: x + transformed を返す
# ProRes 残差: x + alpha * transformed を返す
return x + warmup_alpha * transformed
フォワードパスごとに 1 回ウォームアップアルファを計算し、すべてのレイヤーにブロードキャストします:
# 学習ループ内
def training_step(batch, global_step, model, total_warmup_steps):
# モデルは num_layers レイヤーを持つ
num_layers = model.config.num_layers
# このステップの全レイヤーアルファを計算
warmup_alphas = [
compute_warmup_scale(l, global_step, total_warmup_steps, num_layers)
for l in range(num_layers)
]
# ウォームアップスケジューリング付きのフォワードパス
logits = model(batch['input_ids'], warmup_alphas=warmup_alphas)
loss = compute_loss(logits, batch['labels'])
# 標準的なバックプロパゲーションとオプティマイザーステップ
loss.backward()
optimizer.step()
実践的なガイダンス
ハイパーパラメータ:
- 総ウォームアップステップ数: 通常、事前学習ステップの 5-10% (例: 100k+ ステップで学習するモデルの場合 5000-10000)
- 固定のままにするか、モデルサイズに合わせてスケーリングできます。実験では設定全体で堅牢性が示されています
- 代替スケジュール: デフォルトとして warmup_steps = 0.07 * total_training_steps を使用
適用するべき場合:
- 大規模な事前学習 (10B パラメータ以上) で最適化の安定性が重要な場合
- 深いモデル (40+ レイヤー) でレイヤー間の調整が重要な場合
- 収束に問題があるか、パープレキシティの停滞を示しているモデル
適用しないべき場合:
- ファインチューニングフェーズ (事前学習にのみ有益)
- 小さいモデル (<1B パラメータ) で効果が最小限の場合
- 標準的な学習で既に滑らかに収束しているモデル
重要な落とし穴:
- total_warmup_steps が短すぎると効果が消失します (最低 5000+ ステップが必要)
- 他のウォームアップスキーム (学習率ウォームアップ) と同時に適用する場合は慎重な調整が必要です。学習率ウォームアップの開始を約 1000 ステップ遅延させてください
- レイヤー正規化バリアント (LayerNorm vs RMSNorm) との混合。両方と連動しますがスケーリング係数のチューニングが必要な場合があります
実績: 130M-7B モデルスケール全体で、ProRes は一貫して 0.4-4.86 ポイントのパープレキシティ削減を実現し、下流の推論タスクで平均 1.27% の改善を達成しました。
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- ADu2021
- リポジトリ
- ADu2021/skillXiv
- ライセンス
- MIT
- 最終更新
- 2026/3/26
Source: https://github.com/ADu2021/skillXiv / ライセンス: MIT
関連スキル
agent-browser
AI エージェント向けのブラウザ自動化 CLI です。ウェブサイトとの対話が必要な場合に使用します。ページ遷移、フォーム入力、ボタンクリック、スクリーンショット取得、データ抽出、ウェブアプリのテスト、ブラウザ操作の自動化など、あらゆるブラウザタスクに対応できます。「ウェブサイトを開く」「フォームに記入する」「ボタンをクリックする」「スクリーンショットを取得する」「ページからデータを抽出する」「このウェブアプリをテストする」「サイトにログインする」「ブラウザ操作を自動化する」といった要求や、プログラマティックなウェブ操作が必要なタスクで起動します。
anyskill
AnySkill — あなたのプライベート・スキルクラウド。GitHubを基盤としたリポジトリからエージェントスキルを管理、同期、動的にロードできます。自然言語でクラウドスキルを検索し、オンデマンドでプロンプトを自動ロード、カスタムスキルのアップロードと共有、スキルバンドルの一括インストールが可能です。OpenClaw、Antigravity、Claude Code、Cursorに対応しています。
engram
AIエージェント向けの永続的なメモリシステムです。バグ修正、意思決定、発見、設定変更の後はmem_saveを使用してください。ユーザーが「覚えている」「記憶している」と言及した場合、または以前のセッションと重複する作業を開始する際はmem_searchを使用します。セッション終了前にmem_session_summaryを使用して、コンテキストを保持してください。
skyvern
AI駆動のブラウザ自動化により、任意のウェブサイトを自動化できます。フォーム入力、データ抽出、ファイルダウンロード、ログイン、複数ステップのワークフロー実行など、ユーザーがウェブサイトと連携する必要があるときに使用します。Skyvernは、LLMとコンピュータビジョンを活用して、未知のサイトも自動操作可能です。Python SDK、TypeScript SDK、REST API、MCPサーバー、またはCLIを通じて統合できます。
pinchbench
PinchBenchベンチマークを実行して、OpenClawエージェントの実世界タスクにおけるパフォーマンスを評価できます。モデルの機能テスト、モデル間の比較、ベンチマーク結果のリーダーボード提出、またはOpenClawのセットアップがカレンダー、メール、リサーチ、コーディング、複数ステップのワークフローにどの程度対応しているかを確認する際に使用します。
openui
OpenUIとOpenUI Langを使用してジェネレーティブUIアプリを構築できます。これらはLLM生成インターフェースのためのトークン効率的なオープン標準です。OpenUI、@openuidev、ジェネレーティブUI、LLMからのストリーミングUI、AI向けコンポーネントライブラリ、またはjson-render/A2UIの置き換えについて述べる際に使用します。スキャフォルディング、defineComponent、システムプロンプト、Renderer、およびOpenUI Lang出力のデバッグに対応しています。