我正在尝试编写一个具有一个嵌入的输入向量的模型(例如) 并预测第二个嵌入中的对应向量. 两者都是 n 维实稠密向量.
具体一个是skipgram word embedding,另一个是node2vec graph embedding。我有大约 30 000 个训练示例,它们提供了两者之间的映射。因为它们都是真实的向量,所以编写一个简单的 MLP 来学习一个到另一个的非线性变换似乎是一项微不足道的任务(我实际上并不关心这里的过度拟合,因为域是封闭的) .
但是,我似乎无法让它正常工作。
在 Keras 中,天真地这样的事情应该可以工作:
in = Input(e1_dim)
hidden = Dense(some_value, activation="tanh")(in)
out = Dense(e2_dim)(hidden)
我尝试添加更多隐藏层,但我认为我的问题在于输入和输出向量在域 (-1,1) 中,因此初始化器、损失函数和激活函数的选择至关重要。
我尝试将初始化程序设置为 RandomUniform,但仍然没有好的结果。对于损失,我尝试了 MAE en cosine_proximity,但两者似乎都产生了可怕的结果。特别是 cosine_proximity 似乎没有超过 -0.5,这可能是一个迹象。关于将一个嵌入映射到另一个嵌入的架构和损失函数的选择(本质上是高维非线性回归?)