如何确定使用哪种合并模式(加/平均/乘/点/连接)?

zsh*_*tom 4 python merge keras

在测试了【babi_rnn.py】和【babi_memnn.py】的脚本后,【如何确定使用哪种Merge模式(add/average/multiply/dot/concat)?】的问题在我脑海中浮现了很多次。

例如,对于 LSTM 建模,使用 [concat] 合并假设两个分支的时间序列层输出似乎很容易理解。

但是,我不太容易理解为什么要使用[add] 来合并[babi_rnn.py] 中的两个分支。在 [babi_memnn.py] 中,招募了 [add]、[dot] 和 [concat] 合并模式。

那么,对于不同的使用场景,选择使用哪个合并功能有什么建议吗?

Ric*_*Han 7

这些合并功能分为 3 类。

add,avg是线性组合。它用于简单地将几个不同的组件组合在一起,因为梯度可以很好地通过加法和减法流动。一个常见的用例是将多个标准相加 (+) 以获得联合训练多个任务的神经网络的损失函数。

另一个例子是L2 正则化

L2 正则化旨在最小化权重的差异。所以权重越大,损失越大。


multiply是 的特例dot。在 Keras 中,您可以使用dot. 点积用于确定两个或多个向量彼此之间的相似程度。注意:dot产品实际上是一种收缩操作。它的幅度将小于或等于原始输入中的任何一个。在几何上证明为投影:


concat不丢弃任何输入。然后可以将连接的向量送入隐藏层以按元素重新缩放。你没有发现元素之间的相互作用。一种常见的做法是将堆叠 RNN 的隐藏状态和输出连接起来,并将其输入一个Dense层,让多个 RNN 执行类似于前馈网络的不同任务。


总而言之,每个 Merge 操作都有不同的用例。在 Luong Attention 论文中,提出了 3 种评分机制。根据您的型号,您可以挑选最适合您的型号。