Các lớp cơ bản trong một mạng CNN bao gồm: Lớp tích chập
(Convolutional), Lớp kích hoạt phi tuyến ReLU (Rectified Linear Unit), Lớp lấy mẫu (Pooling) và Lớp kết nối đầy đủ (Fully-connected), được thay đổi về số lượng và cách sắp xếp để tạo ra các mô hình huấn luyện phù hợp cho từng bài toán khác nhau.
Hình 1.1: Sơ đồ kiến trúc mạng CNN
Lớp tích chập
Đây là thành phần quan trọng nhất trong mạng CNN, cũng là nơi thể hiện tư tưởng xây dựng sự liên kết cục bộ thay vì kết nối toàn bộ các điểm ảnh. Các liên kết cục bộ này được tính toán bằng phép tích chập giữa các giá trị điểm ảnh trong một vùng ảnh cục bộ với các bộ lọc – filters – có kích thước nhỏ.
Hình 1.2: Ví dụ bộ lọc tích chập đƣợc sử dụng trên ma trận điểm ảnh
Trong ví dụ ở Hình 1.2 , ta thấy bộ lọc được sử dụng là một ma trận có kích thước 3x3. Bộ lọc này được dịch chuyển lần lượt qua từng vùng ảnh đến khi hoàn thành quét toàn bộ bức ảnh, tạo ra một bức ảnh mới có kích thước nhỏ hơn hoặc bằng với kích thước ảnh đầu vào. Kích thước này được quyết định tùy theo kích thước các khoảng trắng được thêm ở viền bức ảnh gốc và được tính theo công thức
𝑜 = + 1
Trong đó:
- o: kích thước ảnh đầu ra - i: kích thước ảnh đầu vào
- p: kích thước khoảng trắng phía ngoài viền của ảnh gốc (padding) - f: kích thước bộ lọc (filter)
Hình 1.3: Trƣờng hợp thêm/không thêm viền trắng vào ảnh khi tích chập
Như vậy, sau khi đưa một bức ảnh đầu vào cho lớp Tích chập ta nhận được kết quả đầu ra là một loạt ảnh tương ứng với các bộ lọc đã được sử dụng để thực hiện phép tích chập. Các trọng số của các bộ lọc này được khởi tạo ngẫu nhiên trong lần đầu tiên và sẽ được cải thiện dần xuyên suốt quá trình huấn luyện.
Lớp kích hoạt phi tuyến ReLU
Lớp này được xây dựng với ý nghĩa đảm bảo tính phi tuyến của mô hình huấn luyện sau khi đã thực hiện một loạt các phép tính toán tuyến tính qua các lớp Tích chập.
Lớp Kích hoạt phi tuyến nói chung sử dụng các hàm kích hoạt phi tuyến như ReLU hoặc sigmoid, tanh… để giới hạn phạm vi biên độ cho phép của giá trị đầu ra. Trong số các hàm kích hoạt này, hàm ReLU được chọn do cài đặt đơn giản, tốc độ xử lý nhanh mà vẫn đảm bảo được tính toán hiệu quả. Cụ thể, phép tính toán của hàm ReLU chỉ đơn giản là chuyển tất cả các giá trị âm thành giá trị 0.
Thông thường, lớp ReLU được áp dụng ngay phía sau lớp Tích chập, với đầu ra là một ảnh mới có kích thước giống với ảnh đầu vào, các giá trị điểm ảnh cũng hoàn toàn tương tự trừ các giá trị âm đã bị loại bỏ.
Lớp lấy mẫu
Một thành phần tính toán chính khác trong mạng CNN là lấy mẫu (Pooling), thường được đặt sau lớp Tích chập và lớp ReLU để làm giảm kích thước kích thước ảnh đầu ra trong khi vẫn giữ được các thông tin quan trọng của ảnh đầu vào. Việc giảm kích thước dữ liệu có tác dụng làm giảm được số lượng tham số cũng như tăng hiệu quả tính toán. Lớp lấy mẫu cũng sử dụng một cửa sổ trượt để quét toàn bộ các vùng trong ảnh tương tự như lớp Tích chập, và thực hiện phép lấy mẫu thay vì phép tích chập – tức là ta sẽ chọn lưu lại một giá trị duy nhất đại diện cho toàn bộ thông tin của vùng ảnh đó. Hình 1.4 thể hiện các phương thức lấy mẫu thường được sử dụng nhất hiện nay, đó là Max Pooling (lấy giá trị điểm ảnh lớn nhất) và Avarage Pooling (lấy giá trị trung bình của các điểm ảnh trong vùng ảnh cục bộ)
Hình 1.4: Phƣơng thức Avarage Pooling và Max Pooling
Như vậy, với mỗi ảnh đầu vào được đưa qua lấy mẫu ta thu được một ảnh đầu ra tương ứng, có kích thước giảm xuống đáng kể nhưng vẫn giữ được
các đặc trưng cần thiết cho quá trình tính toán sau này.
Lớp kết nối đầy đủ
Lớp kết nối đầy đủ này được thiết kế hoàn toàn tương tự như trong mạng nơ-ron truyền thống, tức là tất cả các điểm ảnh được kết nối đầy đủ với nút trong lớp tiếp theo.
So với mạng nơ-ron truyền thống, các ảnh đầu vào của lớp này đã có kích thước được giảm bớt rất nhiều, đồng thời vẫn đảm bảo các thông tin quan trọng cho việc nhận dạng.
Do vậy, việc tính toán nhận dạng sử dụng mô hình truyền thẳng đã không còn phức tạp và tốn nhiều thời gian như trong mạng nơ ron truyền thống.
1.4. Kết luận chƣơng 1
Chương này trình bày một số kiến thức về học máy: khái niệm, ứng
dụng, phân loại, các bước để xây dựng một chương trình học máy. Ngoài ra, chúng tôi còn khái quát một số kiến thức về học sâu và mô hình mạng CNN làm tiền đề để xây dựng mô hình GAN được trình bày ở chương tiếp theo.
CHƢƠNG 2: MÔ HÌNH GENERATIVE ADVERSARIAL NETWORKS (GAN)
Trong chương 2 chúng tôi tập trung vào các vấn đề sau: Giới thiệu về mô hình GAN, kiến trúc của mô hình GAN, các mô hình đặc biệt của GAN, đặc biệt mô hình pix2pix để giải quyết bài toán chuyển đổi ảnh.
2.1 Giới thiệu chung
GAN là mô hình được đề xuất bởi Goodfellow và các cộng sự vào năm
2014 [2]. Đây là một trong những xu hướng nghiên cứu thu hút được đông đảo các nhà khoa học, có tính ứng dụng cao và phát triển mạnh mẽ những năm gần đây trong Deep Learning.
GAN thuộc nhóm generative model. Generative là tính từ nghĩa là khả
năng sinh ra, model nghĩa là mô hình. Vậy hiểu đơn giản generative model nghĩa là mô hình có khả năng sinh ra dữ liệu. Hay nói cách khác, GAN là mô hình có khả năng sinh ra dữ liệu mới.
GAN là lớp mô hình để tạo ra dữ liệu giả giống như thật. GAN là một
mạng sinh đối sánh (Generative tương ứng với sinh và Adversarial là đối sánh). Kiến trúc của nó gồm hai mạng có mục tiêu đối nghịch nhau đó là mạng sinh (Generator) và một mạng đối sánh (Descriminator).
Để hiểu rõ về mô hình GAN, chúng ta cần quan tâm đến hai lớp bài toán khác nhau trong Machine Learning đó là mô hình Generative và mô hình Descriminative. GAN sẽ được cấu tạo dựa trên hai lớp mô hình này.
2.2 Kiến trúc của GAN
Hình 2.1: Sơ đồ kiến trúc mạng GAN
GAN cấu tạo gồm 2 mạng là Generator và Discriminator. Trong khi
Generator sinh ra các dữ liệu giống như thật thì Discriminator cố gắng phân biệt đâu là dữ liệu được sinh ra từ Generator và đâu là dữ liệu thật.
Generator: Học cách sinh ra dữ liệu giả để lừa mô hình Discriminator. Để có thể đánh lừa được Discriminator thì đòi hỏi mô hình sinh ra phải thực sự tốt. Do đó chất lượng ảnh phải càng như thật càng tốt.
Discriminator: Học cách phân biệt giữa dữ liệu giả được sinh từ mô hình Generator với dữ liệu thật. Discriminator như một giáo viên chấm điểm cho
Generator biết cách nó sinh dữ liệu đã đủ tinh xảođể qua mặt được
Discriminator chưa và nếu chưa thì Generator cần tiếp tục phải học để tạo ra ảnh thật hơn. Đồng thời Discriminator cũng phải cải thiện khả năng phân biệt của mình vì chất lượng ảnh được tạo ra từ Generator càng ngày càng giống
thật hơn. Thông qua quá trình huấn luyện thì cả Generator và Discriminator cùng cải thiện được khả năng của mình.
Hình 2.2: Mô tả chức năng của Generator và Descriminator
Generator và Discriminator tương tự như hai người chơi trong bài toán zero-sum game trong lý thuyết trò chơi. Ở trò chơi này thì hai người chơi xung đột lợi ích. Hay nói cách khác, thiệt hại của người này chính là lợi ích của người kia. Mô hình Generator tạo ra dữ liệu giả tốt hơn sẽ làm cho Discriminator phân biệt khó hơn và khi Discriminator phân biệt tốt hơn thì Generator cần phải tạo ra ảnh giống thật hơn để qua mặt Discriminator. Trong zero-sum game, người chơi sẽ có chiến lược riêng của mình, đối với Generator thì đó là sinh ra ảnh giống thật và Discriminator là phân loại ảnh thật/giả. Sau các bước ra quyết định của mỗi người chơi thì zero-sum game sẽ đạt được cân bằng Nash tại điểm cân bằng (Equilibrium Point).
Tiếp theo chúng ta sẽ tìm hiểu về kiến trúc của Generator và
Discriminator trong GAN. Những kiến trúc được mô tả bên dưới được lấy từ bài báo Generative Adversarial Networks, 2014 của Ian GoodFellow [2].
2.2.1 Generator
Hình 2.3: Sơ đồ kiến trúc của generator.
Generator về bản chất là một mô hình sinh nhận đầu vào là một tập hợp
các véc tơ nhiễu z được khởi tạo ngẫu nhiên theo phân phối Gaussian. Ở một
số lớp mô hình GAN tiên tiến hơn, đầu vào có thể làm một dữ liệu chẳng hạn như bức ảnh, đoạn văn bản hoặc đoạn âm thanh. Nhưng ở đây với mục đích làm quen và tìm hiểu GAN đầu vào được giả sử là véc tơ nhiễu như trong bài báo Generative Adversarial Nets của Ian J.Goodfellow.
Từ tập véc tơ đầu vào z ngẫu nhiên, mô hình generator là một mạng
học sâu có tác dụng biến đổi ra bức ảnh giả ở đầu ra. Bức ảnh giả này sẽ được sử dụng làm đầu vào cho kiến trúc Discriminator.
2.2.2 Discriminator
Hình 2.4: Sơ đồ kiến trúc của Discriminator
Mô hình Discriminator sẽ có tác dụng phân biệt ảnh đầu vào là thật hay giả. Nhãn của mô hình sẽ là thật nếu ảnh đầu vào của Discriminator được lấy
tập mẫu huấn luyện và giảnếu được lấy từ đầu ra của mô hình Generator. Về
bản chất đây là một bài toán phân loại nhị phân (binary classification) thông thường. Để tính phân phối xác suất cho đầu ra cho Discriminator chúng ta sử dụng hàm sigmoid.
2.3 Hàm tối ƣu
Hàm tối ưu (loss function) của mô hình Gan là một hàm kết hợp đồng
thời giữa mục tiêu của Discriminator và mục tiêu của Generator.
𝑚 𝑚 𝑥 ( ) ( )[ 𝑜 (𝑥)]
⏟
log probability that D predict x is real
( )* 𝑜 ( ( ( )))+
⏟
log probability D predicts z is fake
( )
Cơ chế gồm 2 pha của hàm tối ưu này:
Pha huấn luyện Descriminator:
cho khả năng phân loại là tốt nhất. Ở pha này chúng ta hãy tạm thời
coi G không đổi và chỉ quan tâm đến vế maxDV(D,G). Đây là chính là đối của
hàm cross entropy đối với trường hợp phân loại nhị phân. Thật vậy, mục tiêu
của logistic regression đối với bài toán phân loại nhị phân là tối thiểu hóa một
hàm cross entropy như sau:
( ) ∑
[ 𝑜 ( | ) ( ) 𝑜 ( ( | ))] ( )
Trong đó p(yi|xi) là xác suất dự báo nhãn yi từ mô hình logistic.
Trong phương trình (1) thì D(x) cũng như p(yi|xi). Hay nói cách
khác D(x) đóng vai trò dự báo xác suất cho dữ liệu đầu vào. Chúng ta có hai
khả năng xảy ra:
Nếu đầu vào là ảnh thật thì yi=1 và 1−yi=0 và do đó hàm tối ưu tương ứng
với yilogp(yi|xi)=log p(yi|xi) ở phương trình (2). Giá trị này được coi như là logD(x) ở phương trình (1). Kí hiệu x pdata(x) ở phương trình (1) là phân phối xác suất của các điểm dữ liệu đầu vào, trong trường hợp ở phương trình (2) thì
các quan sát có vai trò như nhau nên chúng có chung giá trị phân phối là .
Trường hợp ảnh đầu vào là giả thì yi=0 và 1−yi=1. Khi đó đóng góp vào
hàm tối ưu chỉ còn thành phần 1−yi log 1−p yi|xi =log 1−p yi|xi)) ở phương
trình (2). Giá trị này được coi như là log 1−D z ở phương trình (1).
Pha huấn luyện Generator:
Mục tiêu của pha này là củng cố khả năng tạo ảnh của Generator sao
cho ảnh nó sinh ra là giống với thật nhất. Ở pha này ta coi như D là không
đổivà chỉ quan tâm đến G(z) sao cho giá trị dự báo xác suất từ D đối với nó
gần bằng 1 nhất, tức là ảnh giả được sinh ra giống ảnh thật nhất (xác suất càng
càng tốt. Đảo dấu của nó trong ( )[ 𝑜 ( ( ( )))] ta suy ra mục
tiêu cần tối ưu là tối thiểu hóa minGV(D,G).
2.4 Quá trình huấn luyện
Trong quá trình huấn luyện thì chúng ta sẽ kết hợp một cách xen kẽ
giữa hai pha. k batch đầu tiên chúng ta sẽ huấn luyện discriminator trước:
Huấn luyện discriminator: Lấy mẫu một mini-batch kích thước m là các nhiễu z(1),z(2),…,z(m)
và là đầu vào của Generator. Đồng thời lấy mẫu một mini-
batch khác kích thước m là những điểm dữ liệu thật x(1),x(2),…,x(m)
. Những dữ
liệu này sẽ được sử dụng để cập nhật gradient descent theo phương pháp mini-batch gradient descent:
𝑚 ∑
(𝑥( )) ( ( ( ( ))))
Do là huấn luyện trên mô hình Discriminator nên chỉ được cập nhật các
hệ số trên mô hình Discrimator là θD. Các hệ số của Generator được cố định.
Huấn luyện generator: Sau khi kết thúc k batch huấn luyện trên discriminator chúng ta sẽ tiếp tục huấn luyện trên generator. Một mini-batch
kích thước m được lựa chọn ra từ các nhiễu là z(1),z(2),…,z(m)
được sử dụng như
đầu vào huấn luyện. Gradient descent sẽ được tính trên m dữ liệu này theo
công thức:
𝑚 ∑
𝑜 ( ( ( ( ))))
Lưu ý cập nhật gradient descent chỉ được áp dụng trên các hệ số của
Generator là θG. Tiếp tục quá trình này cho tới khi tổng số lượt huấn luyện là
2.5 Mô hình Pix2Pix và ứng dụng trong bài toán chuyển đổi ảnh
2.5.1 Mô hình Pix2pix
Gần đây việc sử dụng các mô hình GAN cho các tác vụ sinh ảnh nhằm
bổ sung thêm dữ liệu cho các mô hình ngày càng phát triển. GAN là lớp mô hình mà khi áp dụng có thể giúp tạo ra những mô hình chất lượng hơn với ít dữ liệu hơn. Đó cũng chính là lý do và động lực để chúng tôi tìm hiểu về mô hình Pix2Pix, một lớp mô hình chuyên biệt cho các tác vụ image-to-image translation.
Pix2pix là một mạng GAN nên cũng có hai phần Generator (G) để sinh
ảnh giả và Discriminator (D) để phân biệt ảnh thật và ảnh giả. Tuy nhiên khác với những mạng GAN bình thường khi đầu vào của generator là noise, thì trong mô hình pix2pix đầu vào của generator là ảnh vẽ (phác thảo). Và đầu ra của generator là ảnh thật có màu sắc.
Hình 2.5: Ví dụ về mô hình pix2pix trong bài toán chuyển từ ảnh vẽ (draft) sang ảnh màu đầy đủ của giày.
Đầu vào của discriminator là ảnh x (đầu vào của generator) và G(x)
(đầu ra của generator). Hai ảnh này cùng kích thước được xếp lên nhau rồi cho vào discriminator.
Trong hình 2.5, discriminator học bằng cách phân biệt x và G(x) là ảnh giả,
x và y là ảnh thật. Ngược lại generator sẽ học bằng cách cho x và G(x) là ảnh thật.
2.5.2 Kiến trúc của pix2pix
Kiến trúc của Pix2Pix cũng bao gồm 2 mô hình mạng là generator và discriminator. Generator có tác dụng sinh ảnh giả để đánh lừa discriminator và discriminator có mục tiêu phân biệt giữa ảnh thật và ảnh giả.
Mạng Generator
Đầu vào của generator là một bức ảnh nguồn (source image). Sau đó bức ảnh được truyền vào một kiến trúc mạng tích chập để trích lọc đặc trưng thông qua quá trình down sampling. Ở quá trình này, đầu ra ở các lớp sẽ có kích thước giảm dần thông qua tích chập 2 chiều. Trong khi đó mạng giải chập (Deconvolution) làm nhiệm vụ ngược lại là biến đổi đặc trưng thành ảnh đích (target image) thông qua quá trình up sampling bằng các lớp chuyên biệt như transposed Convolution, Dilation Convolution, Upsampling 2D. Quá trình up sampling sẽ gia tăng dần kích thước đầu ra và kết quả trả ra là một bức ảnh đích mang nhãn giả.
Kiến trúc down sampling và upsampling trong bài toán image-to-image
translation. Đây cũng chính là kiến trúc chung của generator trong Pix2Pix GAN.
Đầu vào của Generator là ảnh vẽ còn đầu ra là ảnh màu nên kiến trúc cũng gần giống với U-Net [10], dựa trên kiến trúc U-Net được phát triển bởi Olaf Ronneberger và các cộng sự để dùng cho image segmentation trong y học để khởi tạo generator.
Kiến trúc có hai phần đối xứng nhau được gọi là encoder (phần bên trái) và decoder (phần bên phải). Các lớp ở nhánh bên trái (phần encoder) sẽ
được concatenate trực tiếp vào các lớp ở nhánh bên phải (phần decoder) có
cùng kích thước. Kết nối này được gọi là kết nối tắt (skip connection) nhằm bổ sung thêm thông tin và gia tăng độ chính xác