【问题标题】:gensim Word2Vec - how to apply stochastic gradient descent?gensim Word2Vec - 如何应用随机梯度下降?
【发布时间】:2019-05-02 11:10:59
【问题描述】:

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

批量(普通)梯度下降集batch_size=corpus_size

SGD 设置batch_size=1

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

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

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

【问题讨论】:

    标签: nlp gensim word2vec gradient-descent stochastic


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 好的,那么我的后续问题是,如何在 gensim 模型中应用 SGD 或大小为 k 的小批量梯度?
    • 我很确定 gensim Word2Vec 方法(非常接近原始 Mikolov/Google word2vec.c 的模型)已经可以被公平地描述为 SGD。但是,它没有任何可配置大小的小批量选项:您必须自己编写。
    猜你喜欢
    • 2016-06-13
    • 2018-12-10
    • 2014-07-30
    • 2016-09-25
    • 2021-02-20
    • 2021-12-18
    • 1970-01-01
    • 2011-07-04
    • 2016-05-16
    相关资源
    最近更新 更多