【问题标题】:What does "truncated gradients" mean in LSTM?LSTM 中的“截断梯度”是什么意思?
【发布时间】:2016-08-01 01:27:58
【问题描述】:

我正在学习一个关于 LSTM 的 tensorflow 教程:Truncated Backpropagation

这部分说代码使用“截断反向传播”,那么这到底是什么意思?

【问题讨论】:

    标签: tensorflow recurrent-neural-network lstm


    【解决方案1】:

    在一般的神经网络设置中(嗯,大部分时间),您在训练期间执行两个步骤:

    向前传球

    • 向网络显示一些输入,并检查输出
    • 计算输出的损失(相对于标签,或相对于您想要的某些行为)

    向后传球

    • 根据计算出的损失和网络状态,您可以计算梯度以应用于网络权重,以便网络学习。
    • 这些渐变从您的输出层向后应用。

    在后向传递中,出于某种原因,您可能只想训练顶层或网络的某些特定部分。在这种情况下,您会希望在该点停止渐变的向后传递。这就是截断反向传播的作用(通常通过 https://www.tensorflow.org/versions/r0.9/api_docs/python/train.html#stop_gradient) 完成。

    【讨论】:

    • 这是否与设置某些层不可训练(冻结权重和偏差)具有相同的效果?
    • 是的,从某种意义上说。您可以使层不可训练,但如果之前的(较低的)层仍然是可训练的,梯度将流动冻结的层(不修改那里的权重)并训练那些较低的层。停止渐变确实会阻止它们。较低层可能仍然可以通过来自其他路线的梯度进行训练。一个是特定于梯度的,另一个是特定于层的。但是,是的,它们做的事情非常相似。
    【解决方案2】:

    除了@friesel 的回答,我想说截断的反向传播不仅用于加速梯度计算的过程,还可以缓解递归神经网络中的一些潜在问题(例如梯度消失和梯度爆炸) )。

    【讨论】:

    • 我认为LSTM不会遭受梯度消失/爆炸的问题,所以不需要截断反向传播?我错过了什么?
    【解决方案3】:

    截断反向传播旨在通过计算“短”序列而不是完整序列的近似梯度来加速学习序列(例如使用 LSTM)。我想这就是文档通过使“学习过程易于处理”的意思。

    这种方法似乎起源于 Mikolov 关于“基于神经网络的统计语言模型”(他的论文)的工作。正如 Alex Graves 在well-cited paper(第 9 页)中所解释的那样:

    这种形式的截断反向传播之前已被考虑用于 RNN 语言建模 [23],并发现可以加快训练速度(通过减少序列长度并因此增加随机权重更新的频率)而不影响网络的学习能力长期依赖关系。

    [23] 是 Mikolov 的论文。


    简而言之,截断反向传播是一种“技巧”,可以加快对序列的学习,而不会丢失(太多)重要信息。请注意,截断过多可能会倒退(即丢失重要信息)。

    【讨论】:

      【解决方案4】:

      对于其他偶然发现这篇文章的人,“截断梯度”也可以指 LASSO 类型正则化的在线版本。参见例如Stochastic Gradient Descent Training forL1-regularized Log-linear Models with Cumulative Penalty (2009)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-15
        • 2023-04-09
        • 2018-08-27
        • 1970-01-01
        • 1970-01-01
        • 2012-02-12
        • 1970-01-01
        相关资源
        最近更新 更多