我遇到的一些教程,使用一个随机初始化的嵌入矩阵来描述,然后使用tf.nn.embedding_lookup函数来获得整数序列的嵌入。我的印象是,由于embedding_matrix是通过tf.get_variable获得的,优化器将添加适当的ops来更新它。
我不明白的是,反向传播是如何通过查找函数发生的,它似乎是硬的,而不是软的。这个操作的梯度是多少?其中一个是输入ids?
发布于 2018-01-09 11:25:00
嵌入矩阵查找在数学上等价于单热编码矩阵(参见this question)的点积,这是一种平滑的线性运算。
例如,下面是对索引3的查找

这是梯度的公式:

..。其中左手边是负对数似然的导数(即目标函数),x是输入词,W是嵌入矩阵,delta是误差信号。
tf.nn.embedding_lookup是经过优化的,这样就不会发生单一的热编码转换,但是反向支持是按照相同的公式工作的。
https://stackoverflow.com/questions/48166721
复制相似问题