@danielsimonjr/mathts-autograd 0.3.19 → 0.3.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -2
- package/dist/dual-tensor.d.ts.map +1 -1
- package/dist/forward-grad.d.ts +2 -2
- package/dist/index.js +88 -103
- package/dist/shape.d.ts +5 -0
- package/dist/shape.d.ts.map +1 -0
- package/dist/tape.d.ts.map +1 -1
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -12,8 +12,9 @@ npm install @danielsimonjr/mathts-autograd
|
|
|
12
12
|
|
|
13
13
|
## What it provides
|
|
14
14
|
|
|
15
|
-
- Forward mode via `DualTensor` (dual numbers).
|
|
16
|
-
- Reverse mode via
|
|
15
|
+
- Forward mode via `DualTensor` (dual numbers, `core` dual rules).
|
|
16
|
+
- Reverse mode via `Tape`, `TapedTensor`, `grad`, `valueAndGrad`, `jacobian`,
|
|
17
|
+
`derivative`, `reverseGrad` (see `docs/api/autograd.md`).
|
|
17
18
|
- Gradients of tensor-valued expressions for optimization / ML workloads.
|
|
18
19
|
|
|
19
20
|
## License
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dual-tensor.d.ts","sourceRoot":"","sources":["../src/dual-tensor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"dual-tensor.d.ts","sourceRoot":"","sources":["../src/dual-tensor.ts"],"names":[],"mappings":"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"}
|
package/dist/forward-grad.d.ts
CHANGED
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
* makes this work for the implemented ops). v0.2.0 may broaden via decorator
|
|
18
18
|
* instrumentation.
|
|
19
19
|
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
20
|
+
* When fn uses only add/sub/mul/scale it stays on the traced path.
|
|
21
|
+
*
|
|
22
22
|
*
|
|
23
23
|
* @packageDocumentation
|
|
24
24
|
*/
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
import { Tensor, tensorEig, tensorSvd } from "@danielsimonjr/mathts-tensor";
|
|
2
2
|
import { DUAL_UNARY_RULES } from "@danielsimonjr/mathts-core";
|
|
3
|
+
//#region src/shape.ts
|
|
4
|
+
function assertSameShape(aShape, bShape, typeName, op) {
|
|
5
|
+
if (aShape.length !== bShape.length || !aShape.every((v, i) => v === bShape[i])) throw new Error(`${typeName}.${op}: shape mismatch [${aShape}] vs [${bShape}]`);
|
|
6
|
+
}
|
|
7
|
+
//#endregion
|
|
3
8
|
//#region src/dual-tensor.ts
|
|
4
9
|
var DualTensor = class DualTensor {
|
|
5
10
|
shape;
|
|
@@ -189,7 +194,7 @@ var DualTensor = class DualTensor {
|
|
|
189
194
|
return new DualTensor(this.shape, p, t);
|
|
190
195
|
}
|
|
191
196
|
checkSameShape(other, op) {
|
|
192
|
-
|
|
197
|
+
assertSameShape(this.shape, other.shape, "DualTensor", op);
|
|
193
198
|
}
|
|
194
199
|
};
|
|
195
200
|
//#endregion
|
|
@@ -431,12 +436,11 @@ var TapedTensor = class TapedTensor {
|
|
|
431
436
|
return new TapedTensor(yShape, new Float64Array(yData), this.tape, id);
|
|
432
437
|
}
|
|
433
438
|
checkSameShape(other, op) {
|
|
434
|
-
|
|
439
|
+
assertSameShape(this.shape, other.shape, "TapedTensor", op);
|
|
435
440
|
}
|
|
436
441
|
sum(axis, opts) {
|
|
437
442
|
const outT = this.toPrimalTensor().sum(axis, opts);
|
|
438
443
|
const inputShape = [...this.shape];
|
|
439
|
-
const inputSize = this.primal.length;
|
|
440
444
|
const keepDims = opts?.keepDims ?? false;
|
|
441
445
|
const axes = _resolveAxes(axis, this.shape.length);
|
|
442
446
|
const axisSet = new Set(axes);
|
|
@@ -444,30 +448,13 @@ var TapedTensor = class TapedTensor {
|
|
|
444
448
|
const { id } = this.tape.record([this.id], outT.data.length, (outputGrad) => {
|
|
445
449
|
const outShape = [...outT.shape];
|
|
446
450
|
const outStrides = Tensor.rowMajorStrides(outShape);
|
|
447
|
-
|
|
448
|
-
const inCoords = new Array(inputShape.length).fill(0);
|
|
449
|
-
for (let n = 0; n < inputSize; n++) {
|
|
450
|
-
let outFlat = 0;
|
|
451
|
-
let outDim = 0;
|
|
452
|
-
for (let k = 0; k < inputShape.length; k++) if (axisSet.has(k)) {
|
|
453
|
-
if (keepDims) outDim++;
|
|
454
|
-
} else {
|
|
455
|
-
outFlat += inCoords[k] * outStrides[outDim];
|
|
456
|
-
outDim++;
|
|
457
|
-
}
|
|
458
|
-
thisGradSlot[n] += outputGrad[outFlat];
|
|
459
|
-
for (let k = inputShape.length - 1; k >= 0; k--) {
|
|
460
|
-
if (++inCoords[k] < inputShape[k]) break;
|
|
461
|
-
inCoords[k] = 0;
|
|
462
|
-
}
|
|
463
|
-
}
|
|
451
|
+
addReducedBroadcast(thisGradSlot, outputGrad, inputShape, axisSet, keepDims, outStrides);
|
|
464
452
|
});
|
|
465
453
|
return new TapedTensor([...outT.shape], new Float64Array(outT.data), this.tape, id);
|
|
466
454
|
}
|
|
467
455
|
mean(axis, opts) {
|
|
468
456
|
const outT = this.toPrimalTensor().mean(axis, opts);
|
|
469
457
|
const inputShape = [...this.shape];
|
|
470
|
-
const inputSize = this.primal.length;
|
|
471
458
|
const keepDims = opts?.keepDims ?? false;
|
|
472
459
|
const axes = _resolveAxes(axis, this.shape.length);
|
|
473
460
|
const axisSet = new Set(axes);
|
|
@@ -476,22 +463,7 @@ var TapedTensor = class TapedTensor {
|
|
|
476
463
|
const { id } = this.tape.record([this.id], outT.data.length, (outputGrad) => {
|
|
477
464
|
const outShape = [...outT.shape];
|
|
478
465
|
const outStrides = Tensor.rowMajorStrides(outShape);
|
|
479
|
-
|
|
480
|
-
for (let n = 0; n < inputSize; n++) {
|
|
481
|
-
let outFlat = 0;
|
|
482
|
-
let outDim = 0;
|
|
483
|
-
for (let k = 0; k < inputShape.length; k++) if (axisSet.has(k)) {
|
|
484
|
-
if (keepDims) outDim++;
|
|
485
|
-
} else {
|
|
486
|
-
outFlat += inCoords[k] * outStrides[outDim];
|
|
487
|
-
outDim++;
|
|
488
|
-
}
|
|
489
|
-
thisGradSlot[n] += outputGrad[outFlat] / N;
|
|
490
|
-
for (let k = inputShape.length - 1; k >= 0; k--) {
|
|
491
|
-
if (++inCoords[k] < inputShape[k]) break;
|
|
492
|
-
inCoords[k] = 0;
|
|
493
|
-
}
|
|
494
|
-
}
|
|
466
|
+
addReducedBroadcast(thisGradSlot, outputGrad, inputShape, axisSet, keepDims, outStrides, N);
|
|
495
467
|
});
|
|
496
468
|
return new TapedTensor([...outT.shape], new Float64Array(outT.data), this.tape, id);
|
|
497
469
|
}
|
|
@@ -541,74 +513,12 @@ var TapedTensor = class TapedTensor {
|
|
|
541
513
|
return new TapedTensor([...outT.shape], new Float64Array(outT.data), this.tape, id);
|
|
542
514
|
}
|
|
543
515
|
max(axis, opts) {
|
|
544
|
-
const
|
|
545
|
-
|
|
546
|
-
const keepDims = opts?.keepDims ?? false;
|
|
547
|
-
const axes = _resolveAxes(axis, this.shape.length);
|
|
548
|
-
const axisSet = new Set(axes);
|
|
549
|
-
const primalData = new Float64Array(this.primal);
|
|
550
|
-
const thisGradSlot = this.tape.getInputGrad(this.id);
|
|
551
|
-
const { id } = this.tape.record([this.id], outT.data.length, (outputGrad) => {
|
|
552
|
-
const outShape = [...outT.shape];
|
|
553
|
-
const outStrides = Tensor.rowMajorStrides(outShape);
|
|
554
|
-
const argmaxSlot = new Int32Array(outT.data.length).fill(-1);
|
|
555
|
-
const inCoords = new Array(inputShape.length).fill(0);
|
|
556
|
-
for (let n = 0; n < primalData.length; n++) {
|
|
557
|
-
let outFlat = 0;
|
|
558
|
-
let outDim = 0;
|
|
559
|
-
for (let k = 0; k < inputShape.length; k++) if (axisSet.has(k)) {
|
|
560
|
-
if (keepDims) outDim++;
|
|
561
|
-
} else {
|
|
562
|
-
outFlat += inCoords[k] * outStrides[outDim];
|
|
563
|
-
outDim++;
|
|
564
|
-
}
|
|
565
|
-
if (argmaxSlot[outFlat] === -1 || primalData[n] > primalData[argmaxSlot[outFlat]]) argmaxSlot[outFlat] = n;
|
|
566
|
-
for (let k = inputShape.length - 1; k >= 0; k--) {
|
|
567
|
-
if (++inCoords[k] < inputShape[k]) break;
|
|
568
|
-
inCoords[k] = 0;
|
|
569
|
-
}
|
|
570
|
-
}
|
|
571
|
-
for (let outFlat = 0; outFlat < outT.data.length; outFlat++) {
|
|
572
|
-
const winner = argmaxSlot[outFlat];
|
|
573
|
-
if (winner !== -1) thisGradSlot[winner] += outputGrad[outFlat];
|
|
574
|
-
}
|
|
575
|
-
});
|
|
576
|
-
return new TapedTensor([...outT.shape], new Float64Array(outT.data), this.tape, id);
|
|
516
|
+
const primalT = this.toPrimalTensor();
|
|
517
|
+
return scatterArgExtrema(this, primalT.max(axis, opts), axis, opts, (candidate, incumbent) => candidate > incumbent);
|
|
577
518
|
}
|
|
578
519
|
min(axis, opts) {
|
|
579
|
-
const
|
|
580
|
-
|
|
581
|
-
const keepDims = opts?.keepDims ?? false;
|
|
582
|
-
const axes = _resolveAxes(axis, this.shape.length);
|
|
583
|
-
const axisSet = new Set(axes);
|
|
584
|
-
const primalData = new Float64Array(this.primal);
|
|
585
|
-
const thisGradSlot = this.tape.getInputGrad(this.id);
|
|
586
|
-
const { id } = this.tape.record([this.id], outT.data.length, (outputGrad) => {
|
|
587
|
-
const outShape = [...outT.shape];
|
|
588
|
-
const outStrides = Tensor.rowMajorStrides(outShape);
|
|
589
|
-
const argminSlot = new Int32Array(outT.data.length).fill(-1);
|
|
590
|
-
const inCoords = new Array(inputShape.length).fill(0);
|
|
591
|
-
for (let n = 0; n < primalData.length; n++) {
|
|
592
|
-
let outFlat = 0;
|
|
593
|
-
let outDim = 0;
|
|
594
|
-
for (let k = 0; k < inputShape.length; k++) if (axisSet.has(k)) {
|
|
595
|
-
if (keepDims) outDim++;
|
|
596
|
-
} else {
|
|
597
|
-
outFlat += inCoords[k] * outStrides[outDim];
|
|
598
|
-
outDim++;
|
|
599
|
-
}
|
|
600
|
-
if (argminSlot[outFlat] === -1 || primalData[n] < primalData[argminSlot[outFlat]]) argminSlot[outFlat] = n;
|
|
601
|
-
for (let k = inputShape.length - 1; k >= 0; k--) {
|
|
602
|
-
if (++inCoords[k] < inputShape[k]) break;
|
|
603
|
-
inCoords[k] = 0;
|
|
604
|
-
}
|
|
605
|
-
}
|
|
606
|
-
for (let outFlat = 0; outFlat < outT.data.length; outFlat++) {
|
|
607
|
-
const winner = argminSlot[outFlat];
|
|
608
|
-
if (winner !== -1) thisGradSlot[winner] += outputGrad[outFlat];
|
|
609
|
-
}
|
|
610
|
-
});
|
|
611
|
-
return new TapedTensor([...outT.shape], new Float64Array(outT.data), this.tape, id);
|
|
520
|
+
const primalT = this.toPrimalTensor();
|
|
521
|
+
return scatterArgExtrema(this, primalT.min(axis, opts), axis, opts, (candidate, incumbent) => candidate < incumbent);
|
|
612
522
|
}
|
|
613
523
|
norm(opts) {
|
|
614
524
|
const p = opts?.p ?? 2;
|
|
@@ -1118,6 +1028,81 @@ var TapedTensor = class TapedTensor {
|
|
|
1118
1028
|
};
|
|
1119
1029
|
}
|
|
1120
1030
|
};
|
|
1031
|
+
function addReducedBroadcast(thisGradSlot, outputGrad, inputShape, axisSet, keepDims, outStrides, divideBy) {
|
|
1032
|
+
let inputSize = 1;
|
|
1033
|
+
for (let i = 0; i < inputShape.length; i++) inputSize *= inputShape[i];
|
|
1034
|
+
const rank = inputShape.length;
|
|
1035
|
+
const inCoords = new Array(rank).fill(0);
|
|
1036
|
+
if (divideBy === void 0) {
|
|
1037
|
+
for (let n = 0; n < inputSize; n++) {
|
|
1038
|
+
let outFlat = 0;
|
|
1039
|
+
let outDim = 0;
|
|
1040
|
+
for (let k = 0; k < rank; k++) if (axisSet.has(k)) {
|
|
1041
|
+
if (keepDims) outDim++;
|
|
1042
|
+
} else {
|
|
1043
|
+
outFlat += inCoords[k] * outStrides[outDim];
|
|
1044
|
+
outDim++;
|
|
1045
|
+
}
|
|
1046
|
+
thisGradSlot[n] += outputGrad[outFlat];
|
|
1047
|
+
for (let k = rank - 1; k >= 0; k--) {
|
|
1048
|
+
if (++inCoords[k] < inputShape[k]) break;
|
|
1049
|
+
inCoords[k] = 0;
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
return;
|
|
1053
|
+
}
|
|
1054
|
+
const nReduce = divideBy;
|
|
1055
|
+
for (let n = 0; n < inputSize; n++) {
|
|
1056
|
+
let outFlat = 0;
|
|
1057
|
+
let outDim = 0;
|
|
1058
|
+
for (let k = 0; k < rank; k++) if (axisSet.has(k)) {
|
|
1059
|
+
if (keepDims) outDim++;
|
|
1060
|
+
} else {
|
|
1061
|
+
outFlat += inCoords[k] * outStrides[outDim];
|
|
1062
|
+
outDim++;
|
|
1063
|
+
}
|
|
1064
|
+
thisGradSlot[n] += outputGrad[outFlat] / nReduce;
|
|
1065
|
+
for (let k = rank - 1; k >= 0; k--) {
|
|
1066
|
+
if (++inCoords[k] < inputShape[k]) break;
|
|
1067
|
+
inCoords[k] = 0;
|
|
1068
|
+
}
|
|
1069
|
+
}
|
|
1070
|
+
}
|
|
1071
|
+
function scatterArgExtrema(self, outT, axis, opts, better) {
|
|
1072
|
+
const inputShape = [...self.shape];
|
|
1073
|
+
const keepDims = opts?.keepDims ?? false;
|
|
1074
|
+
const axes = _resolveAxes(axis, self.shape.length);
|
|
1075
|
+
const axisSet = new Set(axes);
|
|
1076
|
+
const primalData = new Float64Array(self.primal);
|
|
1077
|
+
const thisGradSlot = self.tape.getInputGrad(self.id);
|
|
1078
|
+
const { id } = self.tape.record([self.id], outT.data.length, (outputGrad) => {
|
|
1079
|
+
const outShape = [...outT.shape];
|
|
1080
|
+
const outStrides = Tensor.rowMajorStrides(outShape);
|
|
1081
|
+
const winnerSlot = new Int32Array(outT.data.length).fill(-1);
|
|
1082
|
+
const inCoords = new Array(inputShape.length).fill(0);
|
|
1083
|
+
for (let n = 0; n < primalData.length; n++) {
|
|
1084
|
+
let outFlat = 0;
|
|
1085
|
+
let outDim = 0;
|
|
1086
|
+
for (let k = 0; k < inputShape.length; k++) if (axisSet.has(k)) {
|
|
1087
|
+
if (keepDims) outDim++;
|
|
1088
|
+
} else {
|
|
1089
|
+
outFlat += inCoords[k] * outStrides[outDim];
|
|
1090
|
+
outDim++;
|
|
1091
|
+
}
|
|
1092
|
+
const winner = winnerSlot[outFlat];
|
|
1093
|
+
if (winner === -1 || better(primalData[n], primalData[winner])) winnerSlot[outFlat] = n;
|
|
1094
|
+
for (let k = inputShape.length - 1; k >= 0; k--) {
|
|
1095
|
+
if (++inCoords[k] < inputShape[k]) break;
|
|
1096
|
+
inCoords[k] = 0;
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
1099
|
+
for (let outFlat = 0; outFlat < outT.data.length; outFlat++) {
|
|
1100
|
+
const winner = winnerSlot[outFlat];
|
|
1101
|
+
if (winner !== -1) thisGradSlot[winner] += outputGrad[outFlat];
|
|
1102
|
+
}
|
|
1103
|
+
});
|
|
1104
|
+
return new TapedTensor([...outT.shape], new Float64Array(outT.data), self.tape, id);
|
|
1105
|
+
}
|
|
1121
1106
|
function _svdBackward(U, s, Vt, dU, dS, dVt, m, n, k) {
|
|
1122
1107
|
const REL_TOL = 1e-10;
|
|
1123
1108
|
let sMax = 0;
|
package/dist/shape.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shape.d.ts","sourceRoot":"","sources":["../src/shape.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAC7B,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,EAC7B,QAAQ,EAAE,MAAM,EAChB,EAAE,EAAE,MAAM,GACT,IAAI,CAIN"}
|
package/dist/tape.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tape.d.ts","sourceRoot":"","sources":["../src/tape.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,MAAM,EAAE,KAAK,EAAwB,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"tape.d.ts","sourceRoot":"","sources":["../src/tape.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@danielsimonjr/mathts-autograd",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.21",
|
|
4
4
|
"description": "Forward + reverse-mode automatic differentiation for MathTS rank-N Tensor",
|
|
5
5
|
"author": "Daniel Simon Jr.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -42,8 +42,8 @@
|
|
|
42
42
|
}
|
|
43
43
|
},
|
|
44
44
|
"dependencies": {
|
|
45
|
-
"@danielsimonjr/mathts-core": "^0.
|
|
46
|
-
"@danielsimonjr/mathts-tensor": "^0.2.
|
|
45
|
+
"@danielsimonjr/mathts-core": "^0.21.0",
|
|
46
|
+
"@danielsimonjr/mathts-tensor": "^0.2.27"
|
|
47
47
|
},
|
|
48
48
|
"devDependencies": {
|
|
49
49
|
"@types/node": "^26.4.0",
|