最近在调研embedding的方法,重新学习了一下word2vect,深感自己有很多不足…
在看xin rong博士的paper:https://arxiv.org/abs/1411.2738wGJ6eEezsWj,讲得很详细了,但是看到negative sample的时候忽然发现计算条件概率的方法从softmax换成sigmoid了!
顺便贴上这篇blog:https://aegis4048.github.io/optimize_computational_efficiency_of_skip-gram_with_negative_sampling 对很多细节都解释很清楚了。
换成sigmoid主要是两个原因:
- softmax的计算成本比较高,在求梯度的时候计算比较麻烦,但是sigmoid计算梯度的时候就很简单,方便求导
- 替换也是合适的,因为每次计算条件概率,其实我们只是从词表中挑出其中一个。softmax会保证词表中所有词的概率加和为1,但是sigmoid只能保证每个词的概率在0,1之间。我们其实只要在词表输出的概率中挑选概率最大的词就好了
一般用softmax,在cost function中,直接max(softmax(out))
使用sigmoid的时候,一般是max(sigmoid(x1)sigmoid(x2)...)
两者之后都可以用log变成加减法
网友评论