实现神经网络 biases
流程概述
在实现神经网络中的 biases(偏置)时,我们需要遵循以下步骤:
步骤 | 描述 |
---|---|
1 | 初始化神经网络的权重和偏置 |
2 | 前向传播 |
3 | 计算损失函数 |
4 | 反向传播 |
5 | 更新权重和偏置 |
下面我将逐步解释每个步骤需要做什么,并提供相应的代码和注释。
1. 初始化神经网络的权重和偏置
在开始训练神经网络之前,我们需要初始化权重和偏置。偏置是一个与神经元相关联的常数参数,用于调整激活函数的输出。我们可以使用随机数生成器来初始化权重和偏置。
import numpy as np
# 初始化权重
weights = np.random.randn(input_size, output_size) * 0.01
# 初始化偏置
biases = np.zeros((1, output_size))
这里,input_size
是输入层的大小,output_size
是输出层的大小。我们使用 np.random.randn
函数生成具有正态分布的随机数,并乘以0.01来缩小初始化的值。偏置初始化为零矩阵。
2. 前向传播
在前向传播过程中,我们将输入数据传递到神经网络,并计算每个神经元的输出。偏置在这一步起到了调节激活函数输出的作用。
# 前向传播
def forward_propagation(X):
# 计算每个神经元的加权输入
weighted_sum = np.dot(X, weights) + biases
# 应用激活函数
activation = sigmoid(weighted_sum)
return activation
这里,X
是输入数据,weights
是初始化的权重矩阵,biases
是初始化的偏置矩阵。我们使用 np.dot
函数计算加权输入,然后将其传递给激活函数 sigmoid
。
3. 计算损失函数
在训练神经网络时,我们需要定义一个损失函数来衡量预测结果与真实结果之间的差异。常见的损失函数包括均方误差、交叉熵等。
# 计算损失函数
def compute_loss(y_true, y_pred):
loss = np.mean((y_true - y_pred) ** 2)
return loss
这里,y_true
是真实结果,y_pred
是预测结果。我们使用均方误差作为损失函数,但你可以根据任务的需求选择其他合适的损失函数。
4. 反向传播
在反向传播过程中,我们通过计算损失函数对权重和偏置的导数来更新它们的值。这样可以逐渐减小损失函数,对应于提高神经网络的性能。
# 反向传播
def backward_propagation(X, y_true, y_pred):
# 计算输出层的误差
output_error = (y_pred - y_true)
# 计算输出层的权重和偏置的梯度
weights_gradient = np.dot(X.T, output_error)
biases_gradient = np.sum(output_error, axis=0, keepdims=True)
# 更新权重和偏置
weights -= learning_rate * weights_gradient
biases -= learning_rate * biases_gradient
这里,X
是输入数据,y_true
是真实结果,y_pred
是预测结果。我们计算输出层的误差,然后使用梯度下降法更新权重和偏置。learning_rate
是学习率,用于控制每次更新的步长。
5. 更新权重和偏置
最后一步是根据计算得到的梯度更新权重和偏置。
# 更新权重和偏置
def update_weights_and_biases(weights, biases, weights_gradient, biases_gradient, learning_rate):