反向传播算法:公式推导与代码实现

作者:da吃一鲸8862024.02.17 10:48浏览量:8

简介:反向传播算法是深度学习中的核心算法,用于训练神经网络。本文将详细介绍反向传播算法的公式推导,并给出Python代码实现。

反向传播算法是深度学习中的核心算法,用于训练神经网络。该算法通过不断调整网络中的权重和偏置参数,使得网络的预测结果与实际结果之间的误差最小化。下面我们将详细介绍反向传播算法的公式推导,并给出Python代码实现。

一、公式推导

假设我们有一个神经网络,其中包含输入层、隐藏层和输出层。输入层的输出为X,隐藏层的输出为H,输出层的输出为Y。我们的目标是使得预测结果Y与实际结果T之间的误差最小化。

首先,我们定义损失函数为L(Y, T),用于衡量预测结果与实际结果之间的误差。常用的损失函数有均方误差(MSE)等。

然后,我们定义激活函数为f(x),常用的激活函数有sigmoid函数、ReLU函数等。

接下来,我们定义权重参数为W,偏置参数为b。根据反向传播算法,我们可以得到以下公式:

  1. 输出层:Y = f(WX + b)
  2. 隐藏层:H = f(W’X + b’)
  3. 误差:E = L(Y, T)
  4. 误差对输出层的偏导数:dE/dY = dL(Y, T)/dY
  5. 误差对隐藏层的偏导数:dE/dH = dL(Y, T)/dY * dY/dH
  6. 权重参数更新:ΔW = α * dE/dW
  7. 偏置参数更新:Δb = α * dE/db
  8. 权重参数更新公式:W = W - ΔW
  9. 偏置参数更新公式:b = b - Δb

其中,α为学习率,用于控制参数更新的步长。

二、代码实现

下面是一个使用Python实现反向传播算法的示例代码:

  1. import numpy as np
  2. # 定义激活函数及其导数
  3. def sigmoid(x):
  4. return 1 / (1 + np.exp(-x))
  5. def sigmoid_derivative(x):
  6. return x * (1 - x)
  7. # 定义神经网络类
  8. class NeuralNetwork:
  9. def __init__(self, x, y):
  10. self.input = x
  11. self.weights1 = np.random.rand(self.input.shape[1],4)
  12. self.weights2 = np.random.rand(4,1)
  13. self.y = y
  14. self.output = np.zeros(y.shape)
  15. def feedforward(self):
  16. self.layer1 = sigmoid(np.dot(self.input, self.weights1))
  17. self.output = sigmoid(np.dot(self.layer1, self.weights2))
  18. def backprop(self):
  19. # 应用链式法则计算偏导数
  20. d_weights2 = np.dot(self.layer1.T, (2*(self.y - self.output) * sigmoid_derivative(self.output)))
  21. d_weights1 = np.dot(self.input.T, (np.dot(2*(self.y - self.output) * sigmoid_derivative(self.output), self.weights2.T) * sigmoid_derivative(self.layer1)))
  22. # 更新权重参数
  23. self.weights1 += d_weights1
  24. self.weights2 += d_weights2