AMSBoundとは?意味をわかりやすく簡単に解説

AMSBoundとは?意味をわかりやすく簡単に解説

公開: 更新:
CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座


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_avgexp_avg_sqがそれぞれ一次モーメントと二次モーメントを保持し、torch.clamp関数によって学習率に上限と下限の境界を適用しています。実際の訓練では、optimizer = AMSBound(model.parameters(), lr=0.001, final_lr=0.1)のようにインスタンス化し、損失関数の逆伝播後にoptimizer.step()を呼び出すことでパラメータ更新を実行します。

※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。

ITやプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプが提供する無料で学べるプログラミングスクール講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 配属3ヶ月で30%の生産性向上を実現するいよぎんコンピュータサービスの新人研修に迫る - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する