深度学习入门:详解BP算法中的正向传播与反向传播过程

1次阅读
没有评论

共计 1613 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

背景介绍

BP 算法(误差反向传播算法)是训练神经网络的核心技术。打个比方,神经网络就像一台复杂的机器,BP 算法就是教会这台机器如何自我调整的 ” 学习指南 ”。它通过不断修正网络中的连接权重,使网络的预测结果越来越接近真实值。

深度学习入门:详解 BP 算法中的正向传播与反向传播过程

核心概念

正向传播:信息的前向流动

  1. 加权求和 :每个神经元接收前一层所有神经元的输出,进行加权求和
    $$z_j = \sum_{i}w_{ji}x_i + b_j$$

  2. 激活函数 :通过非线性函数引入表达能力(常用 ReLU)
    $$a_j = \sigma(z_j)$$

反向传播:误差的逆向传递

  1. 损失函数 :计算预测值与真实值的差距(如均方误差)
    $$L = \frac{1}{2}(y_{pred}-y_{true})^2$$

  2. 链式法则 :从输出层逐层回传误差
    $$\frac{\partial L}{\partial w_{ji}} = \frac{\partial L}{\partial a_j}\frac{\partial a_j}{\partial z_j}\frac{\partial z_j}{\partial w_{ji}}$$

代码实现

import numpy as np

# 定义 Sigmoid 激活函数及其导数
def sigmoid(x):
    return 1/(1+np.exp(-x))

def sigmoid_derivative(x):
    return x*(1-x)

# 网络参数
input_size = 2
hidden_size = 3
output_size = 1
learning_rate = 0.1

# 初始化权重
W1 = np.random.randn(input_size, hidden_size)
W2 = np.random.randn(hidden_size, output_size)

# 单个样本前向传播
X = np.array([0.5, 0.1])  # 输入
z1 = np.dot(X, W1)
a1 = sigmoid(z1)
z2 = np.dot(a1, W2)
pred = sigmoid(z2)

# 反向传播
target = 0.8  # 真实值
loss = 0.5*(pred - target)**2

d_pred = pred - target
d_z2 = d_pred * sigmoid_derivative(pred)
d_W2 = np.dot(a1.T, d_z2)

d_a1 = np.dot(d_z2, W2.T)
d_z1 = d_a1 * sigmoid_derivative(a1)
d_W1 = np.dot(X.reshape(-1,1), d_z1.reshape(1,-1))

# 权重更新
W1 -= learning_rate * d_W1
W2 -= learning_rate * d_W2

常见问题

梯度消失 / 爆炸

  • 原因 :深层网络中连续的小数 / 大数连乘
  • 解决方案 :
  • 使用 ReLU 等改良激活函数
  • 采用 Batch Normalization
  • 使用残差连接

学习率设置

  • 常用范围:0.1 到 0.0001
  • 实践技巧:
  • 初始可尝试 0.01
  • 配合学习率衰减策略
  • 使用自适应优化器(如 Adam)

可视化

 输入层      隐藏层      输出层
  ○ ---w1---> ○ --w2---> ○
      \     / \     /
       w1'w2'

箭头方向表示正向传播路径,虚线表示反向传播时梯度回传路径。

最佳实践

参数初始化

  • Xavier 初始化:适合 tanh 激活
  • He 初始化:适合 ReLU 激活
  • 小随机数:避免对称性问题

批量训练技巧

  1. 将数据集划分为 mini-batch
  2. 计算批次平均梯度
  3. 使用向量化操作加速

延伸思考

建议尝试:
– 将 sigmoid 换成 ReLU 观察训练速度变化
– 增加隐藏层数量体会梯度消失现象
– 调整学习率比较收敛效果

参考文献

  1. 《神经网络与深度学习》- Michael Nielsen
  2. 《Deep Learning》- Ian Goodfellow
  3. CS231n 课程笔记(斯坦福大学)

通过这次实践,我深刻体会到 BP 算法就像神经网络的 ” 自我反思 ” 过程——前向传播做出预测,反向传播根据错误调整认知。建议初学者可以先用纸笔推导简单网络(如 2 -1- 1 结构)的传播过程,再过渡到代码实现,这样理解会更加扎实。

正文完
 0
评论(没有评论)