概率校准:隐藏层在神经网络中的作用

数据挖掘 神经网络 喀拉斯 概率校准
2021-09-20 18:14:37

我尝试了一个简单的神经网络(逻辑回归)来玩 Keras。在输入中,我有 5,000 个特征(一个简单的 tf-idf 矢量化器的输出),在输出层中,我只使用随机统一初始化和α=0.0001 为了 大号2 使用 sigmoid 激活函数进行正则化(非常标准)。

我使用 Adam 优化器,损失函数是二元交叉熵。

当我显示两个类的概率时,我最终得到如下结果:

在此处输入图像描述

之后我尝试添加一个隐藏层 Rel激活函数、64 个节点以及用于正则化和初始化的相同参数。-- 编辑 -- 这里对于输出层我保持完全相同的参数(和s一世G一世d激活函数)与前面的 NN 一样。-- 编辑结束 --

但是现在当我绘制这两个类的概率分布时,我最终是这样的:

在此处输入图像描述

很明显,我不明白为什么通过添加隐藏层将概率推到 0 或 1 ?

你有任何我可以阅读的参考资料,以便我理解背后的数学吗?这可能很棒!

此外,有时(对于另一个应用程序使用更“更深”的神经网络)我得到与第二个相同的图,但这次预测的概率介于 [0.2;0.8]. 概率被推向一些“值”,但这些值更“集中”。不确定是否清楚。再次在这里我不明白这背后的现象是什么?我如何“调试”它以查看我的神经网络架构中的原因是什么?

此外,我如何“调整”我的 ANN 以获得“完美”的校准图(如在 scikit 网页中:https ://scikit-learn.org/stable/modules/calibration.html )?

预先感谢您提供的每一个可以启发我的答案:)

2个回答

当您考虑这些激活函数如何与网络输出层中的单元交互时,具有 ReLU 激活的网络产生比 sigmoid 激活更差的概率是有道理的。Sigmoid 将输出缩放到范围内[0,1],因此进入最终 sigmoid 分类单元的值将相当低。同时,基于 ReLU 的网络具有非常高的激活幅度的潜力,这将使估计的概率偏向频谱的任一端。

话虽如此,神经网络的校准通常还不是很清楚。去年在 ICML ( https://arxiv.org/pdf/1706.04599.pdf ) 上发表了一篇论文,该论文表明神经网络通常校准不佳,但并没有真正解释为什么会出现这种情况。然而,他们确实调查了影响校准的因素,并表明更深、更宽的网络通常比它们更浅、更窄的网络校准得更差。他们还表明,申请大号2正则化可以改善校准。

鉴于这些信息,我很惊讶您的(相当浅而窄的)网络校准得如此差。它可能对 NLL 过度拟合,所以我会尝试应用更重的正则化或训练更少的 epoch。如果这不起作用,请尝试实施温度缩放,这在我上面链接的论文中有所描述。他们在这里提供了一个 PyTorch 实现,因此希望翻译成 Keras 应该不会太难。

我花了太长时间试图校准我的 keras 概率输出。结果很简单。

等渗模型做得很好(如此之多以至于有过度拟合的风险

from sklearn.isotonic import IsotonicRegression
ir = IsotonicRegression()
ir.fit(results.pred,results.act)
results['iso'] = ir.predict(results.pred)

这篇博客文章有更多细节和一些有用的校准图代码。最好的事情是我的概率总和与案例数量相同。

显然,您应该通过在您的训练集上训练 ir 模型来验证这一点,然后将其应用于您的网络对测试数据的预测。我对通过 Brier 分数和 AUC 衡量的表现感到非常满意。

您将看到对 Platt 缩放的引用。据我所知,等渗缩放在大型数据集上更胜一筹。