AI・機械学習
上級

LAMB Optimizer(ラムオプティマイザ)

Layer-wise Adaptive Moments optimizer for Batch training の略。大バッチ分散学習向けに設計されたオプティマイザで、レイヤーごとにパラメータのノルムと更新量のノルムの比率で学習率を適応的に調整する。Google が 2019 年に提案し、BERT-Large を TPUv3 1,024 基・バッチサイズ 64K で 76 分で学習する記録を達成した。

0 回閲覧
0 いいね

LAMB Optimizer とは

LAMB(Layer-wise Adaptive Moments optimizer for Batch training)は、2019 年に Google の Yang You らが論文「Large Batch Optimization for Deep Learning: Training BERT in 76 Minutes」で提案したオプティマイザである。通常、バッチサイズを増大させると学習の品質が低下する(large batch problem)が、LAMB はレイヤーごとの適応的学習率スケーリングによりこの問題を解決した。

Large Batch Problem とは

分散学習では GPU 数を増やしてバッチサイズを拡大し、学習時間を短縮する。しかし、バッチサイズが大きくなると以下の問題が発生する:

  • 一般化性能の低下: 大バッチは損失関数の鋭いミニマ(sharp minima)に収束しやすく、テスト性能が劣化
  • 学習率の調整困難: Linear Scaling Rule(バッチ N 倍→学習率 N 倍)は一定規模以上で破綻
  • 勾配の分散低下: 大バッチでは勾配推定の分散が小さくなり、暗黙の正則化効果が失われる

LAMB はこれらの問題を、レイヤーごとの信頼比率(trust ratio)で学習率を動的に調整することで克服する。

LAMB の更新則

LAMB は LARS(Layer-wise Adaptive Rate Scaling)のアイデアを Adam に統合した手法:

  1. Adam 更新量の計算: r = m̂/(√v̂ + ε) + λ·θ — AdamW と同じ
  2. 信頼比率の計算: φ(θ) = ||θ|| / ||r|| — パラメータノルムと更新量ノルムの比率
  3. レイヤー適応更新: θ ← θ - η·φ(θ)·r — レイヤーごとに信頼比率でスケーリング

信頼比率 φ(θ) がキーで、更新量 r がパラメータ θ に対して相対的に大きすぎる場合は抑制し、小さすぎる場合は増幅する。これにより、異なるスケールのレイヤー間で均一な相対的更新量を維持する。

バッチサイズと性能の関係

バッチサイズ使用 GPU (TPUv3)学習時間オプティマイザ性能 (SQuAD F1)
2568〜72 時間Adam90.9
8K256〜5 時間Adam89.7 (低下)
8K256〜4 時間LAMB90.8
32K1,024〜100 分LAMB90.6
64K1,024〜76 分LAMB90.4

Adam ではバッチサイズ 8K で性能が 1.2 ポイント低下するが、LAMB ではほぼ維持。バッチサイズ 64K(通常の 256 倍)でも 0.5 ポイントの低下に抑えた。

LARS との関係

LAMB の前身である LARS(Layer-wise Adaptive Rate Scaling)は SGD+Momentum ベースで、主に CNN の大バッチ学習に使われていた:

特性LARSLAMB
ベースオプティマイザSGD+MomentumAdam
対象モデルCNN (ResNet等)Transformer (BERT等)
適応的学習率なしあり(Adam由来)
信頼比率
最大バッチサイズ32K64K+

LAMB は LARS の信頼比率を Adam の適応的学習率と組み合わせることで、Transformer アーキテクチャでも大バッチ学習を可能にした。

実装例

# NVIDIA apex ライブラリの FusedLAMB
from apex.optimizers import FusedLAMB

optimizer = FusedLAMB(
    model.parameters(),
    lr=6e-3,            # 大バッチでは高い学習率
    betas=(0.9, 0.999),
    weight_decay=0.01,
    max_grad_norm=1.0    # 勾配クリッピング
)

# Warmup は全ステップの 1-2.5% が推奨
scheduler = WarmupLinearSchedule(
    optimizer,
    warmup_steps=total_steps * 0.01,
    t_total=total_steps
)

DeepSpeed では deepspeed.ops.lamb.FusedLamb として CUDA 最適化版が提供されている。

適用条件と限界

LAMB が有効な条件:

  • GPU/TPU 数が 256 基以上: 少数 GPU ではバッチサイズ拡大のメリットが薄い
  • 事前学習フェーズ: ファインチューニングではバッチサイズが小さいため効果が限定的
  • Transformer 系モデル: CNN では LARS の方が実績がある
  • 十分な計算資源: 大バッチ化により総 FLOPS は変わらないが、通信コストが増加

限界:

  • 小バッチでは不要: バッチサイズ 4K 以下では AdamW で十分
  • ハイパーパラメータ: 大バッチ用の学習率(1e-3〜6e-3)は通常と大きく異なり、Warmup の設計も重要
  • メモリ: Adam ベースのため、メモリ使用量は AdamW と同等(Lion より多い)

よくある質問(FAQ)

Q: LAMB はどのような規模の学習で使うべきですか?

A: GPU/TPU 256 基以上・バッチサイズ 8K 以上の大規模分散学習で真価を発揮する。個人やスタートアップの 8-16 GPU 環境では AdamW で十分であり、LAMB を使う利点は少ない。Google、Meta、NVIDIA など大規模クラスタを持つ組織の事前学習が主な適用先。

Q: LAMB と AdamW でファインチューニングの性能は変わりますか?

A: ほぼ変わらない。ファインチューニングでは通常バッチサイズ 16-256 程度で、LAMB の大バッチ適応機構が活かされない。ファインチューニングでは AdamW(lr=1e-5〜5e-5)が推奨される。

Q: LAMB の学習率はなぜ AdamW より高いのですか?

A: 大バッチ学習では勾配推定の分散が小さくなり、各ステップの更新が保守的になりすぎる。LAMB は信頼比率によるレイヤー適応とともに高い学習率(1e-3〜6e-3)を使うことで、保守的な更新を補正し学習速度を維持する。Linear Scaling Rule(バッチ N 倍→学習率 N 倍)を超えた適応的スケーリングが LAMB の本質的な貢献。

まとめ

  • LAMB はレイヤーごとの信頼比率で大バッチ学習時の品質低下を防止
  • BERT-Large を TPUv3 1,024 基・バッチサイズ 64K で 76 分学習を達成
  • 256 基以上の大規模クラスタでの事前学習が主な適用先
  • 小バッチ(4K 以下)やファインチューニングでは AdamW で十分
  • NVIDIA apex / DeepSpeed に CUDA 最適化版が実装済み