Generative Adversarial Networks — GAN nedir ? ( Türkçe )

Muhammed Buyukkinaci
5 min readDec 20, 2017

--

2014 yılında Google araştırmacısı Ian Goodfellow tarafından icat edilen bu network tipi birbirine zıt şekilde çalışan 2 neural network’ten oluşmaktadır. Game theory’deki(Oyun Teorisi) Nash eşitliği temek alınarak icat edilmiştir.

Source: https://www.youtube.com/watch?v=0VPQHbMvGzg

Yukardaki resimde gördüğünüz üzere , soldaki network ( Generator ) ilk başta random sayılardan gerçeğe benzer resimler üretmeye başlıyor . Sağdaki network ( Discriminator ) ise üretilen resimlerden veya gerçek resimleri input olarak alıp , alınan input’un sahte (fake) mi gerçek( real ) mi olduğunu return ediyor. Ian Goodfellow’un bunu anlatmak için kullandığı metafor şu şekildedir :

“ Generator, gerçek tablolara benzer tablolar yapmaya çalışan bir ‘kalpazan’ takımı iken, Discriminator ise gerçek ile sahteyi anlamaya çalışan ‘dedektif' ekibine benzemektedir . (Bu durumda, ‘kalpazan’ Generator, orijinal veriyi asla göremez — ‘Kalpazan’ Generator’ın gözleri bağlıdır ,yalnızca ‘Dedektif’ Discriminator’ın kararlarını duyabilir . ” ( Source : https://medium.com/@devnag/generative-adversarial-networks-gans-in-50-lines-of-code-pytorch-e81b79659e3f)

Source : https://medium.com/@devnag/generative-adversarial-networks-gans-in-50-lines-of-code-pytorch-e81b79659e3f

Her bir epoch’dan sonra yine back-propagation ile geriye doğru gradient’ler hesaplanıyor . Böylece random sayılardan üretilen resimlerin gerçek olanları ile arasındaki fark hesaplanmış oluyor ve Generator her bir epoch’da kendisini update etmiş oluyor. Kolaylık olması açısından şöyle düşünülebilir: ‘Kalpazan’ ressamların yaptığı resimler 64x64 boyutlarında .Yani ,Generator resim yaparken 64x64 = 4096 kutuyu dolduruyor ve her bir kutu için Discriminator network’ünden doğru mu yanlış mı olduğu yönünde geri bildirim(feedback) alıyor ve yanlış yaptığı yerleri gradient’ler vasıtasıyla update ederek(yani gradientler ressama diyor ki ‘sen paletin şu bölgesindeki renklere doğru yönel’) gerçeğe benzer resimler üretiyor. İlerleyen epoch’larda Generator, gerçek olan fotolara daha benzer fotolara üretmeye başlarken, Disriminator ise Generator gerçeğe daha benzer fotolar üretmeye başladığı için gerçek (real) ve sahte ( fake ) fotoları anlamakta zorlanıyor.

Paletin üzerindeki kırmızı çizgi gradient’i temsil ediyor .

Generator’ın amacı Discriminator’ın daha fazla hata yapmasını sağlayacak fotolar üretmek iken Discriminator’un amacı gerçek fotoları sahte olanlardan daha iyi ayırt etmektir(discriminate) .

Bu network yeterince eğitildikten(train edildikten) sonra Generator’un gittikçe gerçeğe benzer fotoğraflar ürettiği görülecektir .

Epoch sayısı arttıkça daha gerçeğe benzer numaralara üretiliyor (Source : https://github.com/togheppi/vanilla_GAN)

Generator’un amacı gerçek fotoların distribution’una uygun olan bir eğri (curve) fit edip , fit edilen dağılımdan(distribution) yeni örnekler(sample) generate etmektir . İlk başlardaki epoch’larda, Generator’ın iyi fotolar üretmemesinin sebebi uygun dağılımı(distribution) fit edememiş olmasıdır .

GAN’s fit a curve (red line) on the ‘ black dot ’ distribution (it is 2 dimensional for simplicity. In reality, its dimension is much much bigger .)

Discriminator’ın output’u ise üretilen sahte resimlerden ve gerçek resimlerden input alıp sahte veya gerçek olduğunu output olarak return etmektir(binary {0,1}) .

Source : https://www.oreilly.com/learning/generative-adversarial-networks-for-beginners

Aşağıdaki resim, en popüler GAN çeşitlerinden biri olan DCGAN’ü temsil etmektedir. DCGAN’de Generator network, Deconvolutional bir network (yani bir resmi alıp onun boyutlarını unpooling işlemleri ile artıran) yapısına sahip iken Discriminator network , convolutional bir network (yani bir resmi alıp onun boyutlarını pooling işlemleri ile azaltan ) yapısına sahiptir .

Source : https://datascience.stackexchange.com/questions/8999/deconvolutional-network-in-semantic-segmentation

Generative Adversarial Network ile yapılabilecek bazı şeyler şunlardır:

  • Mesela Generative Adversarial Network’ünüze bir sürü kedi resmi verebilirsiniz ve yeterince eğittikten(train ettikten) sonra hiçbir yerde bulunmayan kedi resimleri üretebilirsiniz.
  • Fotoğraflarınızı, Generative Adversarial Network’e input olarak verip train ettikten sonra önceden sahip olmadığınız yeni fotoğraflara sahip olabilirsiniz .
  • Mesela Generative Adversarial Network’ünüze bir sürü Pokemon resmi verebilirsiniz ve bu pokemonlarla aynı distribution’a sahip yeni Pokemon’lar generate edebilirsiniz . (daha fazlası için : https://www.youtube.com/watch?v=yz6dNf7X7SA)
  • Eğer ki bir moda tasarımcısı iseniz , kıyafet resimlerini input olarak Generative Adversarial Network’ünüzdeeğitebilir(training) ve yeni kıyafet resimleri üretebilirsiniz .
  • Eğer mimar veya inşaat mühendisi iseniz , önceden inşa edilmiş binaların resimlerini input olarak koyup yeni bina tasarımları elde edebilirsiniz .
  • Takı tasarımcısı iseniz , önceden tasarlanan takıların resimlerini input olarak GAN’e koyup önceden hiç üretilmemiş takı tasarımları oluşturabilirsiniz
  • Eğer bir yayın organında (dergi,gazte vb.) kapak tasarımcısı iseniz , GAN’ler ile önceden hiç yapılmamış kapak tasarımlar oluşturabilirsiniz .
Çoğunluğu caps yazısı içeren kedi resimleri ile train edilmiş bir GAN’in ürettiği bir kedi output’u haliyle caps yazılarını da içeriyor .(Source :https://twitter.com/goodfellow_ian/status/937406530743287808)

PyTorch , TensorFlow , Keras vb. library’lerle Python’da 100 satırdan daha az bir kod ile kendi GAN’inizi oluşturabilirsiniz . GAN’lerin yapısı çok hassas olduğundan önceden üzerinden çalışılmış ve iyi sonuçlar veren GAN mimarileri (architecture) ile çalışmak daha makul durmaktadır. GAN’ler ciddi miktarda computation power (işlem gücü) gerektirdiğinden dolayı modellerinizi AWS, Google Cloud, FloydHub, PaperSpace gibi güçlü GPU’lara sahip cloud servislerinde eğitmek(train etmek) mantıklı bir seçenektir . Edit:(Mayıs 2018: Bu linkteki kod , TensorFlow ile yaptığım bir DCGAN örneğidir)

Generative Adversarial Network’lerin bir sürü varyasyonları vardır ama arkalarındaki mantık aynıdır. Generator bir distribution fit edip o distribution’dan fake sample’lar üretirken , Discriminator ise fake resimlerle gerçek resimleri ayırt etmeye çalışır. Böylece 2 farklı network ( Generator ve Discriminator ) birisi sahte resim üretmekte uzmanlaşırken (Generator) , diğeri de sahte resimlerle gerçek resimleri ayırt etmede uzmanlaşır (Discriminator) .GAN unsupervised bir öğrenme çeşididir,yani output’a(y) ihtiyaç yoktur .

Bazı ünlü GAN’s tipleri şunlardır :

VanillaGAN

DCGAN

InfoGAN

DiscoGAN

WassersteinGAN

Aşağıdaki videoda GAN ile ünlü resimleri üretiliyor :

Facebook’un Yapay Zeka Direktörü Yann LeCun’a göre ise Generative Adversarial Networks ; Machine Learning alanında son 10 yılda yapılmış en ilgi çekici fikirdir :

Source : (https://medium.com/@devnag/generative-adversarial-networks-gans-in-50-lines-of-code-pytorch-e81b79659e3f)

Kaynakça (Sources):

--

--