在当今人工智能领域,人工神经网络(ANN)是一个备受关注的技术,而梯度下降(GD)算法在优化神经网络参数方面起着关键作用。本系列教程将从零开始,逐步引导大家在Python中实现梯度下降算法,用于在反向传播阶段优化人工神经网络的参数。而且,我们的实现将具有通用性,能够适用于任何ANN架构。
从简单架构开始
本教程作为系列的第一部分,我们将从一个非常简单的ANN架构入手,即只有一个输入层(包含1个输入)和一个输出层(包含1个输出),并且不使用隐藏层,为了简化,一开始也不使用偏置。
前向传播
首先,我们来看前向传播过程。在前向传播中,输入X1会乘以其权重W,得到结果X1 * W。一般来说,前向传播会将每个输入与其关联的权重相乘,然后将所有输入和权重的乘积相加,这被称为乘积和(SOP)。例如,如果有2个输入X1和X2,它们的权重分别是W1和W2,那么SOP就是X1 * W1 + X2 * W2。但在我们这个例子中,只有1个输入,所以SOP的概念在这里意义不大。
计算完SOP后,我们需要将其输入到输出层神经元的激活函数中。激活函数的作用是捕捉输入和输出之间的非线性关系,从而提高网络的准确性。在本教程中,我们使用的是sigmoid函数,其公式为特定的形式。假设这个例子中的输出范围是从0到1,那么sigmoid函数返回的结果就可以被视为预测输出。这个例子原本是一个回归问题,但通过将sigmoid函数返回的分数映射到一个类别标签,也可以很容易地转换为分类问题。
计算出预测输出后,我们使用平方误差函数来衡量预测的误差。此时,前向传播就完成了。基于计算出的误差,我们就可以进行反向传播,计算用于更新当前权重的权重梯度。