Generative Adversarial Network (GAN) მთავარი მიზანია შექმნას სურათები, რომლებიც მსგავსია (მაგრამ არა იდენტური) სასწავლო მონაცემთა ნაკრებისთვის.
GAN შედგება ორი ნერვული ქსელისგან, რომლებიც გაწვრთნიან ერთმანეთის წინააღმდეგ:
- გენერატორი იღებს შემთხვევით ვექტორს და უნდა გამოიმუშაოს მისგან გამოსახულება
- Discriminator არის ქსელი, რომელმაც უნდა განასხვავოს ორიგინალური სურათი (სავარჯიშო მონაცემთა ნაკრებიდან) და გენერატორის მიერ გამომუშავებული.

იტვირთება…იტვირთება…გენერატორი
გენერატორის როლი არის გარკვეული ზომის შემთხვევითი ვექტორის აღება (ის მსგავსია ავტოენკოდერებში ლატენტური ვექტორის) და სამიზნე გამოსახულების გენერირება. ის ძალიან ჰგავს ავტოენკოდერის გენერაციულ მხარეს.
ჩვენს მაგალითში, ჩვენ გამოვიყენებთ ხაზოვან ნერვულ ქსელებს და MNIST მონაცემთა ბაზას.
იტვირთება…გენერატორში გამოყენებული რამდენიმე ხრიკი:
- ReLU-ს ნაცვლად, ვიყენებთ LeakyReLU, ანუ ReLU, რომელიც არ არის ზუსტად 0 უარყოფითი $x$-ისთვის, არამედ სხვა წრფივ ფუნქციას ძალიან მცირე დახრილობით.
- ჩვენ ვიყენებთ BatchNorm1D ვარჯიშის სტაბილიზაციის მიზნით
- ბოლო შრეზე აქტივაციის ფუნქციაა Tanh, ამიტომ გამომავალი არის [-1,1] დიაპაზონში.
დისკრიმინატორი
დისკრიმინატორი არის კლასიკური გამოსახულების კლასიფიკაციის ქსელი. ჩვენს პირველ მაგალითში ჩვენ ასევე გამოვიყენებთ ხაზოვან კლასიფიკატორს.
იტვირთება…მონაცემთა ნაკრების ჩატვირთვა
ჩვენ გამოვიყენებთ MNIST მონაცემთა ბაზას.
იტვირთება…იტვირთება…იტვირთება…იტვირთება…ქსელის ტრენინგი
ტრენინგის თითოეულ საფეხურზე გვაქვს ორი ფაზა:
გენერატორი ტრენინგი. ჩვენ ვქმნით რამდენიმე შემთხვევით ვექტორსხმაურს(ვარჯიში ხდება მინი პატჩებში, ამიტომ ვიყენებთ 100 ვექტორს ერთდროულად), ვქმნითtrue ეტიკეტებს(ვექტორს ფორმის (bs, 1) 1.0 მნიშვნელობებით), ვიანგარიშებთ გენერატორის დანაკარგსგაყინული დისკრიმინატორიდან გამომავალს შორის ხმაურით, როგორც შეყვანისა და ნამდვილი ლეიბლით.
- დისკრიმინატორი ტრენინგი. ჩვენ ვიანგარიშებთ დისკრიმინატორის დანაკარგს ორი ნაწილისგან, პირველი ნაწილი არის დანაკარგი დისკრიმინატორიდან გამომავალს შორის ხმაურით შეყვანის სახით და ყალბი ეტიკეტები (ვექტორი ფორმის (bs, 1) 0.0 მნიშვნელობებით), მეორე ნაწილი არის დანაკარგი დისკრიმინატორიდან გამომავალს შორის რეალური გამოსახულების სახით და ნამდვილი ეტიკეტებით (1, 1 მნიშვნელობით ფიგურით). შედეგის დაკარგვა არის (პირველი_ნაწილის_ზარალი + მეორე_ნაწილის_ზარალი) / 2.
იტვირთება…იტვირთება…იტვირთება…იტვირთება…გამოტანა
0%| | 0/100 [00:00<?, ?it/s]
10%|█ | 10/100 [01:32<13:49, 9.21s/it, generator loss:=1.04, discriminator loss:=0.547]
20%|██ | 20/100 [03:05<12:18, 9.23s/it, generator loss:=0.935, discriminator loss:=0.596]
30%|███ | 30/100 [04:38<10:47, 9.24s/it, generator loss:=0.9, discriminator loss:=0.617] 
DCGAN
Deep Convolutional GAN საკმაოდ აშკარა იდეაა კონვოლუციური ფენების გამოყენების შესახებ გენერატორისა და დისკრიმინატორისთვის. მთავარი განსხვავება აქ არის Conv2DTranspose ფენის გამოყენება გენერატორში.

სურათი ეს გაკვეთილი-დან
იტვირთება…იტვირთება…წონის ინიციალიზაცია DCGAN ქაღალდიდან.
იტვირთება…იტვირთება…იტვირთება…იტვირთება…იტვირთება…იტვირთება…იტვირთება…გამოტანა
0%| | 0/50 [00:00<?, ?it/s]
10%|█ | 5/50 [00:53<08:03, 10.74s/it, generator loss:=2.38, discriminator loss:=0.256]
20%|██ | 10/50 [01:47<07:03, 10.58s/it, generator loss:=2.12, discriminator loss:=0.254]
30%|███ | 15/50 [02:40<06:12, 10.66s/it, generator loss:=2.2, discriminator loss:=0.255] 
იტვირთება…გამოტანა

ამოცანა: სცადეთ უფრო რთული ფერადი სურათების გენერირება DCGAN-ით - მაგალითად, აიღეთ ერთი კლასი CIFAR-10 მონაცემთა ბაზიდან.
ტრენინგი ფერწერაზე
GAN-ის ტრენინგის ერთ-ერთი კარგი კანდიდატია ადამიანის მხატვრების მიერ შექმნილი ნახატები.

(ფოტო ხელოვნური ხელოვნება კოლექციიდან)
ცნობები
- GAN arxiv
- DCGAN arxiv
- DCGAN Pytorch გაკვეთილი