神经网络优化篇:详解梯度的数值逼近(Numerical approximation of gradients)
在实施backprop时,有一个测试叫做梯度检验,它的作用是确保backprop正确实施。因为有时候,虽然写下了这些方程式,却不能100%确定,执行backprop的所有细节都是正确的。为了逐渐实现梯度检验,首先说说如何计算梯度的数值逼近。

先画出函数\(f\),标记为\(f\left( \theta \right)\),\(f\left( \theta \right)=\theta^{3}\),先看一下\(\theta\)的值,假设\(\theta=1\),不增大\(\theta\)的值,而是在\(\theta\) 右侧,设置一个\(\theta +\varepsilon\),在\(\theta\)左侧,设置\(\theta -\varepsilon\)。因此\(\theta=1\),\(\theta +\varepsilon =1.01,\theta -\varepsilon =0.99\),,跟以前一样,\(\varepsilon\)的值为0.01,看下这个小三角形,计算高和宽的比值,就是更准确的梯度预估,选择\(f\)函数在\(\theta -\varepsilon\)上的这个点,用这个较大三角形的高比上宽,技术上的原因就不详细解释了,较大三角形的高宽比值更接近于\(\theta\)的导数,把右上角的三角形下移,好像有了两个三角形,右上角有一个,左下角有一个,通过这个绿色大三角形同时考虑了这两个小三角形。所以得到的不是一个单边公差而是一个双边公差。

写一下数据算式,图中绿色三角形上边的点的值是\(f( \theta +\varepsilon )\),下边的点是\(f( \theta-\varepsilon)\),这个三角形的高度是\(f( \theta +\varepsilon)-f(\theta -\varepsilon)\),这两个宽度都是ε,所以三角形的宽度是\(2\varepsilon\),高宽比值为\(\frac{f(\theta + \varepsilon ) - (\theta -\varepsilon)}{2\varepsilon}\),它的期望值接近\(g( \theta)\),\(f( \theta)=\theta^{3}\)传入参数值,\(\frac {f\left( \theta + \varepsilon \right) - f(\theta -\varepsilon)}{2\varepsilon} = \frac{{(1.01)}^{3} - {(0.99)}^{3}}{2 \times0.01}\),大家可以暂停视频,用计算器算算结果,结果应该是3.0001,而当\(\theta =1\)时,\(g( \theta)=3\theta^{2} =3\),所以这两个\(g(\theta)\)值非常接近,逼近误差为0.0001,前面只考虑了单边公差,即从\(\theta\)到\(\theta +\varepsilon\)之间的误差,\(g( \theta)\)的值为3.0301,逼近误差是0.03,不是0.0001,所以使用双边误差的方法更逼近导数,其结果接近于3,现在更加确信,\(g( \theta)\)可能是\(f\)导数的正确实现,在梯度检验和反向传播中使用该方法时,最终,它与运行两次单边公差的速度一样,实际上,认为这种方法还是非常值得使用的,因为它的结果更准确。

这是一些可能比较熟悉的微积分的理论,如果不太明白讲的这些理论也没关系,导数的官方定义是针对值很小的\(\varepsilon\),导数的官方定义是\(f^{'}\theta) = \operatorname{}\frac{f( \theta + \varepsilon) -f(\theta -\varepsilon)}{2\varepsilon}\),这里有涉及到微积分的知识。
对于一个非零的\(\varepsilon\),它的逼近误差可以写成\(O(\varepsilon^{2})\),ε值非常小,如果\(\varepsilon=0.01\),\(\varepsilon^{2}=0.0001\),大写符号\(O\)的含义是指逼近误差其实是一些常量乘以\(\varepsilon^{2}\),但它的确是很准确的逼近误差,所以大写\(O\)的常量有时是1。然而,如果用另外一个公式逼近误差就是\(O(\varepsilon)\),当\(\varepsilon\)小于1时,实际上\(\varepsilon\)比\(\varepsilon^{2}\)大很多,所以这个公式近似值远没有左边公式的准确,所以在执行梯度检验时,使用双边误差,即\(\frac{f\left(\theta + \varepsilon \right) - f(\theta -\varepsilon)}{2\varepsilon}\),而不使用单边公差,因为它不够准确。

如果不理解上面两条结论,所有公式都在这儿,不用担心,如果对微积分和数值逼近有所了解,这些信息已经足够多了,重点是要记住,双边误差公式的结果更准确。
这篇讲了如何使用双边误差来判断别人给的函数\(g( \theta)\),是否正确实现了函数\(f\)的偏导,现在可以使用这个方法来检验反向传播是否得以正确实施,如果不正确,它可能有bug需要来解决。
神经网络优化篇:详解梯度的数值逼近(Numerical approximation of gradients)的更多相关文章
- PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明
PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载 中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...
- 走向DBA[MSSQL篇] 详解游标
原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...
- Scala进阶之路-Scala函数篇详解
Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...
- 【零基础】神经网络优化之dropout和梯度校验
一.序言 dropout和L1.L2一样是一种解决过拟合的方法,梯度检验则是一种检验“反向传播”计算是否准确的方法,这里合并简单讲述,并在文末提供完整示例代码,代码中还包含了之前L2的示例,全都是在“ ...
- CentOS 7 下编译安装lnmp之PHP篇详解
一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:centos-release-7-5.1804.el7.centos.x86_64 二.PHP下载 官网 http ...
- CentOS 7 下编译安装lnmp之MySQL篇详解
一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:centos-release-7-5.1804.el7.centos.x86_64 二.MySQL下载 MySQL ...
- CentOS 7 下编译安装lnmp之nginx篇详解
一.安装环境 宿主机=> win7,虚拟机 centos => 系统版本:CentOS Linux release 7.5.1804 (Core),ip地址 192.168.1.168 ...
- Canal:同步mysql增量数据工具,一篇详解核心知识点
老刘是一名即将找工作的研二学生,写博客一方面是总结大数据开发的知识点,一方面是希望能够帮助伙伴让自学从此不求人.由于老刘是自学大数据开发,博客中肯定会存在一些不足,还希望大家能够批评指正,让我们一起进 ...
- java提高篇-----详解java的四舍五入与保留位
转载:http://blog.csdn.net/chenssy/article/details/12719811 四舍五入是我们小学的数学问题,这个问题对于我们程序猿来说就类似于1到10的加减乘除那么 ...
- 组件--Fragment(碎片)第二篇详解
感觉之前看的还是不清楚,重新再研究了一次 Fragment常用的三个类: android.app.Fragment 主要用于定义Fragment android.app.FragmentManager ...
随机推荐
- C#集成ViewFaceCore人脸检测识别库
前言 人脸检测与识别现在已经很成熟了,C# 上有 ViewFaceCore 这个很方便的库,但这种涉及到 native 调用的库,一般会有一些坑,本文记录一下开发和部署的过程. 本文的项目是 AIHu ...
- Solution -「SP 106」BINSTIRL
Description Link. 求 \(\begin{Bmatrix}n \\ m\end{Bmatrix}\bmod2\) Solution 求 \[\begin{aligned} \begin ...
- Solution -「HDU 3507」Print Article
Description Link. 给出 \(N\) 个单词,每个单词有个非负权值 \(C_{i}\),现要将它们分成连续的若干段,每段的代价为此段单词的权值和,还要加一个常数 \(M\),即 \(( ...
- ISO/OSI七层模型的分层与作用
ISO/OSI的七层模型 第七层:应用层 为用户提供服务,给用户一个操作界面,如window的图形界面,Linux的命令行: 第六层:表示层 数据提供表示:把01二进制转换为图像数字等用户可以看懂的内 ...
- 《最新出炉》系列初窥篇-Python+Playwright自动化测试-17-处理鼠标悬停
1.简介 有些测试场景或者事件,playwright根本就没有直接提供方法去操作,而且也不可能把各种测试场景都全面覆盖提供方法去操作.比如:就像鼠标悬停,一般测试场景鼠标悬停分两种常见,一种是鼠标悬停 ...
- MySQL系列之主从复制进阶——延时从库、半同步、过滤复制、GTID复制
目录 1. 延时从库 1.1介绍 1.2 为什么要有延时从 1.3 配置延时从库 1.4 延时从库应用 1.4.1 故障恢复思路 1.4.2 故障模拟及恢复 2. 半同步 *** 2.1 半同步复制工 ...
- Python面向对象——1、什么是异常 2、为何处理异常 3、如何处理异常? 4、何时使用异常处理 网络编程的一些预备知识
文章目录 异常 1.什么是异常 2.为何处理异常 3.如何处理异常? 4.何时使用异常处理 网络编程的一些预备知识 异常 1.什么是异常 异常是程序发生错误的信号.程序一旦出现错误,便会产生一个异常, ...
- 基于 ACK Serverless 解锁你家萌宠的 AI 形象
基于 ACK Serverless 解锁你家萌宠的 AI 形象详情 1. 计费说明 必看!!必看!!必看!! 本实验为付费体验,需要消耗账号费用.体验后若不再需要使用,请及时释放资源,避免持 ...
- 如何使用DALL-E 3
如何使用 DALL-E 3:OpenAI 图像生成指南 DALL-E 3 是 OpenAI 图像生成器的高级版本,它可以理解自然语言提示来创建详细图像. 它克服了以前版本的方形图像限制,现在支持各种宽 ...
- C#/.NET/.NET Core优秀项目和框架2023年10月简报
前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(公众号每周至少推荐两个优秀的项目和框架当然节假日除外),公众号推文有项目和框架的介绍.功能特点以及部分截图等(打不开或 ...