Skip to content

Commit

Permalink
Done GAN (blog + code)
Browse files Browse the repository at this point in the history
  • Loading branch information
ngnquanq committed Mar 29, 2024
1 parent ed3a0d9 commit f0552c4
Show file tree
Hide file tree
Showing 2 changed files with 16 additions and 3 deletions.
19 changes: 16 additions & 3 deletions _posts/2024-01-15-blog-post-6.md
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,11 @@ Mục trên có đề cập về vấn đề cài đặt sao cho phù hợp. Có

Vấn đề nằm ở chỗ phần feedback của Discriminator trở nên kém ý nghĩa hơn nếu quá trình train cứ tiếp tục diễn ra (bởi vì nó không còn tốt khi so với phần Generator quá siêu việt nữa). Và rồi đến một lúc nào đó, những cái tín hiệu phản hồi của Discriminator trở nên vô nghĩa (và cái Generator đó học theo cái tín hiệu vô nghĩa đó), phần nào đó sẽ làm giảm đi tính hiệu quả của phần Generator.

... viết thêm ...
Tổng kết lại thì quá trình huấn luyện của GAN có thể được tóm tắt bằng hình dưới đây:

![gan_train_process](/assets/img/blog4/train_process.png)

Các thành phần của hàm Loss sẽ được giải thích ở phía dưới.
## Hàm Loss
Như trong cái hình đầu tiên, có thể thấy có 2 hàm loss, ám chỉ GAN sẽ sử dụng 2 hàm loss riêng biệt. Một hàm loss được sử dụng cho Generator và một hàm loss được sử dụng cho Discriminator. Quan trọng ở đây là 2 hàm loss này phải làm việc cùng nhau để phán ánh độ đo về khoảng cách của 2 phân phối xác suất.

Expand All @@ -138,6 +141,15 @@ Trong đó:

Với công thức ở trên, có thể thấy rằng không có cách nào để phần Generator có thể ảnh hưởng trực tiếp lên $\log(D(x))$, do đó mà với phần Generator, tối thiểu hàm loss ở trên cũng đồng nghĩa với việc tối thiểu $\log (1 - D(G(z)))$ .Tuy nhiên trong thực nghiệm, phương trình trên không phù hợp cho đạo hàm của $G$ để nó học tốt. Bởi vì thử tưởng tượng, ở những giai đoạn đầu của quá trình huấn luyện, những gì $G$ nhả ra là một cái output ngẫu nhiên nào đó, do đó $D$ luôn có thể dễ dàng detect được. Trong trường hợp này, $\log (1 - D(G(z)))$ trở nên bão hòa. Do đó mà thay vì huấn luyện $G$ theo cái objective ở trên, ta cũng có thể huấn luyện $G$ để tối đa giá trị của $\log(D(G(z)))$. Cách thức thay đổi này cho phép cung cấp nhiều thông tin cho $G$ hơn trong giai đoạn đầu của quá trình huấn luyện.

Cụ thể hơn trong GAN, hàm Loss của Generator với đầu vào $\mathbf{z}$ là như sau:
$$
L_G(\mathbf{z}) = -\log(D(G(\mathbf{z})))
$$

Trong khi đó, hàm Loss của Discriminator với 2 source data khác nhau ($\mathbf{z,x}$) là như sau:
$$
L_D(\mathbf{z,x}) = -y\log(D(\mathbf{x})) - (1-y)\log(1-D(G(\mathbf{z})))
$$

# Code

Expand Down Expand Up @@ -303,5 +315,6 @@ Chắc cũng phải kiếm thêm vài cái để cài lại cho đỡ chán : D

# Reference

[1]: AWS - [https://aws.amazon.com/vi/what-is/gan/](https://aws.amazon.com/vi/what-is/gan/)
[2]: Google - [https://developers.google.com/machine-learning/gan/generator](https://developers.google.com/machine-learning/gan/generator)
1: AWS - [https://aws.amazon.com/vi/what-is/gan/](https://aws.amazon.com/vi/what-is/gan/)
2: Google - [https://developers.google.com/machine-learning/gan/generator](https://developers.google.com/machine-learning/gan/generator)
3: AIO
Binary file added assets/img/blog4/train_process.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit f0552c4

Please sign in to comment.