双向 RNN 单元 - 共享与否?
Bidirectional RNN cells - shared or not?
我应该使用相同的权重来计算双向 RNN 中的前向和反向传递,还是应该独立学习这些权重?
应该是独立的。参见 expected_hidden_size
here。
它们应该独立学习,因为它们学习不同的模式,除非您在 Keras 中有 palindromes. In fact that is the default in the 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 的想法是为每个输入设置两个隐藏状态,给出关于当前输入之前应该(或)什么以及当前输入之后应该(或)什么的信息。如果您使用相同的共享权重集,则输入不能有这两种不同的状态。
我应该使用相同的权重来计算双向 RNN 中的前向和反向传递,还是应该独立学习这些权重?
应该是独立的。参见 expected_hidden_size
here。
它们应该独立学习,因为它们学习不同的模式,除非您在 Keras 中有 palindromes. In fact that is the default in the 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 的想法是为每个输入设置两个隐藏状态,给出关于当前输入之前应该(或)什么以及当前输入之后应该(或)什么的信息。如果您使用相同的共享权重集,则输入不能有这两种不同的状态。