1. 磐创AI首页
  2. Medium

深度神经网络反向传播

成本函数:

至此,我们已经初始化了深度参数并编写了前向传播模块。现在我们将实现代价函数和反向传播模块。与前面一样,我们需要计算成本,因为我们想检查我们的模型是否真正在学习。要计算交叉熵成本J,我们将使用前面已经看到的公式:

COMPUTE_COST函数的代码:

参数:

Al-与标签预测对应的概率向量,Shape(1,示例数)。Y-true“label”向量(例如:如果是狗,则包含0,如果是猫,则包含1)、Shape(1,示例数)。

返回:

成本-交叉熵成本。

这只是一行代码,所以我们不会测试它,因为它在我之前的教程中已经测试过了。

反向传播函数:

就像前向传播一样,我们将实现反向传播的帮助器函数。我们知道,传播是用来计算参数的损失函数的梯度的。我们需要写出线性->Relu->线性->Sigmoid模型的前向和后向传播。这将如下所示:

与前向传播类似,我们将分三步构建后向传播:

  • 线性向后;
  • 线性->反向激活,其中激活计算RELU或S型激活的导数;
  • [线性->重排]×(L-1)->线性->向后S型(整个模型)

线性向后:

对于层l,线性部分为:

我想我们已经计算过导数了:

将使用输入DZ[l]计算三个输出(dw[l]、db[l]、da[l])。以下是我们的两层神经网络教程系列中需要的公式:

我们的LINEAR_BACKWARD函数的代码:

参数:

dz-与(当前层l的)线性输出相关的成本梯度;来自当前层中前向传播的值的缓存元组(A_prev,W,b)。

返回:

DA_PREV-关于(前一层l-1的)激活的成本梯度,形状与A_PREV相同;DW-成本到W(当前层l)的梯度,形状与W相同;DB-成本到b(当前层l)的梯度,形状与b相同。

线性-激活反向功能:

接下来,我们将创建一个合并两个助手函数的函数:LINEAR_BACKBACK和激活LINEAR_ACTIVATION_BACKBACK的BACKUP步骤。

为了实现LINEAR_ACTIVATION_BACKUP,我们将编写两个反向函数:

  • Sigmoid_Backward:Sigmoid单元的反向传播:
  • RELU_BACKED:RELU单位的反向传播(_B):

如果g(.)是激活函数,sigmoid_back和relu_back计算:

LINEAR_ACTIVATION_BACKUP函数的代码:

参数:

DA-当前层l的激活后梯度;缓存-我们存储的用于有效计算反向传播的值的元组(LINEAR_CACHE,ACTIVATION_CACHE);激活-要在该层中使用的激活,存储为文本字符串:“Sigmoid”或“relu”。

返回:

da_prev-激活成本的梯度(前一层l-1),形状与A_prev相同;dw-成本至W(当前层l)的梯度,形状与W相同;db-成本至b(当前层l)的梯度,形状与b相同。

完整教程代码:

本教程花了一些时间。我将在下一个教程中完成我们的向后功能。在下一个教程中,我们将编写向后的最终模块和函数来更新参数。在那之后,我们将最终训练我们的模型。

最初发表于https://pylessons.com/Deep-neural-networks-part3https://pylessons.com/Deep-neural-networks-part3

原创文章,作者:fendouai,如若转载,请注明出处:https://panchuang.net/2021/07/27/%e6%b7%b1%e5%ba%a6%e7%a5%9e%e7%bb%8f%e7%bd%91%e7%bb%9c%e5%8f%8d%e5%90%91%e4%bc%a0%e6%92%ad/

联系我们

400-800-8888

在线咨询:点击这里给我发消息

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息