Giới thiệu về Scratch Class 3

Chúng tôi đang gặp sự cố gián đoạn với việc gửi email. Nếu bạn không nhận được email từ chúng tôi, vui lòng thử sau 8 giờ sáng EST

Giới thiệu về Scratch Class 3

Giới thiệu về lớp học này

Những gì chúng tôi đang làm việc trên

Học tập, tạo và chia sẻ các dự án thú vị

Chúng đã được sử dụng trong các ứng dụng thực tế để tạo văn bản/hình ảnh/video, khám phá thuốc và tổng hợp văn bản thành hình ảnh. Để cung cấp cho bạn ý tưởng về tiềm năng của chúng, đây là danh sách ngắn các dự án đáng kinh ngạc được tạo bằng GAN mà bạn chắc chắn nên xem qua

Dịch từ hình ảnh sang hình ảnh bằng GAN. [1]
  • AI tạo khuôn mặt người nổi tiếng giả (giấy)
  • AI Học Ý Thức Thời Trang (Giấy)
  • Dịch từ hình ảnh sang hình ảnh bằng cách sử dụng Mạng thần kinh đối nghịch nhất quán theo chu kỳ
  • AI tạo ra nghệ thuật hiện đại (giấy)
  • AI học sâu này đã tạo ra hàng nghìn bức ảnh về chú mèo đáng sợ
  • MIT đang sử dụng AI để tạo ra sự kinh dị thuần túy
  • Thuật toán mới của Amazon thiết kế quần áo bằng cách phân tích một loạt ảnh
  • AI tạo ra hình ảnh chân thực (Giấy)

Trong bài đăng trên blog này, chúng tôi sẽ bắt đầu bằng cách mô tả các Thuật toán sáng tạo và lý do tại sao GAN ngày càng trở nên phù hợp. Tổng quan và giải thích chi tiết về cách thức và lý do GAN hoạt động sẽ tuân theo. Cuối cùng, chúng ta sẽ lập trình Vanilla GAN, đây là mô hình GAN đầu tiên từng được đề xuất. Vui lòng đọc blog này theo thứ tự bạn thích

Đối với mục đích trình diễn, chúng tôi sẽ sử dụng PyTorch, mặc dù cũng có thể tìm thấy triển khai TensorFlow trong github GitHub Repo của tôi. com/diegoalejogm/gans. Bạn có thể tham khảo thêm một số mẫu GAN cao cấp ( đ. g. DCGAN) trong cùng một kho lưu trữ GitHub nếu bạn quan tâm, điều này cũng sẽ được giải thích trong loạt bài đăng mà tôi đang bắt đầu, vì vậy hãy nhớ theo dõi

Đầu ra của GAN theo thời gian, học cách tạo chữ số viết tay. Chúng tôi sẽ viết mã ví dụ này. 1. Giới thiệu

Generative Adversarial Networks (hay gọi tắt là GAN) là một trong những thuật toán Machine Learning phổ biến nhất được phát triển trong thời gian gần đây

Đối với những người mới làm quen với lĩnh vực Trí tuệ nhân tạo (AI), chúng ta có thể mô tả ngắn gọn về Machine Learning (ML) là lĩnh vực con của AI sử dụng dữ liệu để “dạy” một máy/chương trình cách thực hiện một tác vụ mới. Một ví dụ đơn giản về điều này là sử dụng hình ảnh khuôn mặt của một người làm đầu vào cho thuật toán, để chương trình học cách nhận ra cùng một người đó trong bất kỳ hình ảnh cụ thể nào (có thể chương trình cũng sẽ cần các mẫu âm bản). Với mục đích này, chúng ta có thể mô tả Học máy là tối ưu hóa toán học ứng dụng, trong đó một thuật toán có thể biểu diễn dữ liệu (e. g. một bức tranh) trong không gian nhiều chiều (nhớ Mặt phẳng Descartes không? Đó là trường 2 chiều), sau đó học cách phân biệt các mẫu vectơ đa chiều mới có thuộc phân phối đích hay không. Để có cái nhìn trực quan về cách máy móc học hỏi, tôi giới thiệu video giải thích tổng quát này và video khác về sự phát triển của máy móc mà tôi rất vui khi xem. Mặc dù đây là một lĩnh vực rất hấp dẫn để khám phá và thảo luận, tôi sẽ để phần giải thích sâu hơn cho một bài đăng sau, chúng tôi ở đây vì GAN

Mức độ quan tâm của Google Xu hướng theo thời gian đối với thuật ngữ “Mạng đối thủ sáng tạo”GAN có gì kỳ diệu?

Nói tóm lại, chúng thuộc tập hợp các thuật toán có tên là mô hình tổng quát. Các thuật toán này thuộc lĩnh vực học tập không giám sát, một tập hợp con của ML nhằm nghiên cứu các thuật toán tìm hiểu cấu trúc cơ bản của dữ liệu đã cho mà không chỉ định giá trị đích. Các mô hình tổng quát tìm hiểu hàm phân phối nội tại của dữ liệu đầu vào p(x) (hoặc p(x,y) nếu có nhiều đích/lớp trong tập dữ liệu), cho phép chúng tạo cả đầu vào tổng hợp x' và đầu ra/đích y'

Ngược lại, các thuật toán học có giám sát học cách ánh xạ một hàm y’=f(x), với dữ liệu được gán nhãn y. Một ví dụ về điều này sẽ là phân loại, trong đó người ta có thể sử dụng dữ liệu mua hàng của khách hàng (x) và độ tuổi tương ứng của khách hàng (y) để phân loại khách hàng mới. Hầu hết các thuật toán học có giám sát đều có tính phân biệt vốn có, nghĩa là chúng học cách lập mô hình hàm phân bố xác suất có điều kiện (p. d. f) p(y. x) thay vào đó, là xác suất của mục tiêu (tuổi=35) được cung cấp đầu vào (mua hàng=sữa). Mặc dù thực tế là người ta có thể đưa ra dự đoán với hàm phân phối xác suất này, nhưng người ta không được phép lấy mẫu các trường hợp mới (mô phỏng khách hàng theo độ tuổi) trực tiếp từ phân phối đầu vào.
Lưu ý bên lề. Có thể sử dụng các thuật toán phân biệt không xác suất, chúng được gọi là các hàm phân biệt.

GAN mà họ đã chứng minh là thực sự thành công trong việc lập mô hình và tạo dữ liệu nhiều chiều, đó là lý do tại sao chúng trở nên phổ biến. Tuy nhiên, chúng không phải là loại Mô hình Sáng tạo duy nhất, các loại khác bao gồm Bộ mã hóa tự động biến đổi (VAE) và pixelCNN/pixelRNN và NVP thực. Mỗi mô hình có sự đánh đổi riêng

Một số ưu và nhược điểm của GAN phù hợp nhất đối với là

  • Họ hiện đang tạo ra những hình ảnh sắc nét nhất
  • Chúng rất dễ đào tạo (vì không cần suy luận thống kê) và chỉ cần truyền ngược để có được độ dốc
  • GAN khó tối ưu hóa do động lực đào tạo không ổn định
  • Không thể thực hiện suy luận thống kê với chúng (ngoại trừ ở đây).
    GAN thuộc loại mô hình mật độ ẩn trực tiếp; . d. f.
Cho nên. tại sao mô hình thế hệ?

Các mô hình tổng quát là một trong những cách tiếp cận hứa hẹn nhất để hiểu lượng dữ liệu khổng lồ bao quanh chúng ta ngày nay. Theo OpenAI, các thuật toán có khả năng tạo dữ liệu có thể tốt hơn đáng kể trong việc hiểu bản chất thế giới. Ý tưởng rằng các mô hình thế hệ có tiềm năng tốt hơn trong việc giải quyết các vấn đề của chúng ta có thể được minh họa bằng cách sử dụng câu trích dẫn của một trong những nhà vật lý yêu thích của tôi

“Những gì tôi không thể tạo ra, tôi không hiểu. ” —Richard P. Feynman

(Tôi thực sự khuyên bạn nên đọc cuốn sách của anh ấy “Surely You're Joking Mr. Feynman”)

Các mô hình tổng quát có thể được coi là chứa nhiều thông tin hơn so với đối tác/bổ sung phân biệt của chúng, vì chúng cũng được sử dụng cho các nhiệm vụ phân biệt như phân loại hoặc hồi quy (trong đó mục tiêu là một giá trị liên tục, chẳng hạn như ℝ). Người ta có thể tính p có điều kiện. d. fp(y. x) hầu hết thời gian cần thiết cho các nhiệm vụ như vậy, bằng cách sử dụng suy luận thống kê trên liên kết p. d. f. p(x,y) nếu nó có sẵn trong mô hình tổng quát

Mặc dù các mô hình tổng quát hoạt động để phân loại và hồi quy, các phương pháp phân biệt đầy đủ thường thành công hơn trong các nhiệm vụ phân biệt so với các phương pháp tổng quát trong một số tình huống

Trường hợp sử dụng

Trong số một số trường hợp sử dụng, các mô hình tổng quát có thể được áp dụng cho

  • Tạo các mẫu tác phẩm nghệ thuật thực tế (video/hình ảnh/âm thanh)
  • Mô phỏng và lập kế hoạch sử dụng dữ liệu chuỗi thời gian
  • suy luận thống kê
  • Các kỹ sư và nhà khoa học máy học khi đọc bài viết này có thể đã nhận ra rằng các mô hình tổng quát cũng có thể được sử dụng để tạo các đầu vào có thể mở rộng các tập dữ liệu nhỏ

Tôi cũng tìm thấy một danh sách rất dài và thú vị về các ứng dụng GAN tuyệt vời tại đây

2. Hiểu về GAN. Tổng quan

Khái niệm toàn cục về GAN

Generative Adversarial Networks bao gồm hai mô hình

  • Mô hình đầu tiên được gọi là Trình tạo và nó nhằm mục đích tạo dữ liệu mới tương tự như dự kiến. Máy phát điện có thể được đồng hóa với một thợ rèn nghệ thuật của con người, tạo ra các tác phẩm nghệ thuật giả
  • Mô hình thứ hai được đặt tên là Discriminator. Mục tiêu của mô hình này là nhận biết xem dữ liệu đầu vào là 'thật' - thuộc về tập dữ liệu gốc - hay nếu dữ liệu đó là 'giả mạo' - do một kẻ giả mạo tạo ra. Trong trường hợp này, Người phân biệt đối xử tương tự như một chuyên gia nghệ thuật, cố gắng phát hiện các tác phẩm nghệ thuật là trung thực hay gian lận

Làm thế nào để các mô hình này tương tác? . Người tạo (người giả mạo) cần học cách tạo dữ liệu theo cách mà Người phân biệt đối xử không thể phân biệt nó là giả nữa. Sự cạnh tranh giữa hai đội này là điều giúp nâng cao kiến ​​thức của họ, cho đến khi Người tạo thành công trong việc tạo ra dữ liệu thực tế

Mô hình toán học một GAN

Mặc dù khung GAN có thể được áp dụng cho bất kỳ hai mô hình nào thực hiện các tác vụ được mô tả ở trên, nhưng sẽ dễ hiểu hơn khi sử dụng các công cụ xấp xỉ phổ quát như mạng thần kinh nhân tạo

Mạng thần kinh G(z, θ₁) được sử dụng để mô hình hóa Trình tạo đã đề cập ở trên. Vai trò của nó là ánh xạ các biến nhiễu đầu vào z tới không gian dữ liệu mong muốn x (chẳng hạn như hình ảnh). Ngược lại, mạng thần kinh thứ hai D(x, θ₂) lập mô hình bộ phân biệt đối xử và đưa ra xác suất dữ liệu đến từ tập dữ liệu thực, trong phạm vi (0,1). Trong cả hai trường hợp, θᵢ đại diện cho các trọng số hoặc tham số xác định từng mạng thần kinh

Kết quả là, Discriminator được đào tạo để phân loại chính xác dữ liệu đầu vào là thật hay giả. Điều này có nghĩa là các trọng số của nó được cập nhật để tối đa hóa khả năng bất kỳ đầu vào dữ liệu thực x nào được phân loại là thuộc tập dữ liệu thực, đồng thời giảm thiểu xác suất bất kỳ hình ảnh giả nào được phân loại là thuộc tập dữ liệu thực. Nói một cách kỹ thuật hơn, hàm mất mát/lỗi được sử dụng sẽ cực đại hóa hàm D(x) và nó cũng cực tiểu hóa D(G(z))

Hơn nữa, Trình tạo được đào tạo để đánh lừa Người phân biệt đối xử bằng cách tạo dữ liệu càng thực tế càng tốt, điều đó có nghĩa là trọng số của Trình tạo được tối ưu hóa để tối đa hóa khả năng bất kỳ hình ảnh giả nào được phân loại là thuộc tập dữ liệu thực. Về mặt hình thức, điều này có nghĩa là hàm mất mát/lỗi được sử dụng cho mạng này tối đa hóa D(G(z))

Trong thực tế, logarit của xác suất (e. g. nhật ký D(…)) được sử dụng trong các hàm mất mát thay vì xác suất thô, vì việc sử dụng mất nhật ký sẽ phạt nặng các trình phân loại tự tin về việc phân loại không chính xác

Trực quan hóa nhật ký mất mát. Giá trị xác suất thấp bị phạt cao

Sau một số bước đào tạo, nếu Trình tạo và Bộ phân biệt có đủ năng lực (nếu mạng có thể xấp xỉ các hàm mục tiêu), chúng sẽ đạt đến điểm mà cả hai không thể cải thiện được nữa. Tại thời điểm này, trình tạo tạo dữ liệu tổng hợp thực tế và bộ phân biệt đối xử không thể phân biệt giữa hai loại đầu vào

Vì trong quá trình đào tạo, cả Bộ phân biệt và Trình tạo đều cố gắng tối ưu hóa các hàm mất mát đối lập, nên chúng có thể được coi là hai tác nhân đang chơi một trò chơi cực tiểu với hàm giá trị V(G,D). Trong trò chơi minimax này, trình tạo đang cố gắng tối đa hóa xác suất để đầu ra của nó được nhận dạng là thực, trong khi trình phân biệt đang cố gắng giảm thiểu cùng giá trị này

Hàm giá trị của trò chơi Minimax do Trình tạo và Người phân biệt đối xử Đào tạo GAN

Vì cả bộ tạo và bộ phân biệt đều được mô hình hóa bằng mạng thần kinh, thuật toán tối ưu hóa dựa trên độ dốc có thể được sử dụng để huấn luyện GAN. Trong ví dụ mã hóa của chúng tôi, chúng tôi sẽ sử dụng giảm dần độ dốc ngẫu nhiên, vì nó đã được chứng minh là thành công trong nhiều lĩnh vực

Thuật toán về cách đào tạo GAN bằng cách sử dụng giảm dần độ dốc ngẫu nhiên [2]

Các bước cơ bản để đào tạo GAN có thể được mô tả như sau

  1. Lấy mẫu một bộ tiếng ồn và một bộ dữ liệu thực, mỗi bộ có kích thước m
  2. Đào tạo Người phân biệt đối xử về dữ liệu này
  3. Lấy mẫu một tập hợp con tiếng ồn khác với kích thước m
  4. Huấn luyện Trình tạo trên dữ liệu này
  5. Lặp lại từ Bước 1
3. Mã hóa GAN

Cuối cùng, khoảnh khắc mà nhiều người trong chúng ta đang chờ đợi đã đến. 🙌

Chúng tôi sẽ triển khai GAN trong hướng dẫn này, bắt đầu bằng cách tải xuống các thư viện cần thiết

from utils import Logger
4

Trong trường hợp bạn chưa tải xuống PyTorch, hãy xem. Hãy nhớ rằng bạn cũng có thể tìm thấy một ví dụ về TensorFlow tại đây

Chúng tôi sẽ tiếp tục bằng cách tạo tệp/sổ ghi chép và nhập các phụ thuộc sau

import torch
from torch import nn, optim
from torch.autograd.variable import Variable
from torchvision import transforms, datasets

Để ghi lại tiến trình của chúng tôi, chúng tôi sẽ nhập một tệp bổ sung mà tôi đã tạo, tệp này sẽ cho phép chúng tôi hình dung quá trình đào tạo trong bảng điều khiển/Jupyter, đồng thời lưu trữ nó trong TensorBoard cho những người đã biết cách sử dụng nó

from utils import Logger

Bạn cần tải xuống tệp và đặt nó vào cùng thư mục chứa tệp GAN của bạn. Bạn không cần phải hiểu mã trong tệp này vì nó chỉ được sử dụng cho mục đích trực quan hóa

Tệp có thể được tìm thấy trong bất kỳ liên kết nào sau đây

  • Liên kết repo GitHub
  • Liên kết nội dung thô GitHub

Xem trước tệp chúng tôi sẽ sử dụng để ghi nhật ký

tập dữ liệu

Mẫu dữ liệu MNIST

Bộ dữ liệu chúng tôi sẽ sử dụng ở đây là bộ dữ liệu MNIST của LeCunn, bao gồm khoảng 60. 000 ảnh đen trắng gồm các chữ số viết tay, mỗi ảnh có kích thước 28x28 pixel². Tập dữ liệu này sẽ được xử lý trước theo một số 'hack' hữu ích đã được chứng minh là hữu ích cho việc đào tạo GAN

**Cụ thể, các giá trị đầu vào nằm trong khoảng [0, 255] sẽ được chuẩn hóa trong khoảng từ -1 đến 1. Điều này có nghĩa là giá trị 0 sẽ được ánh xạ tới -1, giá trị 255 thành 1 và tương tự, tất cả các giá trị ở giữa sẽ nhận giá trị trong phạm vi [-1, 1]

def mnist_data():
compose = transforms.Compose(
[transforms.ToTensor(),
transforms.Normalize((.5, .5, .5), (.5, .5, .5))
])
out_dir = './dataset'
return datasets.MNIST(root=out_dir, train=True, transform=compose, download=True)
# Load data
data = mnist_data()
# Create loader with data, so that we can iterate over it
data_loader = torch.utils.data.DataLoader(data, batch_size=100, shuffle=True)
# Num batches
num_batches = len(data_loader)

Mạng

Tiếp theo, chúng tôi sẽ xác định các mạng lưới thần kinh, bắt đầu với Bộ phân biệt đối xử. Mạng này sẽ lấy một hình ảnh được làm phẳng làm đầu vào và trả về xác suất nó thuộc tập dữ liệu thực hoặc tập dữ liệu tổng hợp. Kích thước đầu vào cho mỗi hình ảnh sẽ là

from utils import Logger
5. Về cấu trúc của mạng này, nó sẽ có ba lớp ẩn, mỗi lớp theo sau là một lớp phi tuyến tính và một lớp để ngăn chặn quá mức. Hàm Sigmoid/Logistic được áp dụng cho đầu ra có giá trị thực để thu được giá trị trong phạm vi mở (0, 1)

class DiscriminatorNet(torch.nn.Module):
"""
A three hidden-layer discriminative neural network
"""
def __init__(self):
super(DiscriminatorNet, self).__init__()
n_features = 784
n_out = 1

self.hidden0 = nn.Sequential(
nn.Linear(n_features, 1024),
nn.LeakyReLU(0.2),
nn.Dropout(0.3)
)
self.hidden1 = nn.Sequential(
nn.Linear(1024, 512),
nn.LeakyReLU(0.2),
nn.Dropout(0.3)
)
self.hidden2 = nn.Sequential(
nn.Linear(512, 256),
nn.LeakyReLU(0.2),
nn.Dropout(0.3)
)
self.out = nn.Sequential(
torch.nn.Linear(256, n_out),
torch.nn.Sigmoid()
)

def forward(self, x):
x = self.hidden0(x)
x = self.hidden1(x)
x = self.hidden2(x)
x = self.out(x)
return x
discriminator = DiscriminatorNet()

Chúng tôi cũng cần một số chức năng bổ sung cho phép chúng tôi chuyển đổi hình ảnh phẳng thành biểu diễn 2 chiều của nó và một chức năng khác ngược lại

def images_to_vectors(images):
return images.view(images.size(0), 784)

def vectors_to_images(vectors):
return vectors.view(vectors.size(0), 1, 28, 28)

Mặt khác, Mạng Sáng tạo lấy một vectơ biến tiềm ẩn làm đầu vào và trả về một vectơ có giá trị 784, tương ứng với hình ảnh 28x28 được làm phẳng. Hãy nhớ rằng mục đích của mạng này là để học cách tạo ra những hình ảnh không thể phân biệt được của các chữ số viết tay, đó là lý do tại sao đầu ra của nó lại là một hình ảnh mới

Mạng này sẽ có ba lớp ẩn, mỗi lớp theo sau là một lớp phi tuyến. Lớp đầu ra sẽ có chức năng kích hoạt TanH, chức năng này ánh xạ các giá trị kết quả vào phạm vi (-1, 1), cùng phạm vi mà hình ảnh MNIST được xử lý trước của chúng tôi được giới hạn

class GeneratorNet(torch.nn.Module):
"""
A three hidden-layer generative neural network
"""
def __init__(self):
super(GeneratorNet, self).__init__()
n_features = 100
n_out = 784

self.hidden0 = nn.Sequential(
nn.Linear(n_features, 256),
nn.LeakyReLU(0.2)
)
self.hidden1 = nn.Sequential(
nn.Linear(256, 512),
nn.LeakyReLU(0.2)
)
self.hidden2 = nn.Sequential(
nn.Linear(512, 1024),
nn.LeakyReLU(0.2)
)

self.out = nn.Sequential(
nn.Linear(1024, n_out),
nn.Tanh()
)

def forward(self, x):
x = self.hidden0(x)
x = self.hidden1(x)
x = self.hidden2(x)
x = self.out(x)
return x
generator = GeneratorNet()

Chúng tôi cũng cần một số chức năng bổ sung cho phép chúng tôi tạo tiếng ồn ngẫu nhiên. Tiếng ồn ngẫu nhiên sẽ được lấy mẫu từ phân phối bình thường với giá trị trung bình 0 và phương sai 1 như được đề xuất trong liên kết này

________số 8

Tối ưu hóa

Ở đây, chúng tôi sẽ sử dụng

from utils import Logger
6 làm thuật toán tối ưu hóa cho cả hai mạng thần kinh, với tốc độ học tập là 0. 0002. Tỷ lệ học tập được đề xuất thu được sau khi thử nghiệm với một số giá trị, mặc dù đó không nhất thiết phải là giá trị tối ưu cho tác vụ này

import torch
from torch import nn, optim
from torch.autograd.variable import Variable
from torchvision import transforms, datasets
0

Hàm mất mát mà chúng ta sẽ sử dụng cho tác vụ này được đặt tên là Mất mát Entopy chéo nhị phân (Mất mát BCE) và nó sẽ được sử dụng cho tình huống này vì nó giống với mất mát nhật ký cho cả Trình tạo và Bộ phân biệt đối xử được xác định trước đó trong bài đăng (xem . Cụ thể, chúng tôi sẽ lấy mức trung bình của tổn thất được tính cho mỗi minibatch

import torch
from torch import nn, optim
from torch.autograd.variable import Variable
from torchvision import transforms, datasets
1

Nhật ký Entropy chéo nhị phân. Giá trị trung bình được tính bằng tổng tính toán (L) / N

Trong công thức này, các giá trị y được đặt tên là mục tiêu, v là đầu vào và w là trọng số. Vì chúng tôi hoàn toàn không cần trọng lượng, nên nó sẽ được đặt thành wᵢ=1 cho tất cả i

Mất phân biệt đối xử

Tổn thất của người phân biệt đối xử

Nếu chúng ta thay vᵢ = D(xᵢ) và yᵢ=1 ∀ i (với mọi i) trong định nghĩa BCE-Loss, chúng ta sẽ thu được suy hao liên quan đến ảnh thực. Ngược lại, nếu chúng ta đặt vᵢ = D(G(zᵢ)) và yᵢ=0 ∀ i, chúng ta sẽ thu được tổn thất liên quan đến ảnh giả. Trong mô hình toán học của GAN mà tôi đã mô tả trước đó, độ dốc của điều này phải được tăng dần, nhưng thay vào đó, PyTorch và hầu hết các khung Machine Learning khác thường giảm thiểu các chức năng. Vì cực đại hóa một hàm tương đương với cực tiểu hóa hàm âm và số hạng BCE-Loss có dấu trừ, nên chúng ta không cần lo lắng về dấu

Ngoài ra, chúng ta có thể quan sát thấy rằng các mục tiêu hình ảnh thực luôn là các mục tiêu hình ảnh giả, trong khi các mục tiêu hình ảnh giả bằng 0, vì vậy sẽ rất hữu ích nếu xác định các chức năng sau

import torch
from torch import nn, optim
from torch.autograd.variable import Variable
from torchvision import transforms, datasets
2

Bằng cách tổng hợp hai tổn thất của bộ phân biệt đối xử này, chúng tôi có được tổng tổn thất lô nhỏ cho Bộ phân biệt. Trong thực tế, chúng tôi sẽ tính toán các gradient riêng biệt, sau đó cập nhật chúng cùng nhau

from utils import Logger
0

Tổn thất máy phát điện

Tổn thất máy phát điện

Thay vì giảm thiểu nhật ký(1- D(G(z))), đào tạo Trình tạo để tối đa hóa nhật ký D(G(z)) sẽ cung cấp độ dốc mạnh hơn nhiều ngay từ đầu trong quá trình đào tạo. Cả hai tổn thất có thể được hoán đổi cho nhau vì chúng dẫn đến cùng một động lực cho Bộ tạo và Bộ phân biệt

Cực đại hóa log D(G(z)) tương đương với cực tiểu hóa log D và vì định nghĩa BCE-Loss có dấu trừ nên ta không cần quan tâm đến dấu. Tương tự với Discriminator, nếu ta đặt vᵢ = D(G(zᵢ)) và yᵢ=1 ∀ i, ta sẽ thu được tổn thất mong muốn được giảm thiểu

from utils import Logger
1

thử nghiệm

Điều cuối cùng trước khi chúng tôi chạy thuật toán của mình, chúng tôi muốn hình dung quá trình đào tạo phát triển như thế nào trong khi GAN của chúng tôi học. Để làm như vậy, chúng tôi sẽ tạo một loạt nhiễu tĩnh, cứ sau vài bước, chúng tôi sẽ trực quan hóa lô hình ảnh mà trình tạo tạo ra khi sử dụng nhiễu này làm đầu vào

from utils import Logger
2

Đào tạo

Bây giờ chúng tôi đã xác định tập dữ liệu, mạng, tối ưu hóa và thuật toán học tập, chúng tôi có thể đào tạo GAN của mình. Phần này thực sự đơn giản, vì điều duy nhất chúng ta phải làm là viết mã trong python, mã giả được hiển thị trước đó khi traning GAN (xem )

Chúng tôi sẽ sử dụng tất cả các phần mà chúng tôi đã mã hóa, cộng với tệp nhật ký mà tôi đã yêu cầu bạn tải xuống trước đó cho quy trình này

from utils import Logger
3

Và đó là nó, chúng tôi đã thực hiện nó. 🎊

Kết quả

Ban đầu, những hình ảnh được tạo ra là tiếng ồn thuần túy

Nhưng sau đó họ cải thiện,

Cho đến khi bạn có được hình ảnh tổng hợp khá tốt,

Cũng có thể hình dung quá trình học tập. Như bạn có thể thấy trong các hình tiếp theo, lỗi phân biệt đối xử ban đầu rất cao, vì nó không biết cách phân loại chính xác hình ảnh là thật hay giả. Khi bộ phân biệt trở nên tốt hơn và sai số của nó giảm xuống còn khoảng. 5 ở bước 5k, lỗi bộ tạo tăng lên, chứng tỏ bộ phân biệt đối xử tốt hơn bộ tạo và nó có thể phân loại chính xác các mẫu giả. Khi thời gian trôi qua và quá trình đào tạo tiếp tục, lỗi trình tạo sẽ giảm xuống, ngụ ý rằng hình ảnh mà nó tạo ra ngày càng tốt hơn. Trong khi trình tạo được cải thiện, lỗi của bộ phân biệt tăng lên, bởi vì các hình ảnh tổng hợp đang trở nên thực tế hơn mỗi lần

Lỗi của máy phát điện theo thời gian

Lỗi của người phân biệt đối xử theo thời gian

Bạn cũng có thể xem sổ ghi chép có tên Vanilla Gan PyTorch trong liên kết này và chạy trực tuyến. Bạn cũng có thể tải xuống dữ liệu đầu ra

  • thư mục run/ chứa dữ liệu tensor board
  • data/thư mục chứa các hình ảnh được tạo theo thời gian và các mô hình mạng thần kinh đã được đào tạo
kết luận

Trong bài đăng trên blog này, tôi đã giới thiệu Mạng đối thủ sáng tạo. Chúng tôi bắt đầu bằng cách tìm hiểu xem chúng là loại thuật toán nào và tại sao chúng lại phù hợp đến vậy ngày nay. Tiếp theo, chúng tôi đã khám phá các bộ phận phù hợp với GAN và cách chúng hoạt động cùng nhau. Cuối cùng, chúng tôi đã hoàn thành việc liên kết lý thuyết với thực tiễn bằng cách lập trình với việc triển khai GAN hoạt động đầy đủ đã học để tạo các ví dụ tổng hợp của bộ dữ liệu MNIST

Bây giờ bạn đã học được tất cả những điều này, các bước tiếp theo sẽ là tiếp tục đọc và tìm hiểu về các phương pháp GAN nâng cao hơn mà tôi đã liệt kê trong Phần đọc thêm. Như đã đề cập trước đó, tôi sẽ tiếp tục viết các loại hướng dẫn này để giúp những người đam mê học Machine Learning theo cách thực tế và học các môn toán bắt buộc dễ dàng hơn.

Đọc/Xem thêm

  • DCGAN, DiscoGAN và CycleGAN (các biến thể của GAN với hiệu suất tốt hơn đối với các tác vụ cụ thể)
  • Các trang trình bày của Google DeepMind về Tìm hiểu các mạng đối thủ tạo ra bởi Balaji Lakshminarayanan
  • Bài viết về mạng đối thủ sáng tạo chuyển đổi sâu của Radford, Metz và Chintala
  • University at Buffalo's Slides on Generative and Discriminative Models của Sargur N. Srihari
  • Andrew Ng và Michael I. Bài báo của Jordan về Sáng tạo so với. phân loại phân biệt đối xử
  • CS229 của Stanford. Ghi chú bài giảng Machine Learning về các thuật toán Generative Learning của Andrew Ng
  • CS231n của Stanford. Bài giảng Mạng thần kinh chuyển đổi cho nhận dạng hình ảnh 13 Ghi chú về các mô hình sáng tạo của Fei-Fei Li, Justin Johnson và Serena Yeung
  • Kho lưu trữ GitHub của tôi trên Generative Adversarial Networks trong TensorFlow và Pytorch
  • Chủ đề Reddit của Ian GoodFellow trên Mạng đối thủ sáng tạo cho văn bản
  • Toán học sâu hơn về GAN

Cảm ơn vì đã đọc đến cuối bài đăng này, tôi thực sự rất vui khi tìm được những người có động lực như tôi về khoa học (cụ thể là CS và AI)

Hãy nhớ thích/chia sẻ bài đăng này 😊 , và bình luận về trải nghiệm của bạn khi đọc nó

Vui lòng để lại bất kỳ câu hỏi nào và đăng ký nhận các giải thích về ML tiên tiến nhất trong tương lai

GitHub. diegoalejogm
LinkedIn. diegoalejogm

Người giới thiệu

[1] Jun-Yan Zhu, Taesung Park, Phillip Isola, Alexei A. Efros, Bản dịch từ hình ảnh sang hình ảnh chưa ghép nối bằng cách sử dụng Mạng đối thủ nhất quán theo chu kỳ, 2018, https. //arxiv. tổ chức/abs/1703. 10593

[2] Ian J. Goodfellow, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville, Yoshua Bengio, Generative Adversarial Networks, 2014, https. //arxiv. org/abs/1406. 2661

Scratch cho lớp 3 là gì?

Trả lời. Scratch là chương trình được sử dụng để tạo trò chơi, câu chuyện hoạt hình và dự án một cách dễ dàng . Đây là một chương trình đơn giản, nơi học sinh có thể kéo các khối hướng dẫn để tạo hoạt ảnh.

Giới thiệu về Scratch là gì?

Scratch là ngôn ngữ lập trình trực quan cho phép học sinh tạo các câu chuyện, trò chơi và hoạt hình tương tác của riêng mình . Khi học sinh thiết kế các dự án Scratch, các em học cách suy nghĩ sáng tạo, suy luận có hệ thống và làm việc hợp tác.

Scratch cho trẻ em là gì?

Scratch là ngôn ngữ lập trình và cộng đồng trực tuyến nơi trẻ em có thể lập trình và chia sẻ phương tiện tương tác như truyện, trò chơi và hoạt hình với mọi người từ khắp nơi trên thế giới. As children create with Scratch, they learn to think creatively, work collaboratively, and reason systematically.

Scratch với ví dụ là gì?

Scratch là ngôn ngữ lập trình miễn phí do MIT phát triển giúp dễ dàng tạo các câu chuyện tương tác, hoạt ảnh, trò chơi, âm nhạc và nghệ thuật cũng như chia sẻ sáng tạo của bạn trên web. Scratch can run from within a modern web browser or downloaded as an app. Scratch does not run on Internet Explorer or any smartphone.