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?δ(x?xi?)/n),通過下面的變換操作,使得例子朝著p(x)分布的規律靠近.
xi′←xi+??(xi),?i=1,...,nx_i'\leftarrow x_i + \epsilon \phi(x_i), \forall i=1,...,nxi?xi?+??(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(q0?p)?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(q0?p)?KL(qx?p)=[q0?logpq0???qx?logpqx??]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?d?KL(q[??]?p)?=0?}(6.2)

最優的?\phi?記為??\phi^*??,是通過使6.1式最大化得到的最優擾動方向.當q0q_0q0?ppp給定,6.1式子中的KL(q0∣∣p)KL(q_0||p)KL(q0?p)為一個與優化無關的固定值,則需要最小化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?d?KL(q[??]?p)?=0?=Exq0??[Tp??(x)]

Tp\mathcal{T}_pTp?為stein算子,具體作用形式為(返回標量值函數不懂),6.2 式定義了一個discrepency:D(q0∣∣p)\mathbb{D}(q_0||p)D(q0?p)(距離的定義本身就是一個糟糕的一種情況)

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??[?x?logp(x)k(x,x)+?x?k(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(θ)1?exp(f(x;θ))Z(θ)=x?exp(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.pswp.cn/news/444906.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444906.shtml
英文地址,請注明出處:http://en.pswp.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;可以方便地重用它而不必知道他的基本查詢細節。使用表的組成部分而…