Các mô hình CNN có một kiến truc tương tự nhau. Về mặt kỹ thuật, các mô hình CNN dung để đào tạo và kiểm tra, mỗi hình ảnh đầu vào sẽ chuyển nó qua một loạt các lớp chập với các bộ lọc (Kernals)
- Lớp Convolutional: Dùng để trích xuất các đặc trưng. - Lớp non-linearity: Giới thiệu phi tuyến tính cho hệ thống. - Lớp Pooling: Giảm số lượng trọng số và kiểm soát overfitting. - Lớp Fully-Connected: Mạng thần kinh tiêu chuẩn để phân loại.
14
Hình 2.8 Cấu trúc mạng CNN
2.3.2.1 Lớp Convolutional
Convolution là lớp đầu tiên để trích xuất các tính năng từ một hình ảnh đầu vào. Convolution duy trì mối quan hệ giữa các pixel bằng cách tìm hiểu các đặc trưng hình ảnh bằng cách sử dụng các ô vuông nhỏ của dữ liệu vào. Đây là một hoạt động toán học có hai đầu vào như ma trận hình ảnh và bộ lọc hoặc hạt nhân.
Trong Hình 2.10, ở phía trên bên trái là đầu vào của lớp tích chập là ví dụ cho hình ảnh đầu vào. Bên phải là bộ lọc tích chập còn được gọi là kernel, chúng ta sẽ sử dụng các thuật ngữ này thay thế cho nhau. Đây được gọi là tích chập 3x3 do hình dạng của bộ lọc.
Hình 2.9 Đầu vào và bộ lọc của convolutional layer (a) Hình ảnh đầu vào, (b) kernel
Khối xây dựng chính của CNN là lớp chập. Convolution là một phép toán để hợp nhất hai bộ thông tin. Trong trường hợp của chúng ta, tích chập được áp dụng trên dữ liệu đầu vào bằng bộ lọc tích chập để đưa ra bản đồ đặc trưng như trong hình 2.11 và hình 2.12.
15
Hình 2.10 Hoạt động tích chập CNN
(a) (b)
Hình 2.11 Kết quả của hoạt động tích chập (a) Làm mờ ảnh, (b) Phát hiện cạnh
Công thức toán học của phép toán tích chập
(𝐼 ∗ 𝐾)𝑥𝑦 = ∑ℎ𝑖=1∑𝑤𝑗=1𝐾𝑖𝑗 ∙ 𝐼𝑥+𝑖−1,𝑦+𝑖−1 (2.1)
Trong đó I là hình ảnh đầu vào, K là kích thước bộ lọc ℎ × 𝑤
Chúng ta thực hiện thao tác tích chập bằng cách trượt bộ lọc này qua đầu vào. Tại mỗi vị trí, chúng ta thực hiện phép nhân ma trận phần tử và tính tổng kết quả. Tổng này được đưa vào bản đồ đặc trưng. Vùng màu đỏ nơi hoạt động tích chập diễn ra được gọi là trường tiếp nhận. Do kích thước của bộ lọc, trường tiếp nhận cũng là 3x3. Kích thước đầu ra của lớp chập được xác định bởi kích thước của đầu vào và kích thước của cửa sổ trượt nhân chập. Giả sử kích thước đầu vào là ℎ × 𝑤 và kích thước của cửa sổ nhân chập là 𝑘ℎ × 𝑘𝑤, thì kích thước đầu ra sẽ là:
(ℎ − 𝑘ℎ + 1) × (𝑤 − 𝑘𝑤 + 1) (2.2)
Ví dụ như trong hình 2.11, hình ảnh đầu vào có kích thước là 7x7 và bộ lọc có kích thước là 3x3, đầu ra sẽ có kích thước là (7-3+1) × (7-3+1) hay 5×5.
16 Trong hình 2.13, nếu chúng ta sử dụng 10 bộ lọc khác nhau, chúng tôi sẽ có 10 bản đồ đặc trưng có kích thước 32x32x1 và xếp chúng dọc theo chiều sâu sẽ cho chúng ta đầu ra cuối cùng của lớp tích chập: kích thước đầu ra 32x32x10 được hiển thị dưới dạng hộp lớn màu xanh phía bên phải. Lưu ý rằng chiều cao và chiều rộng của bản đồ đặc trưng không thay đổi và vẫn là 32, đó là do phần đệm sẽ được giải thích ở phần sau.
Hình 2.12 Thực hiện nhiều phép tích chập trên một đầu vào
Hình 2.13. Hoạt động tích chập cho mỗi bộ lọc
2.3.2.2 Lớp non-linearity
Sau mỗi lớp convolutional thường có một lớp non-linearity. Mạng NN hoạt động giống như một nhận thức duy nhất, bởi vì tổng tất cả các lớp vẫn sẽ là một hàm tuyến tính, có nghĩa là đầu ra có thể được tính là sự kết hợp tuyến tính của các đầu vào. Lớp này còn được gọi là lớp kích hoạt vì ở đây sử dụng một trong các hàm kích hoạt. Trước đây, các hàm phi tuyến như sigmoid và tanh thường được sử dụng, nhưng hàm cho kết quả tốt nhất khi nói đến tốc độ đào tạo của mạng NN là hàm ReLU. Vì vậy, lớp này thường là ReLU, loại bỏ tuyến tính bằng cách đặt các giá trị dưới 0 đến 0 do hàm ReLU được mô tả - 𝑓(𝑥) = max (0, 𝑥)
2.3.2.3 Stride và Padding
Stride chỉ định mức độ chúng ta di chuyển bộ lọc tích chập ở mỗi bước. Theo mặc định, giá trị này là 1. Chúng ta có thể có những bước tiến lớn hơn nếu chúng ta muốn ít chồn chéo hơn giữa các trường tiếp nhận. Điều này cũng làm cho bản đồ đặc trưng có kết quả nhỏ hơn.
17 Hình dưới đây thực hiện stride là 2, bản đồ đặc trưng đã nhỏ hơn. Nói chung, khi stride của chiều cao là 𝑠ℎ và stride của chiều rộng là 𝑠𝑤, kích thước đầu ra là:
[(ℎ − 𝑘ℎ + 𝑠ℎ)/𝑠ℎ] × [(𝑤 − 𝑘𝑤 + 𝑠𝑤)/𝑠𝑤] (2.3)
Hình 2.14 Stride 2
(a) Hình ảnh đầu vào 7x7, (b) bản đồ đặc trưng
Hình 2.15 cho thấy kết quả khi thực hiện tích chập 3x3 với stride là 2. Chúng ta thấy rằng kích thước của bản đồ đặc trưng là 3x3 nhỏ hơn đầu vào 7x7.
Hình 2.16 cho thấy rằng nếu chúng ta muốn bản đồ đặc trưng có kích thước giống hình ảnh đầu vào, chúng ta có thể sử dụng padding để bao quanh đầu vào bằng các số không. Vùng màu xám xung quanh đầu vào là padding. Chúng ta hoặc pad với số không hoặc pad với các giá trị bên cạnh. Bấy giờ bản đồ đặc trưng có cùng kích thước với đầu vào. Padding thường được sử dụng trong CNN để duy trì kích thước của cac bản đồ đặc trưng, nếu không chúng sẽ co lại ở mỗi lớp.
Nếu chúng ta thêm tổng số hàn đệm 𝑝ℎ và tổng số cột đệm 𝑝𝑤, hình ảnh đầu ra sẽ là:
(ℎ − 𝑘ℎ + 𝑝ℎ + 1) × (𝑛𝑤 − 𝑘𝑤+ 𝑝𝑤 + 1) (2.4)
Hình 2.15 Áp dụng padding cho hình ảnh đầu vào (a) ma trận hình ảnh đầu vào, (b) ma trận đặc trưng
18
2.3.2.4 Lớp pooling
Pooling layer thường được dùng giữa các convolutional layer, để giảm kích thước dữ liệu nhưng vẫn giữ được các thuộc tính quan trọng. Kích thước dữ liệu giảm giúp giảm việc tính toán trong model.
Có hai loại pooling layer phổ biến là: max pooling và average pooing.
Hình 2.16 Ví dụ về các loại pooling
Loại pooling phổ biến nhất là max pooling, chỉ lấy giá trị tối đa ở cửa sổ tiếp nhận. Trái với hoạt động tích chập, pooling không có tham số. Nó trượt một cửa sổ qua đầu vào của nó và chỉ cần lấy giá trị tối đa trong cửa sổ. Tương tự như convolution layer, chúng tôi chỉ định kích thước của kernel và stride.
Hình 2.17 Max pooling
Trong hình 2.18, sử dụng max pooling với cửa sổ 2x2 trên hình ảnh 4x4. Bộ lọc chọn số lượng lớn nhất của phần hình ảnh mà nó bao phủ. Bằng cách này, kết thúc với các đại diện nhỏ hơn chứa đủ thông tin cho mạng thần kinh của để đưa ra quyết định chính xác. Nếu đầu vào của lớp gộp có kích thước 32x32x10, sử dụng cùng một
19 tham số pooling được mô tả ở trên, kết quả sẽ là bản đồ tính năng 16x16x10, được hiển thị trong Hình 2.19
Hình 2.18 Max pooling sử dụng cho nhiều lớp
Cả chiều cao và chiều rộng của bản đồ đặc trưng đề bị giảm một nửa, nhưng độ sâu không thay đổi vì nhóm hoạt động độc lập trên mỗi độ sâu cắt đầu vào.
Bằng cách giảm một nửa chiều cao và chiều rộng, chúng tôi đã giảm số lượng trọng số xuống còn 1/4 của đầu vào. Xem xét rằng chúng ta thường đối phó với hang triệu trọng số trong kiến trúc CNN, việc giảm này là một vấn đề khá lớn. Trong kiến trúc CNN, pooling thường được thực hiện với cửa sổ 2x2, stride 2 và không có padding. Trong khi tích chập được thực hiện với cửa sổ 3x3, stride 1 với padding.
2.3.2.5 Lớp fully connected
Sau khi ảnh được truyền qua nhiều convolutional layer và pooling layer thì model đã học được tương đối các đặc điểm của ảnh (ví dụ mắt, mũi, khung mặt, …) thì output của layer cuối cùng có kích thước ℎ × 𝑤 × 𝑑 sẽ được chuyển về một vector kích thước ((ℎ × 𝑤 × 𝑑)
Hình 2.19 Thao tác làm phẳng
20 Cuối cùng, thực hiện lớp kết nối đầy đủ như trong hình 2.20 Lớp này lấy đầu vào từ quá trình làm phẳng, cấp dữ liệu và chuyển tiếp nó qua mạng thần kinh.
Hình 2.20 Lớp Fully-Connected