PaperNotes(9)-Learning deep energy model: contrastive divergence vs. Amortized MLE

Learning deep energy model: contrastive divergence vs. Amortized MLE

  • abstract
  • 1 Introduction
  • 2 Background
    • 2.1 stein variational gradient descent
    • 2.2 learning energy model
  • **contrastive Divergence**

abstract

受SVGD算法的启发,本文提出两个算法用于从数据中学习深度能量模型.两个算法分别为:SteinCD算法和SteinGAN 算法,SteinCD 算法将 CD算法和SVGD算法结合(基于两者理论上的联系), SteinGAN 算法通过最大似然训练一个附加的网络训练负样本. SteinCD有高似然,SteinGAN有高可视化质量.两者结合可以继承两者的优点.

1 Introduction

EBM(energy -based models)能够捕获依据能量函数捕获变量之间的依赖性,为无向图模型,深度生成模型等提供了一个统一的建模框架.

MLE(maximum likelihood estimator)用于学习EBM中的参数,但是准确MLE由于难以计算的归一化常数往往无法求解.为了解决这个困境,近年提出了很多方法,例如近似的Likelihood 目标函数,或者可替代的目标函数. Contrastive divergence 是其中一种改进方案,优化的是一个对比目标,该对比目标用以衡量 朝着目标走一定步子的 能够改进的KL散度(两个分布没有搞清楚呦).

CD类的方法能够获得很高的测试似然,但是产生不了真实的数据(real-world instance图像). 能量模型无法捕获real-world instance 基于的相对第的流形.GAN模型能够生成高视觉质的样本但没有明确的能量目标(使得泛化性能一般). 将GAN模型和EBM模型结合能够融合两种方法的优点.

2 Background

2.1 stein variational gradient descent

SVGD 可以是一个近似采样策略,用于近似从目标分布p(x)p(x)p(x)中采样(x是d 维度的一个随机变量).初始化一些列例子{xi}i=1n\{x_i\}_{i=1}^n{xi}i=1n(这些例子的经验分布是q0(x)=∑iδ(x−xi)/nq_0(x)=\sum_{i}\delta(x-x_i)/nq0(x)=iδ(xxi)/n),通过下面的变换操作,使得例子朝着p(x)分布的规律靠近.
xi′←xi+ϵϕ(xi),∀i=1,...,nx_i'\leftarrow x_i + \epsilon \phi(x_i), \forall i=1,...,nxixi+ϵϕ(xi),i=1,...,n

其中ϵ\epsilonϵ为步长,ϕ(xi)\phi(x_i)ϕ(xi)xix_ixi决定的改进方向,这个改进方向应该朝向KL散度下降最快的方向前进(可以直接对W距离优化么)
ϕ∗=arg⁡max⁡ϕ∈F{KL(q0∣∣p)−KL(q[ϵϕ]∣∣p)}(6.1)\phi^*=\arg \max_{\phi \in \mathcal{F}}\{KL(q_0||p) - KL(q_{[\epsilon\phi]}||p)\}\tag{6.1}ϕ=argϕFmax{KL(q0p)KL(q[ϵϕ]p)}(6.1)

KL(q0∣∣p)−KL(qx′∣∣p)=∫[q0log⁡q0p−qx′log⁡qx′p]dxKL(q_0||p)-KL(q_{x'}||p)=\int [q_0\log\frac{q_0}{p} -q_{x'}\log\frac{q_{x'}}{p} ]dxKL(q0p)KL(qxp)=[q0logpq0qxlogpqx]dx

原来SVGD目标函数只有后半部分

无穷的部分会被减掉,上式子定义了一个非线性方程优化问题.当步长ϵ→0\epsilon \rightarrow 0ϵ0时, KL散度的下降率(就用这个式子可以计算出来) 可以近似为 KL 散度的梯度(说的是哪两个分布的KL散度?),写作:
ϕ∗=arg⁡max⁡ϕ∈F{−ddϵKL(q[ϵϕ]∣∣p)∣ϵ=0}(6.2)\phi^* = \arg \max_{\phi \in \mathcal{F}}\{-\frac{d}{d\epsilon} KL(q_{[\epsilon\phi]}||p)|_{\epsilon=0}\}\tag{6.2}ϕ=argϕFmax{dϵdKL(q[ϵϕ]p)ϵ=0}(6.2)

最优的ϕ\phiϕ记为ϕ∗\phi^*ϕ,是通过使6.1式最大化得到的最优扰动方向.当q0q_0q0ppp给定,6.1式子中的KL(q0∣∣p)KL(q_0||p)KL(q0p)为一个与优化无关的固定值,则需要最小化KL(q[ϵϕ]∣∣p)KL(q_{[\epsilon\phi]}||p)KL(q[ϵϕ]p),则需要找到下降(负梯度)最快(max)的方向(即6.2式子所示),在 SVGD 中显示6.2式可以表示为:
−ddϵKL(q[ϵϕ]∣∣p)∣ϵ=0=Ex∼q0[Tpϕ(x)]-\frac{d}{d\epsilon} KL(q_{[\epsilon\phi]}||p)|_{\epsilon=0}=\mathbb{E}_{x\sim q_0}[\mathcal{T_p\phi(x)}]dϵdKL(q[ϵϕ]p)ϵ=0=Exq0[Tpϕ(x)]

Tp\mathcal{T}_pTp为stein算子,具体作用形式为(返回标量值函数不懂),6.2 式定义了一个discrepency:D(q0∣∣p)\mathbb{D}(q_0||p)D(q0p)(距离的定义本身就是一个糟糕的一种情况)

SVGD探索了F\mathcal{F}F需要具备的特性:具有简单的结构,但是依旧能保持着无限维度以包含所有有用的速度场方向.一个自然的选择是再生核希尔伯特空间中函数.在这种情况下,最优的ϕ∗\phi^*ϕ为:
ϕ∗=Ex∼q0[∇xlog⁡p(x)k(x,x′)+∇xk(x,x′)]\phi^*=\mathbb{E}_{x \sim q_0}[\nabla_x\log p(x)k(x,x')+ \nabla_xk(x,x')]ϕ=Exq0[xlogp(x)k(x,x)+xk(x,x)]

2.2 learning energy model

SVGD 是一个推断过程,本文研究的是一个学习过程.给定一批样本{xi}i=1n\{x_i\}_{i=1}^n{xi}i=1n,找到一个分布ppp,最好的近似这批样本.

可以将p分布建模为:
p(x∣θ)=1Z(θ)exp⁡(f(x;θ))Z(θ)=∫xexp⁡(f(x;θ))dxp(x|\theta)=\frac{1}{Z(\theta)}\exp(f(x;\theta))\\ Z(\theta)=\int_x \exp (f(x;\theta))dxp(xθ)=Z(θ)1exp(f(x;θ))Z(θ)=xexp(f(x;θ))dx

f(x,θ)f(x,\theta)f(x,θ)为负代表能量的标量值函数, 使用MLE来估计(更新)θ\thetaθ,对最大化对数似然求导数,可以得到参数θ\thetaθ更新的方式,但是有一个致命的缺点是该导数中存在归一化常数的导数无法直接计算(到现在也没有明白为啥这个导数难以计算?对参数的导数乘上所有样本的和?),所以需要对涉及到的这个归一化参数求导的部分进行 近似处理 .

contrastive Divergence

https://blog.csdn.net/bbbeoy/article/details/79246340 cd 方法的原始论文的翻译
深度学习方法:受限玻尔兹曼机RBM(四)对比散度contrastive divergence,CD:https://blog.csdn.net/xbinworld/article/details/45274289?utm_source=blogxgwz0

现在的主要问题是如何从KL过度到CD不是很明白,大概是说原来的吉布斯分布采样是从随机状态开始的,现在 从采样样本开始,CD算法的前身应该是吉布斯采样训练RBM
stein max-min 目标函数还是可以理解,max 是为了越接近与原始KL散度, 外层的Min就是最小化这个KL散度

看完也是一知半解,初步想法框图,就看多变量的直接请求离差算不算是QR回归.

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

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

相关文章

windows下的gvim配置

首要任务是下载安装Gvim7.3 。 安装完后,gvim菜单中文出现乱码,在_vimrcset文件中增加: " 配置多语言环境,解决中文乱码问题 if has("multi_byte") " UTF-8 编码 set encodingutf-8 set termencodingutf…

leetcode104 二叉树的最大深度

给定一个二叉树,找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 示例: 给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7 返回它的最大深度…

C++的安全类型转换的讨论

关于强制类型转换的问题,很多书都讨论过,写的最详细的是C++ 之父的《C++的设计和演化》。最好的解决方法就是不要使用C风格的强制类型转换,而是使用标准C++的类型转换符:static_cast, dynamic_cast。标准C++中有四个类型转换符:static_cast、dynamic_cast、reinterpret_ca…

PaperNotes(10)-Maximum Entropy Generators for Energy-Based Models

Maximum Entropy Generators for Energy-Based ModelsAbstract1 Introduction2 Background3 Maximum Entropy Generators for Energy-Based Models4 Experiments5 Related Work6 Conclusion7 AcknowledgementsAbstract 由于对数似然梯度的难以计算,能量模型的最大似…

leetcode105 前序中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder [3,9,20,15,7] 中序遍历 inorder [9,3,15,20,7] 返回如下的二叉树: 3 / \ 9 20 / \ 15 7 思路: 1、…

c++的虚拟继承 的一些思考吧

虚拟继承是多重继承中特有的概念。虚拟基类是为解决多重继承而出现的。如:类D继承自类B1、B2,而类B1、B2都继承自类A,因此在类D中两次出现类A中的变量和函数。为了节省内存空间,可以将B1、B2对A的继承定义为虚拟继承,而A就成了虚拟基类。实现的代码如下: class A class …

对于linux socket与epoll配合相关的一些心得记录

对于linux socket与epoll配合相关的一些心得记录 没有多少高深的东西,全当记录,虽然简单,但是没有做过测试还是挺容易让人糊涂的int nRecvBuf32*1024;//设置为32Ksetsockopt(s,SOL_SOCKET,SO_RCVBUF,(const char*)&nRecvBuf,sizeof(int))…

leetcode144 二叉树的前序遍历

给定一个二叉树,返回它的 前序 遍历。 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 思路:模仿递归的思路压栈即可。 /*** Definition for a bi…

AJAX大总结

1、AJAX概述 1.1 什么是AJAX AJAX(Asynchronous Javascript And XML)翻译成中文就是“异步Javascript和XML”。即使用Javascript语言与服务器进行异步交互,传输的数据为XML(当然,传输的数据不只是XML)。 …

我对STL的一些看法(一)初步认识STL

后面一段时间我将会给大家分享我自己学到STL以及应用的时候遇到的问题还有他的一些精髓,可能开始的逻辑会有些乱吧,不过后面还会不断的整理和优化,让自己看明白也让更多的读者看的清楚。 最近刚闲下来,先说说什么是STL: 不知道你是否有过这样的经历。在大学,你准备着手完…

PaperNotes(12)-Autoregressive Quantile networks for generative modeling

Autoregressive Quantile networks for generative modeling3 autoregressive implicit quantiles3 autoregressive implicit quantiles autoregressive:自身做回归变量,用之前若干时刻的随机变量 来建模 之后某些时刻 随机变量的模型。 N维随机变量的…

我对STL的一些看法(二)认识vector容器

先说vector吧。 C++ Vector(向量容器) 是一个线性顺序结构。相当于数组,但其大小可以不预先指定,并且自动扩展。它可以像数组一样被操作,由于它的特性我们完全可以将vector 看作动态数组。 vector 的数据安排以及操作方式,与 array 非常像似。两者的唯㆒差别在于空间的…

git大总结

git init 在本地新建一个repo,进入一个项目目录,执行git init,会初始化一个repo,并在当前文件夹下创建一个.git文件夹. git clone 获取一个url对应的远程Git repo, 创建一个local copy. 一般的格式是git clone [url]. clone下来的repo会以url最后一个斜线后面的名称命名,创…

我对STL的一些看法(三)认识list容器

C++ List(双向链表) 是一个线性链表结构,它的数据由若干个节点构成,每一个节点都包括一个信息块(即实际存储的数据)、一个前驱指针和一个后驱指针。它无需分配指定的内存大小且可以任意伸缩,这是因为它存储在非连续的内存空间中,并且由指针将有序的元素链接起来。由于…

C++(4)--初识变量、数据类型

C变量1.C 命名规则2.C 命名规范3.C 数据类型sizeof ()4.声明和使用变量4.1使用整型变量4.2使用单精度浮点型变量4.3使用双精度浮点型变量5.附送-cout 设置宽度,对齐方式6.算术运算符和表达式6.1除法、取余6.2自加、自减7.强制类型转换《老九学堂C课程》《C primer》…

我对STL的一些看法(四)认识deque容器

Deque(双向队列) 是一种优化了的、对序列两端元素进行添加和删除操作的基本序列容器。它允许较为快速地随机访问,但它不像vector 把所有的对象保存在一块连续的内存块,而是采用多个连续的存储块,并且在一个映射结构中保存对这些块及其顺序的跟踪。向deque 两端添加或删除元…

我对STL的一些看法(五)初识关联容器

3关联容器 pair类型 这个是一个简单的标准库类型,该类型在utility头文件中定义,我们来看看他主要的操作: pair<T1 ,T2> p1; 创建一个空的pair对象 pair<T1,T2> p1(v1,v2);创建一个pair对象,他的两个元素分别为T1类型的v1,T2类型的v2 make_pair(v1,v2…

关系数据库——mysql数据类型大总结

整数类型&#xff1a; 实数类型&#xff1a; 定点数&#xff1a;DECIMAL和NUMERIC类型在MySQL中视为相同的类型。它们用于保存必须为确切精度的值。 DECIMAL(M,D)&#xff0c;其中M表示十进制数字总的个数&#xff0c;D表示小数点后面数字的位数。 如果存储时&#xff0c;整…

学点数学(5)--线性规划对偶形式的理解

线性规划对偶问题的理解1.弱对偶2.强对偶曾在上课的时候多次遇到这个求一个问题的对偶形式&#xff0c;大多是硬套公式。记一次&#xff0c;忘一次。后来在苏大佬的博客中看到了相关阐述&#xff0c;感觉豁然开朗&#xff0c;&#xff08;可以记得就一些了&#xff09;遂做笔记…

关系数据库——视图/存储过程/触发器

视图 视图是虚拟的表&#xff0c;与包含数据的表不同&#xff0c;视图只包含使用时动态检索数据的查询,主要是用于查询。 为什么使用视图 重用sql语句简化复杂的sql操作&#xff0c;在编写查询后&#xff0c;可以方便地重用它而不必知道他的基本查询细节。使用表的组成部分而…