Calculates virtual adversarial loss for the given input.

Virtual adversarial loss is defined as the distance between the embedding of the input and that of a slightly perturbed input. Optimizing this loss helps smooth models locally.

Reference paper: https://arxiv.org/pdf/1704.03976.pdf

input_layer a dense tensor for input features whose first dimension is the training batch size.
embedding_fn a unary function that computes the embedding for the given input_layer input.
virtual_adv_config an nsl.configs.VirtualAdvConfig object that specifies parameters for generating adversarial examples and computing the adversarial loss.
embedding (optional) a dense tensor representing the embedding of input_layer. If not provided, it will be calculated as embedding_fn(input_layer).

virtual_adv_loss a float32 denoting the virtural adversarial loss.