gensim Word2Vec-如何应用随机梯度下降?

时间:2019-05-02 11:10:59

标签: nlp gensim word2vec gradient-descent stochastic

据我了解,批量(原始)梯度下降使所有训练数据的参数更新一次。随机梯度下降(SGD)允许您更新每个训练样本的参数,从而以功能损失高波动为代价,帮助模型更快收敛。

enter image description here

批次(原始)梯度下降集batch_size=corpus_size

SGD设置batch_size=1

以及小批量梯度下降集batch_size=k,其中k通常是32、64、128 ...

gensim如何应用SGD或小批量梯度下降?看来batch_wordsbatch_size等效,但是我想确定。

在gensim模型中设置batch_words=1等同于应用SGD吗?

1 个答案:

答案 0 :(得分:0)

否,batch_words中的gensim是指发送到工作线程的工作块的大小。

gensim Word2Vec类在(context)->(target-word)的每个训练微观示例之后更新模型参数(其中context可以是单个单词,如skip-gram或几个词的均值,例如CBOW)。

例如,您可以在w2v_fast_sentence_sg_neg()训练循环的最深处查看经过优化的Word2Vec cython函数,以进行带有负采样的跳过语法:

https://github.com/RaRe-Technologies/gensim/blob/460dc1cb9921817f71b40b412e11a6d413926472/gensim/models/word2vec_inner.pyx#L159

观察到它正在考虑恰好一个目标词(word_index参数)和一个上下文词(word2_index),并同时更新两个词向量(又称为“投影层” {{1 }})和模型的隐藏至输出权重(syn0),然后再使用随后的一对syn1neg对再次调用它。