深度学习的训练过程是指通过大量的数据来调整神经网络的参数,以使其能够对输入数据进行准确的预测或分类.
训练神经网络的步骤
损失函数(Loss Function)是一个性能指标,反映神经网络生成接近期望值的值的程度。 损失函数直观上就是期望输出与实际输出之间的差异。 机器学习的目标是最小化损失函数。 因此,机器学习的问题就变成了最小化损失函数的问题。
梯度下降和反向传播算法的组合用于训练神经网络,即最小化总损失函数
总体步骤是
- 通过网络前向传播数据点得到输出
- 使用损失函数计算总误差
- 使用反向传播算法计算损失函数相对于每个权重和偏差的梯度
- 使用梯度下降来更新每一层的权重和偏差
- 重复上述步骤以最小化总误差。
因此,一句话我们本质上是通过网络中的连接逐层向后传播总误差,计算每个层中每个权重和偏差对总误差的贡献(梯度),然后使用梯度下降算法进行优化 权重和偏差,并最终最小化神经网络的总误差。
-
训练数据(Train Data):指用于训练模型的数据集,通常包含输入样本和对应的标签(如果是监督学习任务)。训练数据的质量和数量直接影响模型的性能和泛化能力。
-
损失函数(Loss Function):用于衡量模型在训练数据上的预测结果与真实标签之间的差异。损失函数的设计旨在使模型能够尽量减小预测误差,常见的损失函数包括均方误差(Mean Squared Error)、交叉熵(Cross Entropy)等。
-
学习算法(Learning Algorithm):指用于更新模型参数以最小化损失函数的算法。在深度学习中,常用的学习算法是梯度下降(Gradient Descent)及其变体,通过计算损失函数对模型参数的梯度,并沿着梯度的反方向更新参数,以逐步降低损失函数的值。
-
误差(Error):指模型在训练数据上的预测结果与真实标签之间的差异,通常使用损失函数来度量。
-
优化器(Optimizer):在梯度下降算法中,优化器负责根据损失函数的梯度更新模型参数。常见的优化器包括随机梯度下降(Stochastic Gradient Descent,SGD)、Adam、RMSProp等,它们具有不同的优化性能和收敛速度。
前向传递和后向传递
前向传递(Forward Pass)
前向传递基本上是一组将网络输入转换为输出空间的操作。 在推理阶段,神经网络仅依赖于前向传递。 让我们考虑一个具有 2 个隐藏层的简单神经网络。它尝试将二进制数分类为偶数或奇数, 这里我们假设除了最后一层的神经元之外,每个神经元都使用ReLU激活函数(最后一层使用softmax)。
第一层第一个神经元:
第一层第二个神经元:
将其重写为矩阵形式我们将得到:
反向传播(Backward Pass)
如果我们完成所有计算,我们最终会得到一个输出,这实际上是不正确的(因为 0.56 > 0.44 我们输出 Even 作为结果)。 因此,知道这一点后,我们想要更新神经元权重和偏差,以便得到正确的结果。 这正是反向传播发挥作用的地方。 反向传播是一种计算每个网络变量(神经元权重和偏差)的误差梯度的算法。 这些梯度随后用于优化算法,例如梯度下降,它会相应地更新它们。 权重和偏差更新的过程称为向后传递。
为了开始计算误差梯度,首先,我们必须计算误差(即损失)本身。 我们将使用标准分类损失——交叉熵。 然而,损失函数可以是任何可微分的数学表达式。 回归问题的标准选择是均方根误差 (RMSE)。 交叉熵损失如下所示:
其中 M 是类的数量,p 是网络输出的向量,y 是真实标签的向量。
链式法则(Chain Rule)和偏导数(Partial Derivatives)回顾
因此,我们可以将神经网络的训练过程视为反向传播和梯度下降的组合。 这两种算法可以通过理解链式法则和偏导数来解释。
链式法则
链式法则是计算复合函数导数的公式。 复合函数是由其他函数内部的函数组成的函数。 给定复合函数 f(x) = h(g(x)),f(x) 的导数由链式法则给出:
您还可以将这个想法扩展到两个以上的函数。 例如,对于由三个函数 A、B 和 C 组成的函数 f(x),我们有 f(x) = A(B(C(x)))
链式法则告诉我们该函数的导数等于:
梯度下降(Gradient Descent)和偏导数(Partial Derivatives)
梯度下降是一种迭代优化算法,用于寻找函数的局部最小值或全局最小值。 该算法使用以下步骤进行工作
我们从函数图上的一点开始
我们从该点找到函数下降最快的方向
我们(沿着该方向指示的路径向下)一小步到达新点
直线在特定点的斜率由其导数表示。 然而,由于我们关注两个或多个变量(权重和偏差),因此我们需要考虑偏导数。 因此,梯度是存储多变量函数的偏导数的向量。 它帮助我们计算具有多个自变量的函数在曲线上特定点的斜率。 我们需要考虑偏导数,因为对于复杂(多变量)函数,我们需要确定每个单独变量对整体导数的影响。 考虑两个变量 x 和 z 的函数。 如果我们改变 x,但保持所有其他变量不变,我们就会得到一个偏导数。 如果我们改变 z,但保持 x 不变,我们会得到另一个偏导数。 该组合代表多变量函数的全导数。
因此,整个神经网络的训练可以看作是链式法则和偏导数的结合
整体观
回顾一下,从整体来看——我们有错误的起点,即损失函数。 该图显示了遵循此模式的反向传播错误的过程:
输入 -> 前向调用 -> 损失函数 -> 导数 -> 误差反向传播。 在每个阶段,我们都会得到该阶段权重的增量。 如下图所示,W1 = 3,w2 = 1