auto-encoding variational bayes
你要是能在一周內,把上面這篇文章的數學原理搞懂,那你就是骨骼清奇了。
看**可以知道,vae(變分自編碼器)只是aevb(自編碼變分貝葉斯)的乙個應用而已。
如果你只是想懂vae的話,還是比較簡單滴。
對於aevb更深層的原理,在這裡不去討論,因為我的水平也不夠討論。在這裡只說與vae有關的原理。
圖1相比於自編碼器ae,vae在結構上的改變「好像」只在z處注射一點噪音。要明白三點:這串雜訊怎麼注射、注射雜訊的理由是什麼、雜訊注射後有什麼效果。此外還有乙個問題,這個玩意兒怎麼訓練?
圖2上圖的紅色部分就表示注入隨機變數的過程。
從直觀的角度來講,輸入x經過編碼之後,維度降低,然後讓x有點波動再去解碼,就可以重構出與
x x
相似但又合理的x^
' role="presentation" style="position: relative;">x^x
^。 事實上,原**給了很多的數學論證,證明為什麼加入隨機波動在系統重構之後的x^
x
^與原輸入
x x
是大同小異的,這也是vae能夠進行生成資料的基本原因。
在2023年的vae綜述上,可以更清楚的理解這個操作的基本原理:
綜述鏈結如下:tutorial on variation autoencoders
圖3「通過函式將一種隨機分布轉換成另一種隨機分布」,大概就是vae數學原理的通俗解釋吧。在編碼的時候,編碼器將輸入資料編碼成兩部分(如圖2所示):一部分決定ba
se' role="presentation" style="position: relative;">bas
ebas
e,另一部分決定變分(va
riat
ion var
iati
on)。 解碼器的輸入z=
base
+var
iati
onz =b
ase+
vari
atio
n變分(variation) = 變分基數 ∗
∗
隨機數為什麼變分要以乘積項來表示呢? 綜述裡面是給了解釋的:這樣可導,可以直接梯度反傳來訓練。
z經過解碼器就可以生成和原輸入x很相似但是又不同的各種資料,相似是由ba
seb as
e決定的,而不同是由va
riat
ion var
iati
on決定的。
這樣一來,vae就可以進行資料增強:用少量的資料喂進vae,會生成很多相似但又細節不同的資料。
同時,vae也是無監督學習常用的方法,比ae更能掌握資料的流型結構,這是一種很玄學的玩意兒(期待本人之後深入研究這一領域)。
具體生成效果呢,可以看看下圖:
可以看出,生成資料也是多,但是很多都比較奇怪,千萬不要認為這是vae的極限。這裡還沒加入condition,也沒進行各種優化。目前的vae生成效果還是很強大的,感興趣可以看一些vae和gan結合的文章。
除了生成效果之外,vae還可以進行想象補全,總的來說,vae的功能和gan是高度重合,只是作用域不一樣。
補全的效果,還是可以的。
變分自編碼器VAE
auto encoding variational bayes git antixk pytorch vae a collection of variational autoencoders vae in pytorch.1 原文作者在深度學習上的實戰理論指導 2 具體原理框圖如下 vae主要由編碼...
變分自編碼VAE實戰
import tensorflow as tf from tensorflow.examples.tutorials.mnist import input data mnist input data.read data sets mnist data one hot true import matp...
VAE變分自編碼器的一點理解
introduction to variational autoencoders vae第二篇 vae variation inference變分推理 清爽介紹 結合 講解vae gan比較透徹的一篇文章 引介 semi supervised vae for text classification ...