Yes, each output tensor will be attached to a computation graph, which involves the same encoder instance. If you calculate some losses based on these outputs and call backward on them, the gradients will be accumulated in the parameters of encoder:
encoder = nn.Linear(1, 1)

decoders = nn.ModuleList()
for _ in range(3):
    decoders.append(nn.Linear(1, 1))

x = torch.randn(1, 1)
intermediate = encoder(x)

output0 = decoders[0](intermediate)
output1 = decoders[1](intermediate)
output2 = decoders[2](intermediate)

output0.backward(retain_graph=True)
print(encoder.weight.grad)
output1.backward(retain_graph=True)
print(encoder.weight.grad)
output2.backward()
print(encoder.weight.grad)