step method
Performs a single optimization step according to the Adagrad update rule.
Implementation
@override
void step() {
for (Tensor param in parameters) {
dynamic gSum = _gSquaredSum[param]!;
if (param.value is Vector) {
Vector valVec = param.value as Vector;
Vector gradVec = param.grad as Vector;
Vector gSumVec = gSum as Vector;
for (int i = 0; i < valVec.length; i++) {
gSumVec[i] += pow(gradVec[i], 2);
valVec[i] -= learningRate * gradVec[i] / (sqrt(gSumVec[i]) + epsilon);
}
} else if (param.value is Matrix) {
Matrix valMat = param.value as Matrix;
Matrix gradMat = param.grad as Matrix;
Matrix gSumMat = gSum as Matrix;
for (int r = 0; r < valMat.length; r++) {
for (int c = 0; c < valMat[0].length; c++) {
gSumMat[r][c] += pow(gradMat[r][c], 2);
valMat[r][c] -= learningRate * gradMat[r][c] / (sqrt(gSumMat[r][c]) + epsilon);
}
}
}
}
}