反向传播算法 深度学习
1. 简介
反向传播算法是深度学习中的核心算法之一,用于训练神经网络模型。本文将介绍反向传播算法的整体流程,并提供每一步需要做的事情以及相应的代码示例。
2. 反向传播算法流程
下面是整个反向传播算法的流程表格:
步骤 | 描述 |
---|---|
步骤 1 | 前向传播:输入样本,计算神经网络的输出 |
步骤 2 | 计算损失函数:根据输出和标签计算损失函数的值 |
步骤 3 | 反向传播:计算每个权重和偏置的梯度 |
步骤 4 | 更新参数:根据梯度更新神经网络的参数 |
接下来,我们将逐步介绍每一步的具体内容。
3. 步骤 1:前向传播
前向传播是指将输入样本通过神经网络,计算得到输出的过程。在此步骤中,需要使用相应的代码来实现神经网络的前向传播过程。以下是一个示例代码:
# 前向传播
def forward_propagation(X, parameters):
# 获取每一层的权重和偏置参数
W1, b1, W2, b2, ..., WL, bL = parameters
# 第 1 层的输入
A1 = X
# 逐层计算激活值
Z1 = np.dot(W1, A1) + b1
A1 = relu(Z1)
Z2 = np.dot(W2, A2) + b2
A2 = relu(Z2)
# ...
ZL = np.dot(WL, AL-1) + bL
AL = sigmoid(ZL)
# 返回输出层的激活值和中间层的缓存值
return AL, caches
在上述代码中,forward_propagation
函数接收输入样本 X
和神经网络的参数 parameters
,并通过逐层计算激活值得到输出层的激活值 AL
和中间层的缓存值 caches
。
4. 步骤 2:计算损失函数
在此步骤中,我们需要根据输出和标签计算损失函数的值。常用的损失函数包括均方误差(Mean Squared Error)和交叉熵损失(Cross-Entropy Loss)等。以下是一个示例代码:
# 计算损失函数
def compute_loss(AL, Y):
m = Y.shape[1]
# 使用交叉熵损失函数
loss = -np.sum(Y * np.log(AL) + (1 - Y) * np.log(1 - AL)) / m
return loss
在上述代码中,compute_loss
函数接收输出层的激活值 AL
和标签 Y
,并根据交叉熵损失函数计算损失值。
5. 步骤 3:反向传播
反向传播是指通过计算梯度来更新神经网络的参数。在此步骤中,需要计算每个权重和偏置的梯度。以下是一个示例代码:
# 反向传播
def backward_propagation(AL, Y, caches):
m = Y.shape[1]
# 获取缓存值
A1, Z1, A2, Z2, ..., AL-1, ZL = caches
# 计算输出层的梯度
dAL = - (np.divide(Y, AL) - np.divide(1 - Y, 1 - AL))
# ...
# 计算其他层的梯度
dZL = dAL * sigmoid_derivative(ZL)
dWL = np.dot(dZL, AL-1.T) / m
dbL = np.sum(dZL, axis=1, keepdims=True) / m
# ...
dZ1 = np.dot(W2.T,