AdaBoundとは
AdaBoundとは、適応的学習率を持つ最適化アルゴリズムの一種で、AdamとSGDの長所を組み合わせた手法です。学習の初期段階では、Adamのように適応的に学習率を調整し、後期段階ではSGDのように一定の学習率に収束させることで、高速な収束と優れた汎化性能を両立させます。
この手法は2019年に発表され、深層学習における最適化問題の解決策として注目を集めました。学習率の上限と下限を動的に設定することで、Adamの過学習傾向とSGDの収束速度の遅さという両者の欠点を克服しています。
AdaBoundの学習率調整メカニズム
AdaBoundは学習の進行に伴い、学習率の変動幅を段階的に狭めていく仕組みを採用しています。具体的には、下限値と上限値を時間ステップの関数として定義し、訓練が進むにつれてこれらの境界が徐々に狭まっていきます。
境界関数は学習率がゼロに近づきすぎることを防ぎ、同時に過度に大きな値を取らないよう制限します。この二重の制約により、訓練の安定性を保ちながら、効率的なパラメータ更新が可能となります。
| パラメータ | 説明 |
|---|---|
| α(アルファ) | 基本学習率 |
| β1、β2 | モーメント推定の減衰率 |
| γ(ガンマ) | 境界収束速度 |
| final_lr | 最終学習率の目標値 |
Pythonでの実装コード例
AdaBoundをPyTorchで実装する場合、既存のオプティマイザクラスを継承して独自の更新ルールを定義します。以下のコードは基本的な実装例を示しており、学習率のクリッピング処理が中心的な役割を果たしています。
import torch
from torch.optim import Optimizer
class AdaBound(Optimizer):
def __init__(self, params, lr=1e-3, betas=(0.9, 0.999),
final_lr=0.1, gamma=1e-3, eps=1e-8):
defaults = dict(lr=lr, betas=betas, final_lr=final_lr,
gamma=gamma, eps=eps)
super(AdaBound, self).__init__(params, defaults)
def step(self):
for group in self.param_groups:
for p in group['params']:
grad = p.grad.data
state = self.state[p]
if len(state) == 0:
state['step'] = 0
state['m'] = torch.zeros_like(p.data)
state['v'] = torch.zeros_like(p.data)
m, v = state['m'], state['v']
beta1, beta2 = group['betas']
state['step'] += 1
m.mul_(beta1).add_(grad, alpha=1-beta1)
v.mul_(beta2).addcmul_(grad, grad, value=1-beta2)
step_size = group['lr']
final_lr = group['final_lr'] * group['lr']
lower_bound = final_lr * (1 - 1/(group['gamma']*state['step']+1))
upper_bound = final_lr * (1 + 1/(group['gamma']*state['step']))
step_size = torch.clamp(step_size/torch.sqrt(v).add_(group['eps']),
lower_bound, upper_bound)
p.data.add_(m * step_size, alpha=-1)
このコードでは、モーメンタムと二次モーメントを計算した後、クリップ処理によって学習率を適切な範囲に制限しています。ステップ数が増加するにつれて境界値が狭まり、最終的にはSGDに近い挙動を示すようになるのが特徴です。
※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。
ITやプログラミングに関するコラム
PythonをWebで実行する方法
共通テスト「情報Ⅰ」2年目で変わる、日本の教育と学び方
gitでブランチ(branch)を切り替える方法
git cloneでブランチを指定する方法
64GBのメモリが必要な人・不要な人の特徴
PCを再起動するコマンド一覧
CapsLock以外で大文字になる原因【Windows編】
パソコンで大文字になるのを解除する方法
面白いAIの活用事例を業界別に紹介
Gitでcommit(コミット)を取り消す方法
ITやプログラミングに関するニュース
サイボウズがkintone AIを正式提供、β版から約1年を経てクレジット制を導入
ロゼッタのラクヤクAIがCSRドラフト作成期間を90%以上短縮、従来4週間を約2日に
AI CROSSが不動産業界向け生成AI伴走支援を開始、アスコットの業務AI実装を実践サポート
日本情報クリエイトが「オーナー提案AIロボⅡ」売買査定を刷新、月1万円からW査定が回数無制限に
Wur株式会社がAI新規事業診断サービス「MVP事業診断レポート」をリリース、12の質問で事業構想を約10分で分析
バトンズがM&A専門家向け「AI概要書」β版を提供開始、企業概要書のドラフトを最速3分で自動生成
SCSKが観光DXサービス「Connexia」を開発、首里城公園でNFT活用の周遊促進が始動
Verdent AI発表、エンジニア不要でソフトウェアを構築する「AIエンジニアリングチーム」が登場
ゼネラルBREXAテクノロジーが外食・小売向けAIサービス「aimana」を開発、店長の意思決定をデータで支援
田中組がKencopa工程AIエージェント製品版を先行利用開始、建設現場の工程管理属人化を解消へ
