【问题标题】:Is there hope for using Lasagne's Adam implementation for Probabilistic Matrix Factorization?是否有希望将 Lasagne 的 Adam 实现用于概率矩阵分解?
【发布时间】: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,那里有更多细节和一些示例。

我想到了两种可能的实现方式:

  1. 每个现有评级(这意味着全局 NLL 目标函数中的每个现有术语)都有自己的 Adam,通过对 theano.function 的专用调用进行更新。不幸的是,这导致了对 Adam 的不正确使用,因为相同的潜在向量将与 Adam 算法使用的不同的“m”和“v”量相关联,这不是 Adam 应该如何工作的。
  2. 在整个目标 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


【解决方案1】:

看起来他们在论文中建议您使用梯度下降一次优化整个函数:

然后我们可以在 Y 、 V 和 W 中执行梯度下降,以最小化方程给出的目标函数。 10.

所以我会说您的选项 2 是实施他们所做工作的正确方法。

其中没有太多复杂性或非线性(除了 sigmoid),因此您可能不太可能遇到与需要像 Adam 这样的神经网络相关的典型优化问题。所以只要这一切都适合记忆,我想这种方法会奏效。

如果它不适合内存,也许你可以设计一个小批量版本的损失来优化。也有兴趣看看您是否可以添加一个或多个神经网络来替换其中一些条件概率。但这有点跑题了……

【讨论】:

    猜你喜欢
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2019-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多