首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >梯度检查LSTM --如何获得跨时间步骤的成本变化?

梯度检查LSTM --如何获得跨时间步骤的成本变化?
EN

Data Science用户
提问于 2018-04-27 04:42:14
回答 2查看 225关注 0票数 5

我正在执行梯度检查我的LSTM,其中有4个时间步骤。LSTM的情况如下:

代码语言:javascript
复制
   01       01       01       01
   ^        ^        ^        ^
  LSTM --> LSTM --> LSTM --> LSTM
   ^        ^        ^        ^
   11       11       11       11

因此,在每一个时间步骤中,我们都是以向量{1,1}进给,并在输出时期望{0,1}。

假设我扰乱了LSTM内部的权重,然后执行4个前向支持--每个时间步骤一个--我现在如何得到这个单一扰动所导致的成本函数的增量?

是否允许我简单地将所有4个时间步骤中的成本变化相加,将其作为导数估计处理?

此外,我是否应该为LSTM执行以下操作:

  1. 使单一重量上升。
  2. 前支柱4个时间步骤
  3. 把重量向下打搅
  4. 前支柱4个时间步骤
  5. 得到4个三角洲
  6. 将四个三角洲相加,得到成本的总变化。

  1. 设置N=0
  2. 把重量向上搅乱
  3. 在特定的时间步骤N
  4. 把重量向下打搅
  5. 在特定时间步骤N处向前推进支柱
  6. 找一个三角洲,把它储存起来
  7. 增量N
  8. 直到N不等于4返回到第2步)
  9. 将四个三角洲相加,得到成本的总变化。

第二种方法似乎更正确,因为LSTM会有一个隐藏的状态-- ..Is --这是正确的直觉,还是不重要?

EN

回答 2

Data Science用户

回答已采纳

发布于 2018-11-22 15:38:17

几个月后(在阅读了@SanjayKrishna的答案后)回答了我自己的问题。

我的“方法1”似乎更正确,但比实际需要的更仓促。

不要忘记,成本是均方误差。在我的具体情况下,它是每个时间步骤中错误的平均值。正是这个MSE让我们看到了“三角洲”。

C = MSE= \frac{1}{T}\sum_{t=0}^{t=T}(actual_t-wanted_t)^2

因此,我们应采取以下行动:

  1. 把一个重量往上推
  2. 执行一个完整的前向支柱(例如,15个时间步骤),从MSE中获取cost_a。它应该只是一个标量值。
  3. 把重量往下拨
  4. 重做完整的fwd支柱,从您的MSE获得cost_b,这是另一个标量值。
  5. 通过从cost_a中减去cost_b来计算增量(只是一个标量值)
  6. 将增量与在BackPropThroughTime期间计算出来的梯度进行比较(根据所有时间步骤估计的该特定权重的梯度)

编辑

我实际上使用的是“SoftMaxedCrossEntropy”之类的东西,而不是MSE。但是想法是一样的:在每个时间步骤上总结错误,除以T,这就是我的成本。

票数 0
EN

Data Science用户

发布于 2018-04-29 21:13:31

有趣的问题。

与标准反向传播一样,逆传时间由链规则的重复应用组成。其微妙之处在于,对于递归网络来说,损失函数不仅取决于其对输出层的影响,还取决于其对输出层的影响,也取决于它在下一时间阶段对隐藏层的影响。

看起来这两种方法都有相似的结果,但是在不同的粒度(在不同的级别上添加噪声),这是因为后端并没有真的被这个加法所干扰,因为从上一步到第一步,它仍然被链锁在一起。因此,它归结为为什么您实际上要添加噪音在第一,如在文件,第IIIC和IV节中提到的。

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

https://datascience.stackexchange.com/questions/30919

复制
相关文章

相似问题

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