简介
神经网络(NNs)可以学习识别模式,并根据输入数据进行预测。神经网络的核心是它的权重,它是决定神经元之间连接强度的数字值。在训练过程中,网络调整这些权重,以使其在特定任务上的误差最小化。这个权重更新的过程对NN的有效预测至关重要。
在这篇文章中,我们将仔细研究权重是如何在一个过度简化的NN中更新的。我们将首先讨论权重更新的基本原则,包括梯度下降的概念。然后,我们将深入探讨权重更新背后的数学原理,解释网络如何使用其损失函数的梯度来调整其权重。
免责声明
值得注意的是,有许多资源涵盖了NN中的权重更新主题。从学术论文到博客文章,再到在线课程,对于任何想要了解深度学习的这一关键方面的人来说,都有大量的信息。
还要注意的是,这篇文章主要是我学习过程中的一个小里程碑的结果,因为我正在寻求加深我对涉及机器学习/深度学习的各种概念的理解。也就是说,如果读者发现这个资源是有用的、有洞察力的,我将非常高兴。
我猜想,这篇文章的附加价值将体现在围绕偏导数计算的细节上。在我读过的大多数资源中,都提供了方程的答案,而不是一步步地阐述。
目标
NNs中权重更新的核心是希望最小化一个函数,我们称之为损失函数或成本函数。粗略地说,这个函数衡量网络预测和输出数据的真实值之间的差异。通过减少损失函数的值,我们可以使网络的预测值与真实值更加相似。
为了简单起见,我们将使用二元分类作为网络训练的任务。在二元分类任务中,通常优化的损失函数是交叉熵函数,因为它的凸性和它有一个唯一的最小值。这个函数测量网络输出的预测概率分布和数据的真实分布之间的差异。
交叉熵公式
在交叉熵公式中 y表示真实值,而 a预测值。另外,为了简单起见,我们将考虑一个单一的真值 y以及与之相关的一个预测值 a和一个单一的权重 w;一个单一的偏差 b和一个单一维度的输入 x.我将把 "更复杂 "的网络留给以后的文章。
(左)NN的通常表示法|(右)我们对NN的过度简化的表示法
前进通道
简单版本的NN接受一个输入,并对其进行线性变换计算。之后,这个线性变换的结果被传递给一个非线性函数。在我们的简化案例中,这最后一个非线性函数的输出将是预测的值。这个过程在看插图时从左到右发生,我们称它为前向传递。
简化的NN内部的操作
成本计算
一旦对输入的线性和非线性操作进行了计算,我们就会得到一个最终值。然后将这个最终值与实际值进行比较,以衡量其差异。真实值和预测值越相似,成本函数的值就越小。反之,差异越大,成本函数的值就越大。
后向通行证
假设预测值与真实值非常相似或相等。我们可以假设网络准确地完成了它的工作,而且我们最好能在这里停止。然而,情况绝非如此,特别是在使用非简化的NN时。因此,为了减少预测值和真实值之间的距离,我们应该修改我们系统中可修改的东西。在我们的简化例子中,这些是权重 w和偏置 b.
为了更新这些值,通常使用梯度下降算法。这个算法的目的是找到使损失函数值最小化的权重集。
为了更新权重,我们首先计算损失函数相对于权重的梯度。
损失值相对于权重的梯度
损失相对于权重的梯度和相对于偏置的梯度不能直接计算。然而,可以使用链式规则一步一步地进行这种计算。这个过程从右到左进行,我们称之为逆向传递。
首先,我们计算损失相对于预测的梯度,因为成本是预测值的一个函数。换句话说,它们之间有一个直接的关系。
损失函数相对于预测值的梯度
下一步包括网络的非线性部分。我们将计算非线性函数的梯度,相对于 z(线性变换的输出)。注意,在这个例子中,我将使用sigmoid函数作为非线性函数。在这篇文章中,我不对sigmoid函数做任何详细的介绍。
西格玛函数(非线性函数)
而梯度的情况如下:
非线性函数关于z的梯度
请注意,如果使用另一个非线性函数,这看起来会有所不同。
到目前为止,我们能够计算出损失函数相对于Z的梯度 z (的线性变换),这要感谢我们之前计算的两个梯度。
损失相对于z的梯度
这样,我们终于可以计算出我们最初要找的梯度,即(a)损失函数相对于权重的梯度和(b)损失函数相对于偏差的梯度。
首先,我们计算相对于权重的梯度,如下所示:
损失函数相对于权重的梯度
同样地,我们可以计算损失函数相对于偏差的梯度:
损失相对于偏差的梯度
这就是了!所有需要的梯度都已经计算出来了。
作为提醒,梯度告诉我们,当我们对权重进行小幅调整时,损失函数的变化程度。剩下的就是更新权重和偏置的值。
我们沿着负梯度的方向调整权重,这意味着我们从每个权重中减去梯度的小倍数。我们添加一个小因素,控制变化的幅度,我们称之为学习率 α它决定了网络收敛到最佳权重的速度。
权重和偏置更新
这就是我们的简化NN的权重和偏置更新的样子,一个sigmoid作为非线性函数应用于线性变换:
权重和偏置更新
这就是我们如何更新NN的参数。
有一点需要补充的是,计算梯度和更新权重的过程要在更大的NN上重复多次,每次迭代都能使网络更接近最佳权重集。这个过程被称为反向传播(backpropagation)。
结论
总之,权重更新是神经网络的一个关键过程,它使神经网络能够从输入数据中学习并做出准确的预测。通过调整决定神经元之间连接强度的数值,神经网络可以使用梯度下降法使其在特定任务上的误差最小化。权重更新背后的数学原理涉及使用其损失函数的梯度来更新权重。
最后的话
值得注意的是,在大多数情况下,我们不需要从头开始复制反向传播算法,因为有一些工具可以抽象出执行细节,让我们轻松实现它。然而,彻底了解这个过程的运作方式是有益的,也是有趣的。