简介:反向传播算法是深度学习中的核心算法,用于训练神经网络。本文将详细介绍反向传播算法的公式推导,并给出Python代码实现。
反向传播算法是深度学习中的核心算法,用于训练神经网络。该算法通过不断调整网络中的权重和偏置参数,使得网络的预测结果与实际结果之间的误差最小化。下面我们将详细介绍反向传播算法的公式推导,并给出Python代码实现。
一、公式推导
假设我们有一个神经网络,其中包含输入层、隐藏层和输出层。输入层的输出为X,隐藏层的输出为H,输出层的输出为Y。我们的目标是使得预测结果Y与实际结果T之间的误差最小化。
首先,我们定义损失函数为L(Y, T),用于衡量预测结果与实际结果之间的误差。常用的损失函数有均方误差(MSE)等。
然后,我们定义激活函数为f(x),常用的激活函数有sigmoid函数、ReLU函数等。
接下来,我们定义权重参数为W,偏置参数为b。根据反向传播算法,我们可以得到以下公式:
其中,α为学习率,用于控制参数更新的步长。
二、代码实现
下面是一个使用Python实现反向传播算法的示例代码:
import numpy as np# 定义激活函数及其导数def sigmoid(x):return 1 / (1 + np.exp(-x))def sigmoid_derivative(x):return x * (1 - x)# 定义神经网络类class NeuralNetwork:def __init__(self, x, y):self.input = xself.weights1 = np.random.rand(self.input.shape[1],4)self.weights2 = np.random.rand(4,1)self.y = yself.output = np.zeros(y.shape)def feedforward(self):self.layer1 = sigmoid(np.dot(self.input, self.weights1))self.output = sigmoid(np.dot(self.layer1, self.weights2))def backprop(self):# 应用链式法则计算偏导数d_weights2 = np.dot(self.layer1.T, (2*(self.y - self.output) * sigmoid_derivative(self.output)))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)))# 更新权重参数self.weights1 += d_weights1self.weights2 += d_weights2