我正在theano中实现Probabilistic Matrix Factorization模型,并想使用Adam gradient descent规则。
我的目标是要使代码尽可能整洁,这意味着我不想明确跟踪亚当算法中的“m”和“v”量。
似乎这是可能的,尤其是在seeing how Lasagne's Adam is implemented之后:它在theano.function的更新规则中隐藏了'm'和'v'数量。
当负对数似然与每个处理不同数量的项形成时,此方法将起作用。但是在概率矩阵分解中,每个项都包含一个潜在用户向量和一个潜在项目向量的点积。这样,如果我在每个术语上创建一个千层面的亚当的实例,则对于相同的潜矢量,我将有多个'm'和'v'量,而这并不是亚当应该如何工作的。
我也是posted on Lasagne's group,实际上是twice,那里有一些更多的细节和一些示例。
我考虑了两种可能的实现:
我的问题是:
关于如何解决此问题并避免手动保留“v”和“m”数量的重复矢量和矩阵的任何想法吗?
最佳答案
似乎在论文中他们建议您使用梯度下降一次优化整个功能:
因此,我想说您的选择2是实现他们所做的正确方法。
除了乙状结肠之外,那里没有太多的复杂性或非线性,因此您不太可能遇到与神经网络相关的典型优化问题,而这些问题需要像亚当这样的东西。因此,只要所有这些都适合内存,我想这种方法就会奏效。
如果它不适合内存,也许您可以通过某种方式设计损失的小批量版本以进行优化。还会有兴趣了解您是否可以添加一个或多个神经网络来替换其中一些条件概率。但这有点题外话了...
关于machine-learning - 使用Lasagne的Adam实现进行概率矩阵分解是否有希望?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39415090/