Varyasyonlu otomatik kodlayıcıların (VAE) uygulanması ve eğitilmesi kolay olsa da, bunları açıklamak hiç de kolay değildir, çünkü Derin Öğrenme ve Değişken Bayes'ten gelen kavramları harmanlıyorlar ve Derin Öğrenme ve Olasılıklı Modelleme toplulukları aynı kavramlar için farklı terimler kullanıyor. Dolayısıyla, VAE'leri açıklarken, ya istatistiksel model kısmına konsantre olma, okuyucuyu gerçekte nasıl uygulayacağına dair bir fikir vermeden bırakma ya da Kullback-Leibler teriminin göründüğü ağ mimarisi ve kayıp fonksiyonuna odaklanmanın tam tersi bir risk bırakma riskiniz vardır. ince havadan çıkardı. Modelden başlayarak, ancak pratikte uygulamaya koymak için yeterince ayrıntı vererek veya bir başkasının uygulamasını anlamaya çalışarak burada bir orta noktaya vurmaya çalışacağım.
VAE'ler üretken modellerdir
Klasik (seyrek, denoising vb.) Otomatik kodlayıcıların aksine, VAE'ler GAN'lar gibi üretken modellerdir. Üretken model bir olasılık dağılımı öğrenir bir model anlamına p(x) , giriş alanı içinde x . Bu, böyle bir modeli eğittikten sonra, (yaklaşık) p(x) den örnek alabileceğimiz anlamına gelir . Eğitim setimiz el yazısı rakamlardan (MNIST) yapılmışsa, eğitimden sonra model, eğitim setindeki görüntülerin "kopyaları" olmasa da, el yazısı rakamlarına benzeyen görüntüler oluşturabilir.
Eğitim setinde görüntülerin dağılımını öğrenmek, el yazısı rakamları gibi görünen görüntülerin yüksek olasılıkla üretilmesi gerektiğini, Jolly Roger veya rasgele gürültüye benzeyen görüntülerin düşük olasılıklara sahip olması gerektiği anlamına gelir. Başka bir deyişle, pikseller arasındaki bağımlılıklar hakkında bilgi edinmek anlamına gelir: eğer bizim resmimiz MNIST'ten 28×28=784 piksel gri tonlamalı bir görüntü ise, modelin eğer bir piksel çok parlaksa, bazı komşu piksellerin önemli bir ihtimalinin olduğunu öğrenmesi gerekir. çok parlak, eğer uzun, eğimli bir parlak pikseller çizgimiz varsa, bunun üstünde bir daha küçük, yatay pikseller çizgisi olabilir (a 7), vs.
VAE'ler gizli değişken modellerdir
VAE a, gizli değişkenleri , bu araçlar: Model x , 784 piksel yoğunlukları (rasgele vektör gözlenen değişkenler), rasgele vektör bir (muhtemelen çok karmaşık) fonksiyonu olarak modellenir z∈Z bileşenleri, daha düşük boyutluluk, bir gözlemlenmemiş ( gizli ) değişkenlerdir. Böyle bir model ne zaman anlamlıdır? Örneğin, MNIST örneğinde, el yazısı rakamların x boyutundan çok daha küçük bir boyut manifolduna ait olduğunu düşünüyoruz.xÇünkü 784 piksel yoğunluğundaki rastgele düzenlemelerin büyük çoğunluğu, el yazısı rakamlarına hiç benzemiyor. Sezgisel olarak boyutun en az 10 (basamak sayısı) olmasını beklerdik, ancak büyük olasılıkla daha büyük çünkü her bir rakam farklı şekillerde yazılabilir. Bazı farklılıklar nihai görüntünün kalitesi için önemsizdir (örneğin, küresel rotasyonlar ve çeviriler), ancak diğerleri önemlidir. Yani bu durumda gizli model mantıklı. Bunun üzerine daha sonra. Şaşırtıcı bir şekilde, sezgilerimiz bize boyutun yaklaşık 10 olması gerektiğini söylese bile, MNIST veri kümesini bir VAE ile kodlamak için kesinlikle sadece 2 gizli değişken kullanabileceğimizi unutmayın (sonuçlar güzel olmaz). Bunun nedeni, tek bir gerçek değişkenin bile sonsuz sayıda sınıfı kodlayabilmesidir, çünkü tüm olası tamsayı değerlerini ve daha fazlasını alabilmektedir. Elbette, sınıflar aralarında önemli bir örtüşme varsa (örneğin MNIST'de 9 ve 8 ya da 7 ve I gibi), sadece iki gizli değişkenin en karmaşık işlevi bile her sınıf için açıkça ayırt edilebilir örnekler üretmek için kötü bir iş yapacaktır. Bunun üzerine daha sonra.
VAE'ler çok değişkenli bir parametrik dağılım olduğunu varsayarlar (burada , parametreleridir) ve çok değişkenli dağılım. parametre sayısının eğitim setinin büyümesiyle sınırsız büyümesini engelleyen için parametrik bir pdf kullanımı, VAE lingosunda itfa denir (evet, biliyorum ...).q(z|x,λ)λqz
Kod çözücü ağı
Kod çözücü ağından başlıyoruz çünkü VAE üretken bir modeldir ve VAE'nin gerçekte yeni görüntüler üretmek için kullanılan tek kısmı kod çözücüdür. Kodlayıcı ağı yalnızca çıkarım (eğitim) zamanında kullanılır.
Kod çözücü ağ amacı yeni bir rasgele vektörün üretilmesi için olan giriş alanı ait , yani, yeni görüntüler, gizli vektörü gerçekleşmeleri başlayarak . Bu, koşullu dağılımı öğrenmesi gerektiği anlamına gelir . VAE'ler için bu dağılımın genellikle çok değişkenli bir Gaussian 1 olduğu varsayılır :xXzp(x|z)
pϕ(x|z)=N(x|μ(z;ϕ),σ(z;ϕ)2I)
ϕ , enkoder ağının ağırlıklarının (ve önyargılarının) vektörüdür. Vektörler ve olan karmaşık, bilinmeyen doğrusal olmayan fonksiyonlar, dekoder ağı tarafından modellenmiştir: sinir ağları güçlü doğrusal olmayan fonksiyonlar tahmin edicilerdir.μ(z;ϕ)σ(z;ϕ)
Yorumlarda @amoeba tarafından belirtildiği gibi , kod çözücü ile klasik gizli değişkenler modeli arasında çarpıcı bir benzerlik vardır : Faktör Analizi. Faktör Analizi'nde modeli varsayıyorsunuz:
x|z∼N(Wz+μ,σ2I), z∼N(0,I)
Her iki model de (FA ve dekoder) gözlemlenebilir değişkenlerin gizli değişkenleri deki koşullu dağılımının Gaussian olduğunu ve in standart Gaussian olduğunu varsaymaktadır. Fark, kod çözücünün ortalamasının 'de doğrusal olduğunu varsaymaması ya da standart sapmanın sabit bir vektör olduğunu varsaymasıdır. Aksine, onları nin karmaşık doğrusal olmayan fonksiyonları olarak modeller . Bu açıdan, doğrusal olmayan Faktör Analizi olarak görülebilir. Buraya bakxzzp(x|z)zzFA ve VAE arasındaki bu bağlantının anlaşılır bir tartışması için. Bir izotropik kovaryans matrisine sahip FA, sadece PPCA olduğundan, bu, lineer bir otomatik kodlayıcının PCA'ya düşürdüğü iyi bilinen bir sonuçla da ilgilidir.
Kod çözücüye geri dönelim: nasıl öğreniriz ? Sezgisel olarak, eğitim setinde oluşturma olasılığını maksimize eden gizli değişkenler . Başka bir deyişle , veri verilen nin posterior olasılık dağılımını hesaplamak istiyoruz :ϕzxiDnz
p(z|x)=pϕ(x|z)p(z)p(x)
önce bir varsayıyoruz ve Bayesian'de ( delil ) işleminin zor olduğu sonucuna vardık. çok boyutlu bir integral). Dahası, burada bilinmiyor, zaten hesaplayamayız. Değişken Otomatik Kodlayıcılara isimlerini veren araç olan Değişimsel Çıkarımı girin.N(0,I)zp(x)μ(z;ϕ)
VAE modeli için Varyasyonel Çıkarım
Varyasyonel Çıkarım çok karmaşık modeller için yaklaşık Bayesian Çıkarımı gerçekleştiren bir araçtır. Çok karmaşık bir araç değil, ancak cevabım zaten çok uzun ve VI'in detaylı bir açıklamasına girmeyeceğim. Eğer merak ediyorsanız, bu cevaba ve buradaki referanslara bir göz atabilirsiniz:
/stats//a/270569/58675
VI'nın parametrik bir dağılım ailesinde ye bir yaklaşım aradığını söylemek yeterlidir , yukarıda belirtildiği gibi, ailenin parametreleridir. Hedef dağılımımız ve arasındaki Kullback-Leibler ayrıntısını en aza indiren parametreleri arıyoruz :p(z|x)q(z|x,λ)λp(z|x)q(z|x,λ)
minλD[p(z|x)||q(z|x,λ)]
Yine, bunu doğrudan en aza indiremeyiz, çünkü Kullback-Leibler ayrıntısının tanımı kanıtları içerir. ELBO (Evidence Lower BOund) ile tanışın ve bazı cebirsel manipülasyonlardan sonra nihayet:
ELBO(λ)=Eq(z|x,λ)[logp(x|z)]−D[(q(z|x,λ)||p(z)]
ELBO kanıtlara bağlı olduğundan (yukarıdaki bağlantıya bakınız), ELBO'yu maksimize etmek, verilen veri olasılığını maksimize etmekle tam olarak eşdeğer değildir ( (hepsinden öte, VI, yaklaşık Bayesian çıkarımı için bir araçtır ), ama doğru yöne gidiyor.λ
Çıkarım yapmak için, parametrik ailesini belirtmemiz gerekir . Birçok VAE'de çok değişkenli, ilişkisiz bir Gauss dağılımını seçiyoruzq(z|x,λ)
q(z|x,λ)=N(z|μ(x),σ2(x)I)
Biz bunun için yapılan aynı seçimdir , farklı bir parametre aile seçmiş rağmen. Daha önce olduğu gibi, bu karmaşık doğrusal olmayan fonksiyonları bir sinir ağı modeli tanıtarak tahmin edebiliriz. Bu model giriş görüntülerini kabul ettiğinden ve gizli değişkenlerin dağılımının parametrelerini döndürdüğünden, buna kodlayıcı ağ diyoruz . Daha önce olduğu gibi, bu karmaşık doğrusal olmayan fonksiyonları bir sinir ağı modeli tanıtarak tahmin edebiliriz. Bu model giriş görüntülerini kabul ettiğinden ve gizli değişkenlerin dağılımının parametrelerini döndürdüğünden, buna kodlayıcı ağ diyoruz .p(x|z)
Kodlayıcı ağı
Çıkarım ağı olarak da bilinir , bu yalnızca eğitim süresinde kullanılır.
Yukarıda belirtildiği gibi, enkoder yaklaşık ve , yani 24 gizli değişkeni varsa, kodlayıcı bir vektörüdür. Kodlayıcıda ağırlıklar (ve önyargılar) . öğrenmek için nihayet ELBO'yu enkoder ve dekoder ağının ve parametreleri ve eğitim seti noktalarına göre yazabiliriz :μ(x)σ(x)d=48θθθϕ
ELBO(θ,ϕ)=∑iEqθ(z|xi,λ)[logpϕ(xi|z)]−D[(qθ(z|xi,λ)||p(z)]
Sonunda sonuçlandırabiliriz. ELBO'nun karşıtı, ve 'nin bir fonksiyonu olarak, VAE’nin kayıp fonksiyonu olarak kullanılır. Bu kaybı en aza indirgemek için SGD kullanıyoruz, yani ELBO'yu en yükseğe çıkarmak için. ELBO kanıtlara daha düşük bir sınır koyduğundan, bu kanıtı en üst düzeye çıkarmak ve böylece eğitim setindeki ile en iyi şekilde benzer yeni görüntüler üretmek yönündedir. ELBO'daki ilk terim, eğitim set noktalarının beklenen negatif log olasılığıdır, bu nedenle kod çözücüyü eğitim olanlara benzer görüntüler üretmeye teşvik eder. İkinci terim bir düzenleyici olarak yorumlanabilir: kodlayıcıyı, benzer gizli değişkenler için bir dağıtım oluşturmaya teşvik eder.θϕp(z)=N(0,I). Fakat önce olasılık modelini tanıtarak, tüm ifadenin nereden geldiğini anladık: yaklaşık posterior arasındaki Kullabck-Leibler ayrışmasının en aza indirgenmesi ve model posterior . 2qθ(z|x,λ)p(z|x,λ)
maksimize ve öğrendikten sonra , kodlayıcıyı atabiliriz. Bundan sonra, yeni görüntüler üretmek için sadece örneklerini alın ve kod çözücünün içinden geçirin. Kod çözücü çıktıları, eğitim setindekine benzer görüntüler olacaktır.θϕELBO(θ,ϕ)z∼N(0,I)
Kaynaklar ve daha fazla okuma
1 Bu varsayım kesinlikle gerekli değildir, ancak VAE'lerin tanımını kolaylaştırmaktadır. Bununla birlikte, uygulamalara bağlı olarak, için farklı bir dağıtım varsayabilirsiniz . Örneğin, eğer ikili değişkenlerin bir vektörüyse, bir Gaussian anlamsızdır ve çok değişkenli bir Bernoulli varsayılabilir.pϕ(x|z)xp
2 ELBO ifadesi, matematiksel zarafeti ile, VAE uygulayıcıları için iki ana ağrı kaynağını gizlemektedir. Bunlardan biri ortalama terimidir . Bu, etkin bir şekilde bir beklentinin hesaplanmasını gerektirir; den birden fazla örnek alınması gerekirEqθ(z|xi,λ)[logpϕ(xi|z)]qθ(z|xi,λ). İlgili sinir ağlarının boyutları ve SGD algoritmasının düşük yakınsama hızı göz önüne alındığında, her yinelemede (aslında, daha da kötüsü olan her minibatch için, hatta daha da kötüsü olan) çoklu rasgele örnekler çizmek zorunda kalıyor. VAE kullanıcıları bu beklentiyi tek bir (!) Rastgele örneklemle hesaplayarak bu pragmatik olarak çözerler. Diğer bir konu, geri yayılım algoritmasıyla iki sinir ağını (kodlayıcı ve kod çözücü) eğitmek için, kodlamadan kod çözücüye ileriye yayılma ile ilgili tüm adımları ayırt edebilmem gerekiyor. Kod çözücü deterministik olmadığı için (çıktısını değerlendirmek çok değişkenli bir Gaussian'dan çizim yapılmasını gerektirir), farklılaşabilir bir mimari olup olmadığını sormak bile mantıklı gelmiyor. Bunun çözümü, yeniden canlandırma püf noktasıdır .