激活函数的导数如何测量神经网络中的错误率?

人工智能 神经网络 训练
2021-10-27 05:25:58

一篇名为“使用神经网络的文本分类”的博客文章指出,使用 sigmoid 函数输出的导数来衡量错误率。

这样做的理由是什么?

我认为 sigmoid 函数输出的导数只是 sigmoid 线在特定点的斜率。

这意味着当 sigmoid 输出为 0.5 时它是最陡峭的(当 sigmoid 函数输入为 0 时发生)。

为什么 0 的 sigmoid 函数输入意味着错误(如果我理解正确的话)?

资料来源: https ://machinelearnings.co/text-classification-using-neural-networks-f5cd7b8765c6

我们使用 sigmoid 函数来标准化值及其导数来测量错误率。迭代和调整,直到我们的错误率低到可以接受。

def sigmoid(x):
    output = 1/(1+np.exp(-x))
    return output

def sigmoid_output_to_derivative(output):
    return output*(1-output)

def train(...)
    ...
    layer_2_error = y - layer_2
    layer_2_delta = layer_2_error * sigmoid_output_to_derivative(layer_2)
    ...

更新

道歉。我不认为我很清楚(我已经更新了标题)

我知道我们不需要使用 sigmoid 作为激活函数(我们可以使用 relu、tanh 或 softmax)。

我的问题是关于使用derivative to measure the error rate(上面黄色文章的完整引用)->激活函数的导数与测量/修复“错误率”有什么关系?

4个回答

在基于梯度的最小化方法中计算机器学习算法的误差时会使用此导数。阅读下文了解更多信息。

在执行监督分类时(使用输入的 X、Y 数据向量和要训练的结果数据),您从误差函数开始

E(X, Y; θ)= ∑ i (ƒ(x i ; θ)-y i ) 2

对于所有数据实例 i 的总误差,其中 f 是您的神经网络,线性回归,...感兴趣的方法,θ 是权重集。这里的目标是找到在预测训练数据 (y) 时最小化错误的权重(理想情况下也可以推广到新数据)。明确地说,ƒ(x i ; θ); 输出应为 y i的感兴趣值。E 衡量它在预测中的距离。

所以为了训练你的分类器,你可以用梯度下降之类的方法来优化 E。因此,当 ∂E/∂θ = 0(对于特定的 θ)时,这意味着您达到了误差函数的局部最小值,或者预测器当前状态的误差很低的点,这意味着它是(希望如此)一个很好的预测器。

请注意,此处的 ƒ 与激活函数不同,因为神经网络的定义与线性回归等不同,并且必须执行一种称为反向传播的特殊梯度下降。

所以当你取 ∂E/∂θ 时,对于神经网络来说它等于多少?您应该注意涉及激活函数导数,这就是它用于测量误差的方式。

如果你不想要一个,你就不需要一个 sigmoid 函数。任何可微函数都可以。Sigmoid 函数只是众多合适的函数之一。如果您想要一个适当的解决方案,您可以编写自己的可微函数。

测量神经网络的错误率根本不涉及 sigmoid 函数的导数。它只需要神经网络输出和预期输出。神经网络如何获得这些输出并不重要,输出只需要基于输入。该特定文本的另一部分试图说的是,当您使用算法反向传播来训练神经网络时,sigmoid 函数的导数很重要。该方法涉及使用导数来优化神经网络。虽然由于涉及到多少变量,这种技术在神经网络中更加复杂,但如果您查看微积分教科书并查看通常标题为导数应用的章节,您可以轻松了解这种方法的基础知识。

你的损失的导数是给定预测的“斜率”。所以通过“沿斜坡向下移动”,我们可以降低损失函数的值。

直观地,可以想象一个球沿着切线方向滚下斜坡。最终球会滚向最低点(全局最小值),或者一个小坑洞(局部最小值),或者如果你运气不好,甚至会出现一些奇怪的形状(鞍点)。

对于一些固定的输入/输出对,我们可以将损失函数视为参数(权重)的值。在这里,Z 轴是损失f的值(您要优化的值),而 X、Y 轴是损失f的参数(允许更改的值):

在此处输入图像描述

请注意,提供的图像有点误导。在实践中,我们只知道我们探测过的位置的损失函数的值。只有当我们评估每个参数的损失函数时,才能绘制整个图。所以我们不能只看图就知道哪个位置最好。

回想一下,预测任务的目标是以某种方式更新参数,以便我们最小化某些给定输入/输出对的损失函数。假设损失函数相当平滑,那么我们达到较低错误率值的最佳选择是朝着斜率方向迈出一小步,这是函数的导数。“小步”的大小称为学习率。

假设在给定不同的输入/输出对的情况下,损失函数看起来相似,通过迭代地向下移动每个数据点的斜率,我们最终可以达到一组“良好”的权重,并给出低误差。

这就是反向传播算法的动机和思想。

一个很好的后续问题可能是:为什么我们说给定不同的数据点损失函数是相似的?这与假设数据中存在某种规律性基本相同,从而存在数据集自然接近的“最正常的损失函数”。

希望这会有所帮助!