跳转至

fedavgm

FedAvgm(learning_rate=1, momentum=0.0)

Bases: FedOpt

Implementation based on https://arxiv.org/abs/1909.06335.

Attributes:

Name Type Description
learning_rate float

learning rate. Defaults to 1.

momentum float

momentum factor. Defaults to 0.0.

Source code in iflearner/business/homo/strategy/opt/fedavgm.py
def __init__(
    self,
    learning_rate: float = 1,
    momentum: float = 0.0,
) -> None:

    super().__init__(learning_rate=learning_rate)
    self._momentum_vector: Optional[Dict[str, npt.NDArray[np.float32]]] = None
    self._momentum = momentum

step(pseudo_gradient)

a step to optimize parameters of server model with pseudo gradient.

Parameters:

Name Type Description Default
pseudo_gradient Dict[str, npt.NDArray[np.float32]]

the pseudo gradient of server model

required

Returns:

Type Description
Dict[str, npt.NDArray[np.float32]]

Dict[str, npt.NDArray[np.float32]]: parameters of server model after step

Source code in iflearner/business/homo/strategy/opt/fedavgm.py
def step(
    self, pseudo_gradient: Dict[str, npt.NDArray[np.float32]]
) -> Dict[str, npt.NDArray[np.float32]]:

    """a step to optimize parameters of server model with pseudo gradient.

    Args:
        pseudo_gradient (Dict[str, npt.NDArray[np.float32]]): the pseudo gradient of server model

    Returns:
        Dict[str, npt.NDArray[np.float32]]: parameters of server model after step
    """

    if self._momentum_vector is None:
        self._momentum_vector = dict()
        for key, value in pseudo_gradient.items():
            self._momentum_vector[key] = -value
    else:
        for key, value in pseudo_gradient.items():
            self._momentum_vector[key] = (
                self._momentum * self._momentum_vector[key] - value
            )
    pseudo_gradient = self._momentum_vector

    new_params = dict()
    for key, value in self._params.items():
        new_params[key] = value.reshape((-1)) - self._lr * pseudo_gradient[key]
        self._params[key] = new_params[key].reshape(value.shape)

    return new_params