GAN'lar tarafından binlerce kez istismar edildikten sonra 10 eğitim deneyimini özetledim

Bir yıl önce, Generative Adversarial Networks (GAN) 'ı keşfetmeye karar verdim. Derin öğrenmeyle ilgilendiğimden beri, onlardan her zaman etkilenmişimdir, çünkü derin öğrenme birçok inanılmaz şey yapabilir. Yapay zeka denince aklıma ilk gelen kelime GAN oluyor.

GAN'lar (StyleGAN) tarafından oluşturulan yüzler

Ancak GAN'ı eğitmeye ilk başladığımda bu ilginç algoritmanın ikiliğini keşfettim: eğitim son derece zor. Aslında, denemeden önce, bunu gazetelerden ve diğer insanların girişimlerinden öğrendim, ancak her zaman başlangıçta küçük ama üstesinden gelinmesi kolay bir sorunu abarttıklarını düşündüm.

Görünüşe göre yanılmışım.

Geleneksel MNIST vakasından farklı bir şey üretmeye çalıştığımda, GAN'ı etkileyen büyük bir istikrarsızlık sorunu olduğunu fark ettim ve çözüm bulmak için harcadığım süre arttıkça bu benim için çok sıkıntılı hale geldi.

Şimdi, bilinen çözümleri araştırmak ve yeni çözümler önermeye çalışmakla sayısız gün geçirdikten sonra, nihayet GAN projesinde yakınsamanın istikrarı üzerinde en azından daha fazla kontrole sahip olduğumu söyleyebilirim, siz de yapabilirsiniz. Bu sorunu sadece 10 dakika içinde çözmenizi ve her projede (veya oyun teorisinin sözleriyle, yani Nash dengesinde) mükemmel yakınsama sonuçları elde etmenizi beklemiyorum, ancak size bazı beceriler ve teknikler vermek istiyorum, GAN yolculuğunuzu daha sorunsuz, daha az zaman alan ve en önemlisi daha az kafa karıştırıcı hale getirmek için bu teknikleri kullanabilirsiniz.

GAN'ların mevcut durumu

Düşman ağların oluşturulması önerildiğinden beri, araştırmacılar bu ağın istikrarı konusunda birçok araştırma yaptılar. Şu anda, çok sayıda belge kararlı yakınsama yöntemleri önermektedir Ek olarak, çok sayıda uzun ve karmaşık matematiksel kanıt vardır. Ek olarak, derin öğrenme alanında bazı pratik beceriler ve aydınlanma ortaya çıktı: Matematiksel yorumlama olmadan bu kanıtlanmamış becerilerin genellikle çok etkili olduğunu ve bir kenara atılamayacağını fark ettim.

İstikrarın iyileştirilmesiyle, gerçekçi görüntüler üretmede büyük bir sıçrama oldu. GAN'ların ne kadar geliştiğini gerçekten anlamak için yalnızca Nvidia'dan StyleGAN ve Google'dan BigGAN sonuçlarına bakmanız yeterlidir.

BigGAN tarafından oluşturulan görüntüler

Makalelerden ve uygulayıcılardan birçok tekniği okuduktan ve denedikten sonra, GAN'ları eğitirken dikkate alınması gereken ve edilmemesi gereken konuların bir listesini derledim. Bu karmaşık ve bazen uzun konu hakkında bazı fikirleriniz olacağını umuyorum. Daha iyi anlamak.

1. Kararlılık ve kapasite

İlk bağımsız GAN projemi başlattığımda, eğitim sürecinin başlangıcında, ayrımcının çekişmeli kaybının her zaman sıfıra, jeneratör kaybının ise çok yüksek olduğunu fark ettim. Hemen bir ağın başka bir ağ ile eşleşecek yeterli "kapasiteye" (veya parametre sayısına) sahip olmadığı sonucuna vardım: bu yüzden hemen jeneratör mimarisini değiştirdim ve evrişimli katmana daha fazla filtre ekledim, ancak Şaşırtıcı bir şekilde, hiçbir şey değişmedi.

Ağ kapasitesi değişikliklerinin eğitim kararlılığı üzerindeki etkisini daha fazla araştırdıktan sonra, herhangi bir bariz korelasyon bulamadım. İkisi arasında bir bağlantı olmalı, ancak ilk düşündüğünüz kadar önemli değil.

Bu nedenle, eğitim sürecinizin dengesiz olduğunu fark ederseniz ve bir ağın kapasitesinde diğerine göre önemli bir artış yoksa, ana çözüm olarak filtre eklemeyi veya kaldırmayı önermem.

Elbette, ağınızın kapasitesinden çok emin değilseniz, İnternette benzer senaryolar için bazı mimari örnekleri inceleyebilirsiniz.

2. Erken Durdurma (Erken Durdurma)

GAN'ları eğitirken karşılaşabileceğiniz diğer bir yaygın hata da, jeneratör veya ayırıcı kaybında ani bir artış veya azalma gördüğünüzde eğitimi hemen durdurmaktır. Bunu kendim defalarca yaptım: Kayıptaki artışı gördükten sonra, mükemmel bir şekilde ayarlanmayan bazı hiperparametreler nedeniyle tüm eğitim sürecinin mahvolduğunu hemen düşündüm.

Kayıp fonksiyonunun rastgele yükselme ya da düşme eğiliminde olduğunu ve bu fenomende yanlış bir şey olmadığını daha sonra fark ettim. Bazı nispeten iyi ve pratik sonuçlar elde ettim ve jeneratörün kaybı, tamamen normal olan ayırıcı kaybından çok daha fazla. Bu nedenle, eğitim sırasında ani dengesizlikle karşılaştığınızda, eğitim sırasında daha fazla eğitim yapmanızı ve oluşturulan görüntülerin kalitesine çok dikkat etmenizi öneririm, çünkü görsel anlayış genellikle bazı kayıp sayılarından daha anlamlıdır.

3. Kayıp işlevi seçimi

GAN eğitimi için bir kayıp işlevi seçerken hangisini seçmeliyiz?

Yakın tarihli bir makale, tüm farklı kayıp işlevlerini karşılaştıran ve karşılaştıran bu sorunu çözdü (kağıt adresi: https://arxiv.org/abs/1811.09567): bazı çok ilginç sonuçlar ortaya çıktı. Açıktır ki, hangi kayıp işlevinin seçildiği önemli değildir: hiçbir işlev diğer işlevlerden mutlak üstün değildir ve GAN her farklı durumda öğrenebilir.

Tez sonucu: Ne kadar az kayıp o kadar iyidir (https://arxiv.org/abs/1811.09567)

Bu nedenle, benim önerim, en basit kayıp fonksiyonuyla başlamak ve mümkün olan son adım olarak daha spesifik ve "son teknoloji" bir seçenek bırakmaktır. Literatürden öğrendiğimiz gibi, muhtemelen daha kötüye gideceksiniz. sonuç.

4. Denge oluşturucu ve ayırıcı için ağırlık güncellemesi

Birçok GAN makalesinde, özellikle bazı erken makalelerde, yazarın ayırıcıyı bir kez güncellediğinde jeneratörü iki veya üç kez güncellediği uygulama bölümünde sıklıkla görülebilir.

İlk denememde, dengesiz eğitim durumunda, ayırıcı ağın hemen hemen her seferinde jeneratörü aştığını fark ettim (kayıp işlevi büyük ölçüde azaldı). Bu nedenle, son derece iyi bir makale yazarının bile benzer bir sorunu olacağını bildiğimde ve bunu çözmek için çok basit bir çözüm benimsediğimde, yaptığım şeyden emindim.

Ancak bence, farklı ağ ağırlık güncellemeleri yoluyla eğitimi dengelemek kısa vadeli bir çözüm. Jeneratörün ağırlıklarını güncelleme sıklığını neredeyse hiç değiştirmek, eğitim sürecini stabilize etmek için nihai çözümüm haline geldi: bazen kararsızlığın görünümünü geciktirebilir, ancak yakınsamaya kadar çözemez. Bu stratejinin geçersiz olduğunu fark ettiğimde, iki ağın mevcut kayıp durumuna göre ağırlık güncelleme ilerlemesini değiştirerek onu daha dinamik hale getirmeye bile çalıştım; daha sonra bu şekilde gitmeye çalışan tek kişinin ben olmadığımı fark ettim. İnsanlar, diğerleri gibi ben de istikrarsızlığın üstesinden gelmeyi başaramadım.

Daha sonra, diğer tekniklerin (bu makalenin ilerleyen bölümlerinde açıklanmıştır) antrenman stabilitesini iyileştirme üzerinde çok daha büyük bir etkiye sahip olduğunu anladım.

5. Mod Daralt problemi ve öğrenme oranı

GAN'ları eğitiyorsanız, Mod Daraltmanın ne olduğunu kesinlikle bileceksiniz. Sorun, jeneratörün "çökmesi" ve her bir gizli girdi vektörü için her zaman tek bir örnek oluşturmasıdır. GAN eğitim sürecinde bu oldukça yaygın bir engeldir ve bazı durumlarda oldukça zahmetli hale gelebilir.

Mod Daraltma Örneği

Bu durumla karşılaşırsanız, en doğrudan çözümünüzün GAN'ın öğrenme hızını ayarlamaya çalışmak olduğunu öneririm, çünkü kişisel deneyimime göre, bu özel hiperparametreyi değiştirerek her zaman bu engeli aşabilirim. Deneyimlere göre, Mod Çöküşü problemleriyle uğraşırken, daha küçük bir öğrenme oranı kullanmaya çalışın ve sıfırdan eğitime başlayın.

Öğrenme hızı en önemli hiperparametrelerden biridir ve en önemli hiperparametre olmasa bile, içindeki küçük değişiklikler bile eğitim sürecinde köklü değişikliklere yol açabilir. Genel olarak, daha büyük bir Parti Boyutu kullanırken, daha yüksek bir öğrenme oranı ayarlayabilirsiniz, ancak deneyimlerime göre, muhafazakar olmak neredeyse her zaman güvenli bir seçimdir.

Mod Daraltma sorununu hafifletmenin başka yolları da var; Özellik Eşleştirme ve Minibatch Ayrımcılık gibi, kendi kodumda hiç uygulamadığım, çünkü bundan kaçınmanın her zaman başka bir yolunu bulabilirim. Bu tür zorluklar, ancak gerekirse bu yöntemlere dikkat edin.

6. Gürültü ekleyin

Hepimizin bildiği gibi, ayırıcının eğitim zorluğunu iyileştirmek, sistemin genel kararlılığını iyileştirmeye yardımcı olur. Ayırıcının eğitim karmaşıklığını geliştirmenin yollarından biri, gerçek verilere ve sentetik verilere (jeneratör tarafından oluşturulan görüntüler gibi) gürültü eklemektir; matematik alanında, bu etkili olmalıdır çünkü Rakip ağların veri dağıtımı belirli bir düzeyde istikrar sağlar. Bu yöntemi denemenizi tavsiye ederim çünkü pratikte genellikle daha etkilidir (karşılaşabileceğiniz herhangi bir istikrarsızlık problemini sihirli bir şekilde çözmese bile) ve kurulumu sadece küçük bir miktara mal olur. Bunu söyledikten sonra bu tekniği kullanmaya başladım ama bir süre sonra bence daha etkili olan bazı teknikleri tercih ederek vazgeçtim.

7. Etiket yumuşatma

Aynı amaca ulaşmanın başka bir yolu, anlaşılması ve uygulanması daha kolay olan etiket yumuşatmadır: gerçek görüntünün etiketi 1 olarak ayarlanırsa, onu 0,9 gibi daha düşük bir değere değiştiririz. Bu çözüm, ayrımcının sınıflandırma etiketi konusunda çok emin olmasını veya başka bir deyişle, bir görüntünün doğru mu yanlış mı olduğunu belirlemek için çok sınırlı bir özellik kümesine güvenmemesini engeller. Bu küçük numaraya tamamen katılıyorum, çünkü pratikte çok iyi performans gösteriyor ve koddaki sadece bir veya iki karakteri değiştirmesi gerekiyor.

8. Çok ölçekli gradyan

Çok küçük olmayan görüntülerle uğraşırken (MNIST'tekiler gibi), çok ölçekli degradelere dikkat etmeniz gerekir. Bu özel bir GAN uygulamasıdır.İki ağ arasındaki çoklu atlama bağlantıları nedeniyle, gradyan akışı, ayırıcıdan jeneratöre doğru akar, bu da semantik segmentasyon için kullanılan geleneksel U-Net'e benzer.

MSG-GAN mimarisi

Çok ölçekli gradyan kağıdının yazarı, özellikle büyük sorunlar (Mod Çöküşü, vb.) Olmadan GAN'ı eğiterek doğrudan yüksek çözünürlüklü 1024x1024 görüntüler oluşturabilir ve bundan önce yalnızca Aşamalı Büyüyen GAN (Invidia, ProgressGAN) mümkündü. Bunu projemde uyguladım ve daha istikrarlı bir eğitim süreci ve daha ikna edici sonuçlar elde ettim. Daha fazla ayrıntı için makaleye (https://arxiv.org/abs/1903.06048) göz atın ve deneyin!

9. İkili zaman ölçeği güncelleme kuralları

İkili Zaman Ölçeği Güncelleme Kuralı (TTUR) hakkında konuştuğumda, GAN eğitiminde kullanılan karmaşık ve net bir teknikten bahsettiğimi düşünebilirsiniz, ancak durum hiç de öyle değil. Bu teknik sadece jeneratör ve ayırt edicinin farklı öğrenme oranlarını seçmesi içindir, başka bir şey değil. TTUR'u tanıtan ilk makalede (https://arxiv.org/abs/1706.08500) yazar, algoritmanın Nash dengesine yakınsadığına dair matematiksel bir kanıt sunuyor ve bazı iyi bilinen GAN'ların farklı öğrenme oranları kullanılarak uygulandığını kanıtlıyor. (DCGAN, WGAN-GP) ve en gelişmiş sonuçları elde etti.

Ama "farklı bir öğrenme oranı kullan" dediğimde, pratikte gerçekten ne yapmalıyım? Genel olarak, ayırıcı için daha yüksek bir öğrenme oranı ve jeneratör için daha düşük bir öğrenme oranı seçmenizi öneririm Öğrenme hızı: Bu şekilde, oluşturucu, ayırıcıyı kandırmak için daha küçük bir güncelleme oranı kullanmalıdır ve oyunu kazanmak için hızlı, kesin olmayan ve gerçekçi olmayan bir yol seçmeyecektir. Pratik bir örnek vermek için genellikle ayırıcının öğrenme oranını 0.0004 ve jeneratörün öğrenme oranını 0.0001 olarak seçiyorum ve bu değerlerin bazı projelerimde iyi performans gösterdiğini görüyorum. TTUR'u kullanırken, jeneratörde daha fazla kayıp olduğunu fark edebileceğinizi unutmayın.

10. Spektrum Normalleştirme

SAGAN'ı (veya Self-Attention GAN) tanıtan kağıt gibi bazı makalelerde, spektral normalizasyonun evrişim çekirdeğine uygulanan ve eğitimin kararlılığını büyük ölçüde artırabilen özel bir normalleştirme olduğu gösterilmiştir. Başlangıçta sadece ayırıcıda kullanıldı ve daha sonra, jeneratörde kullanılan evrişimli katman da etkili olursa, bu stratejiye tamamen katılabilirim!

Spektrum normalizasyonunun keşfi ve uygulanmasının GAN yolculuğumda bir yön değişikliğine neden olduğunu neredeyse söyleyebilirim. Açıkçası, bu tekniği kullanmamak için herhangi bir sebep görmüyorum: Size daha iyi bir teknik vereceğini garanti edebilirim. Ve derin öğrenme projelerinin diğer daha ilginç yönlerine odaklanmanıza izin verirken daha istikrarlı eğitim sonuçları! (Ayrıntılar için bu makaleye bakın: https://arxiv.org/abs/1802.05957)

sonuç olarak

GAN'ların eğitim problemini çözmesi için diğer birçok teknik, daha karmaşık teknoloji ve mimariler beklenmektedir: Bu yazıda size kişisel bulgularımı ve karşılaşılan engellerin üstesinden gelmek için hangi yöntemlerin uygulandığını anlatmak istiyorum.

Bu nedenle, burada tanıtılan yöntem ve tekniklerin her birini öğrenirken kendinizi bir ikilemde bulursanız, çalışmak için daha fazla bilgi vardır. Sadece şunu söyleyebilirim ki, araştırma yapmak ve GAN ile ilgili sorunlara olası tüm çözümleri denemek için sayısız saatler harcadıktan sonra, projeme daha çok güveniyorum ve gerçekten de aynısını yapabileceğinizi umuyorum.

Son olarak, bu makaleyi okuduğunuz ve dikkat ettiğiniz için içtenlikle teşekkür ederim.Umarım değerli bir şey elde edebilirsiniz.

https://towardsdatascience.com/10-lessons-i-learned-training-generative-adversarial-networks-gans-for-a-year-c9071159628 aracılığıyla

İlgili tanıtımları ve referansları görmek ister misiniz?

Erişmek için [GAN'lar tarafından binlerce kez istismar edildikten sonra özetlediğim 10 eğitim deneyimi] 'ni tıklayın ~

AI Araştırma Enstitüsünün IJCAI 2019un tüm ağdaki özel canlı yayını; aşağıdakiler bugünün özel canlı yayını ve programıdır, herkesin dikkatini çekmesini bekliyoruz ~

14'ü:

08: 30-09: 20: Davetli Konuşma

11: 00-12: 30: Panel: 50 yıllık IJCAI

14: 00-14: 50: Davetli Konuşma

Canlı yayın adresi: https://ai.yanxishe.com/page/meeting/47

Lei Feng Ağı Lei Feng Ağı Lei Feng Ağı

Gece okuma | huysuz denen bir tür yorgunluk var
önceki
"Cheng Shifa Kaligrafi Metrosu Hatıra Kartı" ilk olarak Şangay'da basıldı
Sonraki
Zhejiang PICC Mülkiyet ve Kaza Sigortası "Lichma" Tayfun Afet Yardım Yerleşimine Tam Yatırım Yapıyor
Xu Lu, tekil kıyafetlere ve blogların dikkatine güvenmek yerine, kazanacak bir valizle spot ışığı çalmak için "araçlara" sahip
50 yaşındaki Xu Qing hala çok güzel, farklı bir şekilde şal elbise giyiyor ve yaşlandığını göstermiyor.
Wuhan Zall, "yeniyi kabul etmek" için ilk kez kapılarını açtı ve 200'den fazla genç oyuncuyu deneme eğitimine davet etti.
"Şangay'daki Yahudiler" hakkında hikayeler yazdı ve memleketi için unutulmaz anıları hatırladı.
2019 Almanya'nın en değerli 100 markası listesi
Guangzhou Metrosu'nun sıcak yaz aylarında ısıtma ve soğutma vagonları uygulaması gerekiyor mu? Netizenlerin% 65'i bunun gereksiz olduğunu söyledi
985 yuan yatırıp her gün 40 yuan mı iade edeceksiniz? Yüklü yatırım dolandırıcılığı tuzakları birbiri ardına ortaya çıkıyor ve Guangxi'de yaklaşık 100 kişi kandırılıyor
Nanguo Shuxiang Festivali, Tianhe Bölgesi temasına ve "Yuetianhe Taste Guangzhou" adlı karakteristik sergiye gidin.
Haftanın medikal sektörü haberleri | Bayer ve Elanco, hayvan sigortası işini birleştirecek; Siemens Medical, cerrahi robotik şirketini satın aldı
Çocukken endişelendiğim şey gerçekten oldu! Luoyang 1 Nolu Ortaokul sınıfındaki tavan vantilatörü düştü ...
"Tanqi" Reizha: Tanrı size mükemmellik vermez, sadece kendinizi geliştirin
To Top