Otomatik kodlayıcı nedir?
Ben bir öğrenciyim ve makine öğrenimi okuyorum. Ben odaklanıyorum derin üretken modelleri ve özellikle autoencoders ve varyasyon autoencoders (VAE) .
Kavramı anlamaya çalışıyorum ama bazı sorunlar yaşıyorum.
Şimdiye kadar bir autoencoder örneğin bir görüntü bir giriş alır ve bir içine bu görüntüyü düşürmeyi hedeflediğini de anlamış gizli uzay içermelidir hangi başlı özelliklerini bir operasyonla, veri kümesinin kodlayan bir operasyon ile, o zaman, arasında deşifre , bunun nedeni kodlama kısmına bazı bilgiler kaybetmiştir görüntü reconstrunct.
Bundan sonra, bir kayıp fonksiyonu ile gizli uzayı yeniden yapılandırır ve böylece gizli özellikleri elde eder.

VAE hakkında, olasılıkçı bir yaklaşım kullanır, bu yüzden bir gaussianın me ve anv kovaryansını öğrenmemiz gerekir.
Şimdiye kadar anladığım buydu.
Gerçekten belirsiz olduğum şey, otomatik kodlayıcılar ve VAE ile ne öğrenmeye çalıştığımızdır?
Bir görüntünün gülümsemeyen bir yüze ya da siyah beyaz bir görüntünün renkli bir görüntüye dönüştüğü örnekler gördüm.
Ama ana kavramı anlamıyorum, yani bir otomatik kodlayıcı ne yapar?
Buraya, ihtiyaç duyanların görebilmesi için nerede çalıştığımla ilgili bazı kaynaklar ekliyorum:
- https://hackernoon.com/autoencoders-deep-learning-bits-1-11731e200694
- https://www.youtube.com/watch?v=yFBFl1cLYx8
- https://www.youtube.com/watch?v=9zKuYvjFFS8
Yanıtlar
otomatik kodlayıcı ne yapar?
En basit otomatik kodlayıcı, yüksek boyutlu bir görüntüyü (örneğin, 100K piksel) düşük boyutlu bir gösterime (örneğin, uzunluğu 10 olan bir vektör) alır ve ardından orijinal görüntüyü yeniden oluşturmaya çalışmak için yalnızca bu 10 özelliği kullanır . İnsanlarla bir benzetme hayal edebilirsiniz: Birine bakıyorum, onları tanımlıyorum ("uzun, siyah saçlı, ...") sonra neye benzediğini unuttuğumda, sadece notlarımı kullanarak onları çizmeye çalışıyorum.
ne öğrenmeye çalışıyoruz?
Başka bir deyişle, neden zahmet edelim? Birkaç neden:
- Boyut azaltma: 10 özellik, 100K pikselden çok daha kullanışlıdır. Örneğin, 10 boyutlu uzayda kümeleme yaparak sınıflandırma yapabilirim (100K boyutlu uzayda kümeleme inatçı olurken).
- anlamsal anlam: Her şey yolunda giderse, 10 özelliğin her birinin açık bir "açıklaması" olacaktır - örneğin, bir değerin ince ayarlanması, konuyu daha eski gösterecektir (normalde o kadar basit olmasa da). Öteleme, döndürme vb. Tarafından etkilenen piksel değerlerinin aksine.
- İstisna tanıma: Otomatik kodlayıcımı köpekler üzerinde eğitirsem, normalde köpeklerin resimlerini kodlamak ve çözmek için iyi bir iş çıkarır. Ama içeri bir kedi koyarsam, muhtemelen korkunç bir iş çıkaracaktır - bunu söyleyebilirim çünkü çıktı girdiye hiç benzemiyor. Bu nedenle, bir otomatik kodlayıcının kötü bir iş yaptığı yerleri aramak, anormallikleri aramanın yaygın bir yoludur.
Bir görüntünün gülümsemeden gülen bir yüze veya siyah beyaz bir görüntüden renkli bir görüntüye geçtiği örnekler gördüm.
Birçok farklı otomatik kodlayıcı türü vardır. Yukarıda anlattığım şey en basit türdür. Diğer bir yaygın tür, "denoising" otomatik kodlayıcıdır - orijinal görüntüyü yeniden oluşturmak yerine, amaç, orijinal görüntüyle ilişkili ancak farklı bir görüntü oluşturmaktır.
Bunun klasik örneği denoisingdir (dolayısıyla adı): Temiz bir görüntü alabilir, bir sürü gürültü ekleyebilir, bunu bir otomatik kodlayıcıdan geçirebilir ve ardından otomatik kodlayıcıyı temiz görüntü ürettiği için ödüllendirebilirsiniz . Dolayısıyla, girdi (gürültülü görüntü) aslında istenen çıktıdan (temiz görüntü) farklıdır. Verdiğiniz örnekler benzer.
Bu tür otomatik kodlayıcıların tasarlanmasındaki zorluk normalde kayıptır - otomatik kodlayıcıya doğru şeyi yapıp yapmadığını söylemek için bir mekanizmaya ihtiyacınız vardır.
VAE hakkında, olasılıkçı bir yaklaşım kullanır, bu yüzden bir gaussianın ortalamasını ve kovaryansını öğrenmemiz gerekir.
VAE, üçüncü bir otomatik kodlayıcı türüdür. Biraz özel çünkü matematiksel olarak sağlam temellere sahip; Hiçbir ad-hoc ölçümlerini gerekli. Matematik burada anlatılamayacak kadar karmaşık, ancak temel fikirler şunlar:
- Gizli uzayın sürekli olmasını istiyoruz. Her bir sınıfı gizli uzayın kendi köşesine atamak yerine, gizli uzayın iyi tanımlanmış, sürekli bir şekle (yani bir Gaussian) sahip olmasını istiyoruz. Bu güzel çünkü gizli uzayı anlamsal olarak anlamlı olmaya zorluyor.
- Resimler ve örtük alanlar arasındaki eşleştirme deterministik olmaktan çok olasılığa dayalı olmalıdır. Bunun nedeni, aynı konunun birden fazla görüntü üretebilmesidir.
Dolayısıyla iş akışı şudur:
- Daha önce olduğu gibi resminizle başlıyorsunuz
- Daha önce olduğu gibi, kodlayıcınız bir vektör belirler (örneğin uzunluk 200).
- Ancak bu vektör gizli bir uzay değildir. Bunun yerine, bu vektörü gizli bir alanı tanımlamak için parametreler olarak kullanırsınız. Örneğin, belki gizli alanınızı 100 boyutlu bir Gauss olarak seçersiniz. 100 boyutlu bir Gauss, her boyutta bir ortalama ve bir standart sapma gerektirir - uzunluk-200 vektörünüzü bunun için kullanırsınız.
- Artık bir olasılık dağılımınız var. Bu dağılımdan bir puan örnek alırsınız. Bu, görüntünüzün gizli uzaydaki temsilidir.
- Daha önce olduğu gibi, kod çözücünüz bu vektörü yeni bir "çıktıya" (örneğin 200K uzunluğunda bir vektöre) dönüştürecektir.
- Ancak, bu "çıktı" sizin çıktı görüntünüz değildir. Bunun yerine, 100K boyutlu bir Gaussian tanımlamak için bu 200K parametreleri kullanırsınız. Sonra bu dağılımdan bir noktayı örnekliyorsunuz - bu sizin çıktı görüntünüz.
Elbette, bir Gauss'la ilgili özel bir şey yoktur, başka bir parametrik dağılımı da kolaylıkla kullanabilirsiniz. Pratikte insanlar genellikle Gaussluları kullanır.
Bu bazen diğer otomatik kodlayıcılardan daha iyi sonuçlar verir. Dahası, gizli alanınızdaki sınıflar arasına baktığınızda bazen ilginç sonuçlar elde edersiniz . Bir görüntünün gizli uzaydaki küme merkezinden uzaklığı bazen belirsizlikle ilgilidir.
Dahası, bu yüksek boyutlu Gaussian'ların katı matematiksel anlamda olasılık dağılımları olması gibi güzel bir özellik var . Belirli bir görüntünün belirli bir sınıfa ait olma olasılığını tahmin ederler. Dolayısıyla, VAE'lerin derin öğrenmenin "el sallamasının" üstesinden gelebilecekleri ve her şeyi sağlam bir Bayesçi olasılık temeline geri koyabilecekleri yönünde bazı düşünceler var. Ama elbette, bu sadece bir yaklaşımdır ve yaklaşım birçok derin sinir ağını içerir, bu nedenle şu anda hala bol miktarda el sallanması vardır.
Bu arada, görüşmeler sırasında bu soruyu kullanmayı seviyorum - şaşırtıcı sayıda insan VAE'lerle deneyime sahip olduğunu iddia ediyor, ancak aslında VAE'lerin "normal" AE'lerden farklı olduğunun farkında değiller.
Otomatik kodlayıcılar hakkında düşünmenin kolay bir yolu şudur: Prticlar bir infrmaton parçasının, indirgenmiş veya başka bir şekilde hesaplanmış reprsentatondan ne kadar iyi yeniden yapılandırılabileceği. Buraya kadar yaptıysanız, önceki cümleyi orijinal 103 karakterinin yalnızca 92'sini kullanarak başarılı bir şekilde yeniden oluşturduğunuz anlamına gelir.
Daha spesifik olarak, otomatik kodlayıcılar, denetimsiz bir şekilde verimli veri kodlamalarını öğrenmek için eğitilmiş sinir ağlarıdır. Amaç, ağı gürültü gibi "önemli olmayan" sinyalleri görmezden gelecek şekilde eğiterek, belirli bir veri setinin temsilini öğrenmektir. Tipik olarak AE boyut azaltımı için dikkate alınır.
Pratik olarak, bir AE
- başlangıçta giriş verilerini gizli boşluk gösterimine sıkıştırır
- bu gizli-uzay gösteriminden çıktıyı yeniden yapılandırır
- Yeniden yapılandırma kaybı olarak tanımlanan girdi ve çıktı arasındaki farkı hesaplar.
Bu eğitim döngüsünde, AE bu yeniden yapılandırma kaybını en aza indirir, böylece çıktı mümkün olduğunca girdiye benzer olur.
Otomatik kodlayıcıları değerlendirirken yararlı bulduğum bir yaklaşım şu sonuçtur: PCA gibi yöntemler giriş alanındaki maksimal varyasyon eksenlerini tanımlarken, otomatik kodlayıcıya doğrusal olmayan aktivasyon fonksiyonlarının eklenmesi maksimal eksenlerin tanımlanmasına izin verir. mekanın (potansiyel olarak) doğrusal olmayan dönüşümüne gömülü varyasyon.
Örnek
Doğrusal olmayan aktivasyon fonksiyonları olmadığında, bir otomatik kodlayıcının temelde bir değişikliğe kadar temelde PCA'ya eşdeğer olduğunu gözlemleyin. Bunun neden böyle olduğunu düşünmek faydalı bir egzersiz olabilir.