code: @Override
      public void backward() {
          Tensor depAdj = depIn.getOutputAdj();
          int n = depAdj.getDims()[1];
          for (int v=0; v<yAdj.varBeliefs.length; v++) {
              if (yAdj.varBeliefs[v] != null) {
                  Var var = y.varBeliefs[v].getVars().get(0);
                  if (var instanceof LinkVar) {
                      LinkVar link = (LinkVar) var;
                      int p = link.getParent();
                      int c = link.getChild();
                      int pp = EdgeScores.getTensorParent(p, c);
                      assert p < n && c < n;
                      
                      // Add the adjoint of b(e_{p,c} = True).
                      depAdj.add(yAdj.varBeliefs[v].getValue(LinkVar.TRUE), pp, c);
                      // Add the adjoint of b(e_{p,c} = False)
                      depAdj.subtract(yAdj.varBeliefs[v].getValue(LinkVar.FALSE), pp, c);
                  }
              }
          }
      }
docs: Backward pass:
  dG/dm_i += dG/dt_i*dt_i/dm_i + dG/df_i*df_i/dm_i
  = dG/dt_i - dG/df_i