softmax
Softmax(归一化指数函数)是输出层函数,它激活我们每个节点作为神经网络计算的最后一步。 它用于计算至少2种不同类型的常见word embedding:word2vec和FastText。 此外,它是神经网络结构的许多情况下的激活步骤,以及sigmoid和tanh函数。 softmax的定义是:
其中,激活输出向量的每个元素都是单词在给定输入单词I的词汇表中等于第j个单词的概率。 此外,值得一提的是,输出向量的元素之和等于1,并且它的每个元素都映射到一个范围[0,1]中。
这种算法的计算复杂度是以一种简单的方式计算的,它是我们词汇O(V)的大小。 正如实践所表明的,我们可以通过使用二叉树结构来充分减少它,那么为什么我们不呢?
Hierarchical softmax
这一方法背后的主要动机是,我们评估的是V以2为底的对数,而不是V:
这是计算复杂度和算法所需操作数的急剧变化。 我们用二叉树来做,其中叶子表示单词的概率;更具体地说,叶子索引j是第j个单词的概率,并且在输出Softmax向量中位置为j。
每个单词都可以通过从根通过内部节点的路径到达,这表示沿着这条路的概率聚集处。 只要我们计算的路径只是这些概率聚集函数的乘积,那么这些值就是通过使用简单的函数产生的:
在我们的特定情况下,x是多少? 它是根据我们正在使用的单词的输入和输出矢量表示的点积计算得出的:
其中n(w, j)是从根到我们正在计算概率聚集的w的路径上的第j个节点。