我编写了一个只有单层的简单 MLP。当使用 sigmoid 激活函数学习 XOR 函数时,损失值持续下降。然而,如果我将 XOR 数据的标签从 [0, 1] 改为 [-1, 1],并使用 tanh 激活函数,损失值却没有下降。仅仅通过改变标签并使用 tanh 激活函数应该仍然能正常工作,不是吗?如果是这样的话,我的 tanh 实现哪里出了问题呢?
回答:
你的网络无法预测的样本是 ([0,0], -1),这是因为缺乏偏置。当输入 I = [0,0] 时,我们有 H = dot(Wh,I) = [0,0,..0]。因为 tanh(0) = 0,网络无法学习任何将零转换为非零的变换。添加偏置可以解决这个问题;一个临时解决方案可以通过在数据集中添加一列常数来模拟偏置的效果。