theano函数更新列表的更新顺序

The update order of theano function's update list

Theano函数的参数更新采用pair列表,其中每对指定一个共享符号变量及其计算函数输出后的新表达式。 不知道更新程序有没有什么命令。 如果两个符号变量的新表达式相互依赖并且更新过程将使用更新的符号变量来更新依赖它的其他符号变量,则顺序将很重要。 例如,此列表可能如下所示,

[(a, b + a), (b, b+ 1)]

我写了一些函数来测试这个。结果似乎表明它总是使用表达式中的旧值(对中的第二项)来更新第一项中的符号变量,即

 a_new = b_old + a_old
 b_new = b_old + 1

这是定义的行为吗?

不过我发现了动量的实现here, 下面是生成更新列表和param_update符号变量

的代码
param_update = theano.shared(param.get_value()*0., broadcastable=param.broadcastable)
updates += [(param, param - learning_rate*param_update),
 (param_update, momentum * param_update + (1. - momentum)*T.grad(cost, param))

那么在第一次迭代中,param不会被更新,因为param_update都是零。以我的理解,param_update应该先更新,然后用它来更新参数。

对于更新,它总是使用以前的值(Theano函数调用之前的值)。所以你找到了正确的东西。

为了势头,我觉得有延迟是正常的。