chapter 13 生成式模型

2021-09-23 15:35:46 字數 2018 閱讀 7456

假設訓練資料符合某分布p,我們的目標是構建乙個p模型,來生成和訓練資料相似的資料。

從大的分類標準來看,生成式模型分為兩類,顯式密度估計和隱式密度估計,這取決於我們定義和求解p模型的方式是顯式還是隱式。

以下是生成式模型的家族圖譜:

這裡的定義很簡單,唯一的一點疑惑是,如何定義元素的順序?下面有兩種方法:

首先是自編碼器:

首先我們通過編碼器來得到輸入資料的特徵,然後再將其解構來得到一些與輸入資料相似的資料。我們可以通過計算原始資料與重構資料的差來得到損失,並不斷縮小損失。結果就是,我們相當於將的資訊儲存到了z裡。我們可以認為z的每列都代表了的一種特徵,當它的值改變時,生成的影象也在改變。

但通過這種方式,我們只能得到已有的影象,因為我們不能隨意產生合理的z值。為了得到新的影象,我們假設z服從單位高斯分布,並從中取樣,然後我們就可通過它來對影象x取樣。

但有個問題,我們如何得到這個解碼器呢?按照神經網路的思想,如果乙個函式/對映太過複雜,那我們就設定乙個神經網路,來讓它自己學習合適的函式。

那麼如何訓練這個網路呢?回想之前的pixelcnns和pixelrnns,乙個直觀的思路是最大化似然函式:

但如下圖所示,這個積分是很難計算的。不過根據貝葉斯公式,我們可以得到下圖第二個式子,我們發現,如果能夠計算出p(z|x),我們就能計算出p(x)。但p(z|x)並不能直接算出來,於是按照前面的思路,我們用神經網路定義乙個它的近似:q(z|x),並稱其為編碼器。

下面是似然估計的計算過程:

從最後的結果裡我們也能看出為什麼我們要讓似然估計最大。

以下是vae的計算流程:

當計算好q(z|x)後,在生成階段,我們只需要解碼器就可以了。我們可以對z進行取樣,然後進行迭代訓練神經網路即可。

總結一下vae:

如果我們想要高維、複雜的訓練分布中取樣,是無法直接做到的,乙個曲折的方法是,首先找到乙個簡單的分布與該分布的對映,然後在這個簡單分布中取樣。

那麼我們該如何找到這個對映呢?神經網路。

這個神經網路有一點特殊:它是由兩個神經網路構成,其中乙個叫生成器網路,另乙個叫判別器網路。這兩個神經網路在訓練過程中要不斷對抗:前者要生成以假亂真的,而後者要想辦法辨別出來:

這是它的訓練目標:

為了完成這個目標,我們就要分別對判別器和生成器進行梯度上公升和梯度下降。

但在實際實踐中,我們發現當生成器的偽造能力較弱時,

的梯度變化較平坦,反之則很陡峭。這和我們希望的相反,因為我們希望在其能力較弱時梯度更陡峭,進而學到更多。於是為了達到這個目的,我們將這項變為:

以下是gans的偽**:

之後gans有了各種各樣的探索和改進,下面是乙個有點像變魔法的例子:

1 7生成模型和判別模型

生成模型 通過學習聯合概率p x,y 然後求出條件分布p y x 為 模型,典型如 樸素貝葉斯模型,隱馬爾科夫模型 判別模型 學習的是條件概率p y x 和決策函式f x 作為 函式,典型如 k臨近法,感知機,決策樹,logistic回歸模型,最大熵模型,支援向量機,提公升方法,條件隨機場 生成優點...

百面機器學習(13)生成式對抗網路

目錄 01 初識gans 02 wgan 抓住低維的幽靈 03 dcgan 當gans遇上卷積 05 irgan 生成離散樣本 06 seqgan 生成文字序列 生成式對抗網路 gan,generative adversarial network gan的變種 wgan infogan f gans...

NLP 基礎知識 004 生成模型

使用語言模型生成句子 語言模型 生成模型 生成新的資料 文字.unigram model nlp,i,like,studying,course,yesterday vocab 0.1,0.3,0.2,0.3,0.35,0.05 不考慮上下文,可能生成下面句子 i,study,nlp,course,i...