1. Test Modules
  2. Training Characteristics
    1. Input Learning
      1. Gradient Descent
      2. Conjugate Gradient Descent
      3. Limited-Memory BFGS
    2. Results
  3. Results

Subreport: Logs for com.simiacryptus.ref.lang.ReferenceCountingBase

Test Modules

Using Seed 1817936401473551360

Training Characteristics

Input Learning

In this apply, we use a network to learn this target input, given it's pre-evaluated output:

TrainingTester.java:332 executed in 0.00 seconds (0.000 gc):

    return RefArrays.stream(RefUtil.addRef(input_target)).flatMap(RefArrays::stream).map(x -> {
      try {
        return x.prettyPrint();
      } finally {
        x.freeRef();
      }
    }).reduce((a, b) -> a + "\n" + b).orElse("");

Returns

    [ 0.496, -0.128, 0.08, 0.7 ]
    [ 0.496, 0.7, -0.128, 0.08 ]
    [ -0.128, 0.08, 0.7, 0.496 ]
    [ 0.7, 0.496, 0.08, -0.128 ]
    [ 0.496, -0.128, 0.7, 0.08 ]

Gradient Descent

First, we train using basic gradient descent method apply weak line search conditions.

TrainingTester.java:480 executed in 0.20 seconds (0.000 gc):

    IterativeTrainer iterativeTrainer = new IterativeTrainer(trainable.addRef());
    try {
      iterativeTrainer.setLineSearchFactory(label -> new ArmijoWolfeSearch());
      iterativeTrainer.setOrientation(new GradientDescent());
      iterativeTrainer.setMonitor(TrainingTester.getMonitor(history));
      iterativeTrainer.setTimeout(30, TimeUnit.SECONDS);
      iterativeTrainer.setMaxIterations(250);
      iterativeTrainer.setTerminateThreshold(0);
      return iterativeTrainer.run();
    } finally {
      iterativeTrainer.freeRef();
    }
Logging
Reset training subject: 3793448179319
BACKPROP_AGG_SIZE = 3
THREADS = 64
SINGLE_THREADED = false
Initialized CoreSettings = {
"backpropAggregationSize" : 3,
"jvmThreads" : 64,
"singleThreaded" : false
}
Reset training subject: 3793481734931
Constructing line search parameters: GD
th(0)=19.35578439778675;dx=-2.2684288000060622E23
New Minimum: 19.35578439778675 > 0.0
Armijo: th(2.154434690031884)=0.0; dx=-2.9204032000151105E11 evalInputDelta=19.35578439778675
Armijo: th(1.077217345015942)=0.0; dx=-2.920403200015111E11 evalInputDelta=19.35578439778675
Armijo: th(0.3590724483386473)=0.05988640573498945; dx=-2.9204032000159875E11 evalInputDelta=19.29589799205176
Armijo: th(0.08976811208466183)=0.199470066521569; dx=-2.920403200019155E11 evalInputDelta=19.15631433126518
Armijo: th(0.017953622416932366)=0.2740933670812139; dx=-2.920403200021718E11 evalInputDelta=19.081691030705535
Armijo: th(0.002992270402822061)=0.2923289949674891; dx=-2.92040320002251E11 evalInputDelta=19.06345540281926
Armijo: th(4.2746720040315154E-4)=0.29557851208986347; dx=-2.920403200022659E11 evalInputDelta=19.060205885696885
Armijo: th(5.343340005039394E-5)=0.29605562725862217; dx=-2.920403200022682E11 evalInputDelta=19.059728770528128
Armijo: th(5.9370444500437714E-6)=0.29611627278289354; dx=-2.9204032000226843E11 evalInputDelta=19.059668125003856
Armijo: th(5.937044450043771E-7)=0.29612309624445343; dx=-2.920403200022685E11 evalInputDelta=19.059661301542295
Armijo: th(5.397313136403428E-8)=0.2961237854924445; dx=-2.920403200022685E11 evalInputDelta=19.059660612294305
Armijo: th(4.4977609470028565E-9)=0.2961238486735971; dx=-2.920403200022685E11 evalInputDelta=19.05966054911315
Armijo: th(3.4598161130791205E-10)=0.29612385397551266; dx=-2.920403200022685E11 evalInputDelta=19.059660543811237
Armijo: th(2.4712972236279432E-11)=0.2961238543857799; dx=-2.920403200022685E11 evalInputDelta=19.05966054340097
Armijo: th(1.6475314824186289E-12)=11.301014018715163; dx=-8.57670400007774E22 evalInputDelta=8.054770379071586
Armijo: th(1.029707176511643E-13)=19.32557477897162; dx=-2.268428800005872E23 evalInputDelta=0.03020961881512818
Armijo: th(6.057101038303783E-15)=19.353952017036043; dx=-2.2684288000060505E23 evalInputDelta=0.0018323807507059087
MIN ALPHA (3.3650561323909904E-16): th(2.154434690031884)=0.0
Fitness changed from 19.35578439778675 to 0.0
Iteration 1 complete. Error: 0.0 Total: 0.1629; Orientation: 0.0035; Line Search: 0.1098
th(0)=0.0;dx=-0.71540096
Armijo: th(2.154434690031884E-15)=0.0; dx=-0.71540096 evalInputDelta=0.0
Armijo: th(1.077217345015942E-15)=0.0; dx=-0.7154009600000001 evalInputDelta=0.0
MIN ALPHA (3.5907244833864734E-16): th(0.0)=0.0
Fitness changed from 0.0 to 0.0
Static Iteration Total: 0.0252; Orientation: 0.0011; Line Search: 0.0205
Iteration 2 failed. Error: 0.0
Previous Error: 0.0 -> 0.0
Optimization terminated 2
Final threshold in iteration 2: 0.0 (> 0.0) after 0.189s (< 30.000s)

Returns

    0.0

Training Converged

Conjugate Gradient Descent

First, we use a conjugate gradient descent method, which converges the fastest for purely linear functions.

TrainingTester.java:452 executed in 0.10 seconds (0.000 gc):

    IterativeTrainer iterativeTrainer = new IterativeTrainer(trainable.addRef());
    try {
      iterativeTrainer.setLineSearchFactory(label -> new QuadraticSearch());
      iterativeTrainer.setOrientation(new GradientDescent());
      iterativeTrainer.setMonitor(TrainingTester.getMonitor(history));
      iterativeTrainer.setTimeout(30, TimeUnit.SECONDS);
      iterativeTrainer.setMaxIterations(250);
      iterativeTrainer.setTerminateThreshold(0);
      return iterativeTrainer.run();
    } finally {
      iterativeTrainer.freeRef();
    }
Logging
Reset training subject: 3793643249122
Reset training subject: 3793645482059
Constructing line search parameters: GD
F(0.0) = LineSearchPoint{point=PointSample{avg=19.35578439778675}, derivative=-2.2684288000060622E23}
New Minimum: 19.35578439778675 > 0.2961238542896368
F(1.0E-10) = LineSearchPoint{point=PointSample{avg=0.2961238542896368}, derivative=-2.920403200022685E11}, evalInputDelta = -19.059660543497113
New Minimum: 0.2961238542896368 > 0.2961238535234233
F(7.000000000000001E-10) = LineSearchPoint{point=PointSample{avg=0.2961238535234233}, derivative=-2.920403200022685E11}, evalInputDelta = -19.059660544263327
New Minimum: 0.2961238535234233 > 0.2961238481599288
F(4.900000000000001E-9) = LineSearchPoint{point=PointSample{avg=0.2961238481599288}, derivative=-2.9204032000226843E11}, evalInputDelta = -19.05966054962682
New Minimum: 0.2961238481599288 > 0.2961238106154707
F(3.430000000000001E-8) = LineSearchPoint{point=PointSample{avg=0.2961238106154707}, derivative=-2.920403200022685E11}, evalInputDelta = -19.05966058717128
New Minimum: 0.2961238106154707 > 0.29612354780440825
F(2.4010000000000004E-7) = LineSearchPoint{point=PointSample{avg=0.29612354780440825}, derivative=-2.920403200022685E11}, evalInputDelta = -19.05966084998234
New Minimum: 0.29612354780440825 > 0.2961217081340298
F(1.6807000000000003E-6) = LineSearchPoint{point=PointSample{avg=0.2961217081340298}, derivative=-2.9204032000226843E11}, evalInputDelta = -19.05966268965272
New Minimum: 0.2961217081340298 > 0.29610883078724165
F(1.1764900000000001E-5) = LineSearchPoint{point=PointSample{avg=0.29610883078724165}, derivative=-2.9204032000226843E11}, evalInputDelta = -19.05967556699951
New Minimum: 0.29610883078724165 > 0.2960187063014136
F(8.235430000000001E-5) = LineSearchPoint{point=PointSample{avg=0.2960187063014136}, derivative=-2.92040320002268E11}, evalInputDelta = -19.059765691485335
New Minimum: 0.2960187063014136 > 0.2953886631670927
F(5.764801000000001E-4) = LineSearchPoint{point=PointSample{avg=0.2953886631670927}, derivative=-2.920403200022651E11}, evalInputDelta = -19.060395734619657
New Minimum: 0.2953886631670927 > 0.2910183148006119
F(0.004035360700000001) = LineSearchPoint{point=PointSample{avg=0.2910183148006119}, derivative=-2.92040320002245E11}, evalInputDelta = -19.064766082986136
New Minimum: 0.2910183148006119 > 0.2621923584160715
F(0.028247524900000005) = LineSearchPoint{point=PointSample{avg=0.2621923584160715}, derivative=-2.920403200021242E11}, evalInputDelta = -19.093592039370677
New Minimum: 0.2621923584160715 > 0.12683470075882597
F(0.19773267430000002) = LineSearchPoint{point=PointSample{avg=0.12683470075882597}, derivative=-2.9204032000172894E11}, evalInputDelta = -19.22894969702792
New Minimum: 0.12683470075882597 > 0.0
F(1.3841287201) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.920403200015111E11}, evalInputDelta = -19.35578439778675
F(9.688901040700001) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.920403200015111E11}, evalInputDelta = -19.35578439778675
F(67.8223072849) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.9204032000151105E11}, evalInputDelta = -19.35578439778675
F(474.7561509943) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.9204032000151105E11}, evalInputDelta = -19.35578439778675
F(3323.2930569601003) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.920403200015111E11}, evalInputDelta = -19.35578439778675
F(23263.0513987207) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.920403200015111E11}, evalInputDelta = -19.35578439778675
F(162841.3597910449) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.920403200015111E11}, evalInputDelta = -19.35578439778675
F(1139889.5185373144) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.9204032000151105E11}, evalInputDelta = -19.35578439778675
F(7979226.6297612) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.9204032000151105E11}, evalInputDelta = -19.35578439778675
F(5.58545864083284E7) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.920403200015111E11}, evalInputDelta = -19.35578439778675
F(3.909821048582988E8) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.920403200015111E11}, evalInputDelta = -19.35578439778675
F(2.7368747340080914E9) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.920403200015111E11}, evalInputDelta = -19.35578439778675
F(1.915812313805664E10) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.9204032000151105E11}, evalInputDelta = -19.35578439778675
0.0 <= 19.35578439778675
F(1.0E10) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-2.9204032000151105E11}, evalInputDelta = -19.35578439778675
Right bracket at 1.0E10
Converged to right
Fitness changed from 19.35578439778675 to 0.0
Iteration 1 complete. Error: 0.0 Total: 0.0914; Orientation: 0.0013; Line Search: 0.0819
F(0.0) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-0.71540096}
F(1.0E10) = LineSearchPoint{point=PointSample{avg=0.0}, derivative=-0.7154009600000001}, evalInputDelta = 0.0
0.0 <= 0.0
Converged to right
Fitness changed from 0.0 to 0.0
Static Iteration Total: 0.0067; Orientation: 0.0006; Line Search: 0.0043
Iteration 2 failed. Error: 0.0
Previous Error: 0.0 -> 0.0
Optimization terminated 2
Final threshold in iteration 2: 0.0 (> 0.0) after 0.099s (< 30.000s)

Returns

    0.0

Training Converged

Limited-Memory BFGS

Next, we apply the same optimization using L-BFGS, which is nearly ideal for purely second-order or quadratic functions.

TrainingTester.java:509 executed in 0.09 seconds (0.000 gc):

    IterativeTrainer iterativeTrainer = new IterativeTrainer(trainable.addRef());
    try {
      iterativeTrainer.setLineSearchFactory(label -> new ArmijoWolfeSearch());
      iterativeTrainer.setOrientation(new LBFGS());
      iterativeTrainer.setMonitor(TrainingTester.getMonitor(history));
      iterativeTrainer.setTimeout(30, TimeUnit.SECONDS);
      iterativeTrainer.setIterationsPerSample(100);
      iterativeTrainer.setMaxIterations(250);
      iterativeTrainer.setTerminateThreshold(0);
      return iterativeTrainer.run();
    } finally {
      iterativeTrainer.freeRef();
    }
Logging
Reset training subject: 3793745819410
Reset training subject: 3793747406194
Adding measurement 42a3ebb0 to history. Total: 0
LBFGS Accumulation History: 1 points
Constructing line search parameters: GD
Non-optimal measurement 19.35578439778675 < 19.35578439778675. Total: 1
th(0)=19.35578439778675;dx=-2.2684288000060625E23
Adding measurement 7de209e5 to history. Total: 1
New Minimum: 19.35578439778675 > 0.0
Armijo: th(2.154434690031884)=0.0; dx=-2.920403200015111E11 evalInputDelta=19.35578439778675
Non-optimal measurement 0.0 < 0.0. Total: 2
Armijo: th(1.077217345015942)=0.0; dx=-2.920403200015111E11 evalInputDelta=19.35578439778675
Non-optimal measurement 0.05988640573498945 < 0.0. Total: 2
Armijo: th(0.3590724483386473)=0.05988640573498945; dx=-2.9204032000159875E11 evalInputDelta=19.29589799205176
Non-optimal measurement 0.199470066521569 < 0.0. Total: 2
Armijo: th(0.08976811208466183)=0.199470066521569; dx=-2.920403200019155E11 evalInputDelta=19.15631433126518
Non-optimal measurement 0.2740933670812139 < 0.0. Total: 2
Armijo: th(0.017953622416932366)=0.2740933670812139; dx=-2.920403200021718E11 evalInputDelta=19.081691030705535
Non-optimal measurement 0.2923289949674891 < 0.0. Total: 2
Armijo: th(0.002992270402822061)=0.2923289949674891; dx=-2.92040320002251E11 evalInputDelta=19.06345540281926
Non-optimal measurement 0.29557851208986347 < 0.0. Total: 2
Armijo: th(4.2746720040315154E-4)=0.29557851208986347; dx=-2.92040320002266E11 evalInputDelta=19.060205885696885
Non-optimal measurement 0.29605562725862217 < 0.0. Total: 2
Armijo: th(5.343340005039394E-5)=0.29605562725862217; dx=-2.920403200022682E11 evalInputDelta=19.059728770528128
Non-optimal measurement 0.29611627278289354 < 0.0. Total: 2
Armijo: th(5.9370444500437714E-6)=0.29611627278289354; dx=-2.9204032000226843E11 evalInputDelta=19.059668125003856
Non-optimal measurement 0.29612309624445343 < 0.0. Total: 2
Armijo: th(5.937044450043771E-7)=0.29612309624445343; dx=-2.920403200022685E11 evalInputDelta=19.059661301542295
Non-optimal measurement 0.2961237854924445 < 0.0. Total: 2
Armijo: th(5.397313136403428E-8)=0.2961237854924445; dx=-2.920403200022685E11 evalInputDelta=19.059660612294305
Non-optimal measurement 0.2961238486735971 < 0.0. Total: 2
Armijo: th(4.4977609470028565E-9)=0.2961238486735971; dx=-2.9204032000226843E11 evalInputDelta=19.05966054911315
Non-optimal measurement 0.29612385397551266 < 0.0. Total: 2
Armijo: th(3.4598161130791205E-10)=0.29612385397551266; dx=-2.9204032000226843E11 evalInputDelta=19.059660543811237
Non-optimal measurement 0.2961238543857799 < 0.0. Total: 2
Armijo: th(2.4712972236279432E-11)=0.2961238543857799; dx=-2.9204032000226843E11 evalInputDelta=19.05966054340097
Non-optimal measurement 11.301014018715163 < 0.0. Total: 2
Armijo: th(1.6475314824186289E-12)=11.301014018715163; dx=-8.576704000077738E22 evalInputDelta=8.054770379071586
Non-optimal measurement 19.32557477897162 < 0.0. Total: 2
Armijo: th(1.029707176511643E-13)=19.32557477897162; dx=-2.268428800005872E23 evalInputDelta=0.03020961881512818
Non-optimal measurement 19.353952017036043 < 0.0. Total: 2
Armijo: th(6.057101038303783E-15)=19.353952017036043; dx=-2.2684288000060505E23 evalInputDelta=0.0018323807507059087
Non-optimal measurement 0.0 < 0.0. Total: 2
MIN ALPHA (3.3650561323909904E-16): th(2.154434690031884)=0.0
Fitness changed from 19.35578439778675 to 0.0
Iteration 1 complete. Error: 0.0 Total: 0.0635; Orientation: 0.0034; Line Search: 0.0549
Non-optimal measurement 0.0 < 0.0. Total: 2
LBFGS Accumulation History: 2 points
Non-optimal measurement 0.0 < 0.0. Total: 2
th(0)=0.0;dx=-0.7154009600000001
Non-optimal measurement 0.0 < 0.0. Total: 2
Armijo: th(2.154434690031884E-15)=0.0; dx=-0.7154009600000001 evalInputDelta=0.0
Non-optimal measurement 0.0 < 0.0. Total: 2
Armijo: th(1.077217345015942E-15)=0.0; dx=-0.71540096 evalInputDelta=0.0
Non-optimal measurement 0.0 < 0.0. Total: 2
MIN ALPHA (3.5907244833864734E-16): th(0.0)=0.0
Fitness changed from 0.0 to 0.0
Static Iteration Total: 0.0229; Orientation: 0.0013; Line Search: 0.0200
Iteration 2 failed. Error: 0.0
Previous Error: 0.0 -> 0.0
Optimization terminated 2
Final threshold in iteration 2: 0.0 (> 0.0) after 0.087s (< 30.000s)

Returns

    0.0

Training Converged

TrainingTester.java:432 executed in 0.09 seconds (0.000 gc):

    return TestUtil.compare(title + " vs Iteration", runs);
Logging
Plotting range=[0.0, 0.0], [2.0, 1.0]; valueStats=DoubleSummaryStatistics{count=0, sum=0.000000, min=Infinity, average=0.000000, max=-Infinity}
Only 0 points for GD
Only 0 points for CjGD
Only 0 points for LBFGS

Returns

Result

TrainingTester.java:435 executed in 0.00 seconds (0.000 gc):

    return TestUtil.compareTime(title + " vs Time", runs);
Logging
No Data

Results

TrainingTester.java:255 executed in 0.00 seconds (0.000 gc):

    return grid(inputLearning, modelLearning, completeLearning);

Returns

Result

TrainingTester.java:258 executed in 0.00 seconds (0.000 gc):

    return new ComponentResult(null == inputLearning ? null : inputLearning.value,
        null == modelLearning ? null : modelLearning.value, null == completeLearning ? null : completeLearning.value);

Returns

    {"input":{ "LBFGS": { "type": "Converged", "value": 0.0 }, "CjGD": { "type": "Converged", "value": 0.0 }, "GD": { "type": "Converged", "value": 0.0 } }, "model":null, "complete":null}

LayerTests.java:425 executed in 0.00 seconds (0.000 gc):

    throwException(exceptions.addRef());

Results

detailsresult
{"input":{ "LBFGS": { "type": "Converged", "value": 0.0 }, "CjGD": { "type": "Converged", "value": 0.0 }, "GD": { "type": "Converged", "value": 0.0 } }, "model":null, "complete":null}OK
  {
    "result": "OK",
    "performance": {
      "execution_time": "0.892",
      "gc_time": "0.199"
    },
    "created_on": 1586738381253,
    "file_name": "trainingTest",
    "report": {
      "simpleName": "Basic",
      "canonicalName": "com.simiacryptus.mindseye.layers.java.CrossDifferenceLayerTest.Basic",
      "link": "https://github.com/SimiaCryptus/mindseye-java/tree/93db34cedee48c0202777a2b25deddf1dfaf5731/src/test/java/com/simiacryptus/mindseye/layers/java/CrossDifferenceLayerTest.java",
      "javaDoc": ""
    },
    "training_analysis": {
      "input": {
        "LBFGS": {
          "type": "Converged",
          "value": 0.0
        },
        "CjGD": {
          "type": "Converged",
          "value": 0.0
        },
        "GD": {
          "type": "Converged",
          "value": 0.0
        }
      }
    },
    "archive": "s3://code.simiacrypt.us/tests/com/simiacryptus/mindseye/layers/java/CrossDifferenceLayer/Basic/trainingTest/202004133941",
    "id": "cff745fa-38ff-425a-bd94-4fe83a2d2c44",
    "report_type": "Components",
    "display_name": "Comparative Training",
    "target": {
      "simpleName": "CrossDifferenceLayer",
      "canonicalName": "com.simiacryptus.mindseye.layers.java.CrossDifferenceLayer",
      "link": "https://github.com/SimiaCryptus/mindseye-java/tree/93db34cedee48c0202777a2b25deddf1dfaf5731/src/main/java/com/simiacryptus/mindseye/layers/java/CrossDifferenceLayer.java",
      "javaDoc": ""
    }
  }