【发布时间】:2019-01-13 19:36:04
【问题描述】:
我应该使用相同的权重来计算双向 RNN 中的前向和后向传播,还是应该独立学习这些权重?
【问题讨论】:
标签: tensorflow neural-network keras pytorch recurrent-neural-network
我应该使用相同的权重来计算双向 RNN 中的前向和后向传播,还是应该独立学习这些权重?
【问题讨论】:
标签: tensorflow neural-network keras pytorch recurrent-neural-network
应该是独立的。见expected_hidden_sizehere。
【讨论】:
他们应该独立学习,因为他们学习不同的模式,除非你有palindromes。事实上,这是 Keras 中 Bidirectional 包装器中的默认值:
self.forward_layer = copy.copy(layer)
config = layer.get_config()
config['go_backwards'] = not config['go_backwards']
self.backward_layer = layer.__class__.from_config(config)
在上述source code 中,相反方向是一个副本,其权重与原始方向无关。
【讨论】:
就我个人而言,我没有经常看到前向和后向传递使用相同的权重集,而且我发现对前向和后向传播使用相同的权重集反直觉。
因为双向 RNN 的想法是为每个输入提供两个隐藏状态,提供有关当前输入之前应该(或现在)以及当前输入之后应该(或现在)的信息。如果您使用相同的共享权重集,则输入不能有这样两种不同的状态。
【讨论】: