hi
import torch
data = torch.randn(100,2,requires_grad=True)
data.shape # > 

optim = torch.optim.SGD([data], 0.1)
def loss(eta):
    return torch.sum(eta*torch.log(eta))

for i in range(1000):
    optim.zero_grad()
    eta = torch.nn.functional.softmax(data,-1)
    l = loss(eta)
    l.backward()
    optim.step()
    if i%10 == 0:
        print(i,l.item())

i see no problem.
it converges to all eta equal to 0.5.