我最近对 LSTM 产生了兴趣,我惊讶地发现权重是跨时间共享的。
我知道,如果您跨时间共享权重,那么您的输入时间序列可以是可变长度。
使用共享权重,您可以训练更少的参数。
据我了解,与其他学习方法相比,人们会转向 LSTM 的原因是因为您认为您想学习的数据中存在某种时间/顺序结构/依赖性。如果您牺牲可变长度“奢侈”并接受较长的计算时间,那么没有共享权重的 RNN/LSTM(即对于每个时间步,您有不同的权重)不会表现得更好,还是我缺少什么?
我最近对 LSTM 产生了兴趣,我惊讶地发现权重是跨时间共享的。
我知道,如果您跨时间共享权重,那么您的输入时间序列可以是可变长度。
使用共享权重,您可以训练更少的参数。
据我了解,与其他学习方法相比,人们会转向 LSTM 的原因是因为您认为您想学习的数据中存在某种时间/顺序结构/依赖性。如果您牺牲可变长度“奢侈”并接受较长的计算时间,那么没有共享权重的 RNN/LSTM(即对于每个时间步,您有不同的权重)不会表现得更好,还是我缺少什么?
公认的答案侧重于问题的实际方面:如果没有共享参数,它将需要大量资源。然而,当任何严重的计算成为问题时(1980 年代根据wiki ),在 RNN 中共享参数的决定已经做出,所以我相信这不是主要论点(尽管仍然有效)。
参数共享有纯粹的理论原因:
它有助于将模型应用于不同长度的示例。在读取序列时,如果 RNN 模型在训练过程中的每一步使用不同的参数,它就不会泛化到不同长度的看不见的序列。
通常,这些序列在整个序列中根据相同的规则进行操作。例如,在 NLP 中:
“星期一下雪了”
“星期一下雪了”
...这两个句子的意思是一样的,尽管细节在序列的不同部分。参数共享反映了我们在每一步执行相同任务的事实,因此,我们不必重新学习句子中每个点的规则。
LSTM 在这个意义上没有什么不同,因此它也使用共享参数。
“共享权重”的观点来自于将 RNN 视为随时间展开的前馈网络。如果权重在每个时刻都不同,这将只是一个前馈网络。但是,我想另一种思考方式是作为一个 RNN,其权重是一个时变函数(这可以让你保持处理可变长度序列的能力)。
如果你这样做了,参数的数量将随着时间步的数量线性增长。对于任何可感知长度的序列,这将是参数的大爆炸。如果你有大量的计算资源来运行它,并且有大量的数据来约束它,它确实会让网络变得更强大。对于长序列,它可能在计算上是不可行的,并且您会过度拟合。事实上,人们通常会通过在时间上运行截断反向传播来朝相反的方向前进,这只会在短时间内展开网络,而不是在整个序列上展开。这样做是为了计算可行性。有趣的是,RNN 仍然可以学习超出截断长度的时间结构,因为循环单元可以存储之前的记忆。
我认为由于具有隐藏到隐藏递归(和时间共享权重)的 RNN 等效于通用图灵机,因此让它们在不同的时间步长上具有不同的权重并不会使它们更强大。
我正在努力想象权重共享与递归相结合以及与词嵌入相结合在高维空间中的行为。
以@Maxim 为例并可视化一个网络,该网络建议序列中的下一个单词:“星期一是”当使用递归累积时,将是高维空间中的一个点,并且由于词嵌入,“星期二是"将在同一个流形中。鉴于此累积权重作为具有高内存容量的下游全连接层的输入,它将学习映射到寒冷、下雪等事物。可能还有其他存储的映射,如忙碌、缓慢、明显等。这可能是由该层的一个单元学习。另一个单元可能已经学会了将由“It was snowing on”的累积权重形成的高维向量映射到像圣诞节、星期一等向量。这是关于隐藏隐藏权重和隐藏输出权重。关于输入隐藏的权重,