public boolean optimize(int numIterations, int numBatches, int[] batchAssignments) { int numParameters = maxable.getNumParameters(); double[] parameters = new double[numParameters]; double[] gradient = new double[numParameters]; maxable.getParameters(parameters); maxable.getParameters(parameters); double initialValue = maxable.getBatchValue (batch, batchAssignments); oldApproxValue += initialValue; maxable.getBatchValueGradient(gradient,batch,batchAssignments); maxable.setParameters(parameters); double finalValue = maxable.getBatchValue (batch, batchAssignments); approxValue += finalValue;
public boolean optimize(int numIterations, int numBatches, int[] batchAssignments) { int numParameters = maxable.getNumParameters(); double[] parameters = new double[numParameters]; double[] gradient = new double[numParameters]; maxable.getParameters(parameters); maxable.getParameters(parameters); double initialValue = maxable.getBatchValue (batch, batchAssignments); oldApproxValue += initialValue; maxable.getBatchValueGradient(gradient,batch,batchAssignments); maxable.setParameters(parameters); double finalValue = maxable.getBatchValue (batch, batchAssignments); approxValue += finalValue;
public boolean optimize(int numIterations, int numBatches, int[] batchAssignments) { int numParameters = maxable.getNumParameters(); double[] parameters = new double[numParameters]; double[] gradient = new double[numParameters]; maxable.getParameters(parameters); maxable.getParameters(parameters); double initialValue = maxable.getBatchValue (batch, batchAssignments); oldApproxValue += initialValue; maxable.getBatchValueGradient(gradient,batch,batchAssignments); maxable.setParameters(parameters); double finalValue = maxable.getBatchValue (batch, batchAssignments); approxValue += finalValue;
private void computeHessianProduct(Optimizable.ByBatchGradient maxable, double[] parameters, int batchIndex, int[] batchAssignments, double[] currentGradient, double[] vector, double[] result) { int numParameters = maxable.getNumParameters(); double eps = 1.0e-6; double[] epsGradient = new double[numParameters]; double[] oldParameters = new double[numParameters]; // adjust parameters by (eps * vector) and recompute gradient System.arraycopy(parameters,0,oldParameters,0,numParameters); MatrixOps.plusEquals(parameters, vector, eps); maxable.setParameters(parameters); maxable.getBatchValueGradient(epsGradient, batchIndex, batchAssignments); // restore old parameters maxable.setParameters(oldParameters); // calculate Hessian product for (int index = 0; index < result.length; index++) { result[index] = (-epsGradient[index] - currentGradient[index]) / eps; } }
private void computeHessianProduct(Optimizable.ByBatchGradient maxable, double[] parameters, int batchIndex, int[] batchAssignments, double[] currentGradient, double[] vector, double[] result) { int numParameters = maxable.getNumParameters(); double eps = 1.0e-6; double[] epsGradient = new double[numParameters]; double[] oldParameters = new double[numParameters]; // adjust parameters by (eps * vector) and recompute gradient System.arraycopy(parameters,0,oldParameters,0,numParameters); MatrixOps.plusEquals(parameters, vector, eps); maxable.setParameters(parameters); maxable.getBatchValueGradient(epsGradient, batchIndex, batchAssignments); // restore old parameters maxable.setParameters(oldParameters); // calculate Hessian product for (int index = 0; index < result.length; index++) { result[index] = (-epsGradient[index] - currentGradient[index]) / eps; } }
private void computeHessianProduct(Optimizable.ByBatchGradient maxable, double[] parameters, int batchIndex, int[] batchAssignments, double[] currentGradient, double[] vector, double[] result) { int numParameters = maxable.getNumParameters(); double eps = 1.0e-6; double[] epsGradient = new double[numParameters]; double[] oldParameters = new double[numParameters]; // adjust parameters by (eps * vector) and recompute gradient System.arraycopy(parameters,0,oldParameters,0,numParameters); MatrixOps.plusEquals(parameters, vector, eps); maxable.setParameters(parameters); maxable.getBatchValueGradient(epsGradient, batchIndex, batchAssignments); // restore old parameters maxable.setParameters(oldParameters); // calculate Hessian product for (int index = 0; index < result.length; index++) { result[index] = (-epsGradient[index] - currentGradient[index]) / eps; } }