【发布时间】:2018-04-30 09:48:05
【问题描述】:
我正在 keras 中实现自定义损失函数。模型是autoencoder。第一层是嵌入层,它将大小为(batch_size, sentence_length) 的输入嵌入到(batch_size, sentence_length, embedding_dimension) 中。然后模型将嵌入压缩成一定维度的向量,最后必须重构嵌入(batch_size, sentence_lenght, embedding_dimension)。
但是嵌入层是可训练的,损失必须使用嵌入层的权重(我必须对我词汇表的所有词嵌入求和)。
例如,如果我想以玩具为例进行训练:“猫”。 sentence_length is 2 并假设 embedding_dimension is 10 和 vocabulary size is 50,所以嵌入矩阵的形状为 (50,10)。 Embedding 层的输出X 的形状为(1,2,10)。然后它传入模型,输出X_hat,形状也是(1,2,10)。必须训练模型以最大化表示“the”的向量X_hat[0]与嵌入层中表示“the”的向量X[0]最相似的概率,“cat”也是如此。但是损失是这样的,我必须计算X和X_hat之间的余弦相似度,通过X_hat的余弦相似度和嵌入矩阵中的每个嵌入(50,因为词汇量为50)的总和进行归一化,它们是嵌入层权重的列。
但是如何在训练过程的每次迭代中访问嵌入层中的权重?
谢谢!
【问题讨论】:
-
可以破解模型以使嵌入的输出进入损失函数,但采用层的权重似乎会增加更复杂的工作......
-
您确定要这样做吗?归一化总和可能会爆炸。您是否有任何论文描述了您的方法?也许你在那里有一个 softmax 输出。
-
我尝试实现在 NIPS 2017 上接受的这篇论文。arxiv.org/pdf/1708.04729.pdf。可能我论文不是很懂,但是看Equation 1。分母对We中嵌入的词汇的所有单词取余弦相似度,也就是embedding matrix。
标签: keras embedding tensor loss