HSigmoidLoss

    层次sigmoid(hierarchical sigmoid),该OP通过构建一个分类二叉树来降低计算复杂度,主要用于加速语言模型的训练过程。

    该OP建立的二叉树中每个叶节点表示一个类别(单词),每个非叶子节点代表一个二类别分类器(sigmoid)。对于每个类别(单词),都有一个从根节点到它的唯一路径,hsigmoid累加这条路径上每个非叶子节点的损失得到总损失。

    相较于传统softmax的计算复杂度

    ,hsigmoid可以将计算复杂度降至

    HSigmoidLoss - 图1

    ,其中 NN 表示类别总数(字典大小)。

    若使用自定义树结构,请将参数 is_custom 设置为True,并完成以下步骤(以语言模型为例):

    1. 使用自定义词典来建立二叉树,每个叶结点都应该是词典中的单词;

    2. 建立一个dict类型数据结构,用于存储 单词id -> 该单词叶结点至根节点路径 的映射,即路径表 path_table 参数;

    3. 每个单词都已经有自己的路径和路径编码,当对于同一批输入进行操作时,可以同时传入一批路径和路径编码进行运算。

    • input (Tensor): - 输入的Tensor,维度是[N, D], 其中N是batch size, D是特征尺寸。

    • label (Tensor): - 标签,维度是[N, 1]。

    • output (Tensor): - 输入 和标签 label 间的 hsigmoid loss 损失。输出Loss的维度为[N, 1]。