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

gensim Word2Vec - how to apply stochastic gradient descent?

据我了解,批量(香草)梯度下降对所有训练数据进行一次参数更新。随机梯度下降 (SGD) 允许您为每个训练样本更新参数,帮助模型更快收敛,代价是函数损失的高波动。

批量(香草)梯度下降集 batch_size=corpus_size

新元套batch_size=1.

和mini-batch梯度下降集batch_size=k,其中k通常是32,64,128...

gensim如何应用SGD或mini-batch梯度下降?似乎 batch_words 相当于 batch_size,但我想确定一下。

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

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

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

例如,您可以在 Word2Vec 训练循环的深处查看这个针对带负采样的 skip-gram 优化的 w2v_fast_sentence_sg_neg() cython 函数:

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

观察到它正在考虑一个目标词(word_index参数)和一个上下文词(word2_index),并更新两个词向量(又名'projection layer' syn0) 和模型的隐藏到输出权重 (syn1neg),然后它可能会被后续的单个 (context)->(target-word) 对再次调用。