1. 程式人生 > >LDA主題模型學習筆記3:變分推斷(E-step)

LDA主題模型學習筆記3:變分推斷(E-step)

(γ,ϕ)=argmin(γ,ϕ)D(q(θ,z|γ,ϕ)||p(θ,z|w,α,β))

而這個KL距離是如下形式,這個很難直接最小化。

D(q(θ,z|γ,ϕ)||p(θ,z|w,α,β))=zq(θ,z|γ,ϕ)logq(θ,z|γ,ϕ)p(θ,z|w,α,β)dθ.

       上面的問題先擱置一邊,來看看最初的目標,log似然函式。根據變分法,我們利用凸函式的Jensen不等式性質,可以得到log似然函式 logp(w|α,β) 的一族下界(lower bounds):
(*)
log似然函式下界推導

       可以看到第二行引入了q(θ,z),是為了使用Jensen不等式做的變形。然後在第三行使用了jensen不等式,第四行就是得到的下界。

       Jensen不等式是指,積分的凸函式值大於等於凸函式的積分值:

ϕ(E(X))E(ϕ(X))
       幾何解釋:
jensen
       對於離散的{x1,x2,...xn},則有:ϕ(i=1ng(xi)λi)i=1nϕ(g(xi))λi
       其中,ni=1λi=1,λi0。在連續的情況下,就是積分的形式了。q(θ,z) 的作用就相當於其中的λ,是權值。

       將(*)式中第四行等號右側部分記做L(γ,ϕ;α,β),這個就是我們找到的log似然函式logp(w|α,β) 的lower bounds,我們計算他們的差,會發現他們的差恰好是q

(θ,z|γ,ϕ)p(θ,z|w,α,β)這兩個分佈之間的KL距離(Kullback–Leibler divergence)。
kl

即:

logp(w|α,β)=L(γ,ϕ;α,β)+D(q(θ,z|γ,ϕ)||p(θ,z|w,α,β))

       至此,如下的優化問題:

(γ,ϕ)=argminγ,ϕD(q(θ,z|γ,ϕ)||p(θ,z|w,α,β))
轉化為了L(γ,ϕ;α,β) 的最大化問題,也就說,基於γ,ϕ 最大化L。(注意此時在E-step中,α,β 是上一輪迭代中M-step求得的,這裡不把它們當成變數。)

       接下來對L利用拉格朗日乘數法求最大值,讓L對γ

,ϕ 的偏導分別為零,即可解出γ,ϕ 。得到如下的更新式(推導見下一篇《LDA主題模型學習筆記3.5:變分引數推導》):
update

       這一對更新式可以從直觀的角度去解釋,但暫時還沒有理解清楚這個解釋,原文如下:
更新式直觀解釋
       得到更新式後,通過不斷的迭代,計算最優的引數γ,ϕ,以下是推斷演算法的虛擬碼:

變分虛擬碼

       其中ϕni是指第n個word由第i個topic生成的概率,k是指共有k個主題,N是文件中word數。因為存在約束

相關推薦

LDA主題模型學習筆記3推斷(E-step)

(γ∗,ϕ∗)=argmin(γ,ϕ)D(q(θ,z|γ,ϕ)||p(θ,z|w,α,β)) 而這個KL距離是如下形式,這個很難直接最小化。 D(q(θ,z|γ,ϕ)||p(θ,z|w,α,β))=∫∑zq(θ,z|γ,ϕ)logq(θ,z|γ,ϕ)p(θ,

LDA主題模型學習筆記5C原始碼理解

1,說明 本文對LDA原始論文的作者所提供的C程式碼中LDA的主要邏輯部分做註釋,原始碼可在這裡下載到:https://github.com/Blei-Lab/lda-c 這份程式碼實現論文《Latent Dirichlet Allocation》中介紹的LDA模型,用變分

LDA主題模型學習筆記

LDA:隱含狄利克雷分佈(Latent Dirichlet Allocation,簡稱LDA) 定義: -它是一種主題模型,它可以將文件集中每篇文件的主題以概率分佈的形式給出,從而通過分析一些文件抽取出它們的主題(分佈)出來後,便可以根據主題(分佈)進行主題

Python學習筆記3簡單文件操作

name n) popu 元素 close nes pla () eof # -*- coding: cp936 -*- # 1 打開文件 # open(fileName, mode) # 參數:fileName文件名稱 # mode打開方式 # w

Spark學習筆記3鍵值對操作

對象 常用 ava java 參數 通過 頁面 ascend 處理過程 鍵值對RDD通常用來進行聚合計算,Spark為包含鍵值對類型的RDD提供了一些專有的操作。這些RDD被稱為pair RDD。pair RDD提供了並行操作各個鍵或跨節點重新進行數據分組的操作接口。 Sp

機器學習筆記(3)多類邏輯回歸

display images 可能 https 都沒有 -s labels 明顯 交叉 仍然是 動手學嘗試學習系列的筆記,原文見:多類邏輯回歸 — 從0開始 。 這篇的主要目的,是從一堆服飾圖片中,通過機器學習識別出每個服飾圖片對應的分類是什麽(比如:一個看起來

struts2框架學習筆記3獲取servletAPI

ucc ati ica 實現 以及 vax color style http Struts2存在一個對象ActionContext(本質是Map),可以獲得原生的request,response,ServletContext 還可以獲得四大域對象(Map),以及param參

OpenCV學習筆記3圖像模糊作用和方法

希望 ont 去模糊 image title name 聽說 但是 意義 一、意義和作用: 圖像的模糊處理就是將圖片處理的更加模糊,如下圖,左側是原圖,右側是經過處理之後的圖片。 從主觀意願上說,我們希望看到清晰的圖像,而不是模糊的圖像。所以很多時候我們聽說還有一種專門進

Python學習筆記3多線程的示例一

set range int lse color cos star als read 基於python3.6,使用threading模塊實現: 1 import threading 2 import time 3 4 def run(n): 5 prin

Python3學習筆記1量和簡單數據類型

tle 小數點 per port 小數 指導 day this python 2018-09-16 17:22:11 變量聲明:   變量名 = ?? 如: 1 message = "HelloWorld" 2 message = 1 3 message =

Qt學習筆記3Qt工程的目錄結構

經過前兩篇的學習,已經可以使用Qt空專案模板建立自己的工程了。通過本篇的學習,整理一下如果使用Qt工程的目錄結構,使專案更規範和容易管理。 當前的目錄結構 如圖所示,這是前篇中建立的工程,只有main.cpp和widget.cpp、widget.h三個檔案,直接放在了一個目錄下,

Pytest學習筆記3fixture配置用例預置條件

setup和teardown可以實現在測試用例之前或之後加入一些操作,但這種是整個指令碼全域性生效的,如果我想實現以下場景: 用例1需要先登入,用例2不需要登入,用例3需要先登入。很顯然這就無法用setup和teardown來實現了。這就是本篇學習的目的,自定義測試用例的預置條件 firture

JMeter學習筆記3JSR223 PreProcessor前置處理器對密碼進行RSA加密

在網站中密碼往往不是明文傳送的,其中RSA加密方式,前臺Javascript指令碼對密碼進行加密,然後傳送加密後密碼進行伺服器驗證。 1、首先明白網站加密邏輯 網站部分程式碼如下: //與後臺互動獲取公鑰 function getPublicKey() {

Less學習筆記3變數

Less變數 1.定義變數 @變數名:變數值; 注意:一定要以@開頭,不要忘記末尾的分號(;) 例如: @test_width:300px; 2.變數的使用 <div class="box"></div> @test_width:300px;

【django3】Django學習筆記3Model,Template,View 基本概念

轉載:http://www.cnblogs.com/weichsel/archive/2012/10/16/2725554.html,侵權必刪 總體結構         Django是MTV結構,即:Model, Template, View &nb

Deep Learning 學習筆記3《深度學習》線性代數部分

標量:一個標量就是一個單獨的數 向量:一個向量是一列數,這些數是有序排列的,比如:,如果每個元素都屬於實數R,且有n個元素,則記為:。向量可以看做n維空間的點。 矩陣:二維陣列,如果一個矩陣A高度為m,寬度為n,且每個元素都屬於實數,則記為:A∈ 張量:一組陣列中的元素

DMU-單性狀重複力模型-學習筆記3

單性狀重複力模型 本次主要是演示如何使用DMU分析單性狀重複力模型. 重複力模型和動物模型的區別: 不是所有的性狀都可以分析重複力模型, 首先重複力模型是動物模型的拓展, 它適合一個個體多個觀測值的情況. 比如豬的產仔數, 一個母豬有多個胎次 比如雞的產蛋,

nanopi NEO2 學習筆記 3python安裝第三方GPIO

編譯 spa 修改 neo spi 分享 install 是個 選擇 如果我要用python控制NEO2的各種引腳,i2c 或 spi ,RPi.GPIO模塊是個非常好的選擇 這個第三方模塊是來自樹莓派的,好像友善之臂的工程師稍作修改移植到了NEO2上,就放在 /root/

Git學習筆記3通過git log 檢視版本演變歷史

1.檢視git commit 的列表 使用命令: git log --online 2.指定最近的4個commit 檢視演變列表 使用命令: git log -n4 --online 3.檢視本地的分支 使用命令: git branch -v 4.建立一個臨時的分支,這個分支

視覺化學習筆記3視覺化分佈

有時候,顯示資料的實際分佈情況是最佳選擇。分佈圖可能不是正態的!可能存在異常值,使均值出現嚴重的偏差。條形圖等可以隱藏這些問題。你在一開始探索資料時,也需要檢視分佈圖。 直方圖 直方圖是將值分組成多個值範圍的條形圖。例如,假設有一組年齡