kl散度的理解_以曲率的视角理解自然梯度优化

一个故事

我要讲一个故事:一个你几乎肯定听过的故事,但它的侧重点与你习以为常关注的不同。

所有现代深度学习模型都使用梯度下降进行训练。 在梯度下降的每个步骤中,您的参数值从某个起始点开始,然后将它们移动到最大损失减少的方向。 你可以通过从你的整个参数向量中获取损失的导数来实现这一点,否则称为雅可比行列式。 然而,这只是损失的一阶导数,它没有告诉你曲率的任何信息,或者说,一阶导数变化的有多快。 由于您所处的区域中,您对一阶导数的局部近似可能不会从该估计值点(例如,在大山前的向下曲线)的区域中,您通常需要谨慎,并且不要太过大踏步。 因此,为了谨慎起见,我们用下面的等式中的步长α控制我们的前进速度。

95d3e68e278dfe59d359c9783f53b248.png

这个步长做了一些有趣的事情:它限制了你要在梯度方向上更新每个参数的距离,并且这样做是固定的数量。在这个算法的最简单的版本中,我们取一个标量,假设是0.1,然后乘以关于损失的梯度。我们的梯度,记住,实际上是一个矢量-损失的梯度相对于模型中的每个参数向量-损失的梯度模型中,当我们将它乘以一个标量时,我们用欧几里得的方法,将沿每个参数轴的更新乘以相同的固定量。在梯度下降的最基本版本中,我们在学习过程中使用相同的步长。

但是,这真的有意义吗?有一个小学习率的前提是,我们知道一个单一的局部梯度估计只能在该估计周围的一个小的局部区域有效。但是,参数可以存在于不同的尺度上,并且可以对您所学的条件分布产生不同程度的影响。而且,这种程度的影响会在培训过程中波动。从这个角度来看,在欧几里得参数空间中,用一个固定的全局半径来定义一个安全波动似乎不是一件特别明智或有意义的事情。

5b50770c070bef6879b347c9bea3f31c.png

梯度计算技术的微妙之处

自然梯度的支持者含蓄地提出了一个相反的建议,即我们不应该用参数空间中的距离来定义安全窗口,而是应该用分布空间中的距离来定义它。所以,与其说"我将遵循电流梯度,服从保持参数向量保持在电流向量的极小值的距离内",不如说"我将遵循我的电流梯度,服从保持分配我的模型是预测在之前预测的分布的极小值的距离内"。

这里的概念是分布之间的距离对于任何缩放、移动或一般的重新参数化都是不变的。例如,例如,相同的高斯可以使用方差参数或尺度参数(1/方差)进行参数化;两种分布之间的距离是不同的,这取决于它们是用方差还是尺度来进行参数化。但如果在原始概率空间中定义一个距离,它将是一致的。

本文的其余部分将尝试建立一种更强大,更直观的理解方法,称为自然梯度学习,这是一种概念上优雅的想法,旨在纠正参数空间中缩放的任意性。本文将深入探讨它是如何工作的,如何在构成它的不同数学思想之间建立桥梁,并最终讨论它是否以及在什么地方真正有用。但是,首先:计算分布之间的距离意味着什么?

获得KL

KL分歧,或者更确切地说是Kullback-Leibler分歧,在技术上并不是分布之间的距离度量(数学家对于所谓的度量或适当的距离是挑剔的),但它非常接近这个概念。

4a54ac66236c129779decf43c769fa39.png

从数学上讲,它是通过计算从一个分布或另一个分布采样的x的值取得的对数概率(即,概率值的原始差异)的比率的预期值来获得的。这个事实是,期望取自其中一个分布或另一个分布使得它成为非对称度量,其中KL(P || Q)!= KL(Q || P)。但是,在许多其他方面,KL分歧映射到我们关于概率距离应该是什么样的概念:它直接根据概率密度函数的定义来衡量,也就是说,分配在一堆点上的密度值的差异来定义的。这有一个非常实用的方面,当分布对于广泛的X系列的"X的概率是多少"的问题有更远的答案时,分布被视为更加不同。

在自然梯度条件下,KL分歧被用作衡量我们的模型预测的输出分布变化的一种方式。如果我们正在解决多向分类问题,那么我们的模型的输出将是一个softmax,它可以被看作是一个多项式分布,每个类具有不同的概率。当我们谈论由当前参数值定义的条件概率函数时,这就是我们所讨论的概率分布。如果我们使用KL散度作为缩放梯度步长的方法,这意味着我们看到两个参数配置为"更远的距离",对于给定的输入特征集,如果它们会导致预测的类别分布在KL分歧方面非常不同。

Fisher的介绍

到目前为止,我们已经讨论过为什么在参数空间中缩放更新步骤的距离是令人不满意的,并建议一个不那么随意的替代方案:缩放我们的步骤,使得最多只能在KL分歧方面与我们的模型以前一直在预测的类分布。理解自然梯度最困难的部分是下一部分:KL Divergence和Fisher信息矩阵之间的联系。

从故事的结尾开始,Natural Gradient就像这样实现:

0968312219f90c5934d7f068595aa696.png

自然梯度定义

等号上的def表示右边的是左边符号的定义。右手项由两部分组成。首先,这是你的损失函数相对于参数的梯度(这是在更正常的梯度下降步骤中使用的相同梯度)。"自然"位来自第二个分量:取对数概率函数梯度的平方梯度的期望值(取自z)。我们将整个对象称为Fisher信息矩阵,用损失梯度乘以它的倒数。

p-theta(z)项是由我们的模型定义的条件概率分布,也就是说:神经网络末端的softmax。我们正在研究所有p-theta项的梯度,因为我们关心的是我们预测的类概率因参数变化而变化的量。预测概率的变化越大,我们的更新前和更新后的预测分布之间的KL差异越大。

使自然梯度优化混淆的部分原因在于,当您正在阅读或思考它时,您必须理解和争论两个不同的梯度对象,这意味着不同的事物。顺便说一句,这对于杂草来说是不可避免的,特别是在讨论可能性时,并没有必要掌握整体直觉; 如果您不喜欢浏览所有血淋淋的细节,请随时跳到下一部分。

关于损失的梯度

f63224c81bfe2aeb8d42f33f0be27929.png

通常,您的分类损失是一个交叉熵函数,但更广泛地说,它是某种函数,它将模型的预测概率分布和真实目标值作为输入,并且当您的分布远离目标时具有更高的值。这个对象的梯度是梯度下降学习的核心面包和黄油; 它表示如果将每个参数移动一个单位,您的损失将会发生变化。

对数似然的梯度

077f70f375bc905bdd077823280f62cb.png

这是我学习自然梯度中最令人困惑的部分。因此,如果您阅读有关Fisher信息矩阵的内容,您将获得许多链接,说明它与模型的对数似然的梯度有关。我之前对似然函数的理解是,它代表了你的模型对某些数据集的可能性有多大; 特别是,您需要目标值来计算它,因为您的目标是计算模型分配给真实目标的概率,当您对输入要素进行调节时。在讨论可能性的大多数情况下,例如非常常见的最大似然技术,您关心对数似然的梯度,因为您的可能性越高,您的模型分配从真实分布中采样的值的概率越高,我们都快乐。实际上,这看起来像计算p(class | x)渐变的期望值,其中概率在数据中的实际类分布中得出。

但是,您也可以用另一种方式评估可能性,而不是根据真实目标值计算您的可能性(您可能希望具有非零梯度,因为它可能会推动您的参数增加概率对于真正的目标,您可以使用从条件分布本身中提取的概率来计算您的期望。也就是说,如果您的网络导致softmax,而不是基于给定观察的数据中的真实等级,以0/1概率取得logp(z)的期望,请使用该模型的估计概率作为在它期望中的权重。这将导致整体预期梯度为0,因为我们将模型当前的信念作为基本事实,但我们仍然可以得到梯度的方差(即梯度平方),这是我们的Fisher矩阵中(隐含地)计算预测类空间中的KL分歧所需要的。

用武之地

这篇文章花了很多时间讨论力学:这个东西究竟是什么叫做自然梯度估计,以及关于它如何起作用以及为什么起作用具有更好的直觉。但是,如果我不回答这个问题,我觉得自己会失职:这东西真的有价值吗?

简短的回答是:实际上,它并没有为大多数深度学习应用程序提供足够引人注目的价值。有证据表明自然梯度导致收敛发生的步骤较少,但正如我稍后将讨论的那样,这是一个复杂的比较。对于因参数空间中的缩放更新步骤的随意性而受挫的人来说,自然渐变的想法是优雅的并且令人满意。但是,除了优雅之外,我不清楚它是否提供了无法通过更多启发手段提供的价值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/332312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JSP的学习笔记

文章目录概念原理JSP 脚本JSP 内置对象概念 Java Server Pages :Java 服务器端页面 可以理解为:一个特殊的页面,其中既可以指定定义 html 标签,又可以定义 Java 代码 用于简化 Servlet 中的输出页面数据的代码的书写!!! 原理 J…

程序员面试算法_程序员的前20个搜索和排序算法面试问题

程序员面试算法大家好,如果您正在准备编程工作面试或正在寻找新工作,那么您知道这不是一个容易的过程。 在您职业的任何阶段,您都必须幸运地接到电话并进行第一轮面试,但是在初学者方面,当您寻找第一份工作时就更加困难…

御用导航提示页面_UI网站导航设计知识与五个知识案例

导航设计是网站的基石。它确定了至关重要的指标,例如转化率和跳出率,页面停留时间,点击量,并且通常是决定您的访问者拥有良好体验并以比您所说的“用户流量”更快退出网站的决定性因素。但是,好的设计是什么样的呢?一…

Servlet规范中定义的过滤器

文章目录什么是过滤器写过滤器的步骤配置初始化参数过滤器的优先级过滤器的优点过滤器执行过程图解过滤敏感词的示例代码使用 Servlet 来过滤敏感词使用过滤器来过滤敏感词通过配置初始化参数来设置敏感词关于 web.xml 的配置什么是过滤器 Servlet 规范当中定义的一种特殊的类…

Spring Boot错误–创建在类路径资源DataSourceAutoConfiguration中定义的名称为“ dataSource”的bean时出错...

大家好,如果您使用的是Spring Boot,并且遇到诸如“无法为数据库类型NONE确定嵌入式数据库驱动程序类”或“在类路径资源ataSourceAutoConfiguration中定义的名称为dataSource的bean创建错误”之类的错误,那么您来对地方了地点。 在本文中&…

simulink怎么生成vxworks的执行程序_从EPB模型谈谈Simulink代码生成

前段时间有读者朋友问代码生成的例子,说他正在做EPB的仿真模型,但总是和应用串不到一块去,我这里就从一个简单EPB控制模型来谈谈simulink代码生成,总结代码生成方法的同时也顺便回答他的问题。1.EPB模型准备用来举例说明的模型很简…

通过Socket实现文件上传/上传文件

文章目录整个功能的实现步骤客户端的实现步骤服务端的实现步骤示例代码整个功能的实现步骤 1.客户端使用本地的字节输入流读取被上传的文件数据 2.客户端使用网络字节输出流,将读取到的文件数据发送给服务端 3.服务端使用网络字节输入流读取客户端发送过来的文件数…

构造函数调用默认构造函数_显式无参数构造函数与默认构造函数

构造函数调用默认构造函数大多数不熟悉Java的开发人员都会Swift了解到,如果他们没有指定至少一个显式构造函数,则会为Java类隐式创建一个“ 默认构造函数 ”( 由javac进行创建)。 Java语言规范的 8.8.9节简要指出:“如…

Artifact到底是什么

将项目构建成一个可以在服务器部署的文件包(如:war 包或者 exploded 的文件包),或者构建成的 jar 包(这些 jar 包通常是某些模块程序文件,也可以是某些插件程序文件),这些都叫 Artif…

python win10 桌面_Python3如何实现Win10桌面自动切换

得空写了个自动切换桌面背景图片的小程序。再不写python就要扔键盘了,对vue还有那么一点好感,天天php真是有够烦。准备工作准备个文件夹放在桌面上,平时看到什么高清好图就拽进去。运行脚本脚本如下:#!/usr/bin/pythonimport ctyp…

java中抽象类继承抽象类_用Java中的抽象类扩展抽象类

java中抽象类继承抽象类示例问题 当我创建Java :: Geci抽象类AbstractFieldsGenerator和AbstractFilteredFieldsGenerator我遇到了一个不太复杂的设计问题。 我想强调一下,这个问题和设计对于某些人来说似乎很明显,但是在我最近与一位初级开发人员&#…

pb90代码如何连接sql2008r2_如何使用 HTTP Headers 来保护你的 Web 应用

众所周知,无论是简单的小网页还是复杂的单页应用,Web 应用都是网络攻击的目标。2016 年,这种最主要的攻击模式 —— 攻击 web 应用,造成了大约 40% 的数据泄露。事实上,现在来说,了解网络安全并不是锦上添花…

Servlet配置初始化参数/配置参数

文章目录给某个Servlet配置初始化参数配置全局的参数ServletConfig给某个Servlet配置初始化参数 也可以通过注解的方式来配置初始化参数: 在 Servlet 中获取针对 Servlet 的参数值: String version getInitParameter("version");配置全局的…

poi动态创建文档_POI创建的文档具有不同条件的灵活样式

poi动态创建文档介绍 这篇文章解释了基于各种标准将样式应用于文档的困难并提供了解决方案。 Java编程中的常见任务之一是根据存储在数据库中的数据创建Excel报告。 在这些情况下,Java程序员使用POI :-)。 这些报告通常对样式和数据格式有严格的规定。 数据通常是SQ…

python编码程序_python 编码

网页的编码方式是简体中文gb2312 (查看网页源码,可以看到),而python内部的编码方式为unicode,之前的代码是这样的:contentAll urllib.urlopen(urlLink).read()soup BeautifulSoup.BeautifulSoup(contentAll) #生成BeautifulSou…

比特(bit)_二进制数

二进制数位,也叫比特位,其实就是指位置,是指二进制数的位置。例如,0101 这是二进制数,而且是 4 位的二进制数,因为有 4 个位置,每个位置放一个二进制数,确切的说是每个位置放一个二进…

javax线程池超时结束_没有Javax的Jakarta EE:这次世界也不会结束

javax线程池超时结束如果您错过了新闻, Oracle将向Eclipse基金会捐赠Java EE规范 。 这个决定是在规范过程中进行了相当长时间的Hibernate之后,人们理所当然地怀疑Oracle丧失了对Java EE的战略兴趣。 首先,Java EE和更广泛的Java社区很好地满…

Final Cut Pro X如何去视频水印/视频去水印

先剪辑好视频(比如把不要的段切掉),然后选中视频,把它复制一份到另一个轨道(按住option键,用鼠标左键拖放即可复制)点击右下角的 效果(Effect)→ 模糊(Blur)→ 高斯模糊(Gaussian),把高斯模糊拖入上边那条轨道再次选择效果(Effect…

为什么线程池里的方法会执行两次_面试官问你java都有哪些线程池,自己是否自定义过线程池...

我还记得大学实习面试时,被问到什么是线程池这个问题,因为这个题我被录取了,原因就是我背出来了,而另外一个面试的没背出来,说实话当时还真不知道它是干什么的,就是看面试题给背下来了,在之后就…

java中两任务并行运行_Java并行编程中的“可调用”与“可运行”任务

java中两任务并行运行当我们用Java编写多线程应用程序时,我们倾向于使用“ Runnable ”接口来实现线程类。 您的类必须简单地实现此接口并覆盖run方法。 对于琐碎的用例,我们可以通过调用“ start”方法直接启动线程,结果将控制流委托给run…