数学角度看深度学习

从数学的角度来看,这段代码展示了神经网络训练的基本流程,包括前向传播、损失计算、反向传播和参数更新。我们可以通过梯度下降的方法来最小化损失函数。

数学解析

1. 定义和初始化

  • net 是一个神经网络模型,设模型参数为 (\theta),包括权重和偏置。

  • loss 是损失函数,定义为 ( L(\hat{y}, y) ),它衡量模型输出

    和真实标签 ( y ) 的误差。

  • num_epochs = 3 表示我们将训练模型 3 个轮次。

2. 训练循环

在训练过程中,每一个 epoch 都会经历以下步骤:

3. 小批量训练

代码中 for X, y in data_iter 遍历每个小批量的输入数据 (X) 和标签 (y):

  1. 前向传播:对于每个小批量 ( X ) 和标签 ( y ):

    • 模型通过前向传播计算预测输出:

    • 这里的 net(X) 代表了从输入到输出的所有计算,这通常包括线性变换、非线性激活函数等。

  2. 损失计算:计算当前小批量数据的损失 ( l ):

    其中,

    常见的损失函数有均方误差(MSE)和交叉熵(Cross Entropy)等,具体取决于任务的类型(回归或分类)。

  3. 梯度清零trainer.zero_grad()

  • 为了避免梯度的累积,清除上一批次计算出的梯度。
  1. 反向传播:计算损失 ( l ) 对模型参数 (\theta) 的梯度:
  • 通过 l.backward() 调用链式法则,将损失的梯度从输出层逐层传递到每一层的参数(即计算各层参数的偏导数)。
  1. 参数更新:利用梯度下降算法更新参数:其中 (\alpha) 是学习率,控制每次更新的步长大小。

4. 整体损失评估

在每个 epoch 结束时,代码再次计算模型在整个数据集上的损失:

这样可以监测每个 epoch 后的损失,判断训练的进展。

总结

从数学角度看,这段代码实现了一个典型的 梯度下降优化过程,通过前向传播计算损失,然后通过反向传播计算梯度,再利用梯度下降更新参数。最终,损失逐渐减小,模型在数据上的性能逐步提升。


数学角度看深度学习
http://example.com/2024/10/29/20241029_MachineLearning_/
作者
XuanYa
发布于
2024年10月29日
许可协议