【发布时间】:2017-01-17 19:29:27
【问题描述】:
我正在 theano 中实现 Probabilistic Matrix Factorization 模型,并希望使用 Adam gradient descent 规则。
我的目标是编写尽可能整洁的代码,这意味着我不想明确跟踪 Adam 算法中的“m”和“v”数量。
这似乎是可能的,尤其是在seeing how Lasagne's Adam is implemented 之后:它在theano.function 的更新规则中隐藏了“m”和“v”数量。
当每个处理不同数量的项形成负对数似然时,此方法有效。但是在概率矩阵分解中,每个项都包含一个潜在用户向量和一个潜在项目向量的点积。这样,如果我在每个术语上创建一个 Lasagne's Adam 的实例,对于同一个潜在向量,我将有多个 'm' 和 'v' 量,这不是 Adam 应该如何工作的。
我也是posted on Lasagne's group,实际上是twice,那里有更多细节和一些示例。
我想到了两种可能的实现方式:
- 每个现有评级(这意味着全局 NLL 目标函数中的每个现有术语)都有自己的 Adam,通过对 theano.function 的专用调用进行更新。不幸的是,这导致了对 Adam 的不正确使用,因为相同的潜在向量将与 Adam 算法使用的不同的“m”和“v”量相关联,这不是 Adam 应该如何工作的。
- 在整个目标 NLL 上调用 Adam,这将使更新机制类似于简单的梯度下降而不是 SGD,具有已知的所有缺点(计算时间长、保持在局部最小值等)。
我的问题是:
对于 Lasagne 的 Adam 的工作原理,可能有什么我没有正确理解的地方吗?
选项 2 是否实际上类似于 SGD,因为对潜在向量的每次更新都会影响使用该更新向量的另一个更新(在同一个 Adam 调用中)?
您对如何实现它还有其他建议吗?
关于如何解决此问题并避免手动保留“v”和“m”数量的重复向量和矩阵的任何想法?
【问题讨论】:
-
看来这个 Q 会更适合stats.stackexchange.com
-
@redcalx:我不同意,这里的问题只在于如何实现 Adam。
-
我没有详细阅读 PMF,也不是 Lasagne 用户,但是否可以将您的优化目标表达为模型参数的单个 theano 函数?如果是这样,那么这绝对可以在纯 theano 中完成。
标签: machine-learning neural-network theano gradient-descent lasagne