关于RNN (循环神经网络)相邻采样为什么在每次迭代之前都需要将参数detach
关于RNN (循环神经网络)相邻采样为什么在每次迭代之前都需要将参数detach 这个问题出自《动手学深度学习pytorch》中RNN 第六章6.4节内容,如下图所示: 当时看到这个注释,我是一脸懵逼,(难道就不能解释清楚一点嘛,让我独自思考了那么长时间,差评!!!)我主要有以下疑惑: 每次小批量反向传播之后,由于torch是动态计算图,本质上该次的计算图已经销毁,与下次小批量迭代的构建的计算没有任何关联,detach不是多此一举嘛? 按照注释所说的,难道下次小批量构建的计算图由于初始隐藏状态引用于上次小批量迭代最后的时间步长的隐藏状态,这样计算图存在分支关联,方向传播会经过以前所有批量迭代构建的计算图,导致内存和计算资源开销大? 带着这两个疑惑,我开始面向百度编程(网上的博客真的是千篇一律啊,10篇当中9篇一样,哎世风日下,我也是服了,文章转来转去有意思嘛,自己收藏着看看不好嘛,非得全篇复制还转载,真的***)百度之后,我发现了以下解释(没一个有用的) 胡说八道型 这讲的啥?按你这么说,state是叶子节点了(估计不知道从哪抄的错误博客,害人匪浅啊),既然state都是叶子节点了,那还跟上一次批量的计算图有毛关系,反向传播个屁?叶子节点的定义:一棵树当中没有子结点(即度为0)的结点称为叶子结点。除了第一次小批量的初始隐藏状态是叶子节点外,其他批量的隐藏状态都经过隐藏层的计算