{jcomments on}
Author: Trần Trung Thái
Published date: 26/03/2022
1. Giới thiệu
Mạng nơ-ron tích chập (Convolutional Neural Networks) là một lớp của mạng nơ-ron sâu (deep neural network). Được phát triển và sử dụng nhiều trong thời gian gần đây chủ yếu trong lịch vực thị giác máy tính (computer vision). Các kiến trúc dựa trên mạng nơ-ron tích chập hiện nay xuất hiện trong mọi ngóc ngách của lĩnh vực thị giác máy tính, và đã trở thành kiến trúc chủ đạo cho các bài toán liên quan đến nhận dạng ảnh, phát hiện đối tượng, hay phân vùng theo ngữ cảnh. Bên cạnh hiệu năng cao trên số lượng mẫu cần thiết để đạt được đủ độ chính xác, các mạng nơ-ron tích chập thường có hiệu quả tính toán hơn, bởi đòi hỏi ít tham số hơn và dễ thực thi song song trên nhiều GPU hơn các kiến trúc mạng dày đặc [2]. Do đó, các mạng nơ-ron tích chập có thể được áp dụng với các tác vụ liên quan tới cấu trúc tuần tự một chiều, như là xử lý âm thanh, văn bản, và phân tích dữ liệu chuỗi thời gian (time series analysis) và nhiều tác vụ khác nữa. Bài viết sau đây sẽ giới thiệu về mạng nơ-ron tích chập và cơ chế hoạt động của mạng.
Trước khi bắt đầu nội dung tôi xin cảm ơn Team học thuật của TickLab đã góp ý về bài viết. Mặc dù vậy, bài viết vẫn có thể gặp những sai sót về nội dung, ban đọc góp ý có thể gửi qua mail This email address is being protected from spambots. You need JavaScript enabled to view it..
2. Kiến trúc mạng nơ-ron tích chập
Giống với mạng nơ-ron (Neural Networks), mạng nơ-ron tích chập (Convolutional Neural Networks) cũng bao gồm nhiều lớp (layer) được kết nối với nhau. Từng lớp cũng bao gồm nhiều nơ-ron với các trọng số (weight). Quá trình huấn luyện (training) của mạng nơ-ron tích chập cũng bao gồm 2 phần: foward propagation - lan truyền xuôi, duyệt qua mạng theo chiều thuận (sử dụng dữ liệu đầu vào tính toán đầu ra của từng lớp sử dụng các trọng số tương ứng) và backward propagation - lan truyền ngược, duyệt qua mạng theo chiều ngược (sử dụng các đầu ra đã tính toán và sai số tương ứng để cập nhật các tham số của từng lớp). Tuy nhiên, khi áp dụng với dữ liệu đầu vào với kích thước lớn, cụ thể, dữ liệu đầu vào là một hình ảnh thuộc tập dữ liệu CIFAR-10 có kích thước là \(32\times 32 \times 3\) (kích thước ảnh là \(32 \times 32\) nhưng vì mỗi hình ảnh được biểu diễn theo chuẩn RGB nên đều có 3 kênh: đỏ, xanh lục và xanh lam). Với một mạng nơ-ron kết nối toàn phần (Fully-connected Neural Network), mỗi nơ-ron của lớp đầu tiên cần \(32 \times 32 \times 3 = 3072\) trọng số, tuy đây vẫn là số lượng trọng số có thể xử lý được, nhưng với những dữ liệu đầu vào với kích thước lớn hơn như \(200 \times 200 \times 3\), khi đó cần tới \(120.000\) trọng số cho mỗi nơ-ron ở lớp đầu tiên, hơn nữa, lớp đầu tiên cần nhiều hơn là chỉ một nơ-ron. Vì thế, việc kết nối toàn phần sẽ tốn không gian và nhiều tham số dễ gây ra over-fitting. Thay vào đó, mạng nơ-ron tích chập có thể giảm số lượng tham số một cách đáng kể [1]. Hơn nữa, với một hình ảnh đầu vào, thay vì kết nối với toàn bộ nơ-ron ở lớp trước, mỗi nơ-ron trong mạng nơ-ron tích chập chỉ kết nối với một số nơ-ron nhất định ở lớp trước.
Hình 1. Kiến trúc của mạng nơ-ron (trái) và mạng nơ-ron tích chập (phải). Mạng nơ-ron thường không duy trì được cấu trúc 3D của dữ liệu trong khi đó mạng nơ-ron tích chập có thể đảm bảo cấu trúc dữ liệu qua các lớp của mình [1].
Khác với mạng nơ-ron, mạng nơ-ron tích chập có nhiều hơn một loại lớp để hình thành nên kiến trúc của mạng và không phải lớp nào cũng có tham số như với mạng nơ-ron. Một mạng nơ-ron tích chập thường sẽ bao gồm 3 loại lớp: lớp tích chập (Convolutional Layer), lớp gộp (pooling layer) và lớp kết nối toàn phần (fully-connected layer). Một điểm đặc biệt của mạng nơ-ron tích chập đối với đầu vào là một hình ảnh chính là mạng nơ-ron tích chập vẫn giữ được cấu trúc 3D của dữ liệu qua từng lớp của mạng. Cấu trúc này được duy trì từ dữ liệu đầu vào qua các lớp tích chập và lớp kết nối và chỉ bị thay đổi khi được đưa qua lớp kết nối toàn phần. Do đó, mỗi lớp trong mạng sẽ có kích thước \(W \times H \times D\) (mỗi lớp có thể có kích thước khác nhau) tương ứng với chiều rộng, chiều cao và chiều sâu.
2.1. Lớp tích chập (Convolutional Layer)
Lớp tích chập chính là lớp chiếm phần lớn trong một mạng nơ-ron tích chập. Lớp tích chập sẽ tính toán đầu ra bằng cách trượt một kernel (bộ lọc) qua từng vùng của đầu vào và thực hiện tính toán với kernel trên vùng đấy (thường là nhân từng phần tử của ma trận (element-wise multiplication) với nhau rồi tính tổng cá giá trị). Ví dụ ở hình 2 đầu vào là một ma trận \(3 \times 3\) và một kernel \(2 \times 2\), kernel sẽ trượt dần trên từng vùng (từ trái sang phải, từ trên xuống dưới) rồi thực hiện phép nhân từng phần tử tương ứng và tính tổng để nhận được kết quả đầu ra. Ở vùng đầu tiên (tô xanh ở Hình 2) khi trượt kernel qua sẽ thực hiện phép tính \(0\times 0 + 1 \times 1 + 3 \times 2 + 4 \times 3 = 19\). Tiếp tục ở các vùng tiếp theo, các phép tính lần lượt là:
- \(1 \times 0 + 2 \times 1 + 4 \times 2 + 5 \times 3 = 25\)
- \(3 \times 0 + 4 \times 1 + 6 \times 2 + 7 \times 3 = 37\)
- \(4 \times 0 + 5 \times 1 + 7 \times 2 + 8 \times 3 = 43\)
Từ đó sẽ có được đầu ra như hình 2. Chú ý rằng, vị trí từng phần tử của đầu ra phải đúng với thứ tự trượt của kernel.
Hình 2. Ví dụ về phép tích chập trên ma trận \(3 \times 3\) với kernel \(2 \times 2\). Kernel sẽ trượt qua từng vùng của đầu vào để tính toán các giá trị tương ứng cho đầu ra. Mỗi lần trượt, kernel sẽ phủ ở dữ liệu đầu vào một vùng bằng với kích thước của kernel (vùng xanh) [2].
Hình 3 dưới đây sẽ cho một cái nhìn trực quan hơn về cách mà kernel trượt trên một ma trận.
Hình 3. Một ma trận \(4 \times 4\) với kernel \(3 \times 3\) khi thực hiện tích chập sẽ được kết quả là một ma trận khác với kích thước nhỏ hơn \(2 \times 2\) [3].
Hình 4. Phép tích chập trên ảnh màu với kernel có kích thước chiều rộng \(\times\) chiều cao là \(3 \times 3\). Vì ảnh màu có 3 kênh, tương ứng với chiều sâu là 3 nên kernel cũng có chiều sâu tương ứng là 3. Hình thành nên một tensor. Kernel cũng trượt trên từng vùng theo chiều cao và chiều rộng tương tự như với ma trận [4].
Khi mở rộng chiều của đầu vào thành một tensor có kích thước \(W \times H \times D\) với chiều rộng \(W\), chiều cao \(H\) và chiều sâu \(D\) (với một ảnh màu thì chiều sâu là 3 tương ứng với 3 kênh R, G, B) thì kernel cũng cần có chiều sâu \(D\) tương ứng. Khi đó, kernel di sẽ di chuyển theo chiều rộng và chiều cao của dữ liệu. Cụ thể với đầu vào một tensor là một ảnh màu với 3 kênh đỏ, xanh lục và xanh lam tương ứng với chiều sâu \(D = 3\)). Khi đó, kernel cũng phải là một tensor với chiều sâu \(D = 3\), Hình 4 minh họa rõ về cách di chuyển của kernel khi dữ liệu đầu vào là một ảnh màu. Tuy nhiên, việc tính toán lại thực hiện hầu hết trên từng kênh riêng biệt của kernel và hình ảnh đầu vào. Nếu xét từng kênh riêng biệt, khi đó, việc tích chập ở mỗi kênh sẽ tương tự như với ma trận ở trên, mỗi ma trận sẽ có một kernel riêng và cho ra những kết quả đầu ra tương ứng. Tiếp đó, những đầu ra thường sẽ được gộp lại bằng một công thức tuyến tính. Hình 5 sẽ minh họa rõ ràng cho việc thực hiện tích chập khi mở rộng chiều của dữ liệu đầu vào. Chú ý rằng, kernel chỉ di chuyển theo chiều rộng và chiều cao của đầu vào.
Hình 5. Thực hiện tích chập trên đầu vào là một tensor. Để thực hiện việc tích chập, đầu vào được chia thành 3 kênh, mỗi kênh có một bộ lọc (kernel) riêng biệt và thực hiện tích chập tương tự với đầu vào 2 chiều (ma trận) để có được đầu ra tương ứng. Các ma trận đầu ra sau đó sẽ được cộng với nhau và thêm vào một bias, từ đó cho kết quả của một phép tích chập nhiều chiều [4].
Như đã đề cập ở trên, lớp tích chập vẫn cần duy trì cấu trúc dữ liệu 3D cho đầu ra của lớp, dù đầu vào là dữ liệu 3 chiều, nhưng theo cơ chế tích chập như trên, dữ liệu vẫn chuyển về 2 chiều. Để giải quyết việc này, ta có thể sử dụng nhiều kernel (mỗi kernel là một tensor) trong một lớp tích chập, số lượng kernel được sử dụng tương đương với chiều sâu \(D\) của đầu ra của lớp tích chập đó như ở Hình 6.
Hình 6. Phép tích chập vẫn duy trì được cấu trúc 3D của dữ liệu. Với đầu vào là dữ liệu 3D có chiều sâu là 3, khi sử dụng 2 kernel với cùng chiều sâu thì đầu ra cũng sẽ có chiều sâu \(D = 2\) [2].
Ngoài ra, thường sau mỗi lớp tích chập sẽ có các hàm kích hoạt (activation function). Các hàm kích hoạt sẽ được áp dùng lên từng phần tử (elementwise activation function), RELU (Rectified Linear Unit) thường được sử dụng để đảm bảo các phần từ luôn không âm. Vì áp dụng trên từng phần tử, sau khi áp dụng các hàm kích hoạt, kích thước của lớp vẫn không đổi.
2.1.1. Sải bước (Stride) và Đệm (Padding)
Ở các ví dụ bên trên, mỗi lần di chuyển, kernel chỉ dịch qua một phần tử một lần. Ta gọi số hàng và cột di chuyển qua mỗi lần là sải bước (stride) - kí hiệu là \(S\). Các ví dụ trên sử dụng \(S = 1\), nhưng giá trị của \(S\) có thể tăng lên. Tuy nhiên, khi \(S > 1\), cần chú ý đến kích thước chiều rộng và chiều cao của dữ liệu đầu vào để tránh việc kernel không trượt đến cột cuối cùng của dữ liệu được. Ví dụ với Hình 3, nếu như tăng \(S\) lên 2, khi đó, các phần tử ở cột ngoài cùng sẽ không được kernel di chuyển đến gây mất mát dữ liệu.
Dễ thấy một điều rằng, việc thực hiện tích chập sẽ làm giảm kích thước của dữ liệu (trừ khi sử dụng kernel với kích thước \(1 \times 1\)). Kích thước của đầu ra tỉ lệ nghịch với kích thước của kernel và sải bước. Ví dụ ở Hình 2, dữ liệu đầu vào có kích thước \(3 \times 3\) và kernel \(2 \times 2\) sẽ có đầu ra có kích thước \(2 \times 2\), còn ở Hình 3, mặc dù kích thước đầu vào tăng lên \(4 \times 4\) nhưng kích thước của kernel cũng tăng lên \(3 \times 3\), khi đó đầu ra cũng chỉ có kích thước \(2 \times 2\). Khi kích thước của kernel lớn, kích thước của đầu ra sẽ bị giảm đáng kể, do đó, ta thường sẽ chọn kích thước của kernel nhỏ: \(2 \times 2\), \(3\times 3\), \(5\times 5\),...Hơn nữa, cũng tương tự với kernel, khi sải bước tăng lên, kích thước của đầu ra cũng sẽ giảm. Vì thế, một phần đệm (padding - \(P\)) sẽ được thêm vào viền của hình ảnh giúp đầu ra của lớp tích chập không bị giảm đáng kể. Khi thêm đệm, các phần tử thường có giá trị là 0, giá trị của \(P\) sẽ là độ rộng của viền được thêm vào. Nếu sử dụng sải bước và đệm phù hợp, đầu ra của dữ liệu có thể có kích thước giống với đầu vào.
\(S = 2, P = 0\)
\(S = 1, P = 1\)
\(S = 1, P = 2\)
\(S = 2, P = 1\)
\(S = 2, P = 1\)
\(S = 1, P = 2\)
Hình 7. Thực hiện tích chập với kích thước của sải bước (stride) và đệm (padding) khác nhau [3].
2.1.2. Vùng tiếp nhận (Receptive Field)
Ta có thể thấy rằng, mỗi điểm của một lớp trong mạng nơ-ron tích chập được xác định từ một vùng của lớp trước nó, kích thước của vùng ảnh hưởng lên một điểm sẽ được quy đinh bởi kernel. Những vùng ảnh hưởng lên các điểm dữ liệu được gọi là vùng tiếp nhận (receptive field). Vì mỗi lần tích chập có xu hướng giảm kích thước dữ liệu, nên các vùng tiếp nhận của một điểm thường sẽ có dạng hình tháp (pyramid), càng vào sâu, các điểm của một lớp sẽ bị ảnh hưởng bởi một vùng lớn hơn của dữ liệu ở những lớp trước nó, Hình 8 sẽ minh họa rõ hơn về vùng tiếp nhận.
Hình 8. Vùng tiếp nhận (receptive field) trong mạng nơ-ron tích chập. Khi các lớp càng sâu, vùng tiếp nhận tương ứng của một điểm tai các lớp trước nó sẽ càng rộng. Cụ thể, vùng tiếp nhận của chỉ 1 điểm ở lớp thứ 3 là toàn bộ các điểm ở lớp thứ nhất [12].
2.2. Lớp gộp (Pooling Layer)
Lớp gộp (pooling layer) thường được sử dụng giữa các lớp tích chập dùng để giảm kích thước của dữ liệu mà vẫn giữ được các thuộc tính quan trọng. Đồng thời, việc giảm kích thước dữ liệu cũng giúp việc tính toán dễ dàng hơn. Khác với lớp tích chập, lớp gộp là lớp không có tham số (parameter-free) khi lớp này không có kernel mang tham số mà chỉ có những cửa số gộp (pooling window). Cửa số gộp cũng trượt trên dữ liệu giống như lớp tích chập, quy tắc sải bước (stride) và đệm (padding) cũng tương tự (Hình 9). Chỉ khác một điểm cửa sổ gộp không mang tham số, và các phép toán thực hiện ở lớp gộp thường là: gộp cực đại (max pooling) và gộp trung bình (average pooling). Gộp cực đại (max pooling) là giữ lại phần tử có giá trị lớn nhất của vùng mà cửa sổ gộp trượt qua, còn gộp trung bình (average pooling) là tính trung bình tất cả các phần tử trong vùng. Hình 10 minh họa rõ hơn về cách hoạt động của hai loại gộp này. Vùng tiếp nhận (Receptive field) của lớp gộp cũng tương tự như với lớp tích chập.
Hình 9. Max pooling với cửa sổ gộp (pooling window) có kích thước là \(3 \times 3\) với \(S = 1\) và \(P = 0\). Có thể thấy rằng, cách di chuyển của cửa sổ gộp cũng giống như cách di chuyển của kernel trong lớp tích chập [4].
Hình 10. Hai loại gộp với kích thước cửa sổ gộp là \(2 \times 2\), \(S = 2\) và \(P = 0\). Gộp cực đại chỉ giữ lại phần tử lớn nhất trong 4 ô của từng vùng trượt qua: 20, 30, 112 và 37. Trong khi gộp trung bình tính trung bình của 4 ô mà cửa sổ gộp trượt qua, cho kết quả: 13, 8, 79 và 20. Trên thực tế, hiện nay gộp cực đai (max pooling) được sử dụng nhiều hơn so với gộp trung bình (average pooling) [4].
Chú ý một điều rằng, giống với việc tích chập, cửa sổ gộp cũng chỉ trượt trên chiều rộng \(W\) và chiều cao \(H\) của đầu vào, và lặp tại tương tự như thế theo chiều sâu \(D\) của dữ liệu. Vì thế, việc gộp chỉ thay đổi chiều rộng \(W\) và chiều cao \(H\) của dữ liệu chứ không thay đổi chiều sâu. Trong thực tế, người ta thường sử dụng cửa sổ gộp với kích thước \(2 \times 2\) và \(S = 2, P =0\). Khi đó, kích thước của dữ liệu sẽ giảm đi một nửa (Hình 11) và hiển nhiên, chiều sâu của dữ liệu không thay đổi.
Hình 11. Kích thước dữ liệu bị giảm đi một nửa sau khi thực hiện gộp (pooling) với cửa sổ gộp có kích thước \(2 \times 2\) và \(S = 2, P = 0\). Quá trình này thường được gọi là lấy mẫu xuống (downsampling) [1].
2.3. Lớp kết nối toàn phần (Fully-connected Layer)
Sau khi dữ liệu được truyền qua các lớp tích chập và lớp gộp để học được những đặc điểm quan trọng của dữ liệu, sau đó, những dữ liệu 3 chiều này với kích thước \(W \times H \times D\) thường được biến đổi thành 1 vector và truyền vào những lớp kết nối toàn phần, thường nằm ở cuối của mạng nơ-ron tích chập để tính toán đầu ra tương ứng của mô hình. Tuy nhiên, có những mô hình thị giác máy tính hiện nay không sử dụng lớp kết nối toàn phần này, ví dụ như U-net trong bài toán phân vùng vật thể (object segmentation).
2.4. Mạng nơ-ron tích chập hoàn chỉnh
Một mạng nơ-ron tích chập hoàn chỉnh sẽ bao gồm các lớp đã đề cập ở trên xếp liên tiếp nhau. Các lớp tích chập và gộp sẽ ở phần đầu của mạng. Thường sau một hoặc một số lớp tích chập sẽ có một lớp gộp. Các lớp kết nối toàn phần thường sẽ nằm ở cuối của mạng nơ-ron tích chập.
Hình 12. Ví dụ về một mạng nơ-ron tích chập hoàn chỉnh gồm các lớp tích chập và lớp gộp chồng lên nhau và ở cuối mạng là những lớp kết nối toàn phần. Các đầu ra của các lớp tích chập và lớp gộp được gọi là các ánh xạ đặc trưng (feature map) [5].
Bên cạnh đó, đầu ra của các lớp tích chập và lớp gộp được gọi là ánh xạ đặc trưng (feature map). Như đã nói trong phần 2.1.2, vùng tiếp nhận của một điểm ở lớp càng sâu thì độ bao phủ sẽ càng lớn. Do đó, các ánh xạ đặc trưng của các lớp sâu sẽ được dùng để nhận diện các high-feature (như vật thể), còn những lớp ở gần, vì vùng tiếp nhận nhỏ, nên thường dùng để nhận diện các low-feature (cạnh).
Đến đây, ta có thể thấy được những ưu điểm của một mạng nơ-ron tích chập như sau:
- Chia sẻ tham số (parameter sharing): ở một lớp tích chập, từng vùng trên dữ liệu đều sử dụng những tham số chung, chính là những kernel của lớp đó, trong khi đó, trong mạng nơ-ron bình thường, mỗi nơ-ron của một lớp đều có những tham số riêng. Do đó, số lượng tham số trong mạng nơ-ron tích chập được giảm đi một cách đáng kể.
- Kết nối cục bộ (local connectivity): với một mạng nơ-ron bình thường, một nơ-ron ở lớp sau đều kết nối tới tất cả các nơ-ron ở lớp trước. Trong khi đó, như đã đề cập ở trên, mỗi điểm ở một lớp tích chập hay lớp gộp đều được xác định chỉ bởi bởi một vùng của lớp trước đó, do đó tận dụng được tính chất rằng, với một điểm, các điểm lân cận nó sẽ có ảnh hưởng đến điểm đó hơn so với các điểm ở xa. Và, khi càng vào các lớp sâu của mạng, theo hình dạng tháp (pyramid), mỗi điểm vẫn sẽ có vùng tiếp nhận rộng đối với đầu vào, do đó vẫn giữ được các đặc tính của dữ liệu đầu vào.
- Ảnh hưởng của nhiễu (noise sensitive): các ánh xạ đặc trưng của các lớp đầu thường bị ảnh hưởng bởi nhiễu hơn so với các lớp sâu. Vì vùng tiếp nhận của các lớp đầu vẫn nhỏ, khi cùng một vật thể nhưng ở các vị trí khác nhau, các ánh xạ đặc trưng sẽ cho các kết quả nhận diện khác nhau. Nhưng khi vào các lớp càng sâu, vùng tiệp nhận bao phủ rộng dần, khi đó các ánh xạ đặc trưng sẽ cho các kết quả tương tự nhau là cùng một vật thể, do đó sẽ cho các kết quả chính xác hơn.
Hình 13. Ảnh hưởng của vị trí vật thể khi qua lớp gộp. Dù hình A và B, vật thể có vị trí khác nhau nhưng cho ra các ánh xạ đặc trưng giống nhau, còn hình C cho kết quả gần giống nhưng có vị trí lệch rất ít, nếu qua các lớp tích chập hay gộp sau, có thể 3 hình sẽ có kết quả như nhau [6].
3. Một số mô hình mạng nơ-ron tích chập
Từ khi ra đời, học sâu nói riêng và mạng nơ-ron tích chập đã và đang đem đến rất nhiều cải tiến trong lĩnh vực học máy, cụ thể là trong thị giác máy tính. Đã có rất nhiều mô hình mạng nơ-ron tích chập đã được phát triển và được ứng dụng hiệu quả. Phần này chỉ giới thiệu sơ qua một số mô hình mạng nơ-ron tích chập đã được phát triển, vẫn còn nhiều mô hình mới khác mà tôi sẽ không đề cập ở đây.
3.1. LeNet
Những ứng dụng đầu tiên của mạng nơ-ron tích chập được phát triển bới Yann LeCunn trong những năm 1990. Và nổi tiếng nhất trong đó là kiến trúc mạng LeNet được sử dụng để đọc mã zip, chữ số,...
Hình 14. Dòng dữ liệu trong LeNet. Đầu vào là chữ số viết tay, đầu ra là xác xuất với 10 kết quả khả thi của 10 chữ số [2].
LeNet bao gồm 2 lớp tích chập, theo sau mỗi lớp tích chập là một lớp gộp, sau đó được nối với 3 lớp kết nối toàn phần để tính toán đầu ra.
Hình 15. Cấu trúc LeNet-5 với kích thước của từng lớp [2].
3.2. AlexNet
Mô hình đầu tiên làm cho mạng nơ-ron tích chập trở nên phổ biến trong lĩnh vực thị giác máy tính là AlexNet được phát triển bởi Alex Krizhevsky, Ilya Sutskever and Geoff Hinton. AlexNet được sử dụng cho thử thách ImageNet ILSVRC năm 2012. AlexNet có cấu trúc gần giống với LeNet nhưng sâu hơn và có kích thước lớn hơn so với LeNet. Bên cạnh đó, mạng cũng bao gồm các lớp tích chập kết nối liên tiếp, không giống với các mạng thông thường thời đó khi mỗi lớp tích chập đều theo sau bởi một lớp gộp.
Hình 16. So sánh cấu trúc LeNet và AlexNet. Có thể thấy rằng AlexNet sâu hơn cũng như có kích thước lớn hơn của từng lớp, bên cạnh đó, các lớp tích chập cũng được chồng lên nhau [3].
3.3. ZFNet
ZFNet là mô hình chiến thắng thử thách ILSVRC (ImageNet Large Scale Visual Recognition Challenge - Thử thách nhận diện ảnh quy mô lớn) sau AlexNet. ZFNet là một mô hình cải tiến của AlexNet bằng cách tinh chỉnh các siêu tham số (hyperparameter) của từng lớp khi tăng kích thước của các lớp tích chập trung gian và giảm sải bước (stride) và kích thước kernel của các lớp đầu tiên.
Hình 17. Cấu trúc ZFNet [7].
3.4. GoogLeNet
Sau ZFNet, GoogLeNet chính là mô hình chiến thắng thử thách ILSVRC trong năm tiếp theo được phát triển bởi Szegedy et al. [8] từ Google. Cải tiến của GoogLeNet so với các mô hình tiền nhiệm chính là thêm Inception Module giúp giảm số lượng tham số một cách đáng kể (chỉ còn khoảng 4 triệu, so với con số hơn 60 triệu tham số của AlexNet). Hơn nữa, mô hình này còn sử dụng một lớp gộp trung bình thay cho lớp kết nối toàn phần, giúp giảm số lượng tham số một cách đáng kể.
Hình 18. Khối Inception được sử dụng trong GoogLeNet [2].
Hình 19. Cấu trúc của GoogLeNet bao gồm nhiều khối Inception, ở cuối của mô hình, lớp kết nối toàn phần được thay bằng lớp gộp trung bình giúp giảm được đáng kể số lượng tham số [2].
3.5. VGGNet
Cũng trong năm 2014, một mô hình khác cũng được đề xuất ở ILSVRC bởi Karen Simonyan và Andrew Zisserman là VGGNet. Tác giả đã chỉ ra rằng, chiều sâu của mạng là một thành phần quan trọng ảnh hưởng đến hiệu suất hoạt động của mô hình. VGG khác với các mạng trước ở việc nó chỉ sử dụng các lớp tích chập và gộp đơn giản: \(3 \times 3\) kernel với \(P = 1\) và cửa sổ gộp \(2 \times 2\) với \(S = 2\) tạo thành một khối. Chồng nhiều khối lên nhau tạo nên một mạng nơ-ron tích chập khá sâu. Một hạn chế của VGGNet chính là có khá nhiều tham số (140 triệu). Tuy nhiên, VGGNet lại có rất nhiều biến thể.
Hình 20. Cấu trúc VGGNet so với AlexNet [2].
3.6. Residual Network (ResNet)
Mạng phần dư (ResNet) được phát triển bởi Kaiming He et al. [9] đã chiến thắng thử thách ILSVRC năm 2015. Mô hình bao gồm nhiều khối phần dư (residual block) và sử dụng chuẩn hóa hàng loạt (batch normalization). Bên cạnh đó, cũng giống GoogLeNet, ResNet sử dụng lớp gộp trung bình thay vì một lớp kết nối toàn phần ở cuối mô hình.
Hình 21. Các khối được sử dụng trong ResNet [2].
Hình 22. Cấu trúc mạng ResNet, giống GoogLeNet, ResNet sử dụng lớp gộp trung bình thay vì một lớp kết nối toàn phần ở cuối mô hình. [2].
4. Kết luận
Mạng nơ-ron tích chập là một trong những phát triển lớn trong học sâu (Deep Learning) nói chung và thị giác máy tính (Computer Vision) nói riêng. Mạng nơ-ron tích chập bao gồm những lớp tích chập, lớp gộp không có tham số và lớp kết nối toàn phần (có thể có hoặc không). Bằng cơ chế chia sẻ tham số trong lớp tích chập, số lượng tham số giảm đáng kể so với việc sử dụng mạng nơ-ron kết nối toàn phần, bên cạnh đó, mạng nơ-ron tích chập cũng tận dụng sự liên quan của các vùng dữ liệu gần nhau, do đó kết quả từ mạng nơ-ron tích chập cũng cho kết quả tốt hơn. Từ khi ra đời, nhiều mô hình mạng nơ-ron tích chập đã được phát triển. Càng ngày, kích thước của các mô hình mạng nơ-ron tích chập càng tăng lên để phục vụ những nhiệm vụ phức tạp hơn và việc phát triển những mô hình tích chập mới vẫn đang là một chủ đề đáng được quan tâm.
Tham khảo
[1] CS231n, Convolutional Neural Networks for Visual Recognition, Stanford University, http://cs231n.stanford.edu/
[2] Aston Zhang, Zack C. Lipton, Mu Li, and Alex J. Smola (2021), Dive into Deep Learning.
[3] vdumoulin, fvisin (2016), A technical report on convolution arithmetic in the context of deep learning, https://github.com/vdumoulin/conv_arithmetic
[4] Nttuan8, Convolutional neural network, https://nttuan8.com/bai-6-convolutional-neural-network/?fbclid=IwAR0mZBY7GQ4z-WvOvll1xxLx1llhuSaPuvtbpMHZzqoq6vxDRAy09lk3AUw
[5] EasyTensorFlow, Convolutional Neural Networks (CNNs), https://www.easy-tensorflow.com/tf-tutorials/convolutional-neural-nets-cnns
[6] Aurélien Géron, 2019, Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow: Concepts, Tools, and Techniques to Build Intelligent Systems, 2nd ed.
[7] Matthew D Zeiler, Rob Fergusm, Visualizing and Understanding Convolutional Networks, arXiv:1311.2901, 2013.
[8] Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke, Andrew Rabinovich, Going Deeper with Convolutions, arXiv:1409.4842, 2014.
[9] Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun, Deep Residual Learning for Image Recognition, arXiv:1512.03385, 2015.
[10] Haoning Lin, Zhenwei Shi, and Zhengxia Zou, Maritime Semantic Labeling of Optical Remote Sensing Images with Multi-Scale Fully Convolutional Network, 2017/05/14, https://www.researchgate.net/publication/316950618_Maritime_Semantic_Labeling_of_Optical_Remote_Sensing_Images_with_Multi-Scale_Fully_Convolutional_Network
[11] Ioannis (Yannis) Gkioulekas, 16-385 Computer Vision Spring 2020, Lecture 22, http://www.cs.cmu.edu/~16385/