Machine learning 使用千层面有希望吗;概率矩阵分解的Adam实现?

Machine learning 使用千层面有希望吗;概率矩阵分解的Adam实现?,machine-learning,neural-network,theano,gradient-descent,lasagne,Machine Learning,Neural Network,Theano,Gradient Descent,Lasagne,我正在theano中实现模型,并希望使用规则 我的目标是要有一个尽可能整洁的代码,这意味着我不想从Adam的算法中明确跟踪“m”和“v”数量 这似乎是可能的,尤其是在以下情况下:它将“m”和“v”数量隐藏在的更新规则中 当处理不同数量的每个项形成负对数似然时,这种方法有效。但在概率矩阵分解中,每个项包含一个潜在用户向量和一个潜在项向量的点积。这样的话,如果我在每一项上都做一个烤宽面条的亚当的例子,那么对于同一个潜在向量,我会有多个'm'和'v'量,这不是亚当应该如何工作的 事实上,我也提到了一些

我正在theano中实现模型,并希望使用规则

我的目标是要有一个尽可能整洁的代码,这意味着我不想从Adam的算法中明确跟踪“m”和“v”数量

这似乎是可能的,尤其是在以下情况下:它将“m”和“v”数量隐藏在的更新规则中

当处理不同数量的每个项形成负对数似然时,这种方法有效。但在概率矩阵分解中,每个项包含一个潜在用户向量和一个潜在项向量的点积。这样的话,如果我在每一项上都做一个烤宽面条的亚当的例子,那么对于同一个潜在向量,我会有多个'm'和'v'量,这不是亚当应该如何工作的

事实上,我也提到了一些细节和例子

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

  • 每个现有评级(即全局NLL目标函数中的每个现有术语)都有自己的Adam,通过对theano.函数的专用调用进行更新。不幸的是,这导致了对Adam的不正确使用,因为相同的潜在向量将与Adam算法使用的不同“m”和“v”量相关联,这不是Adam应该如何工作的
  • 在整个目标NLL上调用Adam,这将使更新机制类似于简单梯度下降而不是SGD,并具有已知的所有缺点(计算时间长、停留在局部极小值等)
  • 我的问题是:

    • 也许有什么是我没有正确理解的,关于千层面的亚当是如何工作的

    • 选项2是否真的像SGD一样,即对潜在向量的每次更新都会对使用该更新向量的另一次更新(在同一次Adam调用中)产生影响

    • 关于如何实施,您还有其他建议吗


    关于如何解决此问题并避免手动保留“v”和“m”量的复制向量和矩阵,您有什么想法吗?

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

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

    所以我想说,你的选择2是实现他们所做工作的正确方法

    这里没有太多的复杂性或非线性(除了sigmoid),所以你不太可能遇到与神经网络相关的典型优化问题,这就需要像Adam这样的东西。所以,只要这些都能放在内存中,我想这种方法就会奏效


    如果它不适合内存,也许有某种方法可以设计一个小批量版本的loss来优化它。我还想看看你是否可以添加一个或多个神经网络来代替这些条件概率。但这有点离题了…

    似乎这个问题在@redcalx更容易理解:我不同意,这里的问题只在于如何实现Adam。我没有详细阅读PMF,而且我不是千层面的用户,但是否可以将您的优化目标表示为模型参数的单一theano函数?如果是这样的话,那么这绝对可以在纯theano中完成。