
一个标准的简单的单层神经网络
本文最后更新于 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)
- 输入数据 (\mathbf{X}, \mathbf{y})
- 初始化参数 (\mathbf{w}, b)
- 前向传播:
- z = \mathbf{X} \cdot \mathbf{w} + b
- \hat{\mathbf{y}} = \sigma(z)
- 计算损失:
- L = \frac{1}{2m} \sum (\hat{y} - y)^2
- 反向传播:
- \frac{\partial L}{\partial \mathbf{w}}, \frac{\partial L}{\partial b}
- 更新参数:
- \mathbf{w} \leftarrow \mathbf{w} - \eta \cdot \frac{\partial L}{\partial \mathbf{w}}
- b \leftarrow b - \eta \cdot \frac{\partial L}{\partial b}
- 迭代:返回到步骤 3,直到损失函数收敛。
- 预测新数据: \hat{y} = \sigma(\mathbf{X}_{\text{new}} \cdot \mathbf{w} + b)