LoginSignup
0
0

【用語】AdaGrad、RMSProp、Adam

Last updated at Posted at 2024-05-03

E資格用語の備忘録
シラバス2024 3.深層学習の基礎 (2)深層モデルのための最適化 ⅲ.適応的な学習率を持つアルゴリズム

AdaGrad

各パラメータに対して学習率を適応的に調整することで、スパースな勾配更新問題に対処。
過去の勾配の二乗和の平方根で学習率を割ることで、頻繁に更新されるパラメータの学習率を小さくし、稀に更新されるパラメータの学習率を大きくする。

import numpy as np


# 最適化手法 : AdaGrad
class AdaGrad:
    # 学習率を0.01で初期化
    def __init__(self, lr=0.01):
        self.lr = lr
        self.h = None  # 二乗和を保持する変数

    # パラメータの更新、パラメータと勾配を受け取る
    def update(self, params, grads):
        # 初回、過去の二乗和が無い状態
        if self.h is None:
            # 空の辞書を代入
            self.h = {}
            # 各パラメータのキーと値を順に取得、.items()は辞書のすべてのキーと値のペアを返すメソッド
            for key, val in params.items():
                # valと同じ形状のゼロ配列を生成
                self.h[key] = np.zeros_like(val)

        # パラメータの各キーを順に取得、.keys()は辞書のすべてのキーを返すメソッド
        for key in params.keys():
            # 二乗和
            self.h[key] += grads[key] * grads[key]
            # 学習率をhの平方根を用いてパラメータを更新
            # 1e-7はルートの中か外か、どちらでもよい
            params[key] -= self.lr * grads[key] / (np.sqrt(self.h[key]) + 1e-7)

RMSProp

AdaGradの問題点として、学習が進むにつれて学習率が急激に減少する傾向があるが、RMSPropは過去の勾配の二乗和の指数移動平均を用いて学習率を現在のデータをより重視するよう調整し、より安定した学習が可能となった。
更新が頻繁なパラメータは小さく更新され、更新が滅多に無いパラメータは大きく更新される。

Adam

モーメンタムとRMSPropを組み合わせた手法。
勾配の一次モーメント(平均)と二次モーメント(分散)の指数移動平均を計算し、それぞれのパラメータの学習率を調整する。イテレーションが進むにつれバイアス補正は小さくなる。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0