AMSBoundとは
AMSBoundとは、「適応的モーメント推定法(Adaptive Moment Estimation)」と「境界付き重み更新」を組み合わせた最適化アルゴリズムであり、深層学習におけるニューラルネットワークの学習を効率化する手法です。このアルゴリズムは2019年に提案され、Adamオプティマイザの改良版として開発されました。
AMSBoundは勾配降下法の一種であり、学習率を動的に調整しながらパラメータを更新することで、学習の初期段階では高速な収束を実現し、後期段階では安定した最適化を可能にします。
AMSBoundの数学的定式化と更新則
AMSBoundのパラメータ更新は、一次モーメント推定値と二次モーメント推定値を用いて行われ、これらの推定値は指数移動平均によって計算されます。具体的には、勾配の移動平均mと勾配の二乗の移動平均vを管理し、バイアス補正を適用した後に学習率の境界制約を課します。
更新式では、時刻tにおけるパラメータθの更新量が、バイアス補正された一次モーメントm̂と二次モーメントv̂の平方根で除算され、さらに学習率の上限と下限が動的に設定されます。この境界制約により、学習の後期段階でAdamが持つ過度な学習率の減衰を防ぎ、確率的勾配降下法(SGD)のような安定した収束特性を獲得できます。
| パラメータ | 説明 |
|---|---|
| β1 | 一次モーメントの減衰率(通常0.9) |
| β2 | 二次モーメントの減衰率(通常0.999) |
| α | 初期学習率 |
| ε | 数値安定性のための微小値 |
| γ | 学習率の下限境界値 |
PyTorchにおけるAMSBound実装例
PyTorchでAMSBoundを実装する場合、torch.optimモジュールを拡張してカスタムオプティマイザクラスを作成する必要があり、既存のAdamオプティマイザをベースに境界制約のロジックを追加します。以下は基本的な実装パターンを示すコード例です。
import torch
from torch.optim import Optimizer
class AMSBound(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(AMSBound, self).__init__(params, defaults)
def step(self):
for group in self.param_groups:
for p in group['params']:
if p.grad is None:
continue
grad = p.grad.data
state = self.state[p]
if len(state) == 0:
state['step'] = 0
state['exp_avg'] = torch.zeros_like(p.data)
state['exp_avg_sq'] = torch.zeros_like(p.data)
exp_avg, exp_avg_sq = state['exp_avg'], state['exp_avg_sq']
beta1, beta2 = group['betas']
state['step'] += 1
exp_avg.mul_(beta1).add_(grad, alpha=1-beta1)
exp_avg_sq.mul_(beta2).addcmul_(grad, grad, value=1-beta2)
bias_correction1 = 1 - beta1 ** state['step']
bias_correction2 = 1 - beta2 ** state['step']
step_size = group['lr'] / bias_correction1
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 / (exp_avg_sq.sqrt() / bias_correction2**0.5 + group['eps']),
min=lower_bound, max=upper_bound)
p.data.add_(exp_avg, alpha=-step_size)
このコードでは、exp_avgとexp_avg_sqがそれぞれ一次モーメントと二次モーメントを保持し、torch.clamp関数によって学習率に上限と下限の境界を適用しています。実際の訓練では、optimizer = AMSBound(model.parameters(), lr=0.001, final_lr=0.1)のようにインスタンス化し、損失関数の逆伝播後にoptimizer.step()を呼び出すことでパラメータ更新を実行します。
※上記コンテンツの内容やソースコードは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エージェント製品版を先行利用開始、建設現場の工程管理属人化を解消へ
