Тензорный поток embedding_lookup дифференцируем?

Некоторые из учебных пособий, с которыми я столкнулся, описаны с использованием случайно инициализированной матрицы встраивания, а затем с использованием tf.nn.embedding_lookup функция для получения вложений для целочисленных последовательностей. У меня сложилось впечатление, что с embedding_matrix получается через tf.get_variableоптимизатор добавил бы соответствующие операции для его обновления.

Что я не понимаю, так это то, как обратное распространение происходит через функцию поиска, которая кажется жесткой, а не мягкой. Каков градиент этой операции относительно? один из его входных идентификаторов?

1 ответ

Решение

Внедрение поиска в матрице математически эквивалентно точечному произведению с матрицей с горячим кодированием (см. Этот вопрос), которая является гладкой линейной операцией.

Например, вот поиск по индексу 3:

уважать

Вот формула для градиента:

градиент

... где левая часть - производная от отрицательного логарифмического правдоподобия (т. е. целевая функция), x являются входными словами, W это матрица вложения и delta это сигнал ошибки.

tf.nn.embedding_lookup оптимизирован таким образом, что не происходит одноразовое преобразование кодировки, но backprop работает по той же формуле.

Другие вопросы по тегам