step method

  1. @override
void step()
override

Performs a single optimization step according to the RMSprop update rule.

Implementation

@override
void step() {
  for (Tensor param in parameters) {
    dynamic s = _s[param]!;
    if (param.value is Vector) {
      Vector valVec = param.value as Vector;
      Vector gradVec = param.grad as Vector;
      Vector sVec = s as Vector;
      for (int i = 0; i < valVec.length; i++) {
        sVec[i] = beta * sVec[i] + (1 - beta) * pow(gradVec[i], 2);
        valVec[i] -= learningRate * gradVec[i] / (sqrt(sVec[i]) + epsilon);
      }
    } else if (param.value is Matrix) {
      Matrix valMat = param.value as Matrix;
      Matrix gradMat = param.grad as Matrix;
      Matrix sMat = s as Matrix;
      for (int r = 0; r < valMat.length; r++) {
        for (int c = 0; c < valMat[0].length; c++) {
          sMat[r][c] = beta * sMat[r][c] + (1 - beta) * pow(gradMat[r][c], 2);
          valMat[r][c] -= learningRate * gradMat[r][c] / (sqrt(sMat[r][c]) + epsilon);
        }
      }
    }
  }
}