@Override
  public double squaredLoss() {
    DoubleMatrix squaredDiff = pow(reconstruct(input).sub(input), 2);
    double loss = squaredDiff.columnSums().sum() / input.rows;
    if (this.useRegularization) {
      loss += 0.5 * l2 * MatrixFunctions.pow(W, 2).sum();
    }

    return loss;
  }