实现神经网络 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):