class
Rprop
extends
OptimizerRprop(params: Iterable[Parameter] | Iterable[dict[str, object]], lr: float = 0.01, etas: tuple[float, float] = (0.5, 1.2), step_sizes: tuple[float, float] = (1e-06, 50))Resilient Backpropagation optimizer.
Rprop ignores gradient magnitudes and adapts a per-parameter step size based only on the sign of the gradient. If the sign of the gradient does not change between steps the step size is increased; if the sign reverses the step size is decreased:
The parameter update is then:
Parameters
paramsiterable of Parameter or iterable of dictParameters to optimise, or a list of parameter-group dicts.
lrfloat= 0.01Initial step size for each parameter (default:
1e-2).etastuple of float= (0.5, 1.2)Multiplicative decrease and increase factors
(default:
(0.5, 1.2)).step_sizestuple of float= (1e-06, 50)Minimum and maximum allowed step sizes
(default:
(1e-6, 50)).Attributes
param_groupslist of dictParameter groups with keys
"params", "lr", "eta_minus",
"eta_plus", "step_min", and "step_max".defaultsdictDefault hyperparameter values.
Notes
Rprop is particularly effective for full-batch training because the sign-based update is well-defined when gradients are deterministic. For stochastic mini-batch training RMSprop or Adam are generally preferred.
Examples
>>> import lucid.optim as optim
>>> optimizer = optim.Rprop(model.parameters(), lr=1e-2, etas=(0.5, 1.2))
>>> optimizer.zero_grad()
>>> loss.backward()
>>> optimizer.step()Methods (2)
dunder
__init__
→None__init__(params: Iterable[Parameter] | Iterable[dict[str, object]], lr: float = 0.01, etas: tuple[float, float] = (0.5, 1.2), step_sizes: tuple[float, float] = (1e-06, 50))Initialise the Rprop. See the class docstring for parameter semantics.
fn
step
→Tensor | Nonestep(closure: _OptimizerClosure = None)Perform a single Rprop step.