<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          生成模型那些事:從 GMM 到 VAE

          共 5915字,需瀏覽 12分鐘

           ·

          2024-04-10 19:21

          900f748f12fcba5c6b9f924e89587ddd.webp

          1. 引言

          對于給定的一堆數據 ,我們希望用它們構建一個生成模型,然后生成新的數據來。

          比如,給你一堆人臉照片,希望構建一個模型,用于生成新的人臉圖像。 6b83845457a5b9c1950af386d811740c.webp那么,如何生成新的數據呢?辦法有很多,比如插值,直接用舊數據造新數據出來。但這樣做,是不是有些 low 呢?

          這樣并沒有充分使用隱藏在數據背后的模式。我們不妨把數據歸歸類,比如 k-means 聚類,然后在類別內插值生成新的數據。這似乎比剛才的做法要好一些,但沒有考慮不同類別之間的相互影響。

          于是,我們使用高斯混合模型來對數據建模,然后多個高斯分量生成數據再加權組合來創(chuàng)建新的數據。但高斯混合模型有個問題,就是該有多少個高斯分量呢?

          不妨拓展一下思路,我們不糾結于多少個,越多越好嘛!為什么不考慮無窮多個呢?通過引入一個連續(xù)隱變量 ,然后將無窮多個高斯疊加起來。相加可以用積分來處理,于是便有:

          其中, 表示模型的參數。這里的隱變量 服從簡單的分布 ,而 可以看作是對數據 的編碼,但是由于每個隱變量 都可以表示數據 ,對應不同的條件概率 ,而數據的編碼也同樣對應條件概率 。因此,可以看成一種概率編碼-解碼方案。

          或許一個隱變量的表達能力總是有限,于是我們引入多個,用向量形式表示 。

          那么對于這些隱變量,我們該如何解讀呢?通常來說,直接插值數據往往并不合理,比如人臉照片,插值出來很可能不是人臉了。因為那只是外在表像,對應高維空間中的點,更本質的表示是個流形,是在高維空間中的一個低維嵌入,直接在高維空間中插值很容易脫離數據流形。

          780f5831a04792bf8d59b69662efb312.webp拋開數學,我們也可以通俗地理解。人腦認識事物往往會“通過現象看本質”,或者所謂的“第一性原理”。比如將人臉投影到一個語義空間,大致量化成各種特征,年齡、眼睛大小、臉部大小比例等。這些特征不是直接觀測到的數據,是隱藏在背后的,所以可以將它們看作隱變量。

          3cdf9ac020ab1ca01cff7ceeff55f03a.webp

          不過這里要說明一下,原始的 VAE 并不負責解纏,這是后續(xù)工作的事情。

          ? 目標

          現在,我們來明確一下目標從給定的一堆數據中找到一種概率編碼-解碼方案,其中隱變量所在的空間盡量規(guī)則,方便于生成新的數據。

          而變分自編碼器(VAE)就是這樣一種概率生成模型;它的目標是學習數據的分布 ,一旦訓練好,可以從此分布中抽?。ㄉ桑颖尽?/p>

          本篇首先介紹一般的非線性隱變量模型,該模型的極大似然估計學習并不簡單。然后定義似然的一個下界,進而使用蒙特卡羅采樣來近似該下界。

          隱變量模型采用間接方法來描述多維變量 上的概率分布 。他們沒有直接寫出 的表達式,而是對數據 和未觀察到的隱變量 的聯合分布 進行建模。

          而概率 可以通過邊緣化該聯合概率而得:

          通常,將聯合概率 分解為數據似然 和隱變量的先驗 :

          這是描述 的相當間接的方法,但它很有用,因為可以用簡單分布  以及 來定義一個復雜分布 。

          總體思路有了,就是用簡單分布組裝出復雜分布 。那么,剩下的問題就是給定數據集,如何表示這個模型以及求解它的參數。

          我們先來看一個熟悉的例子。

          ? 示例:高斯混合模型

          在一元高斯混合中,隱變量 是離散的,先驗 是分類分布,其中 的每個可能值有概率 。假定隱變量 取值 ,數據 的似然 服從均值 和方差 的正態(tài)分布:

          在這里,隱變量是離散的,因此我們對其可能的值進行求和以進行邊緣化,從而得到數據分布 :

          可見,我們用簡單的似然和先驗表示了相對復雜的高斯混合模型。而這個模型的參數可以使用 EM 算法來求解。

          ? 非線性隱變量模型

          當隱變量 是多元連續(xù)變量時,我們不妨假設先驗 是標準多元正態(tài)分布:

          這樣子的先驗簡單到不需要參數了。似然 也取簡單的分布,如正態(tài)分布,但它還是有參數的,它的均值是一個隱變量的非線性函數 ,其協方差矩陣 意味著各向同性:

          其中,函數 是用參數為 的深度神經網絡表示。隱變量 的維度一般低于數據 的維度。模型 描述了數據的期望,其余未建模的方面則歸入噪聲 。

          數據分布 是通過對聯合分布邊緣化隱變量 后得到的:

          下圖示例展示了通過一維隱變量將無窮多個二元高斯分布疊加起來得到一個復雜的二元分布。 52455df4d5c7f40005b3219bbb3f7193.webp然后,可以腦補多維隱變量和多維數據的情形。

          ? 數據生成

          有了數據分布 ,如何生成新的數據呢?在數據所在空間采樣嗎?之前已經說過,這樣做不合適。

          不是有隱變量 嘛,而且它的分布相對簡單,因此我們可以使用祖先采樣法來生成新的示例 。我們從先驗 中采樣 并將其輸入網絡 來得到似然 的平均值,從而得到 。這里涉及的先驗和似然都是正態(tài)分布,所以這很方便。

          2. VAE 模型

          給定一個由 個獨立同分布的數據點組成的數據集 ,為了訓練模型,我們最大化數據集相對于模型參數的對數似然。

          為簡單起見,我們假設式   中的方差項 作為超參數,因此只需要專注于學習參數

          其中,

          我們這里的思路是使用極大似然估計,即最大化數據概率 ,也可以說是關于模型參數的似然函數,從而得到模型的參數 。

          但其實也可以有其他思路,比如近似后驗推斷,用較為簡單的分布 去近似表示復雜分布 ,也就是最小化兩個分布間的差距,比如最小化兩個分布的 散度:

          或者近似聯合概率 :

          從不同思路會得到不同的推導過程,但可謂殊途同歸,此處略過上述兩種。

          本文從式 出發(fā)來考慮問題,因為它的目標非常明確,即找到模型參數以最大化數據似然。

          從前面式子可以看出,這個目標中已經隱含解碼器,但好像還少了點什么?編碼器在哪里呢?

          ? 證據下界(ELBO)

          雖然我們的目標明確,就是最大化式 已得到模型的參數 。然而,這并不好計算。該積分沒有解析表達式,也沒有簡單的方法來計算 的特定值。

          那總得想辦法來優(yōu)化上述問題,不好直接計算,那我們就找找對數似然的下界。對于給定的 值,該函數始終小于或等于 似然,并且還取決于一些其他參數 。最終,我們將構建一個網絡來計算這個下界并對其進行優(yōu)化。

          下面我們使用 Jensen 不等式來推導對數似然的下界。我們首先將對數似然乘以和除以隱變量上的某個概率分布 :

          然后,我們使用 Jensen 不等式求對數來找到下界:

          其中右側稱為證據下界()。它之所以得此名,是因為 在貝葉斯方法的背景下被稱為證據(Evidence)。

          實際上,建模分布 時會用到參數 ,因此 可以寫為:

          為了學習這個隱變量模型,我們最大化這個以 和 為變量的函數,而變分自編碼器 VAE 就是用神經網絡來優(yōu)化這個函數。

          當 取固定值,而 和似然函數相等時,我們稱 是緊的。為了找到使下界變緊的分布 ,我們使用條件概率對 中 項的分子進行因式分解:

          其中,最后那行的第一項因為 不依賴于 ,并且概率分布 的積分為 。

          這個式子表明, 是對數似然 減去 散度 。

          散度測量分布之間的“距離”,只能取非負值。由此可見, 是 的下界。

          當 時, 散度將為零。這個后驗是給定觀測數據 后關于隱變量 的后驗分布。

          ? ELBO 的另一層解讀

          上面兩式是對 的不同表達,除此之外還可以表示為重建誤差減去 散度:

          其中,第一行中的聯合分布 已被分解為條件概率和先驗的乘積 。

          在此公式中,第一項稱為重建損失;第二項衡量輔助分布 與先驗分布的匹配程度,可以稱作正則化損失。這個公式正是變分自編碼器中使用的公式。

          ? 變分近似

          從式 可知,當 是后驗 時, 是緊的。原則上,我們可以使用貝葉斯公式來計算后驗:

          但實際上,分母往往是沒辦法計算的。

          一個辦法是進行變分近似推斷:我們?yōu)?選擇一個簡單的參數形式,并用它來近似真實的后驗。在這里,我們選擇具有均值 和對角協方差 的多元正態(tài)分布。雖然這并不總是能很好地匹配后驗,但對于 和 的某些值來說會比其他值會更好一些。在訓練過程中,我們會找到“最接近”真實后驗 的正態(tài)分布。

          剛才說了, 的最佳選擇是后驗 ,也就是說取決于數據點 ,因此為了達成優(yōu)化,變分近似分布也應該選擇后驗形式。因此我們選擇:

          其中 是另一個神經網絡,參數 預測正態(tài)變分近似的均值 和方差 。

          此時,式 變?yōu)?/p>

          另外,還可以發(fā)現,此時的 和   之間的差距為,

          對于觀測數據 ,在固定參數 時,找到 使得

          最小,從而使得 最大。

          這里的   是跟數據 有關的,也就說每個數據 ,我們都要訓練一個網絡去表示 ,這會變得非常低效,因此這里可以使用一個公共的網絡來統(tǒng)一表示和共享訓練。這就是 VAE 中所謂的攤銷(amortized)。 f7f22251b98ef358e404a5439009ea79.webp

          ? 變分自編碼器 VAE

          現在,我們終于可以描述 VAE 了。我們構建一個計算 的網絡:

          其中分布 的具體形式就是式 。第二項的 散度作為正則化項用于引導后驗不要偏離先驗太遠。而第一項仍然涉及一個棘手的積分,但由于它是關于 的期望,因此我們可以通過采樣來近似它。對于任何 函數,我們有:

          其中 是 中采樣的第 個樣本。這里使用的方法就是所謂的蒙特卡羅估計。對于非常粗略的近似估計,我們可以僅使用 中的單個樣本 :

          由于我們此處 用的是正態(tài)分布,因此代入第一項中可得,

          所以可以看到很多 VAE 的實現中使用的是 MSE,主要是使用了高斯分布,如果是用別的分布,那這里也需要作相應改動。

          第二項是變分分布 和先前 之間的 散度。兩個正態(tài)分布之間的   散度可以解析計算。對于一種分布具有參數 而另一種分布是標準正態(tài)分布的特殊情況,其由下式給出:

          其中 是潛空間的維數。

          在實際的網絡訓練中是最小化損失函數,所以我們將式 取相反數,得

          好了,這時候可以看 VAE 的算法架構了。簡單起見,我們就上個圖

          f411e4fb31146b1fabe027bf570f81a7.webp

          現在應該清楚為什么這被稱為變分自編碼器。它是變分的,因為它涉及的優(yōu)化問題是拿高斯分布去近似后驗分布之類的。而分布是函數嘛,所以需要用到變分方法。

          它自帶編碼器和解碼器,因為它從數據點 開始,從中計算低維隱變量(向量),然后使用該向量盡可能接近地重新生成數據點 。網絡 從數據到隱變量的映射稱為編碼器,網絡 從隱變量到數據的映射稱為解碼器。

          然后,在訓練網絡時運行小批量的樣本,并使用 SGD 或 Adam 等優(yōu)化算法更新這些參數。在此過程中,參數 發(fā)生變化,以在隱變量模型中為數據分配更高的似然。這也是我們初始的目標,最大化數據似然以學習參數 :

          其中,

          另外,損失函數中的這兩項之間其實存在互相抵觸,因此還可以引入權重參數來平衡這兩項。

          其中 是重建誤差(negative likelihood),而 是 散度正則化項??梢哉{整權重來達到不同的生成效果,而這個正是算法 -VAE 的做法。

          ? 重新參數化技巧

          但是對于神經網絡的訓練而言,還需要處理一個情況;該網絡涉及采樣步驟,問題就是如何對這個隨機分量進行自動微分。也就是說需要將這個步驟與某些待優(yōu)化的參數綁定,才好反向傳播時計算梯度來更新相關參數。有一個簡單的辦法;可以將隨機部分移動到網絡的一個分支中,該分支從 中提取樣本 ,然后使用以下關系:

          從預期的高斯分布中采樣。于是采樣與待優(yōu)化的參數(均值和協方差矩陣)綁定了,因此可以正常計算導數。這稱為重新參數化技巧。此處一般會配上類似下面這樣的圖。 1ce694e78f59b1c321867feaebc5c8bb.webp

          3. VAE 的應用

          變分自編碼器(VAE)作為一種生成模型,在多個領域有廣泛的應用:

          圖像生成

          • VAE 能夠學習數據的概率分布,并基于此生成新的、逼真的圖像樣本。
          • 通過在隱空間中進行插值,可以實現連續(xù)變化的圖像生成,例如平滑地改變一個人臉的表情或年齡特征。
          • 可用于藝術創(chuàng)作和游戲設計,生成多樣化的角色、場景等。

          圖像修復與恢復

          • VAE 可以用于損壞圖像的修復,應用于醫(yī)學圖像分析和監(jiān)控視頻修復等領域。

          數據壓縮

          • VAE 能將高維數據(如圖像)映射到低維隱空間,實現有效數據壓縮,有利于存儲和傳輸大量數據時減少帶寬需求。

          可控制屬性的圖像生成

          • 在人臉生成任務中,可通過 VAE 控制特定的人臉屬性(如發(fā)型、眼鏡、微笑等),按用戶指定生成相應人像圖片。

          文本生成

          • 雖然 LSTM 和 Transformer 架構更常用于文本生成,但 VAE 同樣可應用于自然語言處理任務,生成連貫多樣的文本片段。

          聲音合成

          • 同樣適用于音頻信號生成,如音樂片段或語音合成。

          離散隱空間探索

          • 某些 VAE 變體結合離散化技術,允許在離散的潛在空間中操作,有助于深入理解并組織數據結構。

          醫(yī)學影像分析

          • 在醫(yī)療領域,VAE 可用于疾病分類、病變檢測及基于病灶特征的圖像重建。

          推薦系統(tǒng)

          • 在推薦系統(tǒng)中,VAE 能夠幫助學習用戶和物品的潛在表示,以進行更為精確的個性化推薦。

          以上列舉了 VAE 的部分應用領域,隨著研究和技術的發(fā)展,其應用場景仍在不斷拓展。

          4. VAE 的不足

          変分自編碼器 VAE 作為一種深度生成模型,它可以從潛空間中采樣編碼,然后通過解碼器生成新的數據。VAE 的不足主要有以下幾點:

          • VAE 的生成質量較低,容易產生模糊或失真的樣本,這是因為 VAE 使用了重構誤差作為損失函數,而重構誤差往往會導致平均或者模糊的結果。

          • VAE 的后驗分布假設為正態(tài)分布,這可能會限制了潛空間的表達能力,導致無法捕捉到數據的復雜性和多樣性。

          • VAE 的訓練過程需要計算 KL 散度,這需要知道先驗分布和后驗分布的具體形式,而這在實際應用中往往是不可知的 。

          以上是一些 VAE 的典型不足,當然也有一些方法可以改進或者緩解這些問題,例如使用對抗訓練,使用更復雜的后驗分布,或者使用隱式變分推斷等。VAE 仍然是一種有前景的生成模型,它在機器學習和人工智能領域有著廣泛的應用。

          好了,VAE 我們就介紹到這里,關于它后續(xù)的變種這里先不談了。我們馬上要進入當前正火熱的擴散模型吧。


          瀏覽 61
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产乱弄免费视频观看 | 操骚逼黄色网址 | 懂色AV一区二区三区国产中文在线 | 黄色一级片一级片 | 人人操 超碰 |