時間:2018-06-12 17:17:56來源:網(wǎng)絡轉(zhuǎn)載
1.神秘變量與數(shù)據(jù)集
現(xiàn)在有一個數(shù)據(jù)集DX(dataset,也可以叫datapoints),每個數(shù)據(jù)也稱為數(shù)據(jù)點。
我們假定這個樣本受某種神秘力量操控,但是我們也無從知道這些神秘力量是什么?那么我們假定這股神秘力量有n個,起名字叫power1,power2,...,powern吧,他們的大小分別是z1,z2,...,zn,稱之為神秘變量表示成一個向量就是
z也起個名字叫神秘組合。
一言以蔽之:神秘變量代表了神秘力量的神秘組合關(guān)系。
用正經(jīng)的話說就是:隱變量(latent variable)代表了隱因子(latent factor)的組合關(guān)系。
這里我們澄清一下隸屬空間,假設數(shù)據(jù)集DX是m個點,這m個點也應該隸屬于一個空間,比如一維的情況,假如每個點是一個實數(shù),那么他的隸屬空間就是實數(shù)集,所以我們這里定義一個DX中每個點都屬于的空間稱為XS,我們在后面提到的時候,你就不再感到陌生了。
神秘變量z可以肯定他們也有一個歸屬空間稱為ZS。
下面我們就要形式化地構(gòu)造X與Z的神秘關(guān)系了,這個關(guān)系就是我們前面說的神秘力量,直觀上我們已經(jīng)非常清楚,假設我們的數(shù)據(jù)集就是完全由這n個神秘變量全權(quán)操控的,那么對于DX中每一個點都應該有一個n個神秘變量的神秘組合zj來神秘決定。
接下來我們要將這個關(guān)系再簡化一下,我們假設這n個神秘變量不是能夠操控DX的全部,還有一些其他的神秘力量,我們暫時不考慮,那么就可以用概率來彌補這個缺失,為什么呢?舉個例子,假設我們制造了一個機器可以向一個固定的目標發(fā)射子彈,我們精確的計算好了打擊的力量和角度,但由于某些難以控制的因素,比如空氣的流動,地球的轉(zhuǎn)動導致命中的目標無法達到精準的目的,而這些因素可能十分巨大和繁多,但是他們并不是形成DX的主因素,根據(jù)大數(shù)定理,這些所有因素產(chǎn)生的影響可以用高斯分布的概率密度函數(shù)來表示。它長這樣:
當μ=0時,就變成了這樣:
這是一維高斯分布的公式,那么多維的呢?比較復雜,長這樣:
不管怎樣,你只要記住我們現(xiàn)在沒有能力關(guān)注全部的神秘變量,我們只關(guān)心若干個可能重要的因素,這些因素的分布狀況可以有各種假設,我們回頭再討論他們的概率分布問題,我們現(xiàn)在假定我們對他們的具體分布情況也是一無所知,我們只是知道他們處于ZS空間內(nèi)。
前面說到了一個神秘組合,如果一個數(shù)據(jù)集X對應的神秘組合完全一樣,那么這個數(shù)據(jù)集就是一個單一的分類數(shù)據(jù)集,如果是多個,那么就是多分類數(shù)據(jù)集,但如果是一個連續(xù)的組合數(shù)據(jù),那么就是一個有點分不清界限的復雜數(shù)據(jù)集,就好比,我們這個數(shù)據(jù)集是一條線段的集合,線段的長度是唯一的神秘變量,那么只要長度在一個范圍內(nèi)連續(xù)變化,那么這個集合里的線段你就會發(fā)現(xiàn)分散的很均勻,你幾乎沒有辦法區(qū)分開他們,也沒法給他們分成幾類,但如果這個長度值只能選擇1,3,5,那么當你觀察這個數(shù)據(jù)集的時候,你會發(fā)現(xiàn)他們會聚在三堆兒里。如果這個線段的生成完全依靠的是計算機,那么每一堆兒都是完全重合的,但如果是人畫的,就可能因為誤差,沒法完全重合,這沒法重合的部分就是我們說的其他復雜因素,我們通常用一個高斯分布來把它代表了。好,我們已經(jīng)基本清晰了,我們該給這個神秘組合一個形式化的描述了。
假設有兩個變量,z∈ZS和x∈XS,存在一個確定性函數(shù)族f(z;θ),族中的每個函數(shù)由θ∈Θ唯一確定,f:ZS×Θ→XS,當θ固定,z是一個隨機變量(概率密度函數(shù)為Pz(z))時,那么f(z;θ)就是定義在XS上的隨機變量x,對應的概率密度函數(shù)可以寫成g(x)。
那么我們的目標就是優(yōu)化θ從而尋找到一個f,能夠是隨機變量x的采樣和X非常的像。這里需要注意一下,x是一個變量,DX是已經(jīng)現(xiàn)成的數(shù)據(jù)集,x不屬于DX,我特意將名字起的有區(qū)分度。
這樣,f就是那個神秘力量通道,他把這些神秘力量的力度,通過f變成了x變量,而這個x變量就是與數(shù)據(jù)集DX具有直接關(guān)系的隨機變量。
設一個數(shù)據(jù)集為DX,那么這個數(shù)據(jù)集存在的概率為Pt(DX),則根據(jù)貝葉斯公式有:
其中,是我們新定義的概率密度函數(shù),我們前面知道f是將z映射成x,而x又與DX有某種直接的關(guān)系,這個直接關(guān)系可以表示成
,那么
這樣我們就直接定義個來替換
,從而表示z與DX的關(guān)系了。
好了,其實公式(1)就是我們的神秘力量與觀察到的數(shù)據(jù)集之間的神秘關(guān)系,這個關(guān)系的意思我們直白的說就是:當隱秘變量按照某種規(guī)律存在時,就非常容易產(chǎn)生現(xiàn)在我們看到的這個數(shù)據(jù)集。那么,我們要做的工作就是當我們假定有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ù)集的主導函數(shù)f。
接下來我們回到討論這個概率密度函數(shù)上來,我們前面說過,如果z是全部的神秘力量,那么它產(chǎn)生的變量x就一定固定的,即當z取值固定時,x取值固定,但是現(xiàn)實中還有很多其他的因素,因而x的取值還與他們有關(guān),他們的影響力,最終反映成了高斯函數(shù),所以我們大膽假定
是一個高斯分布的概率密度函數(shù),即
注意z的分布我們依然是未知的。
假定我們知道z現(xiàn)在取某一個或幾個特定值,那么我們就可以通過GradientDescent來找到一個θ盡量滿足z能夠以極高的概率生成我們希望的數(shù)據(jù)集DX。再一推廣,就變成了,z取值某一范圍,但去幾個特定值或某一取值范圍是就面臨z各種取值的概率問題,我們回頭再討論這個棘手的問題,你現(xiàn)在只要知道冥冥之中,我們似乎可以通過學習參數(shù)θ尋找最優(yōu)解就行了。
OK,我們還要說一個關(guān)鍵問題,就是我們確信f是存在的,我們認為變量與神秘變量之間的關(guān)系一定可以用一個函數(shù)來表示。
2.變分自編碼器(VAE)
本節(jié),我們探討如何最大化公式(1)。首先,我們要討論怎樣確定神秘變量z,即z應該有幾個維度,每個維度的作用域是什么?更為較真的,我們可能甚至要追究每一維度都代表什么?他們之間是不是獨立的?每個維度的概率分布是什么樣的?
如果我們沿著這個思路進行下去,就會陷入泥潭,我們可以巧妙地避開這些問題,關(guān)鍵就在于讓他們繼續(xù)保持“神秘”!
我們不關(guān)心每一個維度代表什么含義,我們只假定存在這么一群相互獨立的變量,維度我們也回到之前的討論,我們雖然不知道有多少,我們可以假定有n個主要因素,n可以定的大一點,比如假設有4個主因素,而我們假定有10個,那么最后訓練出來,可能有6個長期是0。最后的問題需要詳細討論一下,比較復雜,就是z的概率分布和取值問題。
既然z是什么都不知道,我們是不是可以尋找一組新的神秘變量w,讓這個w服從標準正態(tài)分布N(0,I)。I是單位矩陣,然后這個w可以通過n個復雜函數(shù),轉(zhuǎn)換成z呢?有了神經(jīng)網(wǎng)絡這些也是可行的,假設這些復雜函數(shù)分別是h1,h2,...,hn,那么有z1=h1(w1),...,zn=hn(wn)。而z的具體分布是什么,取值范圍是多少我們也不用關(guān)心了,反正由一個神經(jīng)網(wǎng)絡去算?;叵胍幌?img alt="" src="http://fs10.chuandong.com/upload/images///20180612/F330D5CBCC0084ABm.jpg" style="width: 335px; height: 35px;">,我們可以想象,如果f(z;θ)是一個多層神經(jīng)網(wǎng)絡,那么前幾層就用來將標準正態(tài)分布的w變成真正的隱變量z,后面幾層才是將z映射成x,但由于w和z是一一對應關(guān)系,所以w某種意義上說也是一股神秘力量。就演化成w和x的關(guān)系了,既然w也是神秘變量,我們就還是叫回z,把那個之前我們認為的神秘變量z忘掉吧。
好,更加波瀾壯闊的歷程要開始了,請坐好。
我們現(xiàn)在已經(jīng)有了
我們現(xiàn)在就可以專心攻擊f了,由于f是一個神經(jīng)網(wǎng)絡,我們就可以梯度下降了。但是另一個關(guān)鍵點在于我們怎么知道這個f生成的樣本,和DX更加像呢?如果這個問題解決不了,我們根本都不知道我們的目標函數(shù)是什么。
3.設定目標函數(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呢?其實道理很簡單,如果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起名,其實Pz(z)直接寫成P(z)也是沒有任何問題的,前面只是為了區(qū)分概念,括號中的內(nèi)容已經(jīng)足以表意。
因為logP(DX)與z變量無關(guān),直接就可以提出來了,進而得到閃閃發(fā)光的公式(2):
公式(2)是VAE的核心公式,我們接下來分析一個這個公式。
公式的左邊有我們的優(yōu)化目標P(DX),同時攜帶了一個誤差項,這個誤差項反映了給定DX的情況下的真實分布Q與理想分布P的相對熵,當Q完全符合理想分布時,這個誤差項就為0,而等式右邊就是我們可以使用梯度下降進行優(yōu)化的,這里面的Q(z|DX)特別像一個DX->z的編碼器,P(DX|z)特別像z->DX的解碼器,這就是VAE架構(gòu)也被稱為自編碼器的原因。
由于DX早已不再有分歧,我們在這里把所有的DX都換成了X。
我們現(xiàn)在有公式(2)的拆分:
還有下面這些:
我們再明確一下每個概率的含義:
P(X)——當前這個數(shù)據(jù)集發(fā)生的概率,但是他的概率分布我們是不知道,比如,X的空間是一個一維有限空間,比如只能取值0-9的整數(shù),而我們的X={0,1,2,3,4},那么當概率分布是均勻的時候,P(X)就是0.5,但是如果不是這個分布,就不好說是什么了,沒準是0.1,0.01,都有可能。P(X)是一個函數(shù),就好像是一個人,當你問他X=某個值的時候,他能告訴發(fā)生的概率。
P(z)——這個z是我們后來引入的那個w,還記得嗎?他們都已經(jīng)歸順了正態(tài)分布,如果z是一維的,那他就是標準正態(tài)分布N(0,I)。
P(X|z)——這個函數(shù)的含義是如果z給定一個取值,那么就知道X取某個值的概率,還是舉個例子,z是一個神奇的變量,可以控制在計算機屏幕上出現(xiàn)整個屏幕的紅色并且控制其灰度,z服從N(0,1)分布,當z=0時代表純正的紅色,z越偏離0,屏幕的紅色就越深,那么P(X|z)就表示z等于某個值時X=另一值的概率,由于計算機是精確控制的,沒有額外的隨機因素,所以如果z=0能夠?qū)е耎取一個固定色值0xFF0000,那么,
,,但如果現(xiàn)實世界比較復雜附加其他的隨機因素,那么就可能在z確定出來的X基礎值之上做隨機了。這就是我們之前討論的,大數(shù)定理,
。f(z)就是X與z直接關(guān)系的寫照。
P(z|X)——當X發(fā)生時,z的概率是多少呢?回到剛才計算機屏幕的例子,就非常簡單了,但是由于概率的引入,X|z可以簡化成高斯關(guān)系,相反,也可以簡化高斯關(guān)系。這個解釋對下面的Q同樣適用。
Q(z)——對于Q的分析和P的分析是一樣的,只不過Q和P的不同時,我們假定P是那個理想中的分布,是真正決定X的最終構(gòu)成的背后真實力量,而Q是我們的親兒子,試著弄出來的贗品,并且希望在現(xiàn)實世界通過神經(jīng)網(wǎng)絡,讓這個贗品能夠嘗試控制產(chǎn)生X。當這個Q真的行為和我們理想中的P一模一樣的時候,Q就是上等的贗品了,甚至可以打出如假包換的招牌。我們的P已經(jīng)簡化成N(0,I),就意味著Q只能向N(0,I)靠攏。
Q(z|X)——根據(jù)現(xiàn)實中X和Q的關(guān)系推導出的概率函數(shù),當X發(fā)生時,對應的z取值的概率分布情況。
Q(X|z)——現(xiàn)實中z發(fā)生時,取值X的概率。
我們的目標是優(yōu)化P(X),但是我們不知道他的分布,所以根本沒法優(yōu)化,這就是我們沒有任何先驗知識。所以有了公式(2),左邊第二項是P(z|X)和Q(z|X)的相對熵,意味著X發(fā)生時現(xiàn)實的分布應該與我們理想的分布趨同才對,所以整個左邊都是我們的優(yōu)化目標,只要左邊越大就越好,那么右邊的目標就是越大越好。
右邊第一項:就是針對面對真實的z的分布情況(依賴Q(z|X),由X->z的映射關(guān)系決定),算出來的X的分布,類似于根據(jù)z重建X的過程。
右邊第二項:就是讓根據(jù)X重建的z與真實的z盡量趨近,由于P(z)是明確的N(0,I),而Q(z|X)是也是正態(tài)分布,其實就是要讓Q(z|X)趨近與標準正態(tài)分布。
現(xiàn)在我們對這個公式的理解更加深入了。接下來,我們要進行實現(xiàn)的工作。
4.實現(xiàn)
針對右邊兩項分別實現(xiàn)
第二項是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)絡和矩陣運算,還需要進一步變化該式:
OK,這個KL我們也會計算了,還有一個事情就是編碼器網(wǎng)絡,和
都使用神經(jīng)網(wǎng)絡來編碼就可以了。
第一項是代表依賴z重建出來的數(shù)據(jù)與X盡量地相同,z->X重建X構(gòu)成了解碼器部分,整個重建的關(guān)鍵就是f函數(shù),對我們來說就是建立一個解碼器神經(jīng)網(wǎng)絡。
到此,整個實現(xiàn)的細節(jié)就全都展現(xiàn)在下面這張圖里了
由于這個網(wǎng)絡傳遞結(jié)構(gòu)的一個環(huán)節(jié)是隨機采樣,導致無法反向傳播,所以聰明的前輩又將這個結(jié)構(gòu)優(yōu)化成了這樣:
這樣就可以對整個網(wǎng)絡進行反向傳播訓練了。
具體的實現(xiàn)代碼,我實現(xiàn)在了這里:
https://github.com/vaxin/TensorFlow-Examples/blob/master/examples/3_NeuralNetworks/variational_autoencoder.py
里面的每一步,都有配合本文章的對照解釋。
標簽:
中國傳動網(wǎng)版權(quán)與免責聲明:凡本網(wǎng)注明[來源:中國傳動網(wǎng)]的所有文字、圖片、音視和視頻文件,版權(quán)均為中國傳動網(wǎng)(www.wangxinlc.cn)獨家所有。如需轉(zhuǎn)載請與0755-82949061聯(lián)系。任何媒體、網(wǎng)站或個人轉(zhuǎn)載使用時須注明來源“中國傳動網(wǎng)”,違反者本網(wǎng)將追究其法律責任。
本網(wǎng)轉(zhuǎn)載并注明其他來源的稿件,均來自互聯(lián)網(wǎng)或業(yè)內(nèi)投稿人士,版權(quán)屬于原版權(quán)人。轉(zhuǎn)載請保留稿件來源及作者,禁止擅自篡改,違者自負版權(quán)法律責任。
產(chǎn)品新聞
更多>2025-04-30
性能躍升20%!維宏NK300CX Plus數(shù)控系統(tǒng)...
2025-04-11
rpi-image-gen:樹莓派軟件鏡像構(gòu)建的終...
2025-04-08
【產(chǎn)品解讀】全面提升精密制造檢測節(jié)拍...
2025-03-31
應用案例 | 使用宏集TELE監(jiān)控繼電器監(jiān)控...
2025-03-26
激光閃耀 智慧引領(lǐng) | WISE MASER 黑武士...
2025-03-20