--- tags: course, Deep learning --- # MIT Intro to Deep Learning: Lecture 4 Deep Generative Modeling [Course link](https://www.youtube.com/watch?v=rZufA635dq4&list=PLtBw6njQRU-rwp5__7C0oIVt26ZgjG9NI&index=4) [lab](https://github.com/aamini/introtodeeplearning/tree/master/lab2) ## Introduction 生成式模型不只希望能找到資料的pattern,更希望能藉此產生全新的資料 * 你認為哪張臉才是真的呢? ![](https://i.imgur.com/EJB9IXQ.jpg) * 全都是假的 * [Style GAN](https://arxiv.org/abs/1812.04948) ### Supervised vs Unsupervised * 監督式指的是有x和y,讓模型學習兩者之間的映射關係 * 非監督指的是只給予x,讓模型自行學習資料的結構 ![](https://i.imgur.com/6k3Ydvz.jpg) ![](https://i.imgur.com/v8t0kAD.jpg) ### Generative Model * 目標是從許多不同分布的資料中學習出他們的分布究竟是什麼 * 2 Goals * Density Estimation: 辨別出資料是從哪個分布來的 * Sample Generation: 產生出全新的資料去代表這些input data ![](https://i.imgur.com/E9QzX6F.jpg) * 如何學習學習這些機率分布? * 如何model這些機率分布 #### Why? * **Debiasing** ![](https://i.imgur.com/J4xWQvz.jpg) * 單純使用監督式學習的話很有可能學不到一些潛藏在資料之中的features,並且會**overrepresente** feature * 這是因為資料本來就可能是有bias的,但我們沒有發覺到,例如一個圖片資料集中因為黑人的圖片資料較少,造成模型對於黑人的辨識能力較差 * 另一個例子是Outliner detection ![](https://i.imgur.com/HctZ0Uw.jpg) * 生成模型可以用來偵測outliner,並用這些來訓練出更強的模型 ## Latent variable Model * 兩種生成模型 ![](https://i.imgur.com/Sr3dQJP.jpg) ### What is The Latent variable? * Myth of cave ![](https://i.imgur.com/r5Vlvx6.jpg) 內容是說有一群犯人被綁在一個牆壁的後面,他們唯一可以看到的東西就是他們後面那些物件的陰影。對這些犯人來說,這些陰影就是Observed variable,他們可以給它名字、測量它等等,而他們後面那些他們看不見的真正的物件,則是Latent variable。 * 而生成模型的目標就是在只給予其observed data的情況下,模型可以找到一個能真正學習到這些underlying latent variable的方法。 * 也就是能從陰影中就推斷出真正的物件是甚麼 ## Autoencoder * Autoencoder透過encoding input去做到這件事情 ![](https://i.imgur.com/gVlhTnZ.jpg) * 輸入raw data, 輸出low dimension feature space * EX:在圖像處理中通常是很高維的輸入,因此我們希望能將這些高維的data壓縮成低維的latent vector * Encoder * Mapping data **x** to latent variable **z** ### How to train autoencoder * 我們並沒有**z**的training data去直接學習出要如何利用**z**去重建出**x** * 也就是說我們無法事先得知一張圖片的特徵到底有哪些是真正重要的,並以此來重建出原始資料 * 但可以利用decoder從latent space中去recontruct一個相似的圖片 ![](https://i.imgur.com/qYjg4Xm.jpg) * Loss就是原始資料跟生成出來的資料的差異程度,並以降低彼此之間的差異為目標去訓練 * mean square error * 他的學習是不需要任何label的,這就是非監督學習的強大之處 * 由於latent space的維度是固定的,因此如何選擇他的維度是一個重要的議題 ![](https://i.imgur.com/FCAfM5U.jpg) * latent space的維度越低,重建出來的圖片品質越低 * 因此latent space的維度是Autoconder的能力瓶頸 ### Summary ![](https://i.imgur.com/73OQnyO.jpg) ## Variational Autoencoder (VAEs) * 傳統的Autoencoder的latent space是determinstic的 ![](https://i.imgur.com/KyjNImm.jpg) * VAE有更有彈性的latent space * VAE利用random sampling來做出更有彈性的latent space * 相較傳統的**z**,VAE學的已經不是如何一一對應的映射**x**和**x^**,而是學習每一個latent variable的機率分布的mean和std ![](https://i.imgur.com/1FPneSh.jpg) ### VAE Optimization * Encoder做的事情是要利用input **x**去計算出**z**的機率分布**p** * Decoder則是Given **z**,算出一個x的新的機率分布**q** ![](https://i.imgur.com/2otmU9x.jpg) ### Loss function * 因為引入了機率的機制,因此loss function當然也一樣需要有變化 * reconstruction loss是我們之前用MSE算的loss * 以圖片來說就是計算兩張圖片有多少pixels不同 ![](https://i.imgur.com/Ef3nCIG.jpg) * 會有regulariztion term是因為想對我們計算出的機率給一些限制 * 在latent distribution中加上先驗機率$p(z)$ * 這會強制讓模型根據$p(z)$的shape去算出機率分布 * 比如說若$p(z)$是常態分布,則最後算出來的機率分布就不會跟常態分佈差太多 * 主要是為了讓模型不會對某些latent space **overfit** * 讓每個latent variable都adopt某個分布就可以smooth掉太極端的值 ![](https://i.imgur.com/222qt5Q.jpg) ### Prior on latent distribution * Prior通常都用normal gaussian * 好處是可以鼓勵encoder去把大部分的input encode到latent space的中心附近,並且讓左右兩邊的極值的數量很少,來避免overfit到極值的部分 * 另一個好處是可以用**KL divergence**來衡量apply normal distribution前和後的機率分布之間的距離 ![](https://i.imgur.com/7BtdK6q.jpg) ### How to train VAEs by backprop * 由於z是從random sampling出來的,所以當然不能用back prop gradient descent去學習 * Back prop需要determistic的值才能算gradient * **Reparametrizing** * 參數化(parametrizing) sampling layer * 直接從常態分布中抽出z是沒辦法做back prop的 * 因此直接將z的算法變成$\sigma$+$\mu$內積constant ![](https://i.imgur.com/dd06UjC.jpg) * 比較圖 ![](https://i.imgur.com/bOocGjP.jpg) ### Latent variable * 由於我們可以Sampling這些Latent variable * 我們可以只tune這些Latent variable,來看出他們表達了什麼 * Example ![](https://i.imgur.com/nzO2hDi.jpg) * **Disentaglement**鼓勵網路去盡量學習到Independent and uncorelated的latent variable ![](https://i.imgur.com/ESvZ3M6.jpg) ### Return to debiasing * 一開始會使用生成模型的原因在於我們不想要因為unbalance的資料而導致模型往不好的方向train (unwanted algo bias) * 若是用左邊的資料來train,由於他們的feature有些都很相似,會訓練很有偏見的模型 ![](https://i.imgur.com/QNPyTKI.jpg) * 我們可以用生成模型來知道哪些feature是under-represented or over-represented ### Mitigating bias through learned latent structure * 實際上是如何用生成模型看出under-represented or over-represented呢? ![](https://i.imgur.com/jcQbUIM.jpg) * 生成模型用來在training model的時候resampling data,產生一些比較少、差異比較大的sample來平衡資料集 ![](https://i.imgur.com/JgcGZi1.jpg) ### Summary ![](https://i.imgur.com/GIuBBmz.jpg) ## GANs * 目標只是產生出新的物件 * Generator學習的是從random noise **z**中產生出新的假資料,並且越像真正的資料越好 ![](https://i.imgur.com/YP42kj0.jpg) * Discriminator則是輸入假資料和真資料,並學習如何分辨兩者 ![](https://i.imgur.com/Fvha8O1.jpg) * 這兩個網路會互相競爭(adversarial) * 而兩者透過互相競爭會越來越強大 ![](https://i.imgur.com/gcSGi0D.jpg) ![](https://i.imgur.com/z9SeWZo.jpg) ![](https://i.imgur.com/RnC6fxB.jpg) ### Recent advance of GANs * Progressive的增加兩者的解析度 ![](https://i.imgur.com/tlXrHeU.jpg) * CycleGAN可用在style transfer或者是image to image translation * $D$是分布 ![](https://i.imgur.com/zCHLZBh.jpg) * 也可用來轉換人聲的特性 ![](https://i.imgur.com/WyQUuDG.jpg) ## Summary ![](https://i.imgur.com/wHkXkDe.jpg)