声明
本文作业是在jupyter notebook上一步一步做的,带有一些过程中查找的资料等(出处已标明)并翻译成了中文,如有错误,欢迎指正!
参考:https://blog.csdn.net/u013733326/article/details/79847918
参考Kulbear 的 【Initialization】和【Regularization】 和 【Gradient Checking】,以及念师的【10. 初始化、正则化、梯度检查实战】,以及何宽 ,
欢迎来到本周的期末作业!在这项作业中,你将学习如何实现和使用渐变检查。
你是一个团队的一员,致力于全球范围内的移动支付,并被要求建立一个深度学习模型来检测欺诈行为——每当有人进行支付时,你都想看看支付是否有欺诈行为,比如用户的账户是否被黑客占领。
但是反向传播的实现相当具有挑战性,有时还存在缺陷。因为这是一个任务关键型应用程序,所以您公司的首席执行官希望确定您的反向传播实现是正确的。你的首席执行官说,“给我一个证据,证明你的反向传播是有效的!”为了保证这一点,您将使用“梯度检查”。
开始吧!
# Packages import numpy as np from testCases import * from gc_utils import sigmoid, relu, dictionary_to_vector, vector_to_dictionary, gradients_to_vector
1) How does gradient checking work? 梯度检查是如何工作的?
反向传播计算梯度,其中θ表示模型的参数。使用前向传播和损失函数计算 的代码。
让我们回顾一下导数(或梯度)的定义:
如果你不熟悉“limε→0”表示法,那只是表示“当ε真的很小时”
我们知道以下几点:
•是你想要确保你计算正确的东西。
•您可以计算J(θ+ε)和J(θ-ε)(在θ是实数的情况下),因为您确信J的实现是正确的。
让我们用等式(1)和一个小的ε值来说服您的CEO,您用于计算的代码是正确的!
2) 1-dimensional gradient checking 一维梯度检查
考虑一维线性函数J(θ)=θx,该模型仅包含一个实值参数θ,以x为输入。
您将实现计算J(.)及其导数的代码。然后使用梯度检查来确保J的导数计算是正确的。
**Figure 1** : **1D linear model** 图一 一维线性模型
上图显示了关键的计算步骤:首先从x开始,然后计算函数J(x)(“前向传播”)。然后计算导数(“反向传播”)。
练习:为这个简单函数实现“正向传播”和“反向传播”。一、 在两个不同的函数中计算J(.)(“前向传播”)及其相对于θ的导数(“反向传播”)
1 # GRADED FUNCTION: forward_propagation 2 3 def forward_propagation(x, theta): 4 """ 5 Implement the linear forward propagation (compute J) presented in Figure 1 (J(theta) = theta * x) 6 7 Arguments: 8 x -- a real-valued input 9 theta -- our parameter, a real number as well 10 11 Returns: 12 J -- the value of function J, computed using the formula J(theta) = theta * x 13 """ 14 15 ### START CODE HERE ### (approx. 1 line) 16 J = theta * x 17 ### END CODE HERE ### 18 19 return J