是否有希望将Lasagne的Adam实现用于概率矩阵分解?

fst*_*tab 5 machine-learning neural-network gradient-descent theano lasagne

我正在theano中实现概率矩阵分解模型,并希望利用亚当梯度下降规则.

我的目标是让代码尽可能整洁,这意味着我不想明确跟踪Adam算法中的'm'和'v'数量.

看起来这是可能的,特别是在看到Lasagne的Adam如何实现之后:它隐藏了theano.function更新规则中的'm'和'v'数量.

当负处理对数似然与处理不同数量的每个术语形成时,这种方法有效.但在概率矩阵分解中,每个术语包含一个潜在用户向量和一个潜在项向量的点积.这样,如果我在每个术语上创建一个Lasagne的Adam的实例,我将为同一个潜在的向量提供多个"m"和"v"数量,这不是Adam应该如何工作的.

我还发布了Lasagne的小组,实际上是两次,其中有更多的细节和一些例子.

我考虑过两种可能的实现:

  1. 每个现有的评级(这意味着全局NLL目标函数中的每个现有术语)都通过专门调用theano.function来更新自己的Adam.不幸的是,这会导致Adam的正确使用,因为相同的潜在向量将与Adam算法使用的不同"m"和"v"量相关联,这不是Adam应该如何工作的.
  2. 在整个目标NLL上调用Adam,这将使更新机制像简单的Gradient Descent而不是SGD,具有已知的所有缺点(高计算时间,保持在局部最小值等).

我的问题是:

  • 也许有些东西我不能正确理解Lasagne的亚当如何运作?

  • 2号选项实际上是否与SGD相似,因为对潜在向量的每次更新都会对使用该更新向量的另一个更新(在同一个Adam调用中)产生影响?

  • 您对如何实施它有任何其他建议吗?

有关如何解决此问题并避免手动保留"v"和"m"数量的复制向量和矩阵的任何想法?

nlm*_*lml 0

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

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

所以我想说你的选项 2 是实现他们所做的事情的正确方法。

其中没有太多的复杂性或非线性(除了 sigmoid 之外),因此您可能不太可能遇到与神经网络相关的典型优化问题,这些问题需要 Adam 之类的东西。因此,只要一切都适合记忆,我想这种方法就会起作用。

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