code: @Override
      public void backward() {
          Tensor x = modInX.getOutput();
          double w_k = modInW.getOutput().getValue(k);
          {
              Tensor tmp = new Tensor(yAdj); // copy
              tmp.multiply(w_k);
              modInX.getOutputAdj().elemAdd(tmp);
          }
          {
              Tensor tmp = new Tensor(yAdj); // copy
              tmp.elemMultiply(x);
              modInW.getOutputAdj().addValue(k, tmp.getSum());
          }
      }
docs: Backward pass:
  dG/dx_i += dG/dy_i dy_i/dx_i = dG/dy_i w_k
  dG/dw_k += \sum_{i=1}^n dG/dy_i dy_i/dw_k = \sum_{i=1}^n dG/dy_i x_i