欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

理解神经网络的正向计算与反向调整过程 - 公式详解

最编程 2024-07-24 22:28:30
...

神经网络前向传播和反向传播的实现

1. 流程概述

在神经网络中,前向传播和反向传播是两个基本的步骤,用于训练模型和优化参数。前向传播是指将输入数据通过神经网络中的各个层进行计算,得到预测结果。而反向传播则是根据预测结果和真实标签,计算损失函数的梯度,并利用梯度下降法更新模型的参数,以提高预测准确性。

下面是神经网络前向传播和反向传播的基本流程的表格形式:

步骤 描述
1. 初始化参数 初始化神经网络的参数,包括权重和偏置
2. 前向传播 将输入数据通过神经网络进行计算,得到预测结果
3. 计算损失函数 计算预测结果与真实标签之间的差距,通常使用交叉熵损失函数
4. 反向传播 根据损失函数的梯度,逐层计算参数的梯度
5. 更新参数 根据参数的梯度和学习率,使用梯度下降法更新参数
6. 重复步骤2-5 重复进行前向传播、反向传播和参数更新,直到达到停止条件

2. 代码实现

2.1 初始化参数

在初始化参数步骤中,我们需要为神经网络的每一层初始化权重和偏置。下面是一个示例代码,用于初始化参数:

import numpy as np

def initialize_parameters(layer_dims):
    parameters = {}
    L = len(layer_dims)  # 网络的层数

    for l in range(1, L):
        parameters['W' + str(l)] = np.random.randn(layer_dims[l], layer_dims[l-1]) * 0.01
        parameters['b' + str(l)] = np.zeros((layer_dims[l], 1))

    return parameters

在上述代码中,layer_dims 是一个列表,表示神经网络每一层的维度。我们通过遍历每一层,使用随机数初始化权重矩阵 W,并将偏置 b 初始化为零。

2.2 前向传播

在前向传播步骤中,我们需要将输入数据通过神经网络进行计算,得到预测结果。下面是一个示例代码,用于实现前向传播:

def forward_propagation(X, parameters):
    A = X
    L = len(parameters) // 2  # 网络的层数

    for l in range(1, L):
        Z = np.dot(parameters['W' + str(l)], A) + parameters['b' + str(l)]
        A = np.maximum(0, Z)  # 使用ReLU作为激活函数

    Z = np.dot(parameters['W' + str(L)], A) + parameters['b' + str(L)]
    AL = 1 / (1 + np.exp(-Z))  # 使用Sigmoid作为输出层的激活函数

    return AL

在上述代码中,X 是输入数据,parameters 是一个包含所有参数的字典。我们通过遍历每一层,使用权重矩阵 W 和偏置 b 进行线性计算,然后应用激活函数来得到每一层的输出。

2.3 计算损失函数

在计算损失函数步骤中,我们需要衡量预测结果与真实标签之间的差距。常用的损失函数之一是交叉熵损失函数。下面是一个示例代码,用于计算交叉熵损失函数:

def compute_cost(AL, Y):
    m = Y.shape[1]  # 样本数量

    cost = -np.sum(Y * np.log(AL) + (1 - Y) * np.log(1 - AL)) / m

    return cost

在上述代码中,AL 是预测结果