Eser sahibi: PULKIT SHARMA
Çeviri: Wu Jindi
Redaksiyon: Wang Ting
Bu makalenin uzunluğu yaklaşık olarak 4700 kelime , Okumanız tavsiye edilir 15 dakika
Bu makale, üretken modellerin ve üretken düşmanlık ağlarının (GAN) çalışma ilkelerini ve eğitim adımlarını tanıtmaktadır.
Aşağıdaki resim koleksiyonundaki özellikleri seçebilir misiniz:
Peki ya bu resim koleksiyonu?
Bu görüntülerdeki tüm nesneler ve hayvanlar, Generative Adversarial Network (GAN) adı verilen bir bilgisayar görüntü modeli tarafından oluşturulur! Bu, şu anda en popüler derin öğrenme dallarından biridir. Bu kesinlikle gizli yaratıcılığımızı canlandırmamıza yardımcı olur!
GAN, derin öğrenme alanında kesinlikle en sevdiğim konulardan biridir. Bu modelleri farklı alanlara uygulayabilmemizi seviyorum - yeni yüzler üretmekten tablo oluşturmaya (ve eski resimlerdeki eksik kısımları doldurmaya).
Bu makale sizi üretken ağlar ve GAN'larla tanıştırmayı amaçlamaktadır. Ayrıca bu üretken ağların çeşitli uygulamalarını inceleyecek ve onları çalıştıran bileşenlere bakacağız.
1. Üretken model nedir?
2. Modeli oluşturan uygulama
3. Üretken model türleri
a. Ekran yoğunluğu
b. Örtülü yoğunluk
4. Ekran yoğunluğu modelini anlayın
5. Üretken Çekişmeli Ağlara (GAN) Giriş
6. GAN'ın adım adım eğitim süreci
İlk önce, üretken modeller kavramını anlayalım ve ardından uygulamalarını kapsamlı bir şekilde inceleyelim. Bu, farklı kullanım durumlarını görselleştirmenize ve daha sonra GAN'ı tartışırken bunları birbirine bağlamanıza yardımcı olacaktır.
Makine öğreniminde veya derin öğrenmede, esas olarak iki ana sorun türü ile ilgileniriz: denetimli öğrenme ve denetimsiz öğrenme.
Denetimli öğrenme probleminde, bağımsız değişkenlerimiz (x) ve hedef etiketlerimiz (y) var. Amaç, x ve y'yi haritalamak için kullanılan eşleme işlevini öğrenmektir:
Denetimli öğrenmenin örnekleri arasında sınıflandırma, regresyon, nesne algılama, görüntü bölümleme vb. Yer alır.
Öte yandan, denetimsiz öğrenme probleminin yalnızca bağımsız değişkenleri (x) vardır ve hedef etiketleri yoktur. Buradaki amaç, verilerden bazı potansiyel kalıpları öğrenmektir. Denetimsiz öğrenmeye örnek olarak kümeleme, boyut azaltma vb. Dahildir.
Öyleyse üretken model nerede uygundur?
Eğitim verilerini elde ettiğimizde, üretken model eğitim setinin veri dağılımından yeni örnekler oluşturacaktır. Dağılımı olan bir eğitim setimiz olduğunu varsayalım. Üretilen örneklerin dağılımının benzer olması için örnekler oluşturmak istiyoruz. Biraz daha basitleştireyim.
Üretken bir model kullanarak, önce eğitim setinin dağılımını öğreniriz ve sonra öğrenilen dağılımı bazı değişkenlerle birlikte bazı yeni gözlemler veya veri noktaları oluşturmak için kullanırız.
Şimdi, model dağılımı ile verilerin gerçek dağılımı arasındaki eşlemeyi öğrenmenin, daha sonraki bir bölümde tartışacağımız birçok yolu var. O zamana kadar, üretken modellere olan ilginizi artırabilecek bazı harika üretken uygulamaları göstermeme izin verin.
Neden ilk etapta model üretmemiz gerekiyor, ben de başta bu sorunu yaşadım. Ama ne kadar çok uygulamayla karşılaşırsam, üretken modellerin gücüne o kadar çok inanıyorum.
Bu nedenle, bu soruyu yanıtlamak için bu bölümde üretken modellerin bazı kullanım durumlarını açıklamama izin verin.
Veri oluştur
Hiç sıfırdan derin bir öğrenme oluşturmayı denediniz mi? Çoğumuzun karşılaştığı en yaygın zorluklardan biri eğitim verilerinin eksikliğidir. Çok fazla veriniz olsa bile, daha fazla veri almaktan rahatsız olmayacağınıza inanıyorum! Kim daha fazla veriyi sevmez?
Bazı sektörlerde, daha derin modelleri eğitmek için daha fazla veriye ihtiyacımız var. Tıp endüstrisi buna iyi bir örnek. Üretken modeller burada önemli bir rol oynayabilir çünkü yeni veri oluşturmak için kullanılabilirler. Oluşturulan bu görüntüler, veri setinin boyutunu artırmak için kullanılabilir. Bu harika bir örnek, üretici model yatak odası örneğini oluşturmak için kullanılıyor.
(Https://arxiv.org/abs/1511.06434)
Yüzler oluşturmak için üretken modeller de kullanabiliriz. Bu makale gerçekçi yüz fotoğraflarının oluşumunu tartışmaktadır. Veri-çizgi film karakterleri, ünlülerin görüntüleri vb. Oluşturmak için üretken modelleri kullanabileceğimiz birçok kullanım durumu vardır.
Resimden Resme Çeviri
Özellikle bu üretimsel model uygulamasını seviyorum. Uydu fotoğraflarını Google Haritalar'a dönüştürmek, gündüz fotoğraflarını gece fotoğraflarına dönüştürmek, siyah beyaz fotoğrafları renkli fotoğraflara dönüştürmek ve mevsimleri değiştirmek (yazı kışa dönüştürmek gibi) gibi bazı ilginç şeyler yapabilirsiniz:
Bunların hepsi resimden resme çeviri görevleridir. Bu makale, resimden resme çeviri görevleri için birçok yöntemi açıklar
(Https://arxiv.org/abs/1611.07004)
Yüzde yaşlanma ve yaşlanma
Yüzde yaşlanma ve yaşlanma, doğal yaşlanma ve yaşlanmayı geciktiren yüz görüntülerinin işleme sürecidir:
Bu, çağlar boyunca yüzleri tanımlamak için veya eğlence amacıyla kullanılabilir. Daha ayrıntılı bilgi istiyorsanız, lütfen bu belgeye başvurmaktan çekinmeyin
(Https://arxiv.org/pdf/1802.00237.pdf)
3B nesne oluşturma, dikkat tahmini, metinden görüntüye çeviri, vb. Gibi üretken modellerin daha fazla uygulaması vardır. Öncelikle farklı türdeki üretken modelleri anlayalım.
İki tür üretken model vardır:
1. Açık yoğunluk modeli
2. Örtük yoğunluk modeli
İlk olarak, ikisi arasındaki farkı anlamak için lütfen aşağıdaki tabloya bakın:
Açık yoğunluk modeli, açık bir yoğunluk işlevini tanımlarken, örtük yoğunluk modeli, doğrudan veri üretebilen rastgele bir işlemi tanımlar.
Bu, Ian Goodfellow'un farklı türdeki üretken modellerinin zihin haritasıdır:
Bu üretken modelleri daha ayrıntılı olarak anlayalım.
Açık yoğunluk modelinin açık bir yoğunluk fonksiyonunu tanımladığını biliyoruz. Ardından, eğitim verilerinde işlevin olasılığını maksimize etmeye çalışır. Bu açık yoğunluk modellerinin kullanımının kolay olup olmadığına göre, bunları birkaç alt bölüme ayırabiliriz:
İşlenebilir, dağıtımı etkili bir şekilde yakalamak için parametrik bir işlev tanımlayabileceğimiz anlamına gelir. Bununla birlikte, görüntülerin dağıtımı veya ses dalgalarının dağıtımı gibi birçok dağıtım karmaşıktır ve bunları yakalamak için parametrik bir işlev tasarlamak zordur. Dağılımı yakalamak için bir parametre işlevi olmayan bu model yaklaşık bir yoğunluk modelidir.
Yoğunluk fonksiyonunu tanımlamak için, görüntünün (x) olasılığını tek boyutlu dağılımın ürününe ayırmak için zincir kuralını kullanırız:
Burada p (x), x görüntüsünün olasılığını temsil eder ve sağ taraf, önceki tüm pikseller verildiğinde i-inci pikselin değerinin olasılığını temsil eder. Bu işlevi tanımladıktan sonra, eğitim verisi olasılığını en üst düzeye çıkarıyoruz. İşlenebilir açık yoğunluk modeli bu şekilde çalışır.
Pixel RNN ve Pixel CNN, en yaygın kullanılan işlenebilir yoğunluk modelleridir. Bunları aşağıda daha detaylı tartışalım.
Piksel RNN
Pixel RNN, sırayla görüntü pikselleri oluşturan derin bir sinir ağıdır. Köşeden pikseller üretir ve ardından iki ardışık piksel oluşturur. Bunu bir örnekle açıklayayım.
5 × 5 bir görüntü oluşturmak istediğimizi varsayalım. Aşağıda gösterildiği gibi 25 piksel değerine sahip olacaktır:
Model ilk olarak bir köşeden pikseller oluşturacaktır:
Ardından, karşılık gelen iki pikseli oluşturmak için bu köşe pikselini kullanacaktır:
Ve bu işlem, son piksel oluşturulana kadar devam eder:
Piksellerin üretimi önceki tüm piksel değerlerine bağlıdır ve bağımlılık, tekrarlayan sinir ağı (RNN) veya uzun kısa süreli bellek (LSTM) kullanılarak modellenir.
Bu, Pixel RNN'nin nasıl çalıştığına dair kısa bir genel bakıştır. Daha derinlemesine okumak için resmi Pixel RNN dosyasını kontrol edebilirsiniz. (Https://arxiv.org/pdf/1601.06759.pdf)
Piexl RNN kullanmanın dezavantajı, üretimin sürekli olması nedeniyle hızın çok yavaş olmasıdır. Bu nedenle Piexl CNN tanıtıldı.
Piexl CNN
Pixel CNN kavramı, Pixel RNN'ye çok benzer. Ancak önceki piksellerin bağımlılıklarını modellemek için RNN kullanmak yerine, bağlam alanında CNN kullanılır. Tıpkı Pixel RNN'de olduğu gibi, köşeden başlıyoruz ve ardından iki ardışık piksel oluşturuyoruz.
Pikselleri oluşturmak için (xi varsayarak), model yalnızca önceden oluşturulmuş pikselleri, yani x1, x2, ..., xi-1 kullanabilir. Bunun olmasını sağlamak için engelleme filtreleri kullanıyoruz:
Oluşturulan pikselin değeri 1'dir ve geri kalanına 0 değeri atanır. Bu yalnızca oluşturulan piksel değerlerini dikkate alacaktır. Pixel RNN'nin eğitim süresiyle karşılaştırıldığında, Pixel CNN'in eğitim hızı daha hızlıdır, ancak piksel üretimi hala süreklidir, bu nedenle süreç daha yavaştır.
Özetle, hem Pixel RNN hem de Pixel CNN, modelin performansını ölçmek için bize iyi bir değerlendirme indeksi sağlayan p (x) olasılığını açıkça hesaplayabilir. Yukarıda üretilen örneğin iyi olduğunu görüyoruz. Öte yandan bu modellerden üretim, sürekli bir süreç olduğu için yavaştır.
Şimdiye kadar, işlenebilecek yoğunluk fonksiyonunu gördük. Bu işlevlerin olasılığını eğitim verileri üzerinde doğrudan optimize edebiliriz. Şimdi, Varyasyonel Otomatik Kodlayıcı (VA) adı verilen daha üretken bir modeli tartışacağız.
Otomatik kodlayıcının çalışma prensibinin kısa açıklaması
Bir otomatik kodlayıcının ne olduğunu hızlıca anlayalım ve ardından değişken otomatik kodlayıcı kavramını ve bunları görüntü oluşturmak için nasıl kullanabileceğimizi tartışacağız.
Otomatik kodlayıcı, düşük boyutlu özellik temsilini öğrenmenin denetimsiz bir yoludur.
Birbirine bağlı iki ağdan oluşurlar - kodlayıcı ve kod çözücü. Kodlayıcının amacı bir giriş (x) elde etmek ve bir özellik haritası (z) oluşturmaktır:
Bu özellik haritasının şekli (z) genellikle x'ten daha küçüktür. Neden böyle olduğunu düşünüyorsunuz?
Z'nin yalnızca girdi verilerindeki değişiklikleri tanımlayabilen anlamlı faktörleri yakalamasını istediğimizden, z'nin şekli genellikle x'ten daha küçüktür. Şimdi soru şu: Bu özellik temsilini (z) nasıl öğreneceğiz? Bu modeli nasıl eğitiyoruz? Bu amaçla, çıkarılan özelliklere dayalı bir kod çözücü ağı ekleyebilir ve modeli L2 kaybını kullanarak eğitebiliriz:
Otomatik kodlayıcı ağı böyle görünür. Ağ, orijinal giriş verilerini (x) yeniden yapılandırmak için özellikleri (z) kullanmak üzere eğitilmiştir. Çıktı () girişten (x) farklıysa, L2 kaybı onu cezalandıracak ve bu da giriş verilerinin yeniden yapılandırılmasına yardımcı olacaktır.
Şimdi, bu otomatik kodlayıcılardan nasıl yeni görüntüler oluşturabiliriz?
Varyasyonel otomatik kodlayıcı
Varyasyonel otomatik kodlayıcının kullanışlı olduğu yer burasıdır. Eğitim verilerinin bazı temeldeki gözlemlenmemiş temsillerden (z) geldiğini varsayarlar.
Basit bir otomatik kodlayıcı ile değişken otomatik kodlayıcı arasındaki temel fark, özellikleri doğrudan giriş verilerinden çıkarmak yerine, eğitim verilerinin olasılık dağılımını modellemeye çalışmamızdır.
Bu amaçla, kodlayıcının n boyutunda bir kodlama vektörü çıktısına izin vermek yerine, n-a ortalama vektör boyutunda iki vektör ve başka bir standart sapma vektörü çıkarıyoruz.
Varyasyonel otomatik kodlayıcının eksiksiz ağ yapısı aşağıdaki gibidir:
Buradaki ortalama değer, giriş kodunun merkez konumunu kontrol eder ve standart sapma, ortalama değer kodunun değişim aralığını kontrol eder. Bu değişken otomatik kodlayıcıyı eğitmek için kullanılan kayıp işlevi, Kullback-Leibler diverjansıdır (veya KL diverjansıdır). İki olasılık dağılımının farklı derecelerini ölçer:
KL farkını en aza indirmemiz gerekiyor. Bu, olasılık dağılımının parametrelerini (ortalama ve standart sapma) optimize eder. Model eğitimi tamamlandığında ondan yeni görüntüler oluşturabiliriz. Nasıl yapılacağını sana anlatayım.
Görüntü oluşturmak için değişken otomatik kodlayıcıları nasıl kullanıyoruz?
Modeli eğittikten sonra, kodlayıcı bölümünü sileceğiz ve aşağıdaki ağı alacağız:
Şimdi, ortalaması 0 ve standart sapması 1 olan basit bir olasılık dağılımı seçiyoruz ve bunu yukarıdaki ağa girdi olarak geçiriyoruz. Ardından bir çıktı oluşturun. Varyasyonel otomatik kodlayıcı, görüntüleri oluşturmamıza bu şekilde yardımcı olur.
Bu yöntem görüntü oluşturmak için çok kullanışlı olsa da bazı dezavantajları da vardır. Varyasyonel otomatik kodlayıcıların ana dezavantajlarından biri, üretilen örneklerin en gelişmiş GAN'lardan alınan örneklerden daha bulanık ve düşük kaliteli olmasıdır. Bu aktif bir araştırma alanıdır - umarım yakında iyileştirmeler görebiliriz!
Şimdiye kadar gördüğümüz tüm üretken modeller, açık bir yoğunluk işlevi tanımladı. Ya yoğunluğu açıkça modellemek istemiyorsak, ancak yalnızca eğitim setinden örtük olarak örneklemek istiyorsak? GAN'lar burada devreye girer. Eğitim setinden numune almaya yardımcı olan örtük bir yoğunluk işlevine sahiptirler.
Öncelikle GAN'ların anlaşılmasını kolaylaştıracak bir mimari göstermeme izin verin:
GAN iki farklı ağdan oluşur:
Her ağı ayrıntılı olarak açıklamama izin verin.
Jeneratör ağı
Jeneratör ağının amacı, girdi olarak rastgele gürültü verilen bir görüntü oluşturmaktır:
Jeneratör ağı, bir sinir ağı veya bir evrişimli sinir ağıdır (CNN). Rastgele bir gürültü geçiyoruz ve ağ bu gürültüyü bir görüntü oluşturmak için kullanıyor.
Ayrımcı ağ
Ayrımcı ağın işi çok basit. Girdinin gerçek mi sahte mi olduğunu anlamalıdır:
Eğitim setindeki tüm görüntüler doğru (veya 1) olarak işaretlenir ve jeneratör ağında oluşturulan tüm görüntüler yanlış (veya 0) olarak işaretlenir. Ayırımcının görevi iki sınıflandırma yapmaktır ve girdiyi doğru veya yanlış (1 veya 0) olarak sınıflandırmalıdır.
Bu modelin avantajı, tamamen türetilebilir olmasıdır. Hem jeneratör hem de ayırıcı sinir ağları (veya evrişimli sinir ağları) olduğundan, tamamen türetilebilir bir ağımız var.
Modeli eğittik, ayırıcı ağın sonundaki kayıp fonksiyonunu hesapladık ve kaybı tekrar ayırıcı ve jeneratör modellerine yaydık.
Bu, iki ağın parametrelerini güncelleyecek ve ardından sonuçları iyileştirecektir. Jeneratör ve ayırt edici, bir minimax oyununda birlikte eğitilir:
burada:
Ayırıcı (D), D (x) 1'e yakın ve D (G (z)) 0'a yakın olacak şekilde amaç fonksiyonunu maksimize etmek ister. Bu sadece, ayırt edicinin eğitim setindeki tüm görüntüleri doğru (1) ve oluşturulan tüm görüntüleri yanlış (0) olarak tanıması gerektiği anlamına gelir.
Jeneratör (G), D (G (z)) 1'e eşit olacak şekilde amaç fonksiyonunu en aza indirmek ister. Bu, jeneratörün ayırıcı ağ tarafından gerçek (1) olarak sınıflandırılan bir görüntü oluşturmaya çalıştığı anlamına gelir.
Generative Adversarial Network (GAN) bu şekilde çalışır. Şimdi GAN'ların adım adım eğitim sürecini tartışalım.
GAN'ın eğitim yöntemi aşağıdaki gibidir:
1. Öncelikle, rastgele bir dağılımdan gürültü örnekleri alıyoruz, bunları Jeneratör (G) ağına besliyoruz ve bazı görüntüler oluşturuyoruz (sahte görüntüler, etiket = 0):
2. Ardından, jeneratör ağından oluşturulan sahte görüntüyü (etiket = 0) ve eğitim setinden gerçek görüntüyü (etiket = 1) elde ediyoruz ve bu çiftleri sınıflandırmak için ayırıcı (D) ağına giriyoruz. :
3. Daha önce gözlemlediğiniz gibi, ayırıcı bir ikili sınıflandırıcıdır. Kaybı hesaplar (ikili çapraz entropi olabilir)
4. Daha sonra bu kaybı diskriminatör ve jeneratör ağına geri yayar ve ağırlıklarını güncelleriz. Geri yayılım için Adam'ı veya başka bir optimize ediciyi seçebiliriz
Bu, GAN eğitim sürecidir.
GAN, aktif bir araştırma alanıdır. Neredeyse her hafta bir sonraki GAN sürümünde düzenli güncellemeler göreceğiz. Araştırmacılar tarafından yapılan çalışmaları buradan görüntüleyebilirsiniz.
https://github.com/zhangqianhui/AdversarialNetsPapers
Bir sonraki makalemde, bir vaka çalışması yapacağım ve yeni görüntüler oluşturmak için Generative Adversarial Networks (GAN) uygulamasını göstereceğim. Bizi çok eğlenceli bekliyor!
Orjinal başlık:
Üretken Modeller ve GAN'lar nelerdir? Bilgisayarla Görmenin Büyüsü
Orijinal bağlantı:
https://www.analyticsvidhya.com/blog/2020/01/generative-models-gans-computer-vision/
Editör: Wang Jing
Redaksiyon: Lin Yilin
Çevirmen Profili
Wu Jindi , Syracuse Üniversitesi Bilgisayar Bilimleri Yüksek Lisansının ilk yılı. Zorluklarla yüzleşmek benim için en rahat durumdur, yapamadığım şeylere katlanmaya meyilliyim. Amacım erken yatıp erken kalkan bir Havalı Kız olmak.
-Bitiş-
Tsinghua-Qingdao Veri Bilimi Enstitüsü'nün resmi WeChat kamu platformunu takip edin " THU Veri Pastası "Ve kız kardeş numarası" Veri Pastası THU "Daha fazla ders avantajı ve kaliteli içerik elde edin.