返回

一文读懂 BP 算法:推导 + 数据演示 + 项目实战(上篇)

人工智能

人工智能的快速发展离不开机器学习的功劳,而 BP 算法作为机器学习中的基石,更是功不可没。

本文将从原理推导、数据演示和项目实战三个方面,全面解析 BP 算法,带你深入理解这个机器学习领域的基础利器。

BP 算法原理推导

BP 算法是一种反向错误播算法,用来修正人工网络中的权重和偏差。它利用链式法则来计算误差函数对权重的偏导数,并使用这些偏导数来更新权重和偏差。

误差函数定义

误差函数衡量网络输出与期望输出之间的差异。对于回归任务,常见误差函数为均方误差(MSE):

E = (1/2) * ∑(y - y_hat)^2

其中:

  • E 为误差函数
  • y 为期望输出
  • y_hat 为网络输出

反向错误播算法

BP 算法使用链式法则来计算误差函数对权重的偏导数。以一个两层的神经网络为例:

  • 输入层:x = (x1, x2, ..., xm)
  • 隐含层:h = (h1, h2, ..., hn)
  • 输出层:y = (y1, y2, ..., yq)
  • 权重:W = (wij)
  • 偏差:b = (bi, bj)

对于输出层到隐含层的权重 wij 的偏导数计算如下:

∂E/∂wij = (y - y_hat) * f'(net_j) * h_i

其中:

  • f'(net_j) 是隐含层节点 j 的激活函数的导数
  • h_i 是隐含层节点 i 的输出

对于隐含层到输入层的权重 wij 的偏导数计算如下:

∂E/∂wij = ∑(y - y_hat) * f'(net_j) * w_ji * h_i

其中:

  • w_ji 是输出层到隐含层的权重

数据演示

为了直观理解 BP 算法的运作过程,我们使用一个简单的数据集来进行演示。

数据集

我们使用一个包含 100 个数据点的人工数据集,每个数据点包括两个特征 x1 和 x2,以及一个目标值 y。

网络结构

我们使用一个两层的神经网络,输入层有 2 个节点,隐含层有 3 个节点,输出层有 1 个节点。

训练过程

我们使用 BP 算法来训练网络,训练过程如下:

  • 将数据集中的一个数据点作为输入
  • 正向计算网络的输出
  • 计算输出与目标值之间的误差
  • 反向计算误差函数对权重的偏导数
  • 更新权重和偏差
  • 重复以上步骤,直到误差达到收敛

效果展示

经过训练,网络可以有效拟合数据集,预测的输出与目标值高度一致。

项目实战

为了进一步巩固 BP 算法的理解,我们使用一个项目实战来演示如何应用 BP 算法解决实际问题。

项目目标

我们将使用 BP 算法来构建一个手写数字识别模型。

数据准备

我们使用 MNIST 数据集,其中包含 70,000 张手写数字图像。

模型构建

我们使用一个卷积