word2vec的初心是什么,为什么使用负采样技术。后面看论文过程经常遇到负采样,如mepath2vec等等,对这个知识点不了解清楚,论文很多精华部分理解就会有偏差了。
看了很多博客和B站视频讲解,还是没有讲解清楚。
1 用负采样带来的问题
参数更新慢
其一 我们每次只对窗口中出现的几个单词参数进行更新,但是在计算梯度的过程中,是对整个参数矩阵进行运算,这样参数矩阵中的大部分值都是0。
计算开销大
其二 是 导致计算效率低下
softmax函数激活,会导致计算全部的单词‘得分’(滑动窗口在滑动过程中,需要计算滑动窗口里面单词然后求和,效率低)
2. 使用负采样
负采样的核心思想是:
计算中心词和窗口中上下文词的真实“得分”,再加一些“噪声”,即词表中的随机词(滑动窗口以外)和中心词的“得分”。
目标方程:
(最大化 真实单词对“得分”+ “噪声”作为目标方程。)
采用上述公式解决了之前说的两个问题:
- 仅对K个参数进行采样
- 放弃softmax函数,采用sigmoid函数,这样就不存在先求一遍窗口中所有单词的‘“得分”的情况
3. 计算梯度
把最大化问题变为最小化问题:
里面涉及到的变量是
,
和
.分别进行求偏导即可。然后进行更新
对
求偏导
其他参数为不管,看为常量。
其中里面的sigmoid函数(除log外)求导后为:
注意这里的log看着以e为底,T这个求和与
无关,k这个求和与
有关.
化简得:
,前面知乎大佬没有进行最大化变最小化,直接就给出了答案,是错的。应该先最小化,在求导,结果才对。
对
求偏导
其他参数为不管,看为常量。
按照
求导思路:
化简得:
对
求偏导
化简得: