技術(shù)頻道

娓娓工業(yè)
您現(xiàn)在的位置: 中國傳動網(wǎng) > 技術(shù)頻道 > 技術(shù)百科 > 變分自編碼器VAE教程

變分自編碼器VAE教程

時間:2018-06-12 17:17:56來源:網(wǎng)絡(luò)轉(zhuǎn)載

導(dǎo)語:?現(xiàn)在有一個數(shù)據(jù)集DX(dataset,也可以叫datapoints),每個數(shù)據(jù)也稱為數(shù)據(jù)點(diǎn)。我們假定這個樣本受某種神秘力量操控,但是我們也無從知道這些神秘力量是什么?

1.神秘變量與數(shù)據(jù)集

現(xiàn)在有一個數(shù)據(jù)集DX(dataset,也可以叫datapoints),每個數(shù)據(jù)也稱為數(shù)據(jù)點(diǎn)。

我們假定這個樣本受某種神秘力量操控,但是我們也無從知道這些神秘力量是什么?那么我們假定這股神秘力量有n個,起名字叫power1,power2,...,powern吧,他們的大小分別是z1,z2,...,zn,稱之為神秘變量表示成一個向量就是

z也起個名字叫神秘組合。

一言以蔽之:神秘變量代表了神秘力量的神秘組合關(guān)系。

用正經(jīng)的話說就是:隱變量(latent variable)代表了隱因子(latent factor)的組合關(guān)系。

這里我們澄清一下隸屬空間,假設(shè)數(shù)據(jù)集DX是m個點(diǎn),這m個點(diǎn)也應(yīng)該隸屬于一個空間,比如一維的情況,假如每個點(diǎn)是一個實(shí)數(shù),那么他的隸屬空間就是實(shí)數(shù)集,所以我們這里定義一個DX中每個點(diǎn)都屬于的空間稱為XS,我們在后面提到的時候,你就不再感到陌生了。

神秘變量z可以肯定他們也有一個歸屬空間稱為ZS。

下面我們就要形式化地構(gòu)造X與Z的神秘關(guān)系了,這個關(guān)系就是我們前面說的神秘力量,直觀上我們已經(jīng)非常清楚,假設(shè)我們的數(shù)據(jù)集就是完全由這n個神秘變量全權(quán)操控的,那么對于DX中每一個點(diǎn)都應(yīng)該有一個n個神秘變量的神秘組合zj來神秘決定。

接下來我們要將這個關(guān)系再簡化一下,我們假設(shè)這n個神秘變量不是能夠操控DX的全部,還有一些其他的神秘力量,我們暫時不考慮,那么就可以用概率來彌補(bǔ)這個缺失,為什么呢?舉個例子,假設(shè)我們制造了一個機(jī)器可以向一個固定的目標(biāo)發(fā)射子彈,我們精確的計算好了打擊的力量和角度,但由于某些難以控制的因素,比如空氣的流動,地球的轉(zhuǎn)動導(dǎo)致命中的目標(biāo)無法達(dá)到精準(zhǔn)的目的,而這些因素可能十分巨大和繁多,但是他們并不是形成DX的主因素,根據(jù)大數(shù)定理,這些所有因素產(chǎn)生的影響可以用高斯分布的概率密度函數(shù)來表示。它長這樣:

當(dāng)μ=0時,就變成了這樣:

這是一維高斯分布的公式,那么多維的呢?比較復(fù)雜,長這樣:

不管怎樣,你只要記住我們現(xiàn)在沒有能力關(guān)注全部的神秘變量,我們只關(guān)心若干個可能重要的因素,這些因素的分布狀況可以有各種假設(shè),我們回頭再討論他們的概率分布問題,我們現(xiàn)在假定我們對他們的具體分布情況也是一無所知,我們只是知道他們處于ZS空間內(nèi)。

前面說到了一個神秘組合,如果一個數(shù)據(jù)集X對應(yīng)的神秘組合完全一樣,那么這個數(shù)據(jù)集就是一個單一的分類數(shù)據(jù)集,如果是多個,那么就是多分類數(shù)據(jù)集,但如果是一個連續(xù)的組合數(shù)據(jù),那么就是一個有點(diǎn)分不清界限的復(fù)雜數(shù)據(jù)集,就好比,我們這個數(shù)據(jù)集是一條線段的集合,線段的長度是唯一的神秘變量,那么只要長度在一個范圍內(nèi)連續(xù)變化,那么這個集合里的線段你就會發(fā)現(xiàn)分散的很均勻,你幾乎沒有辦法區(qū)分開他們,也沒法給他們分成幾類,但如果這個長度值只能選擇1,3,5,那么當(dāng)你觀察這個數(shù)據(jù)集的時候,你會發(fā)現(xiàn)他們會聚在三堆兒里。如果這個線段的生成完全依靠的是計算機(jī),那么每一堆兒都是完全重合的,但如果是人畫的,就可能因?yàn)檎`差,沒法完全重合,這沒法重合的部分就是我們說的其他復(fù)雜因素,我們通常用一個高斯分布來把它代表了。好,我們已經(jīng)基本清晰了,我們該給這個神秘組合一個形式化的描述了。

假設(shè)有兩個變量,z∈ZS和x∈XS,存在一個確定性函數(shù)族f(z;θ),族中的每個函數(shù)由θ∈Θ唯一確定,f:ZS×Θ→XS,當(dāng)θ固定,z是一個隨機(jī)變量(概率密度函數(shù)為Pz(z))時,那么f(z;θ)就是定義在XS上的隨機(jī)變量x,對應(yīng)的概率密度函數(shù)可以寫成g(x)。

那么我們的目標(biāo)就是優(yōu)化θ從而尋找到一個f,能夠是隨機(jī)變量x的采樣和X非常的像。這里需要注意一下,x是一個變量,DX是已經(jīng)現(xiàn)成的數(shù)據(jù)集,x不屬于DX,我特意將名字起的有區(qū)分度。

這樣,f就是那個神秘力量通道,他把這些神秘力量的力度,通過f變成了x變量,而這個x變量就是與數(shù)據(jù)集DX具有直接關(guān)系的隨機(jī)變量。

設(shè)一個數(shù)據(jù)集為DX,那么這個數(shù)據(jù)集存在的概率為Pt(DX),則根據(jù)貝葉斯公式有:

其中,是我們新定義的概率密度函數(shù),我們前面知道f是將z映射成x,而x又與DX有某種直接的關(guān)系,這個直接關(guān)系可以表示成,那么

這樣我們就直接定義個來替換,從而表示z與DX的關(guān)系了。

好了,其實(shí)公式(1)就是我們的神秘力量與觀察到的數(shù)據(jù)集之間的神秘關(guān)系,這個關(guān)系的意思我們直白的說就是:當(dāng)隱秘變量按照某種規(guī)律存在時,就非常容易產(chǎn)生現(xiàn)在我們看到的這個數(shù)據(jù)集。那么,我們要做的工作就是當(dāng)我們假定有n個神秘力量時,我們能夠找到一個神奇的函數(shù)f,將神秘力量的變化轉(zhuǎn)化成神奇的x的變化,這個x能夠輕而易舉地生成數(shù)據(jù)集DX。

從上面的描述里面我們看到,f是生成轉(zhuǎn)換函數(shù),公式(1)不表示這種轉(zhuǎn)換關(guān)系,而是這種關(guān)系的最大似然估計(maximumlikelihood),它的意思是找到最有可能生成DX這個數(shù)據(jù)集的主導(dǎo)函數(shù)f。

接下來我們回到討論這個概率密度函數(shù)上來,我們前面說過,如果z是全部的神秘力量,那么它產(chǎn)生的變量x就一定固定的,即當(dāng)z取值固定時,x取值固定,但是現(xiàn)實(shí)中還有很多其他的因素,因而x的取值還與他們有關(guān),他們的影響力,最終反映成了高斯函數(shù),所以我們大膽假定是一個高斯分布的概率密度函數(shù),即

注意z的分布我們依然是未知的。

假定我們知道z現(xiàn)在取某一個或幾個特定值,那么我們就可以通過GradientDescent來找到一個θ盡量滿足z能夠以極高的概率生成我們希望的數(shù)據(jù)集DX。再一推廣,就變成了,z取值某一范圍,但去幾個特定值或某一取值范圍是就面臨z各種取值的概率問題,我們回頭再討論這個棘手的問題,你現(xiàn)在只要知道冥冥之中,我們似乎可以通過學(xué)習(xí)參數(shù)θ尋找最優(yōu)解就行了。

OK,我們還要說一個關(guān)鍵問題,就是我們確信f是存在的,我們認(rèn)為變量與神秘變量之間的關(guān)系一定可以用一個函數(shù)來表示。

2.變分自編碼器(VAE)

本節(jié),我們探討如何最大化公式(1)。首先,我們要討論怎樣確定神秘變量z,即z應(yīng)該有幾個維度,每個維度的作用域是什么?更為較真的,我們可能甚至要追究每一維度都代表什么?他們之間是不是獨(dú)立的?每個維度的概率分布是什么樣的?

如果我們沿著這個思路進(jìn)行下去,就會陷入泥潭,我們可以巧妙地避開這些問題,關(guān)鍵就在于讓他們繼續(xù)保持“神秘”!

我們不關(guān)心每一個維度代表什么含義,我們只假定存在這么一群相互獨(dú)立的變量,維度我們也回到之前的討論,我們雖然不知道有多少,我們可以假定有n個主要因素,n可以定的大一點(diǎn),比如假設(shè)有4個主因素,而我們假定有10個,那么最后訓(xùn)練出來,可能有6個長期是0。最后的問題需要詳細(xì)討論一下,比較復(fù)雜,就是z的概率分布和取值問題。

既然z是什么都不知道,我們是不是可以尋找一組新的神秘變量w,讓這個w服從標(biāo)準(zhǔn)正態(tài)分布N(0,I)。I是單位矩陣,然后這個w可以通過n個復(fù)雜函數(shù),轉(zhuǎn)換成z呢?有了神經(jīng)網(wǎng)絡(luò)這些也是可行的,假設(shè)這些復(fù)雜函數(shù)分別是h1,h2,...,hn,那么有z1=h1(w1),...,zn=hn(wn)。而z的具體分布是什么,取值范圍是多少我們也不用關(guān)心了,反正由一個神經(jīng)網(wǎng)絡(luò)去算?;叵胍幌?img alt="" src="http://fs10.chuandong.com/upload/images///20180612/F330D5CBCC0084ABm.jpg" style="width: 335px; height: 35px;">,我們可以想象,如果f(z;θ)是一個多層神經(jīng)網(wǎng)絡(luò),那么前幾層就用來將標(biāo)準(zhǔn)正態(tài)分布的w變成真正的隱變量z,后面幾層才是將z映射成x,但由于w和z是一一對應(yīng)關(guān)系,所以w某種意義上說也是一股神秘力量。就演化成w和x的關(guān)系了,既然w也是神秘變量,我們就還是叫回z,把那個之前我們認(rèn)為的神秘變量z忘掉吧。

好,更加波瀾壯闊的歷程要開始了,請坐好。

我們現(xiàn)在已經(jīng)有了

我們現(xiàn)在就可以專心攻擊f了,由于f是一個神經(jīng)網(wǎng)絡(luò),我們就可以梯度下降了。但是另一個關(guān)鍵點(diǎn)在于我們怎么知道這個f生成的樣本,和DX更加像呢?如果這個問題解決不了,我們根本都不知道我們的目標(biāo)函數(shù)是什么。

3.設(shè)定目標(biāo)函數(shù)

我們先來定義個函數(shù)Q(z|DX),數(shù)據(jù)集DX的發(fā)生,z的概率密度函數(shù),即如果DX發(fā)生,Q(z|DX)就是z的概率密度函數(shù),比如一個數(shù)字圖像0,z隱式代表0的概率就很大,而那些代表1的概率就很小。如果我們有辦法搞到這個Q的函數(shù)表示,我們就可以直接使用DX算出z的最佳值了。為什么會引入Q呢?其實(shí)道理很簡單,如果DX是x這個變量直接生成的,要想找回x的模型,就要引入一個概率密度函數(shù)T(x|DX),亦即針對DX,我們要找到一個x的最佳概率密度函數(shù)。

現(xiàn)在的問題就變成了,我們可以根據(jù)DX計算出Q(z|DX)來讓他盡量與理想的Pz(z|DX)盡量的趨同,這就要引入更加高深的功夫了——相對熵,也叫KL散度(Kullback-Leiblerdivergence,用D表示)。

這里不再給P起名,其實(shí)Pz(z)直接寫成P(z)也是沒有任何問題的,前面只是為了區(qū)分概念,括號中的內(nèi)容已經(jīng)足以表意。

因?yàn)閘ogP(DX)與z變量無關(guān),直接就可以提出來了,進(jìn)而得到閃閃發(fā)光的公式(2):

公式(2)是VAE的核心公式,我們接下來分析一個這個公式。

公式的左邊有我們的優(yōu)化目標(biāo)P(DX),同時攜帶了一個誤差項(xiàng),這個誤差項(xiàng)反映了給定DX的情況下的真實(shí)分布Q與理想分布P的相對熵,當(dāng)Q完全符合理想分布時,這個誤差項(xiàng)就為0,而等式右邊就是我們可以使用梯度下降進(jìn)行優(yōu)化的,這里面的Q(z|DX)特別像一個DX->z的編碼器,P(DX|z)特別像z->DX的解碼器,這就是VAE架構(gòu)也被稱為自編碼器的原因。

由于DX早已不再有分歧,我們在這里把所有的DX都換成了X。

我們現(xiàn)在有公式(2)的拆分:

還有下面這些:

我們再明確一下每個概率的含義:

P(X)——當(dāng)前這個數(shù)據(jù)集發(fā)生的概率,但是他的概率分布我們是不知道,比如,X的空間是一個一維有限空間,比如只能取值0-9的整數(shù),而我們的X={0,1,2,3,4},那么當(dāng)概率分布是均勻的時候,P(X)就是0.5,但是如果不是這個分布,就不好說是什么了,沒準(zhǔn)是0.1,0.01,都有可能。P(X)是一個函數(shù),就好像是一個人,當(dāng)你問他X=某個值的時候,他能告訴發(fā)生的概率。

P(z)——這個z是我們后來引入的那個w,還記得嗎?他們都已經(jīng)歸順了正態(tài)分布,如果z是一維的,那他就是標(biāo)準(zhǔn)正態(tài)分布N(0,I)。

P(X|z)——這個函數(shù)的含義是如果z給定一個取值,那么就知道X取某個值的概率,還是舉個例子,z是一個神奇的變量,可以控制在計算機(jī)屏幕上出現(xiàn)整個屏幕的紅色并且控制其灰度,z服從N(0,1)分布,當(dāng)z=0時代表純正的紅色,z越偏離0,屏幕的紅色就越深,那么P(X|z)就表示z等于某個值時X=另一值的概率,由于計算機(jī)是精確控制的,沒有額外的隨機(jī)因素,所以如果z=0能夠?qū)е耎取一個固定色值0xFF0000,那么,,,但如果現(xiàn)實(shí)世界比較復(fù)雜附加其他的隨機(jī)因素,那么就可能在z確定出來的X基礎(chǔ)值之上做隨機(jī)了。這就是我們之前討論的,大數(shù)定理,。f(z)就是X與z直接關(guān)系的寫照。

P(z|X)——當(dāng)X發(fā)生時,z的概率是多少呢?回到剛才計算機(jī)屏幕的例子,就非常簡單了,但是由于概率的引入,X|z可以簡化成高斯關(guān)系,相反,也可以簡化高斯關(guān)系。這個解釋對下面的Q同樣適用。

Q(z)——對于Q的分析和P的分析是一樣的,只不過Q和P的不同時,我們假定P是那個理想中的分布,是真正決定X的最終構(gòu)成的背后真實(shí)力量,而Q是我們的親兒子,試著弄出來的贗品,并且希望在現(xiàn)實(shí)世界通過神經(jīng)網(wǎng)絡(luò),讓這個贗品能夠嘗試控制產(chǎn)生X。當(dāng)這個Q真的行為和我們理想中的P一模一樣的時候,Q就是上等的贗品了,甚至可以打出如假包換的招牌。我們的P已經(jīng)簡化成N(0,I),就意味著Q只能向N(0,I)靠攏。

Q(z|X)——根據(jù)現(xiàn)實(shí)中X和Q的關(guān)系推導(dǎo)出的概率函數(shù),當(dāng)X發(fā)生時,對應(yīng)的z取值的概率分布情況。

Q(X|z)——現(xiàn)實(shí)中z發(fā)生時,取值X的概率。

我們的目標(biāo)是優(yōu)化P(X),但是我們不知道他的分布,所以根本沒法優(yōu)化,這就是我們沒有任何先驗(yàn)知識。所以有了公式(2),左邊第二項(xiàng)是P(z|X)和Q(z|X)的相對熵,意味著X發(fā)生時現(xiàn)實(shí)的分布應(yīng)該與我們理想的分布趨同才對,所以整個左邊都是我們的優(yōu)化目標(biāo),只要左邊越大就越好,那么右邊的目標(biāo)就是越大越好。

右邊第一項(xiàng):就是針對面對真實(shí)的z的分布情況(依賴Q(z|X),由X->z的映射關(guān)系決定),算出來的X的分布,類似于根據(jù)z重建X的過程。

右邊第二項(xiàng):就是讓根據(jù)X重建的z與真實(shí)的z盡量趨近,由于P(z)是明確的N(0,I),而Q(z|X)是也是正態(tài)分布,其實(shí)就是要讓Q(z|X)趨近與標(biāo)準(zhǔn)正態(tài)分布。

現(xiàn)在我們對這個公式的理解更加深入了。接下來,我們要進(jìn)行實(shí)現(xiàn)的工作。

4.實(shí)現(xiàn)

針對右邊兩項(xiàng)分別實(shí)現(xiàn)

第二項(xiàng)是Q(z|X)與N(0,I)的相對熵,X->z構(gòu)成了編碼器部分。

Q(z|x)是正態(tài)分布,兩個正態(tài)分布的KL計算公式如下:

det是行列式,tr是算矩陣的秩,d是I的秩即d=tr(I)。

變成具體的神經(jīng)網(wǎng)絡(luò)和矩陣運(yùn)算,還需要進(jìn)一步變化該式:

OK,這個KL我們也會計算了,還有一個事情就是編碼器網(wǎng)絡(luò),都使用神經(jīng)網(wǎng)絡(luò)來編碼就可以了。

第一項(xiàng)是代表依賴z重建出來的數(shù)據(jù)與X盡量地相同,z->X重建X構(gòu)成了解碼器部分,整個重建的關(guān)鍵就是f函數(shù),對我們來說就是建立一個解碼器神經(jīng)網(wǎng)絡(luò)。

到此,整個實(shí)現(xiàn)的細(xì)節(jié)就全都展現(xiàn)在下面這張圖里了

由于這個網(wǎng)絡(luò)傳遞結(jié)構(gòu)的一個環(huán)節(jié)是隨機(jī)采樣,導(dǎo)致無法反向傳播,所以聰明的前輩又將這個結(jié)構(gòu)優(yōu)化成了這樣:

這樣就可以對整個網(wǎng)絡(luò)進(jìn)行反向傳播訓(xùn)練了。

具體的實(shí)現(xiàn)代碼,我實(shí)現(xiàn)在了這里:

https://github.com/vaxin/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/variational_autoencoder.py

里面的每一步,都有配合本文章的對照解釋。

標(biāo)簽:

點(diǎn)贊

分享到:

上一篇:淺談工業(yè)以太網(wǎng)的實(shí)時性

下一篇:一文深度了解超聲波傳感器的...

中國傳動網(wǎng)版權(quán)與免責(zé)聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(www.treenowplaneincome.com)獨(dú)家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負(fù)版權(quán)法律責(zé)任。

網(wǎng)站簡介|會員服務(wù)|聯(lián)系方式|幫助信息|版權(quán)信息|網(wǎng)站地圖|友情鏈接|法律支持|意見反饋|sitemap

中國傳動網(wǎng)-工業(yè)自動化與智能制造的全媒體“互聯(lián)網(wǎng)+”創(chuàng)新服務(wù)平臺

網(wǎng)站客服服務(wù)咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2024 ,All Rights Reserved 版權(quán)所有 粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網(wǎng)安備 44030402000946號