前向传播

前向传播是神经网络通过逐层计算,从输入层开始,经过隐藏层,最终到达输出层,以产生预测值的过程。

在这个过程中,输入数据通过网络中的权重和偏置进行线性变换,然后通过激活函数进行非线性变换,得到每一层的输出。最终,输出层的输出即为神经网络的预测值

  1. 输入层接收数据

    输入层是神经网络的第一层,它接收来自外部的数据。

  2. 计算隐藏层输出

    数据从输入层传递到隐藏层,隐藏层中的每个神经元都会接收来自上一层神经元的输入,并计算其加权和。加权和通过激活函数(如ReLU、Sigmoid、Tanh等)进行非线性变换,生成该神经元的输出。

  3. 计算输出层输出

    输出层是神经网络的最后一层,它接收来自隐藏层的输入,并计算最终的输出。

PyTorch中实现前向传播需要基于nn.Module类定义网络结构,并在forward()方法中明确数据流的计算过程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import torch.nn as nn
class NeuralNetwork(nn.Module):
  def __init__(self):
 super(NeuralNetwork, self).__init__()
self.flatten = nn.Flatten()  # 展平输入(如28x28图像转为784维向量)
self.hidden1 = nn.Linear(784128)
self.hidden2 = nn.Linear(784128)
self.out = nn.Linear(6410)  # 输出层(10分类任务)
def forward(self, x):       
x = self.flatten(x)       
x = self.hidden1(x)      # 线性变换       
x = torch.relu(x)        # 非线性激活       
x = self.hidden2(x)       
x = torch.sigmoid(x)       
x = self.out(x)          # 输出层预测值return x

反向传播

反向传播则是根据损失函数计算梯度,并据此更新网络的权重和偏置。

在这个过程中,从输出层开始,使用损失函数逐层计算每个神经元的误差,然后利用这些误差和前一层的激活值来计算当前层权重的梯度(损失函数对权重的偏导数)。最后,使用这些梯度,通过优化算法(如梯度下降)更新网络的参数,以减小损失函数的值。