AMSBoundとは
AMSBoundとは、「適応的モーメント推定法(Adaptive Moment Estimation)」と「境界付き重み更新」を組み合わせた最適化アルゴリズムであり、深層学習におけるニューラルネットワークの学習を効率化する手法です。このアルゴリズムは2019年に提案され、Adamオプティマイザの改良版として開発されました。
AMSBoundは勾配降下法の一種であり、学習率を動的に調整しながらパラメータを更新することで、学習の初期段階では高速な収束を実現し、後期段階では安定した最適化を可能にします。
【PR】プログラミングや生成AIを無料で学べる「コードキャンプフリー」
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やプログラミングに関するコラム
【PHP】define関数による定数の使い方や定義方法を解説
Illustrator(イラストレーター)で様々な図形の作り方を解説
CSSのstickyプロパティでWebサイトに固定要素を実装する方法
Dockerfileの基本的な使い方とビルド方法を簡単に解説
PHPのコメントの書き方とDocCommentの使い方を簡単に解説
【初心者向け】データベースの基本的な作り方を簡単に解説
【PHP】PDOでMySQLに接続する方法を簡単に解説
【WordPress】絞り込み検索機能を自作する方法をサンプルコードと併せて解説
【PHP】コードの動作確認をローカル・オンラインで行う方法
MacでWordPressのローカル環境を構築する方法を解説
ITやプログラミングに関するニュース
平塚信用金庫と寒川町が人材雇用対策セミナーを開催、外国人採用や従業員定着を支援
株式会社スーツが人事労務向け無料セミナーを開催、プロジェクト管理による生産性向上を解説
メルテックス株式会社が無料Webセミナーを開催、ドライフィルムかす処理の課題解決策を解説
株式会社Liquidがパスキー導入ウェビナーを開催、成功のポイントや実装の勘所を解説
一般社団法人デジタルサロン協会がAI実践セミナーを開催、多忙な経営者の業務効率化を支援
株式会社エスプールブリッジが無料ウェビナー開催、ミドルシニア社員のキャリア自律を支援
NECネクサソリューションズが請求業務デジタル化のウェビナーを開催、働き方改革とコスト削減を解説
株式会社イマジナがインナーブランディングセミナーを開催、Z世代の育成課題解決へ
アチーブメント株式会社が戦略的経営計画セミナーを開催、3か年計画の策定を支援
VACANCE VIETNAMが飲食店向けウェビナー開催、ベトナム市場と事業計画の基本を解説


