final int m, NetworkConfiguration conf) {
// calculate the gradients of the weights
for (int i = 0; i < thetaGradients.length; i++) {
DoubleMatrix gradDXA = multiply(deltaX[i + 1], ax[i], true, false, conf);
if (m != 1) {
thetaGradients[i] = gradDXA.divide(m);
} else {
thetaGradients[i] = gradDXA;
}
if (conf.lambda != 0d) {
thetaGradients[i] = thetaGradients[i].add((thetas[i]