gensim Word2Vec - как применить стохастический градиентный спуск? - PullRequest
0 голосов
/ 02 мая 2019

Насколько я понимаю, пакетный (ванильный) градиентный спуск обновляет один параметр для всех обучающих данных.Стохастический градиентный спуск (SGD) позволяет обновлять параметры для каждой обучающей выборки, помогая модели быстрее сходиться, за счет значительных колебаний потери функции.

enter image description here

Пакетные (ванильные) комплекты градиентного спуска batch_size=corpus_size.

SGD комплекты batch_size=1.

И мини-наборы градиентного спуска batch_size=k, в которых k обычно составляет 32, 64, 128 ...

Как gensim применяет SGD или мини-спуск градиентного спуска?Кажется, что batch_words является эквивалентом batch_size, но я хочу быть уверенным.

Является ли установка batch_words=1 в модели gensim эквивалентной применению SGD?

1 Ответ

0 голосов
/ 02 мая 2019

Нет, batch_words в gensim относится к размеру рабочих фрагментов, отправляемых рабочим потокам.

Класс gensim Word2Vec обновляет параметры модели после каждого обучающего микро-примера (context)->(target-word) (где context может быть одним словом, как в скипграмме, или средним из нескольких слов, как в CBOW).

Например, вы можете просмотреть эту оптимизированную функцию w2v_fast_sentence_sg_neg() cython для пропуска граммы с отрицательной выборкой, глубоко в Word2Vec цикле обучения:

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

Заметьте, что он учитывает ровно одно целевое слово (word_index параметр) и одно контекстное слово (word2_index) и обновляет как слова-векторы (так называемый «слой проекции» syn0), так и модель веса скрытого вывода (syn1neg) перед повторным вызовом с последующей единственной парой (context)->(target-word).

...