Почему Tensorflow's sampled_softmax_loss заставляет вас использовать смещение, когда эксперты рекомендуют не использовать смещение для Word2Vec? - PullRequest
0 голосов
/ 24 апреля 2018

Во всех реализованных мной тензорных реализациях Word2Vec присутствует смещение в функции softmax с отрицательной выборкой, в том числе на официальном веб-сайте tenorflow

https://www.tensorflow.org/tutorials/word2vec#vector-representations-of-words

loss = tf.reduce_mean(
  tf.nn.nce_loss(weights=nce_weights,
                 biases=nce_biases,
                 labels=train_labels,
                 inputs=embed,
                 num_sampled=num_sampled,
                 num_classes=vocabulary_size))

Это изБесплатный курс глубокого обучения Google https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/udacity/5_word2vec.ipynb

 loss = tf.reduce_mean(
    tf.nn.sampled_softmax_loss(weights=softmax_weights, biases=softmax_biases, inputs=embed,
                               labels=train_labels, num_sampled=num_sampled, num_classes=vocabulary_size))

Однако, как в лекциях Эндрю Нг и Ричарда Сочера, они не учитывают предвзятость в своих отрицательных максимумах выборки.

Даже там, где возникла эта идея, Миколов утверждает, что:

смещения не используются в нейронной сети, так как не наблюдалось значительного улучшения производительности - после бритвы Оккама решениетак просто, как должно быть.

Миколов, Т .: Статистические языковые модели на основе нейронных сетей, с.29 http://www.fit.vutbr.cz/~imikolov/rnnlm/thesis.pdf

Итак, почему официальные реализации тензорного потока имеют смещение, и почему нет возможности не включать смещение в функцию sampled_softmax_loss?

1 Ответ

0 голосов
/ 25 апреля 2018

Упражнение , которое вы связываете , определяет softmax_biases как нули:

softmax_biases = tf.Variable(tf.zeros([vocabulary_size]))

То есть: они не используют никакого фактического смещения в своем примере word2vec.

Функция sampled_softmax_loss() является общей и используется для многих нейронных сетей;его решение потребовать аргумент biases не связано с тем, что лучше для одного конкретного приложения нейронной сети (word2vec), и учитывает случай word2vec, разрешая (как здесь) все нули.

...