gpt4 book ai didi

python - Theano是否为BPTT做自动展开?

转载 作者:太空狗 更新时间:2023-10-29 20:54:04 25 4
gpt4 key购买 nike

我正在 Theano 中实现 RNN,但我很难对其进行训练。它甚至无法记住训练语料库。我的错误很可能是由于我不完全理解 Theano 如何处理时间反向传播造成的。现在,我的代码非常简单:

grad_params = theano.tensor.grad(cost, params)

我的问题是:考虑到我的网络是循环的,这是否会自动将架构展开为前馈架构?一方面,this示例完全符合我的要求。另一方面,this线程让我觉得我错了。

如果它确实为我展开,我该如何截断它?我可以看到有一种方法,来自 documentationscan,但我想不出执行此操作的代码。

最佳答案

我不会说它会自动“展开”——相反,Theano 知道哪些变量是相关联的,并且可以沿着该链传递更新。如果这就是您所说的展开的意思,那么也许我们在谈论同一件事。

我也在逐步解决这个问题,但是使用 Rasvan Pascanu's rnn.py代码(来自 this thread )以供引用。对于学习示例来说,这似乎更直接。

您可能会从 tutorial 中可视化/绘制图表中获得一些值(value).还有一组在线幻灯片 simple drawing它显示了 RNN 的 1 层“展开”的图表,您在帖子中对此进行了讨论。

具体看step函数:

def step(u_t, h_tm1, W, W_in, W_out):
h_t = TT.tanh(TT.dot(u_t, W_in) + TT.dot(h_tm1, W))
y_t = TT.dot(h_t, W_out)
return h_t, y_t

此函数表示 these slides, pg 10 中所示的“简单循环网络” .当你进行更新时,你只需传递 w.r.t. 的梯度。分别为 W、W_in 和 W_out(请记住,y 通过 step 函数连接到这三个!这就是梯度魔术的工作原理)。

如果您有多个 W 层(或索引到一个大 W,我相信 gwtaylor 正在做),那么这将创建多个“展开”层。据我了解,这个网络看起来只在时间上倒退了一步。如果有帮助,theanonets在 Theano 中也有一个 RNN 实现。

另外请注意,使用 BPTT 训练 RNNs 很难Ilya Sutskever's dissertation对此进行了详尽的讨论——如果可以的话,请尝试加入 Hessian Free optimizer, there is also a reference RNN implementation here . Theanets 也这样做,可能是一个很好的引用。

关于python - Theano是否为BPTT做自动展开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24431621/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com