In a normal multi-class setup we use softmax over last layer because we know that the sum of probability of the classes is 1 as only one of these class is the actual answer. After that we pass the output to a suitable loss function like BCE (binary cross entropy).
For multi-label we know that each class can be the output so the sum of probability of these classes will not necessarily be 1! However, the individual probability of each class still need to be between 0 and 1 to be a valid probability distribution. Therefore, simply apply a sigmoid layer on top of each class output and pass this to BCE loss which treats each class as a separate mini BCE loss and finally adds these losses across all the classes to get the final BCE.
For e.g., in Pytorch you just apply sigmoid and pass it to the BCE such that the dimensions of the output passed to BCE layer is (batch size, num of total class).
Look at the BCE loss section in the pytorch docs, where the dimensions of the input to BCE loss is (N, *) which implies the dimension which I just pointed out: https://pytorch.org/docs/stable/nn.html