backward method

void backward()

Implementation

void backward() {
  List<Value> topo = [];
  Set<Value> visited = {};

  buildTopo(Value v) {
    if (!visited.contains(v)) {
      visited.add(v);
      for (Value child in v._prev) {
        buildTopo(child);
      }
      topo.add(v);
    }
  }

  print("Topology: $topo");

  buildTopo(this);

  // go one variable at a time and apply the chain rule to get its gradient
  grad = 1;
  final reverseOrder = topo.reversed;
  for (Value v in reverseOrder) {
    v._backward();
  }
}