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

37 lines
1.0 KiB
Python
Executable File

import numpy as np
from prml.nn.optimizer.optimizer import Optimizer
class RMSProp(Optimizer):
"""
RMSProp optimizer
initial
msg = 0
update rule
msg = rho * msg + (1 - rho) * gradient ** 2
param -= learning_rate * gradient / (sqrt(msg) + eps)
"""
def __init__(self, parameter, learning_rate=1e-3, rho=0.9, epsilon=1e-8):
super().__init__(parameter, learning_rate)
self.rho = rho
self.epsilon = epsilon
self.mean_squared_grad = []
for p in self.parameter:
self.mean_squared_grad.append(np.zeros(p.shape))
def update(self):
"""
update parameters
"""
self.increment_iteration()
for p, msg in zip(self.parameter, self.mean_squared_grad):
if p.grad is None:
continue
grad = p.grad
msg *= self.rho
msg += (1 - self.rho) * grad ** 2
p.value -= (
self.learning_rate * grad / (np.sqrt(msg) + self.epsilon)
)