深度学习笔记:神经网络梯度推导详解

需积分: 0 1 下载量 170 浏览量 更新于2024-07-01 收藏 696KB PDF 举报
"这篇博客主要介绍了神经网络的梯度推导过程,特别是针对一个包含全连接层和ReLU激活函数的网络结构。文章基于斯坦福大学的cs231n课程,目的是实现一个能够进行分类任务的神经网络,并在CIFAR-10数据集上进行测试。" 神经网络是深度学习的基础,它由多个层次组成,每个层次包含若干个节点,这些节点通过权重连接形成网络。在本篇博客中,作者讨论了如何对一个具有全连接层和ReLU激活函数的神经网络进行梯度推导,这是训练神经网络优化参数的关键步骤。 首先,网络结构包括输入层(D)、全连接层(ReLU激活,H)和softmax输出层(C)。输入X是一个[N×D]的矩阵,表示N个样本的D维特征;ground truth y是一个[N×1]的矩阵,表示每个样本的真实类别标签。网络参数包括两个权重矩阵W1[D×H]和W2[H×C]以及两个偏置向量b1[1×H]和b2[1×C]。 前向传播过程中,数据首先通过全连接层1,计算公式为FC1_out = X ⋅ W1 + b1,接着经过ReLU激活函数,得到非线性变换后的H_out = max(0, FC1_out)。然后,H_out与权重W2相乘并加上偏置b2,得到FC2_out = H_out ⋅ W2 + b2。最后,通过softmax函数转换为概率分布,即final_output = softmax(FC2_out)。 在反向传播阶段,计算损失函数关于各个参数的梯度,这是通过链式法则完成的。例如,为了计算损失L关于W2的梯度,需要用到∂L/∂FC2_out,这可以通过final_output和一个MaskMat减去得到。接着,根据链式法则,∂L/∂W2 = H_out^T ⋅ ∂L/∂FC2_out。对于偏置b2,∂L/∂b2 = [1, 1]^T ⋅ ∂L/∂FC2_out。而对于隐藏层的梯度,我们需要计算∂L/∂H_out,这涉及到ReLU函数的导数,只有当∂L/∂H_out为正时,其梯度才为正,否则为0,即∂L/∂H_out = max(∂L/∂H_out, 0)。最后,∂L/∂W1的计算需要使用X的转置XT ⋅ ∂L/∂H_out。 这个推导过程对于理解神经网络的训练机制至关重要,特别是在实践中优化算法如梯度下降法的应用。通过计算梯度,我们可以更新网络的权重和偏置,使网络逐步学习并改善其预测能力。在实际应用中,这种推导通常通过自动微分库(如TensorFlow或PyTorch)来实现,但理解底层原理对于调试和改进模型至关重要。