本文最后更新于 2025-01-18,文章内容可能已经过时。

以下是一个标准单层神经网络的完整流程,用数学公式步骤解释整个过程。


1. 输入数据准备

输入数据​ \mathbf{X} 是一个矩阵,维度为 ​ m \times n ,其中:

  • ​ m 是样本数量。
  • ​ n 是特征数量。

目标值为​ \mathbf{y} ,维度为 ​ m ,每个样本对应一个标量的真实标签。

​ \mathbf{X} = \begin{bmatrix} x_{11} & x_{12} & \cdots & x_{1n} \\ x_{21} & x_{22} & \cdots & x_{2n} \\ \vdots & \vdots & \ddots & \vdots \\ x_{m1} & x_{m2} & \cdots & x_{mn} \end{bmatrix}, \quad \mathbf{y} = \begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_m \end{bmatrix}


2. 初始化参数

  • 权重向量 ​ \mathbf{w} ,维度为 ​ n
  • 偏置 ​ b ,是一个标量。

权重和偏置初始化为随机值:

​ \mathbf{w} = \begin{bmatrix} w_1 \\ w_2 \\ \vdots \\ w_n \end{bmatrix}, \quad b \in \mathbb{R}


3. 前向传播 (Forward Propagation)

(1) 计算加权和 ​ \mathbf{z}

对每个样本​ i 计算:

​ z^{(i)} = \mathbf{x}^{(i)} \cdot \mathbf{w} + b

用矩阵表示整个数据集的加权和:

​ \mathbf{z} = \mathbf{X} \cdot \mathbf{w} + b

其中,​ \mathbf{z} 是一个​ m 维向量。

(2) 通过激活函数

使用 Sigmoid 激活函数计算输出​ \hat{\mathbf{y}}

​ \hat{y}^{(i)} = \sigma(z^{(i)}) = \frac{1}{1 + e^{-z^{(i)}}}

整个数据集的输出表示为:

​ \hat{\mathbf{y}} = \sigma(\mathbf{z})

其中,​ \hat{\mathbf{y}} 是一个​ m 维向量,表示所有样本的预测值。


4. 计算损失 (Loss Function)

采用均方误差 (MSE) 损失函数:

​ L = \frac{1}{2m} \sum_{i=1}^m \left( \hat{y}^{(i)} - y^{(i)} \right)^2

其中:

  • ​ \hat{y}^{(i)} 是预测值。
  • ​ y^{(i)} 是真实值。

5. 反向传播 (Backpropagation)

(1) 损失函数对预测值的偏导数

​ \frac{\partial L}{\partial \hat{y}^{(i)}} = \hat{y}^{(i)} - y^{(i)}

(2) 激活函数的导数

Sigmoid 激活函数的导数为:

​ \sigma'(z^{(i)}) = \sigma(z^{(i)}) \cdot (1 - \sigma(z^{(i)}))

(3) 加权和​ z 的偏导数

链式法则计算损失函数对​ z^{(i)} 的偏导数:

​ \frac{\partial L}{\partial z^{(i)}} = \frac{\partial L}{\partial \hat{y}^{(i)}} \cdot \sigma'(z^{(i)})

(4) 参数更新

对每个权重​ w_j

​ \frac{\partial L}{\partial w_j} = \frac{1}{m} \sum_{i=1}^m \frac{\partial L}{\partial z^{(i)}} \cdot x_j^{(i)}

对偏置​ b

​ \frac{\partial L}{\partial b} = \frac{1}{m} \sum_{i=1}^m \frac{\partial L}{\partial z^{(i)}}

(5) 更新权重和偏置

使用梯度下降法更新参数:

​ w_j = w_j - \eta \cdot \frac{\partial L}{\partial w_j}

​ b = b - \eta \cdot \frac{\partial L}{\partial b}

其中,​ \eta 是学习率。


6. 迭代训练 (Training Loop)

  • 循环:重复前向传播和反向传播,逐步优化 ​ \mathbf{w} ​ b
  • 终止条件:达到设定的最大迭代次数或损失函数收敛。

7. 预测 (Prediction)

训练完成后,使用模型进行预测:

​ \hat{y} = \sigma(\mathbf{X} \cdot \mathbf{w} + b)

将预测结果通过阈值处理为分类结果(例如 0 或 1):

​ \text{Prediction} = \begin{cases} 1, & \text{if } \hat{y} \geq 0.5 \\ 0, & \text{if } \hat{y} < 0.5 \end{cases}


总流程图

​ \hat{y} = \sigma(\mathbf{X}_{\text{new}} \cdot \mathbf{w} + b)

  1. 输入数据 ​ (\mathbf{X}, \mathbf{y})
  2. 初始化参数 ​ (\mathbf{w}, b)
  3. 前向传播
    • ​ z = \mathbf{X} \cdot \mathbf{w} + b
    • ​ \hat{\mathbf{y}} = \sigma(z)
  4. 计算损失
    • ​ L = \frac{1}{2m} \sum (\hat{y} - y)^2
  5. 反向传播
    • ​ \frac{\partial L}{\partial \mathbf{w}}, \frac{\partial L}{\partial b}
  6. 更新参数
    • ​ \mathbf{w} \leftarrow \mathbf{w} - \eta \cdot \frac{\partial L}{\partial \mathbf{w}}
    • ​ b \leftarrow b - \eta \cdot \frac{\partial L}{\partial b}
  7. 迭代:返回到步骤 3,直到损失函数收敛。
  8. 预测新数据​ \hat{y} = \sigma(\mathbf{X}_{\text{new}} \cdot \mathbf{w} + b)