一个故事

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

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

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

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

梯度计算技术的微妙之处

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

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

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

获得KL

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

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

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

Fisher的介绍

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

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

自然梯度定义

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

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

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

关于损失的梯度

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

对数似然的梯度

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

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

用武之地

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

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

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

  1. kl散度度量分布_论“邻里关系”的学问:度量和改进图信息在图神经网络中的使用 | AI Time PhD ICLR...

    AI TIME欢迎每一位AI爱好者的加入! 近年来,图神经网络(GNN)在社交网络.知识图谱.推荐系统甚至生命科学等领域得到了越来越广泛的应用.但在复杂的图数据中,我们很难高效利用实体之间的相互依赖关 ...

  2. kl散度度量分布_强化学习新思潮1:值分布强化学习(04)

    经典强化学习有比较好的理论保证,尽管值分布强化学习的效果很好,但理论分析比较少.本文继续介绍值分布强化学习算法的理论分析.参考论文为"An Analysis of Categorical D ...

  3. kl散度度量分布_数据挖掘比赛技巧——确定数据同分布

    在数据挖掘比赛中,很重要的一个技巧就是要确定训练集与测试集特征是否同分布,这也是机器学习的一个很重要的假设[1].但很多时候我们知道这个道理,却很难有方法来保证数据同分布,这篇文章就分享一下我所了解的 ...

  4. kl散度度量分布_浅谈KL散度

    一.第一种理解 相对熵(relative entropy)又称为KL散度(Kullback–Leibler divergence,简称KLD),信息散度(information divergence) ...

  5. kl散度度量分布_解读KL散度:从定义到优化方法

    Kullback-Leibler 散度是计算机科学领域内的一个重要概念.数据科学家 Will Kurt 通过一篇博客文章对这一概念进行了介绍,机器之心技术分析师在此基础上进行了解读和扩充.本文为该解读 ...

  6. kl散度度量分布_概率图简要模型笔记(二)马尔可夫随机场与KL散度、最大熵、指数族分布、高斯分布、极大似然分布...

    这一篇文章主要是想捋一捋KL散度.最大熵.指数族分布这些东西之间的关系,这是一些非常基本的知识点,刚入门机器学习的时候,傻傻分不清楚,现在回过头来看,其实很多东西都可以串起来,不得不感叹数学真是一个很 ...

  7. python中的列表理解_掌握『Python列表理解』需要知道的9件事,你知道了吗?

    越来越多的人开始学习Python,它已经成为最流行的编程语言之一,这几乎发生在所有领域.比如网络开发.科学计算,当然还有人工智能. 无论想用python干什么,都绕不开学习Python的数据结构.变量 ...

  8. 梯度的直观理解_如何直观形象的理解梯度,散度,旋度?

    这是我以前看到有人这么解释,比较形象,希望对你有帮助. 梯度: 运算的对像是纯量,运算出来的结果会是向量在一个标量场中, 梯度的计算结果会是"在每个位置都算出一个向量,而这个向量的方向会是在 ...

  9. 谈谈你对计算思维和python生态的理解_计算思维的的理解及重要性

    一篇有署名Looi Chee Kit教授的有关计算思维(Computational Thinking,CT)的文章.该文2017年11月23日发布在新加坡一个政府的网站上.文中提出一个鲜明的观点:计算 ...

最新文章

  1. c语言 双线程,如何用C语言实现多线程
  2. 深入浅出谈cuda 书_入门和基础——9本关于美学的书
  3. 如何使用有序GUID提升数据库读写性能
  4. realme Race新旗舰入网:旗下首款骁龙888旗舰
  5. Java基础学习总结(39)——Log4j 1使用教程
  6. 大型网站技术架构-入门梳理
  7. 如何用计算机寒假计划表,如何制定寒假学习计划表
  8. 感觉百度输入法好于搜狗输入法
  9. Kafka从上手到实践 - Kafka CLI:Consumer CLI Producer CLI | 凌云时刻
  10. Ubuntu上安装visual studio code
  11. Sql server 行列转换
  12. SVN 删除文件及其恢复大全
  13. sqlserver200864位下载_Microsoft SQL Server 2008 R2 官方简体中文正式版下载
  14. python安装pyserial模块_Python使用pip安装pySerial串口通讯模块
  15. 面试经历---网易(2016年01月19日下午面试)
  16. pdf怎么删除其中一页与添加新页面
  17. 怎么获取淘宝商品详情
  18. 基于vue,安装vux-ui步骤
  19. python配置opencv环境后,读取图片,报错:can‘t open/read file: check file path/integrity
  20. 思科 计算机网络 第六章测试考试答案

热门文章

  1. oauth2.0协议流程_正确的工作流程:我应该使用哪个OAuth 2.0流程?
  2. java解码_Java数组已排序解码
  3. 策略模式示例代码_策略设计模式示例
  4. jdbc mysql驱动_MySQL JDBC驱动程序如何处理准备好的语句
  5. redis集成spring_将Redis集成到您的Spring项目中
  6. log4j 程序日志_使用log4j监视和筛选应用程序日志到邮件
  7. 构建Spring微服务并对其进行Dockerize生产
  8. java wcf_尝试将WCF映射到Java术语
  9. 拥抱模块化Java平台:Java 10上的Apache CXF
  10. 使用Java流查询数据库