BendMlAutograd.gbwd: def of bend-ml-autograd@0.1.1.0 Import: import bend-ml-autograd@0.1.1.0/main.bend as BendMlAutograd Lines 185-201 of bend-ml-autograd@0.1.1.0/main.bend: https://jend.leeeet.dev/read.txt?path=bend-ml-autograd@0.1.1.0/main.bend&start_line=185&end_line=201 import Base # g is the gradient arriving at the node; acc accumulates the gradient of each variable def gbwd(e: G, +env: List<&2, F32>, +g: F32, acc: List<&2, F32>) -> List<&2, F32>: match e: case GCst{c}: acc case GVar{+i}: acc_add(acc, i, g) case GAdd{a, b}: gbwd(b, env, g, gbwd(a, env, g, acc)) case GMul{+a, +b}: gbwd(b, env, (g * gval(a, env) : F32), gbwd(a, env, (g * gval(b, env) : F32), acc)) case GRelu{+a}: gbwd(a, env, (g * relu_d(gval(a, env)) : F32), acc) case GTanh{+a}: gbwd(a, env, (g * tanh_d(gval(a, env)) : F32), acc) case GExp{+a}: gbwd(a, env, (g * F32.exp(gval(a, env)) : F32), acc) Uses (9): https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=F32 https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=F32.exp https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=F32.mul https://jend.leeeet.dev/definition.txt?path=Base/base.bend&name=List https://jend.leeeet.dev/definition.txt?path=bend-ml-autograd@0.1.1.0/main.bend&name=G https://jend.leeeet.dev/definition.txt?path=bend-ml-autograd@0.1.1.0/main.bend&name=acc_add https://jend.leeeet.dev/definition.txt?path=bend-ml-autograd@0.1.1.0/main.bend&name=gval https://jend.leeeet.dev/definition.txt?path=bend-ml-autograd@0.1.1.0/main.bend&name=relu_d https://jend.leeeet.dev/definition.txt?path=bend-ml-autograd@0.1.1.0/main.bend&name=tanh_d