吴恩达深度学习笔记:深度学习的 实践层面 (Practical aspects of Deep Learning)1.13-1.14

本文主要是介绍吴恩达深度学习笔记:深度学习的 实践层面 (Practical aspects of Deep Learning)1.13-1.14,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 第二门课: 改善深层神经网络:超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)
    • 第一周:深度学习的 实践层面 (Practical aspects of Deep Learning)
      • 1.13 梯度检验(Gradient checking)

第二门课: 改善深层神经网络:超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)

第一周:深度学习的 实践层面 (Practical aspects of Deep Learning)

1.13 梯度检验(Gradient checking)

梯度检验帮我们节省了很多时间,也多次帮我发现 backprop 实施过程中的 bug,接下来,我们看看如何利用它来调试或检验 backprop 的实施是否正确。

假设你的网络中含有下列参数, W [ 1 ] W^{[1]} W[1] b [ 1 ] b^{[1]} b[1]…… W [ l ] W^{[l]} W[l] b [ l ] b^{[l]} b[l],为了执行梯度检验,首先要做的就是,把所有参数转换成一个巨大的向量数据,你要做的就是把矩阵𝑊转换成一个向量,把所有𝑊矩阵转换成向量之后,做连接运算,得到一个巨型向量𝜃,该向量表示为参数𝜃,代价函数𝐽是所有𝑊和𝑏的函数,现在你得到了一个𝜃的代价函数𝐽(即𝐽(𝜃))。接着,你得到与𝑊和𝑏顺序相同的数据,你同样可以把 d W [ 1 ] dW^{[1]} dW[1] d b [ 1 ] db^{[1]} db[1]…… d W [ l ] dW^{[l]} dW[l] d b [ l ] db^{[l]} db[l]转换成一个新的向量,用它们来初始化大向量𝑑𝜃,它与𝜃具有相同维度。

同样的,把 d W [ 1 ] dW^{[1]} dW[1]转换成矩阵, d b [ 1 ] db^{[1]} db[1]已经是一个向量了,直到把 d W [ l ] dW^{[l]} dW[l]转换成矩阵,这样所有的𝑑𝑊都已经是矩阵,注意 d W [ 1 ] dW^{[1]} dW[1] W [ 1 ] W^{[1]} W[1]具有相同维度, d b [ 1 ] db^{[1]} db[1] b [ 1 ] b^{[1]} b[1]具有相同维度。经过相同的转换和连接运算操作之后,你可以把所有导数转换成一个大向量𝑑𝜃,它与𝜃具有相同维度,现在的问题是𝑑𝜃和代价函数𝐽的梯度或坡度有什么关系?
在这里插入图片描述
这就是实施梯度检验的过程,英语里通常简称为“grad check”,首先,我们要清楚𝐽是超参数𝜃的一个函数,你也可以将𝐽函数展开为𝐽(𝜃1, 𝜃2, 𝜃3, … … ),不论超级参数向量𝜃的维度是多少,为了实施梯度检验,你要做的就是循环执行,从而对每个𝑖也就是对每个𝜃组成元素计算𝑑𝜃approx[𝑖]的值,我使用双边误差,也就是
d θ a p p r o x [ i ] = J ( θ 1 , θ 2 , . . . . . . θ i + ε , . . . ) − J ( θ 1 , θ 2 , . . . . . . θ i − ε , . . . ) 2 ε dθ_{approx}[i] =\frac{J(θ_1,θ_2,......θ_i+ε,...) - J(θ_1,θ_2,......θ_i-ε,...)}{2ε} dθapprox[i]=2εJ(θ1,θ2,......θi+ε,...)J(θ1,θ2,......θiε,...)

只对 θ i θ_i θi增加𝜀,其它项保持不变,因为我们使用的是双边误差,对另一边做同样的操作,只不过是减去𝜀,𝜃其它项全都保持不变。
在这里插入图片描述
从上节课中我们了解到这个值( d θ a p p r o x [ i ] dθ_{approx}[i] dθapprox[i])应该逼近𝑑𝜃[𝑖]=𝜕𝐽/𝜕𝜃𝑖,𝑑𝜃[𝑖]是代价函数的偏导数,然后你需要对𝑖的每个值都执行这个运算,最后得到两个向量,得到𝑑𝜃的逼近值 d θ a p p r o x dθ_{approx} dθapprox,它与𝑑𝜃具有相同维度,它们两个与𝜃具有相同维度,你要做的就是验证这些向量是否彼此接近。

具体来说,如何定义两个向量是否真的接近彼此?我一般做下列运算,计算这两个向量的距离,𝑑𝜃approx[𝑖] − 𝑑𝜃[𝑖]的欧几里得范数,注意这里(||𝑑𝜃approx − 𝑑𝜃||2)没有平方,它是误差平方之和,然后求平方根,得到欧式距离,然后用向量长度归一化,使用向量长度的欧几里得范数。分母只是用于预防这些向量太小或太大,分母使得这个方程式变成比率,我们实际执行这个方程式,𝜀可能为 1 0 − 7 10^{−7} 107,使用这个取值范围内的𝜀,如果你发现计算方程式得到的值为 1 0 − 7 10^{−7} 107或更小,这就很好,这就意味着导数逼近很有可能是正确的,它的值非常小。

在这里插入图片描述
如果它的值在 1 0 − 5 10^{−5} 105范围内,我就要小心了,也许这个值没问题,但我会再次检查这个向量的所有项,确保没有一项误差过大,可能这里有 bug。

如果左边这个方程式结果是 1 0 − 3 10^{−3} 103,我就会担心是否存在 bug,计算结果应该比 1 0 − 3 10^{−3} 103小很多,如果比 1 0 − 3 10^{−3} 103大很多,我就会很担心,担心是否存在 bug。这时应该仔细检查所有𝜃项,看是否有一个具体的𝑖值,使得𝑑𝜃approx[𝑖]与𝑑𝜃[𝑖]大不相同,并用它来追踪一些求导计算是否正确,经过一些调试,最终结果会是这种非常小的值( 1 0 − 7 10^{−7} 107),那么,你的实施可能是正确的。

在这里插入图片描述
在实施神经网络时,我经常需要执行 foreprop 和 backprop,然后我可能发现这个梯度检验有一个相对较大的值,我会怀疑存在 bug,然后开始调试,调试,调试,调试一段时间后,我得到一个很小的梯度检验值,现在我可以很自信的说,神经网络实施是正确的。

现在你已经了解了梯度检验的工作原理,它帮助我在神经网络实施中发现了很多 bug,希望它对你也有所帮助。

这篇关于吴恩达深度学习笔记:深度学习的 实践层面 (Practical aspects of Deep Learning)1.13-1.14的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/968081

相关文章

Android Paging 分页加载库使用实践

《AndroidPaging分页加载库使用实践》AndroidPaging库是Jetpack组件的一部分,它提供了一套完整的解决方案来处理大型数据集的分页加载,本文将深入探讨Paging库... 目录前言一、Paging 库概述二、Paging 3 核心组件1. PagingSource2. Pager3.

深度解析Nginx日志分析与499状态码问题解决

《深度解析Nginx日志分析与499状态码问题解决》在Web服务器运维和性能优化过程中,Nginx日志是排查问题的重要依据,本文将围绕Nginx日志分析、499状态码的成因、排查方法及解决方案展开讨论... 目录前言1. Nginx日志基础1.1 Nginx日志存放位置1.2 Nginx日志格式2. 499

在Java中使用OpenCV实践

《在Java中使用OpenCV实践》用户分享了在Java项目中集成OpenCV4.10.0的实践经验,涵盖库简介、Windows安装、依赖配置及灰度图测试,强调其在图像处理领域的多功能性,并计划后续探... 目录前言一 、OpenCV1.简介2.下载与安装3.目录说明二、在Java项目中使用三 、测试1.测

MyBatis-Plus 自动赋值实体字段最佳实践指南

《MyBatis-Plus自动赋值实体字段最佳实践指南》MyBatis-Plus通过@TableField注解与填充策略,实现时间戳、用户信息、逻辑删除等字段的自动填充,减少手动赋值,提升开发效率与... 目录1. MyBATis-Plus 自动赋值概述1.1 适用场景1.2 自动填充的原理1.3 填充策略

Olingo分析和实践之EDM 辅助序列化器详解(最佳实践)

《Olingo分析和实践之EDM辅助序列化器详解(最佳实践)》EDM辅助序列化器是ApacheOlingoOData框架中无需完整EDM模型的智能序列化工具,通过运行时类型推断实现灵活数据转换,适用... 目录概念与定义什么是 EDM 辅助序列化器?核心概念设计目标核心特点1. EDM 信息可选2. 智能类

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

Olingo分析和实践之ODataImpl详细分析(重要方法详解)

《Olingo分析和实践之ODataImpl详细分析(重要方法详解)》ODataImpl.java是ApacheOlingoOData框架的核心工厂类,负责创建序列化器、反序列化器和处理器等组件,... 目录概述主要职责类结构与继承关系核心功能分析1. 序列化器管理2. 反序列化器管理3. 处理器管理重要方

虚拟机Centos7安装MySQL数据库实践

《虚拟机Centos7安装MySQL数据库实践》用户分享在虚拟机安装MySQL的全过程及常见问题解决方案,包括处理GPG密钥、修改密码策略、配置远程访问权限及防火墙设置,最终通过关闭防火墙和停止Net... 目录安装mysql数据库下载wget命令下载MySQL安装包安装MySQL安装MySQL服务安装完成

SpringBoot整合(ES)ElasticSearch7.8实践

《SpringBoot整合(ES)ElasticSearch7.8实践》本文详细介绍了SpringBoot整合ElasticSearch7.8的教程,涵盖依赖添加、客户端初始化、索引创建与获取、批量插... 目录SpringBoot整合ElasticSearch7.8添加依赖初始化创建SpringBoot项

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤