class_docstr: Implement of large margin arc distance with intertopk and subcenter:
  Reference:
      MULTI-QUERY MULTI-HEAD ATTENTION POOLING AND INTER-TOPK PENALTY
      FOR SPEAKER VERIFICATION.
      https://arxiv.org/pdf/2110.05042.pdf
      Sub-center ArcFace: Boosting Face Recognition by
      Large-Scale Noisy Web Faces.
      https://ibug.doc.ic.ac.uk/media/uploads/documents/eccv_1445.pdf
  Args:
      in_features: size of each input sample
      out_features: size of each output sample
      scale: norm of input feature
      margin: margin
      cos(theta + margin)
      K: number of sub-centers
      k_top: number of hard samples
      mp: margin penalty of hard samples
      do_lm: whether do large margin finetune
code: def update(self, margin=0.2):
      self.margin = margin
      self.cos_m = math.cos(margin)
      self.sin_m = math.sin(margin)
      self.th = math.cos(math.pi - margin)
      self.mm = math.sin(math.pi - margin) * margin
      self.m = self.margin
      self.mmm = 1.0 + math.cos(math.pi - margin)
  
      # hard sample margin is increasing as margin
      if margin > 0.001:
          mp = self.mp * (margin / 0.2)
      else:
          mp = 0.0
      self.cos_mp = math.cos(mp)
      self.sin_mp = math.sin(mp)
  
file_path: espnet/espnet2/spk/loss/aamsoftmax_subcenter_intertopk.py
imports: import math
  import torch
  import torch.nn
  import torch.nn.functional
  from espnet2.spk.loss.abs_loss import AbsLoss
label_desc: Use image node_id 2 for calling the ArcMarginProduct_intertopk_subcenter obj's underlying member method code with example usage: obj.update(margin) without return types