idx = torch.tensor([1, 2])
        a = embedding.weight.clone() @ W.t()  # weight must be cloned for this to be differentiable
        b = embedding(idx) @ W.t()  # modifies weight in-place
        out = (a.unsqueeze(0) + b.unsqueeze(1))
        loss = out.sigmoid().prod()
        loss.backward()
Examples:
  >>> # an Embedding module containing 10 tensors of size 3
  >>> embedding = nn.Embedding(10, 3)
  >>> # a batch of 2 samples of 4 indices each
  >>> input = torch.LongTensor([[1, 2, 4, 5], [4, 3, 2, 9]])
  >>> embedding(input)
  tensor([[[-0.0251, -1.6902,  0.7172],
           [-0.6431,  0.0748,  0.6969],
           [ 1.4970,  1.3448, -0.9685],
           [-0.3677, -2.7265, -0.1685]],

          [[ 1.4970,  1.3448, -0.9685],
           [ 0.4362, -0.4004,  0.9400],
           [-0.6431,  0.0748,  0.6969],
           [ 0.9124, -2.3616,  1.1151]]])


  >>> # example with padding_idx
  >>> embedding = nn.Embedding(10, 3, padding_idx=0)
