理解神经网络的正向计算与反向调整过程 - 公式详解
最编程
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
是预测结果