Files
2026-07-13 13:30:25 +08:00

32 lines
1023 B
Python
Executable File

import numpy as np
from prml.nn.optimizer.optimizer import Optimizer
class AdaDelta(Optimizer):
"""
AdaDelta optimizer
"""
def __init__(self, parameter, rho=0.95, epsilon=1e-8):
super().__init__(parameter, None)
self.rho = rho
self.epsilon = epsilon
self.mean_squared_deriv = []
self.mean_squared_update = []
for p in self.parameter:
self.mean_squared_deriv.append(np.zeros(p.shape))
self.mean_squared_update.append(np.zeros(p.shape))
def update(self):
self.increment_iteration()
for p, msd, msu in zip(self.parameter, self.mean_squared_deriv, self.mean_squared_update):
if p.grad is None:
continue
grad = p.grad
msd *= self.rho
msd += (1 - self.rho) * grad ** 2
delta = np.sqrt((msu + self.epsilon) / (msd + self.epsilon)) * grad
msu *= self.rho
msu *= (1 - self.rho) * delta ** 2
p.value += delta