损失函数只是一种衡量神经网络错误程度的方法,它不会影响神经元的输出。
假设我们有一个具有 3 个输出神经元的神经网络,它试图对猫、狗和人类的图像进行分类。它给出的输出是神经网络分类的置信度。例如,如果输出为 [0, 0.2, 0.8](0 为第 1 个神经元的输出,第 2 个神经元的输出为 0.2,第 3 个神经元的输出为 0.8),这意味着神经网络认为图像有 0% 的概率是猫,20%是狗,80%是人。
假设显示给网络的图像是人,我们可以说目标值为 [0, 0, 1],因为我们希望它以 100% 的置信度输出图像是人。现在我们必须使用损失函数来衡量预测的实际错误程度。有许多损失函数,但为简单起见,我将使用平方误差。在这种情况下,损失将等于 (1-0.8)^2=0.04(预期值 - 输出)^2。
输出越接近1,括号内的结果越接近0,所以损失会更小。目标是最小化这个损失函数。例如,如果输出为 1 而不是 0.8,则网络的损失将为 (1-1)^2 = 0。如果输出为 0.2,则损失为 (1-0.2)^2 = 0.64,即比前两个更大,因为它“更错误”。
为了训练网络,我们使用它而不是准确性,原因如下。使用这两个输出 [0, 0.1, 0.9], [0.2, 0.3, 0.5] 网络预测“人类”,这是最大值,但在第一种情况下它是 90% 确定,而在第二种情况下它只有 50% 确定. 我们可以说第一个网络更好,但如果我们只使用准确度,因为两者预测相同,它们看起来也一样好。
当他们犯错时也会发生同样的情况。如果期望值为 [0, 1, 0] 并且一个模型预测 [0.5, 0.4, 0.1] 而另一个预测 [0.9, 0, 0.1],那么他们都错了,但第一个模型的错误较少。第一个损失是 (1-0.4)^2 = 0.36,第二个损失是 (1-0)^2 = 1,这要高得多