我正在使用 cblas 库在 iOS 设备中实现 GRU。我使用了来自 Wiki 的 GRU 公式,以及我在 Coursera 上学习的 Wikipedia 中的相同公式。而且我发现在我的实现和 tf.Keras 中具有相同权重的结果是不同的。经过调试,我发现 Keras 和 Torch 中的 GRU 使用不同的公式计算 h_t:
接下来在wiki公式中:
h_t = (1 - z) * h_t_previous + z * h_tilda。
在 Keras 和 Torch 中时:
h_t = (1 - z) * h_tilda + z * h_t_previous。
有人可以解释为什么它们不同吗?从逻辑上讲,更新门乘以新值(我想从新值更新什么),不是吗?有趣的事实是,MPSGRUDescriptor 具有用于使用这两个公式处理此拐杖的 flipOutputGates 变量。