之前已经提到的哈夫曼树法可以做到分层softmax,已经十分有效了,但是由于哈夫曼树结构比较复杂,因此我们常常采用另一种较为简单的方法——负采样。
    负采样法其实理解起来并不难,首先我要提到的是负采样法和哈夫曼树法一样都是需要用在输出层的,用来代替softmax层,之所以要提出这些方法去代替softmax层是因为softmax层输出的的维度和词库维度相当,几乎到达了几十万的级别,因此计算的权重数量过大,我们需要对此进行优化,负采样法就是其中相当有效的方法。

    • 负采样法需要从负例中选出很少的负例子集作为负例输出,在softmax中,正例只有一个,负例有多达十万例,因此我们需要对此进行优化,负采样法就是从这多达十万例的负例中选出极少数的负例,我们以取出5个负例为例,再加上之前的正例,那我们输出层的维度就变成了6。我们选取负例子集的时候常常采用带权重采样法,因为词典中的词在语料库中出现的频率有高有低,事实上其是uniform分布,词频大的区域越有可能被选中,词频小的区域越不可能被选中,被选出的负例子集被称为NEG(w)。
    • 需要特别提出的是,在负采样法中,我们不能使用softmax函数,因为softmax函数要求几十万个维度输出的概率加和为1,但如果我们取出了极少数负例样本,因此如果做softmax,加和几乎不可能为1,因此我们不能采用softmax法。事实上我们常常采用多个二分类做多分类,我们在这六个类别中分别用sigmoid函数做二分类。事实上,我们取出的负例样本子集很容易是那些词频高的词,我们希望最终的结果朝着正确的方向发展,于是我们将所有的做多个二分类的概率相乘,注意这些相乘的概率都是正例的概率,形成了最大似然函数,然后我们将最大似然函数转化为对数最大似然函数。然后对这个对数最大似然函数求导,得到其梯度,然后我们使用梯度上升法,公式就如之前我们提到的哈夫曼树后来的优化过程一样,这里就不再赘述了。