Adadeltaとは?意味をわかりやすく簡単に解説
公開:
Adadeltaとは
Adadeltaとは、深層学習における最適化アルゴリズムの一種で、学習率を自動的に調整する適応的勾配降下法です。2012年にMatthew Zeilerによって提案されたこの手法は、Adagradの欠点である学習率の過度な減衰問題を解決するために開発されました。
この最適化手法の最大の特徴は、学習率のハイパーパラメータを明示的に設定する必要がない点にあります。過去の勾配情報を指数移動平均で保持し、パラメータ更新量の履歴も同時に管理することで、各パラメータに対して適切な学習率を動的に計算します。
Adadeltaの更新式と計算プロセス
Adadeltaのパラメータ更新は、「勾配の二乗和」と「パラメータ更新量の二乗和」を指数移動平均で管理する仕組みで実行されます。減衰率ρ(通常0.9や0.95)を用いて、時刻tにおける勾配の二乗の移動平均E[g²]ₜを計算し、これにより各パラメータの更新スケールを決定します。
| 計算ステップ | 数式 |
|---|---|
| 勾配の二乗平均 | E[g²]ₜ = ρE[g²]ₜ₋₁ + (1-ρ)g²ₜ |
| 更新量の計算 | Δθₜ = -(√(E[Δθ²]ₜ₋₁ + ε) / √(E[g²]ₜ + ε))gₜ |
| 更新量の二乗平均 | E[Δθ²]ₜ = ρE[Δθ²]ₜ₋₁ + (1-ρ)Δθ²ₜ |
| パラメータ更新 | θₜ₊₁ = θₜ + Δθₜ |
実装においては、ε(イプシロン)という微小な定数(通常1e-6程度)を分母に加えることで、ゼロ除算を防ぎます。この計算プロセスにより、学習の初期段階では大きな更新を行い、学習が進むにつれて、更新幅が自動的に調整される特性を実現しています。
Pythonによる実装コード例
Adadeltaの実装では、勾配の二乗平均と更新量の二乗平均を保持する2つの変数を管理する必要があります。以下のコードはNumPyを使用したシンプルな実装例で、各パラメータに対して独立した適応的学習率を計算します。
import numpy as np
class Adadelta:
def __init__(self, rho=0.95, epsilon=1e-6):
self.rho = rho
self.epsilon = epsilon
self.E_g2 = None
self.E_delta2 = None
def update(self, params, grads):
if self.E_g2 is None:
self.E_g2 = np.zeros_like(params)
self.E_delta2 = np.zeros_like(params)
self.E_g2 = self.rho * self.E_g2 + (1 - self.rho) * grads**2
delta = -np.sqrt(self.E_delta2 + self.epsilon) / np.sqrt(self.E_g2 + self.epsilon) * grads
self.E_delta2 = self.rho * self.E_delta2 + (1 - self.rho) * delta**2
params += delta
return params
このコードではE_g2で勾配の二乗平均を、E_delta2で更新量の二乗平均を追跡しています。TensorFlowやPyTorchなどの深層学習フレームワークでは、tf.keras.optimizers.Adadeltaやtorch.optim.Adadeltaとして標準実装が提供されており、これらを直接利用することで効率的な学習を実行できます。
※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。
左へフリックで次のページ、右へフリックで前のページに戻れます左右の矢印ボタン、左右のスワイプで移動できます





