美文网首页
UniformML:trick1 负采样Negative Sam

UniformML:trick1 负采样Negative Sam

作者: uniform斯坦 | 来源:发表于2019-03-19 00:39 被阅读0次

在训练word2vec的时候,会介绍到两种模型优化方式:

  1. Hierarchical Softmax
  2. Negative Sampling

由于softmax在实际训练过程中需要构建一棵树,在比较少出现的类别对应的节点比较深,实际工程也比较麻烦,所以目前很多模型优化方法都采用负采样的方式,今天我们就简单介绍这种方法。

以word2vec为例子,已知中心词w为我们预测的词语,对应上下文的信息context(w)则为2c长度的词语,我们希望通过context(w)来预测w。

我们随机采样n个和w不相等的负样本,这些负样本和w共同组成一组训练样本,对于正例,我们希望最大化概率:
max P(context(w^+), w^+)
对于负例,我们希望最小化概率
min P(context(w^+), w^{-}_i)
i=1,2,...,n
统一用最大化形式表示得到
max\ P(context(w^+), w^+)\prod_{i=1}^{n}(1-P(context(w^+), w^-_i))
我们假设正例用i=0表示,则上述公式可以表示为:

L = P(context(w_0),w_0)\prod_{i=1}^{n}{(1-P(context(w_0),w_i))}
= \sigma(x_{w_0}^T\theta^{w_0})\prod_{i=1}^{n}{(1-\sigma(x_{w_0}^T\theta^{w_i}))}
=\prod_{i=0}^{n}\sigma(x_{w_0}^T\theta^{w_i})^{y_i}{(1-\sigma(x_{w_0}^T\theta^{w_i}))^{1-y_i}}
logL =\sum_{i=0}^{n} y_ilog(\sigma(x_{w_0}^T\theta^{w_i}))+{(1-y_i)log(1-\sigma(x_{w_0}^T\theta^{w_i}))}

然后对\theta求导
\frac{\partial L}{\partial \theta^{w_i}} =y_i\frac{\sigma(1-\sigma)x^T_{w_0}}{\sigma}+(1-y_i)\frac{-\sigma(1-\sigma)}{1-\sigma}x^T_{w_0}
=(y_i-\sigma)x^T_{w_0}
=(y_i-\sigma(x^T_{w_0}\theta^{w_i}))x^T_{w_0}

对x求导
\frac{\partial L}{\partial x^{w_0}} =\sum_{i=0}^{n}[y_i-\sigma(x^T_{w_0}\theta^{w_i})]\theta^{w_i}

然然后采用梯度下降法可以进行\theta\ and \ x_{w_i}的学习。
在word2vec中,这里学习到的w表示的是context(w)的平均向量之和,如果继续采用链式法则,可以得到每个词向量的解,这里的\theta表示每个词类别的逻辑回归分类参数。

负采样的训练方式在训练word2vec的时候非常高效,相当于原来一个大的softmax分类改成多个逻辑回归,提高训练的效率。

负采样这个训练方式一般在改进的word2vec方法中都有用到,另外在softmax面临多个分类的时候也可以用到(例如大家熟悉的fasttext)

我会在后续经典论文解读中介绍用到negative sampling的相关论文

相关文章

网友评论

      本文标题:UniformML:trick1 负采样Negative Sam

      本文链接:https://www.haomeiwen.com/subject/okfwmqtx.html