一个与多个输出神经元

人工智能 神经网络 机器学习 人工智能设计 多层感知器
2021-10-20 11:55:04

考虑一个输出 0 到 4 的整数“评级”的 MLP。说这可以通过以下任一方式建模是否正确:

  1. 将数据集中的每个评级映射到 0 和 1 之间的“标准化集”(即 0、0.25、0.5、0.75、1),在输出处有一个具有 sigmoid 激活的单个神经元提供一个十进制值,然后将其作为评级最接近“标准化集合”中的该值

  2. 有 5 个带有 softmax 激活函数的输出神经元输出 5 个值,每个值代表 5 个评级之一作为结果的概率,然后将哪个神经元给出最高概率作为评级?

如果确实如此,人们通常如何决定“走哪条路”?方法 1 显然会产生一个更简单的模型。每种方法的考虑因素和优缺点是什么?也许有几个具体的例子来说明?

3个回答

这取决于输出是连续变量还是离散变量。如果输出变量是离散的(它可以是有限数量的可能性),如在分类任务中(例如,您试图将输入放入 5 个类别之一),您想使用每个类一个输出神经元。但是,如果变量是连续的,则应该只使用一个输出神经元。

这是因为培训过程的运作方式。在训练您的网络时,会连续进行调整以尝试减少错误。这些调整是在错误的方向上进行的——所以如果网络预测的值太高,那么网络的权重会被调整以降低输出值。另一方面,如果网络预测的值太低,则调整网络的权重以使输出更大。

如果你有标记为 0 到 4 的输出神经元和一个带有一些输入值的训练样本和 2 的目标预测,那么神经网络将进行预测。一旦预测完成,每个神经元都会被单独调整——在这种情况下,神经元 2 将在正确概率的方向上进行调整,而所有其他神经元将在错误概率的方向上进行调整。通过这种方式,您可以对每个类别进行一个预测。

反向传播是关于误差归因,使用多个神经元可以更好地归因神经网络的误差,因为神经网络可以单独调整每个神经元,从而调整每个类所需的概率。

使用具有 sigmoid 激活函数的单个神经元会不太好,因为 sigmoid 函数会使接近 0 和 1 的值饱和,因此相对于其他类别,对类别 0 和类别 4 会有不自然的偏差。神经网络可以学会克服这一点,但这需要更多时间。

在一个输出神经元的情况下,您不必使用 sigmoid。正如 Teymour Aldridge 所建议的那样,它会导致输出 0 或 1 的趋势。我通常做的是将输出层之前的层设置为 tanh 的 sigmoid,这样它就不会输出可笑的数字,并将输出层设置为线性的。在某些情况下,它会输出类似 1.5 的内容,但随着时间的推移会消失。

希望能帮助到你 :)

可以进行一组较大的设计和设置来学习给定一组标记示例的评分函数。如果目标是简单性和有效性(准确性、可靠性和速度),则应考虑第三种选择。

问题中的要求包括“输出整数等级 0 [到] 4 [包括]。” 对于这样的离散结果,所需的输出位数b(在哪里s是可能的状态数,并且I是整数的集合)如下所示。

minb(bIblog2s)

在这种情况下,我们需要三位输出。

s=5b=3

请注意,对于 0 到 7 的类似配置等级,也只需要三位输出。无论哪种方式,如果输出层的激活函数是二元阶跃函数,它可能是最简单和最有效的。这消除了应用后舍入的需要。然后,输出层将提供一个表示评级的二进制值。学习的目标是减少前馈输出与每个示例的相关标签二进制值之间的误差。

先前的层可以是 sigmoid 或更现代且问题更少的连续激活函数,如 ISRLU。

由于工程师可以选择学习框架使用的误差函数来接受任何输入范围和分布,因此标准化监督学习的标签主要用于消除计算误差所需的时间和资源消耗操作中的冗余。以评级作为标签,除非评级分布是倾斜的并且数据集使得学习时间过长,否则可能不需要归一化。如果是这样,可能是因为提前改进标签分布(需要将浮点输入到误差函数并消除偏斜)会减少学习时间。

其他两种方法引入了上述上下文中提到的不必要的复杂性。在不增加收敛障碍的情况下消除复杂性的结果是在学习期间和学习后的执行期间效率更高。