理论结合实际:如何调试神经网络并检查梯度(二)

简介: 理论结合实际:如何调试神经网络并检查梯度(二)

双向导数

因此,如果您了解一些相关知识,则可以轻松推断出

image.png

其中g(θ)指梯度。

现在,通过插入刚刚讨论的示例的值,来检查上面编写的方程式的正确性。所以,我会得到以下的东西。

image.png

现在让我们计算它的实际导数。据我所知,f(θ)=θ³,通过简单的导数g(θ)= 3⋅θ²,而我们得到g(θ)=3。我们做了一个很好的近似,近似误差仅为0.0001。现在让我们看看如果使用传统方法会得到什么。如果用单边来计算,最终将得到3.0301,其近似误差为0.0301。因此,我们在这里做了出色的工作,大大降低了误差!

您刚刚看到双面导数的性能要比传统方法好得多。这给了您更大的信心,θ的g可能是f(θ)的导数的正确实现。这听起来真是太好了!这种方法也有一个缺点。事实证明,这种方法的运行时间是使用单侧方法的两倍。但是我认为在实践中使用此方法是值得的,因为它更加准确。

再深入一点

让我们回顾一下导数的形式定义。

image.png

这里要注意的重要一点是ϵ。对于non的非零值,您可以证明近似值的误差约为ϵ²。ϵ是一个很小的数字,趋向于0。因此,总而言之

error = O(ϵ²)

在此,O是指的顺序。

您可以通过简单的数学证明,如果使用单向导数,则误差将为ϵ或

error = O(ϵ)

ϵ当然是少于1的极小数,所以ϵ >> ϵ²。因此,现在您可能已经了解了为什么应该使用双面导数而不是单面导数,并且我们将看到这如何帮助我们进行梯度检查。

梯度检查

梯度检查是一种非常有用的技术,已帮助我轻松地进行调试并发现神经网络中的错误。现在,我们将演示如何使用这种出色的技术来调试或验证您的网络实现以及反向传播是否正确。这并不是什么新鲜事物,但让我们将单个神经元作为演示。

image.png

请记住,[x₁, x₂ ... x_n]是输入,对于每个参数,我们都参数(w¹, b¹) (w², b²) … (wⁿ, bⁿ)。因此,要实现梯度检查,您应该做的第一件事就是获取所有参数并将它们调整为巨大的矢量数据。因此,您要做的就是将所有这些w和b都进行调整,使其成为矢量。然后将所有这些向量连接成一个称为θ的巨型向量。所以现在我们可以像这样用θ来写成本函数J

image.png

因此,现在我们的J将只是θ的函数。

现在,用相同的方式对w和b进行排序,您还可以将dw¹ , db¹dwⁿ , dbⁿ连接起来,并将它们连接成一个大向量,我们将其称为与θ尺寸相同的dθ。我们将以类似的步骤进行操作,即将所有dw变为矢量,因为它们是矩阵,而b则已经是矢量,因此只需将它们串联即可。我觉得可能有帮助的一点是,w 1的尺寸与dw 1的尺寸相同,而b 1的尺寸与db 1的尺寸相同,依此类推。这也意味着您可以使用相同的大小和串联操作。因此,现在您可能会有一个问题,“dθ在这里是θ的斜率还是梯度?” 我们将在稍后讨论。

目录
相关文章
|
5月前
|
运维 监控 网络协议
|
10月前
状态码对于理解HTTP请求和响应的流程,以及调试网络问题非常重要
【5月更文挑战第15天】HTTP状态码由三位数字表示,分为1xx-5xx五类。1xx为信息响应,2xx表示成功,如200(请求成功)、201(创建成功)。3xx是重定向,如301(永久移动)、302(临时重定向)。4xx表示客户端错误,如400(坏请求)、404(未找到)。5xx是服务器错误,包括500(内部服务器错误)和503(服务不可用)。这些状态码用于理解请求响应流程和调试网络问题。
107 1
|
5月前
|
Docker 容器
docker中检查容器的网络模式
【10月更文挑战第5天】
394 1
|
7月前
|
Java
一文讲明 网络调试助手的基本使用 NetAssist
文章介绍了网络调试助手NetAssist的基本使用方法,包括创建客户端和服务端,模拟网络连接和数据发送,并通过Java代码示例展示了客户端与服务端之间的通信过程。
一文讲明 网络调试助手的基本使用 NetAssist
|
7月前
|
机器学习/深度学习
【机器学习】面试题:LSTM长短期记忆网络的理解?LSTM是怎么解决梯度消失的问题的?还有哪些其它的解决梯度消失或梯度爆炸的方法?
长短时记忆网络(LSTM)的基本概念、解决梯度消失问题的机制,以及介绍了包括梯度裁剪、改变激活函数、残差结构和Batch Normalization在内的其他方法来解决梯度消失或梯度爆炸问题。
270 2
|
7月前
|
存储 安全 测试技术
网络中的状态检查是什么?
【8月更文挑战第24天】
168 0
|
7月前
|
网络协议 安全 Linux
在Linux中,如何使用Netcat进行网络调试和端口扫描?
在Linux中,如何使用Netcat进行网络调试和端口扫描?
|
7月前
|
网络虚拟化
二层网络调试,新手网工经常犯这个错,导致网络不通!
二层网络调试,新手网工经常犯这个错,导致网络不通!
|
7月前
|
Kubernetes 网络协议 Linux
如何检查 Kubernetes 网络配置
如何检查 Kubernetes 网络配置
87 0
|
9月前
|
缓存 网络协议 Linux
玩转网络调试利器:深入剖析ip命令的强大功能
玩转网络调试利器:深入剖析ip命令的强大功能
85 2

热门文章

最新文章