首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Theano为BPTT做自动展开吗?

Theano为BPTT做自动展开吗?
EN

Stack Overflow用户
提问于 2014-06-26 13:17:00
回答 1查看 2.5K关注 0票数 8

我正在西亚诺实施一个RNN,我很难训练它。它甚至连记忆训练语料库都没有。我的错误很可能是因为我不完全理解西亚诺是如何在时间上反向传播的。现在,我的代码非常简单:

代码语言:javascript
复制
grad_params = theano.tensor.grad(cost, params)

我的问题是:考虑到我的网络是反复出现的,这会自动将架构展开为前馈架构吗?一方面,示例完成了我正在做的事情。另一方面,线程让我觉得我错了。

如果它确实为我做了展开,我如何截断它?我可以看到有一种方法,从文档 of scan,但我不能想出代码来做它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-26 17:57:21

我不会说它是自动“展开”的--相反,Theano有一个概念,那就是什么变量是相互关联的,并且可以沿着这条链传递更新。如果这就是你所说的展开,那么也许我们是在谈论同样的事情。

我也是这样做的,但是使用拉斯文·帕斯卡努()的rnn.py代码(来自这条线)作为参考。作为一个学习的例子,这似乎要简单得多。

您可以从教程中可视化/绘制图形中获得一些价值。还有一组带有简单绘图的在线幻灯片,它显示了RNN的1层“展开”的图表,您在文章中将对此进行讨论。

具体来说,请看一下step函数:

代码语言:javascript
复制
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

此函数表示这些幻灯片,pg 10中显示的“简单递归网”。在进行更新时,只需传递梯度w.r.t。分别是W、W_in和W_out (请记住,y是通过step函数连接到这三者的!这就是梯度魔法的工作原理)。

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

另外,用BPTT训练RNN是很困难的。Ilya Sutskever博士论文对此进行了详细的讨论--如果可以的话,尝试将其绑定到免费优化器,这里还有一个参考RNN实现中。Theanet也是这样做的,并且可能是一个很好的参考。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24431621

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档