神经网络的准确性和损失保证?

数据挖掘 机器学习 神经网络
2021-09-23 04:17:56

这个问题是我正在为真正的考试做准备的样本考试的一部分。我已经在这个问题上停留了很长一段时间,并且无法真正激发我的答案,因为它一直提到保证,有人可以解释我们在神经网络中可以有哪些保证,比如所描述的那个?

网络说明:

假设一个深度神经网络(DNN)将手写数字的图像(例如,MNIST)作为输入图像。输入网络由 28x28 = 784 个输入单元、一个逻辑单元隐藏层和一个作为输出层的 10 个单元的 softmax 组组成。损失函数是交叉熵。我们有很多训练案例,我们总是使用误差反向传播算法根据整个训练集计算权重更新。我们使用的学习率对于所有实际目的都足够小,但又不会小到网络无法学习。当权重更新为零时,我们停止。对于以下每个问题,回答是或否,并非常简要地解释。

问题:

  1. 这种 DNN 配置是否会使权重最小化损失值(可能存在多个全局最优值)?

  2. 这种 DNN 配置是否保证每一步都减少损失?我们使用我们的网络对图像进行分类,方法是简单地查看当网络呈现图像时 10 个输出单元中哪个获得最大概率,并将该输出单元的数量声明为网络猜测标签。

  3. 这种 DNN 配置是否保证网络在训练数据上(通过遵循这种分类策略)犯的错误数量永远不会增加?

2个回答

对于我的答案,我假设您正在谈论批量(不是小批量或随机)梯度下降。

  1. 不。假设您用相同的值初始化所有权重。然后所有梯度(在同一层中)将是相同的。总是。因此,网络有效地每层只学习一个参数。有可能(并且很可能)这既不是全局也不是网络的局部最小值(具有更多参数)。
  2. 是的,因为学习率“对于所有实际目的都足够小”。(不,如果您使用 SGD 或小批量梯度下降)
  3. 你确定。我认为正确的答案是“不,网络可以在交叉熵之间犯更多错误。”。它肯定会改善 CE 损失,同时在准确性上变得更差(见下面的证明)。但是,我不确定梯度是否会导致这样的结果。

3 的示例

#!/usr/bin/env python

from math import log

def ce(vec):
    """index 0 is the true class."""
    return -(log(vec[0]) + sum([log(1-el) for el in vec[1:]]))

a = [0.1001, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.0999]
print(ce(a))
b = [0.49, 0.51, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
print(ce(b))

给出:

ce(a) = 3.24971912864
ce(b) = 1.42669977575

因此,交叉熵损失下降(如预期),正确类别的概率增加(如预期)但它犯了一个错误(如果你简单地采用 argmax)。

保证是证明某些算法将始终具有一定的性能(或性能永远不会比保证差)。一般来说,NN 没有太多的理论保证。但是这个问题的范围非常有限,某些保证可以成立。

  1. 这个问题可能有点模棱两可,但我倾向于回答“不”。问题是询问培训是否会导致最小值,但他们没有指定最小值是全局最小值还是局部最小值。如果你只是简单地沿着损失函数的梯度下降(就像我们在这里所做的那样),你极有可能以局部最小值结束,尽管不太可能以全局最小值结束。然而,在实践中,局部最小值并不比全局最小值差多少。我说这种情况极有可能发生,因为您意外降落在鞍点上的可能性很小。这将是一个梯度消失的点,不是局部最小值,当你降落在那里时,训练将停止。(或者,更不可能的是,您可能非常不走运并从局部最大值开始!) 如果他们正在寻找保证,你不能保证这不会发生。但是如果 DNN 相当大并且权重初始化是随机的,你可以保证它几乎肯定不会发生,所以有一个支持“是”的论据。

  2. 是的。由于我们正在降低损失函数的梯度,因此损失函数永远不会在任何步骤上增加。(这是假设损失函数相当平滑。)

编辑:在另一个答案中进行了一些讨论后,我决定我的原始答案不正确。我的更新答案如下:

  1. 不会。虽然训练会降低整个训练集的整体交叉熵,但单个案例的交叉熵可能会增加。因此,可以构建一个训练集,使得除了这个从正确分类移动到不正确分类的特定示例之外,所有情况的分类从一个步骤到下一步都保持相同。训练集上的整体交叉熵会降低,但准确率会提高。