我正在theano中实施Probabilistic Matrix Factorization模型,并希望使用Adam gradient descent规则。
我的目标是让代码尽可能整洁,这意味着我不想明确跟踪Adam算法中的'm'和'v'数量。
这似乎有可能,尤其是在seeing how Lasagne's Adam is implemented之后:它会在theano.function的更新规则中隐藏“m”和“v”数量。
当负数对数似然与每个处理不同数量的术语形成时,这种方法有效。但在概率矩阵分解中,每个术语包含一个潜在用户向量和一个潜在项向量的点积。这样,如果我在每个术语上创建一个Lasagne的Adam的实例,我将为同一个潜在的向量提供多个“m”和“v”数量,这不是Adam应该如何工作的。
我还posted on Lasagne's group,实际上是twice,其中有更多细节和一些示例。
我考虑过两种可能的实现:
我的问题是:
也许有些东西我对于Lasagne的亚当是如何工作的还不正确?
2号选项实际上是否与SGD相似,因为对潜在向量的每次更新都会对使用该更新向量的另一个更新(在同一个Adam调用中)产生影响?
您对如何实施有任何其他建议吗?
有关如何解决此问题的任何想法,并避免手动保留'v'和'm'数量的复制向量和矩阵?
答案 0 :(得分:0)
在论文中,他们建议您使用渐变下降一次优化整个功能:
然后我们可以在Y,V和W中执行梯度下降,以最小化方程式给出的目标函数。 10。
所以我会说你的选择2是实现他们所做的正确方法。
那里没有很多复杂性或非线性(在sigmoid旁边)所以你可能不会遇到与神经网络相关的典型优化问题,这需要像Adam这样的东西。所以只要这一切都符合记忆,我想这种方法会起作用。
如果它不适合内存,也许你可以用某种方式设计一个迷你版本的损失来优化。还有兴趣看看你是否可以添加一个或多个神经网络来替换其中一些条件概率。但这有点偏离主题......