1.3 Mạng nơron tích chập
1.3.2 Xây dựng mạng nơron tích chập
1.3.2.1 Mạng được kết nối cục bộ
Trong xử lý hình ảnh, thơng tin của hình ảnh là các điểm ảnh (pixel). Nếu sử dụng mạng được kết nối đầy đủ, chúng ta sẽ có rất nhiều tham số. Ví dụ, một hình ảnh RGB có kích thước 512x512 pixel sẽ có 786432 (= 512 x 512 x 3) tham số đầu vào. Vì vậy, nếu chúng ta sử dụng kiến trúc mạng nơ ron trong hình sau:
Hình 1.19: Hình ảnh một mạng nơ ron được kết nối đầy đủ
Hình trên cho thấy nếu áp dụng mạng nơ ron được kết nối đầy đủ, tồn bộ kiến trúc mạng sẽ cần tính tốn hơn 3 triệu nơ ron. Số lượng lớn các nơ ron làm cho tồn bộ q trình học rất chậm và dẫn đến q tải so với khả năng tính tốn của máy tính hiện tại.
Qua một vài nghiên cứu về xử lý ảnh, các nhà nghiên cứu nhận thấy rằng các tính năng trong một hình ảnh thường là cục bộ, và các nhà nghiên cứu chú ý đến các tính năng cấp thấp đầu tiên khi xử lý ảnh. Vì vậy, kiến trúc mạng có thể chuyển mạng được kết nối đầy đủ sang mạng được kết nối cục bộ, nhằm làm giảm độ phức tạp của tính tốn. Đây là một trong những ý tưởng chính trong CNN. Chúng ta có thể thấy rõ hơn qua hình sau:
Hình 1.20: Tích chập một ma trận nhỏ để tạo ra dữ liệu đầu vào cho một nơ ron tầng ẩn
Giống như xử lý hình ảnh thơng thường, chúng ta có thể kết nối cục bộ một khối vng ma trận với nơ ron. Kích thước khối thơng thường là 3x3, 5x5, hoặc 7x7. Ý nghĩa
xử lý ảnh). Bằng cách đó, số lượng tham số có thể giảm xuống rất nhỏ nhưng khơng gây ra giảm hoặc mất thông tin, vì hình ảnh thơng thường thường có tính lặp trong khơng gian. Để trích xuất nhiều thơng tin hơn, các mạng nơ ron kết nối khối cùng với một nơ ron khác. Độ sâu trong các tầng là số lần chúng ta kết nối một khu vực với các nơ ron khác nhau. Ví dụ, mạng kết nối cùng một khu vực với 5 nơ ron khác nhau. Vì vậy, độ sâu là năm trong tầng mới. Chúng ta có thể thấy rõ hơn qua hình sau:
Hình 1.21: Ví dụ về lớp tích chập
Trong thực tế, có thể kết nối tất cả thơng tin độ sâu (ví dụ: kênh 3 RGB) với nơ ron tiếp theo vì kết nối là cục bộ trong khơng gian và có chiều sâu đầy đủ. Tuy nhiên ở ví dụ này chỉ kết nối thơng tin cục bộ về chiều cao và chiều rộng. Vì vậy, có thể có
các tham số trong hình trên cho nơ ron sau lớp màu xanh nếu chúng ta sử dụng cửa sổ . Biến thứ nhất và thứ hai là chiều cao và chiều rộng của kích thước cửa sổ và biến thứ ba là độ sâu của lớp.
Ví dụ này di chuyển cửa sổ bên trong hình ảnh và làm cho tầng tiếp theo cũng có chiều cao và chiều rộng, và là một hai chiều. Ví dụ: nếu chúng ta di chuyển cửa sổ 1 pixel mỗi lần, gọi là bước nhảy là 1, trong một hình ảnh và kích thước cửa sổ là sẽ có các nơ ron ở tầng tiếp theo. Có thể thấy rằng, kích thước đã giảm từ 32 xuống 28. Vì vậy, để bảo tồn kích thước, chúng ta thêm phần trống vào đường viền. Quay lại ví dụ trên, nếu chúng ta đệm với 2 pixel, có
các nơ ron ở lớp tiếp theo để giữ kích thước chiều cao và chiều
rộng. Như ví dụ trên, nếu chúng ta sử dụng kích thước cửa sổ w, chúng ta sẽ có 1 vùng được tích chập với kích cỡ của cửa sổ mới là pixel. Thông tin đường viền sẽ khơng ảnh hưởng nhiều vì những giá trị đó chỉ được sử dụng một lần.
Phần kế tiếp sẽ chi tiết hơn về bước nhảy của cửa sổ trượt, tức khoảng cách thay đổi của cửa sổ mỗi lần. Ví dụ: giả sử bước nhảy là 2 và cửa sổ trượt bao phủ vùng
Sau đó, cửa sổ thứ hai bao phủ vùng và cửa sổ thứ 3 bao phủ vùng
Ví dụ, nếu chúng ta sử dụng bước nhảy 1 và kích thước cửa sổ trong hình ảnh và khơng sử dụng bù viền (pad-zero), thì chúng ta sẽ có các nơ ron ở lớp tiếp theo. Nếu chúng ta thay đổi bước nhảy 1 thành bước nhảy 2 và những tham số khác vẫn giữ nguyên, thì chúng ta sẽ có có
những nơ ron ở lớp tiếp theo. Chúng ta có thể kết luận rằng nếu chúng
ta sử dụng bước nhảy s, kích thước cửa sổ trong ảnh , thì sẽ có các nơ ron ở lớp tiếp theo. Khi chúng ta sử dụng bước nhảy 3 và những tham số khác vẫn giữ nguyên thì chúng ta sẽ nhận được Vì kết quả khơng phải là số ngun, nên bước nhảy 3 khơng thể dùng vì chúng ta khơng thể có được một khối hồn chỉnh trong một mạng nơ ron.
1.3.2.2 Chia sẻ tham số
Trong ví dụ minh họa của mục 1.3.2.1, ta sẽ có số lượng là nơ ron ở tầng tiếp theo có bước nhảy 1, kích thước cửa sổ 5 x 5 và khơng có đệm, với độ sâu là 5. Mỗi nơ ron sẽ có tham số. Vì vậy, trong tầng tiếp theo sẽ có tham số. Ở đây, chúng ta có thể chia sẻ các tham số theo từng độ sâu, do đó nơ ron ở mỗi tầng ẩn sẽ sử dụng tham số giống nhau là , và tổng tham số sử dụng cho mỗi tầng là . Điều này làm số lượng tham số giảm một cách đáng kể. Tương tự, các nơ ron ở mỗi độ sâu trong tầng tiếp theo sẽ áp dụng tích chập cho tầng trước đó. Và q trình học tập giống như học lõi (core) tích chập. Đây là lý do mà các mạng nơ ron này được gọi là mạng nơ ron tích chập.
1.3.2.3 Hàm kích hoạt
Trong mơ hình nơ ron truyền thống, các mạng thường sử dụng hàm sigmoid cho hàm kích hoạt. Tuy nhiên Krizhevsky [21] đã thử với hàm kích hoạt RELU. Sau khi so
sánh hiệu quả của hàm kích hoạt RELU và hàm kích hoạt sigmoid trong CNNs. Họ thấy rằng mơ hình với RELU cần ít thời gian lặp hơn trong khi đạt tỷ lệ lỗi khi huấn luyện tương đương. Chúng ta có thể thấy kết quả trong hình sau:
Hình 1.22: So sánh giữa ReLU và Sigmoid.
Như hình trên, đường liền nét là mơ hình sử dụng RELU và đường đứt nét là sử dụng hàm Sigmoid. Có thể dễ dàng thấy rằng, RELU cần ít vịng lặp hơn để đạt tỉ lệ lỗi chấp nhận được. Do đó, ngày nay đa số các mơ hình CNN gần đây sử dụng RELU để làm hàm kích hoạt.
1.3.2.4. Tầng gộp
Tầng gộp sẽ giảm kích cỡ của hình ảnh ngay sau khi thực hiện tích chập, giúp giữ lại các đặc điểm, tính chất nổi bật nhất của ảnh. Điều này cho phép giảm mức độ tính tốn khi hình ảnh có kích thước q lớn, đồng thời khơng làm mất đi các đặc điểm quan trọng của ảnh.
Tuy đã sử dụng các mạng được kết nối cục bộ và chia sẻ tham số, tuy nhiên số lượng tham số trong mang nơ ron vẫn là quá lớn. So với một tập dữ liệu tương đối nhỏ, nó có thể gây ra tình trạng q khớp (overfitting). Vì vậy, mạng nơ ron nhân tạo thường chèn các tầng gộp vào mạng. Tầng gộp xử lý để giảm dần số lượng tham số nhằm cải thiện thời gian tính tốn trong mạng nơ ron. Tầng gộp áp dụng lấy mẫu xuống cho tầng trước bằng cách sử dụng hàm max. Tầng gộp hoạt động độc lập trên mỗi tầng trước đó. Ngồi ra, có
thể đặt lượng pixel khi chúng ta di chuyển cửa sổ trượt hoặc bước nhảy, như làm với tầng tích chập. Ví dụ, trong hình sau:
Hình 1.23: Ví dụ minh họa đơn giản về tầng gộp
Ở ví dụ trên, kích thước cửa sổ trượt là và bước nhảy mỗi lần trượt là 2. Tại mỗi cửa sổ, hàm max sẽ lấy giá trị tối đa để đại diện cho giá trị của tầng tiếp theo. Có hai loại tầng gộp: Nếu kích thước cửa sổ trượt bằng bước nhảy, đó là gộp chung (traditional pooling). Nếu kích thước cửa sổ trượt lớn hơn bước nhảy, đó là gộp nhóm (overlapping pooling). Trong thực tế, các mạng nơ ron thường sử dụng kích thước cửa sổ cùng kích thước bước nhảy là 2 trong gộp chung và sử dụng kích thước cửa sổ cùng kích thước bước nhảy là 2 trong gộp nhóm, vì nếu tăng kích cỡ cửa sổ sẽ rất dễ làm mất các đặc tính của dữ liệu.
Ngồi việc gộp sử dụng hàm max, người ta có thể sử dụng các hàm khác. Ví dụ người ta có thể sử dụng hàm tính trung bình của cửa sổ trượt để tính tốn giá trị cho tầng tiếp theo, được gọi là gộp trung bình.
1.3.2.5. Tầng được kết nối đầy đủ
Tầng thứ ba là tầng được kết nối đầy đủ. Tầng này giống như mạng nơ ron truyền thống: các nơ ron ở tầng trước sẽ kết nối với một nơ ron ở tầng tiếp theo và tầng cuối cùng là đầu ra. Để có thể đưa hình ảnh từ những tầng trước vào, ta phải dàn phẳng dữ liệu ra thành một véc tơ nhiều chiều. Cuối cùng là sử dụng hàm softmax để thực hiện phân loại đối tượng
Hình 1.24: Một ví dụ của lớp được kết nối đầy đủ
1.3.2.6 Mơ hình q khớp
Cấu trúc của một mạng CNN rất lớn, trong mạng có rất nhiều nơ ron, kết nối, cũng như có rất nhiều trọng số cần thiết để huấn luyện. Nhưng lượng dữ liệu huấn luyện thường không đủ để huấn luyện hồn thiện cho một mạng nơ ron lớn. Nó có thể gây ra một số vấn đề về quá khớp, khiến cho khi huấn luyện có kết quả rất cao, nhưng áp dụng thực tế gây ra sai số lớn. Có một số kỹ thuật để cải thiện điều này.
Hình 1.25: Ví dụ về trường hợp q khớp (bên trái) và trường hợp chuẩn (bên phải)
Một trong những phương pháp đó là là giảm trọng số trong lúc huấn luyện. Dropout là một trong những kỹ thuật nổi tiếng và khá phổ biển để khắc phục vấn đề này. Dropout đặt đầu ra của mỗi nơ ron ẩn thành 0 với xác suất 0,5. Vì vậy, các nơ ron này sẽ khơng đóng góp vào lan truyền tiến, do đó và sẽ không tham gia vào lan truyền ngược. Thông thường, đối với các đầu vào khác nhau, mạng nơ ron xử lý dropout theo một cấu trúc khác nhau.
Một cách khác để cải thiện việc việc quá khớp là tăng lượng dữ liệu. Chúng ta có thể phản chiếu hình ảnh, lộn ngược hình ảnh, lấy mẫu hình ảnh, v.v. Những cách này sẽ tăng số lượng dữ liệu huấn luyện. Vì vậy, nó có khả năng ngăn chặn q khớp. Với ví dụ
bước xoay, với mỗi lần từ 15 đến 20 độ cũng như áp dụng thêm phương pháp phản chiếu bức ảnh. Kết quả, hệ thống AI đã phát hiện cải thiện đáng kể việc nhận diện.
1.3.2.7. Một số mạng tích chập nổi tiếng
Có một số kiến trúc mạng nơ ron tích chập nổi tiếng. Một số thử nghiệm cho thấy chúng có hiệu suất tốt hơn. Vì vậy, đơi khi nhiều người sử dụng mạng được thiết kế sẵn thay vì tự thiết kế mạng. Ở các phần sau luận văn sẽ giới thiệu một vài mạng tích chập nổi tiếng và thơng dụng hiện nay.
AlexNet
Hình 1.26: Cấu trúc của AlexNet
Alex đã phát triển mạng này vào năm 2012. Cho tới thời điểm hiện tại, AlexNet vẫn còn đang được sử dụng phổ biến và rộng rãi. Mạng AlexNet có năm lớp chập và ba lớp kết nối đầy đủ. Cấu trúc trong AlexNet được chia thành hai khối. Nguyên nhân vì tác giả đã sử dụng hai GPU để huấn luyện dữ liệu song song. Mạng này được sử dụng trong phân loại đối tượng quy mơ lớn. Lớp đầu ra có một nghìn nơ ron. Đó là bởi vì kiến trúc ban đầu được thiết kế để phân loại một nghìn nhãn. Thơng thường, những người áp dụng kiến trúc mạng nơ ron AlexNet sẽ thay thế lớp cuối cùng, phụ thuộc vào mục đích của họ. Tác giả của mạng này đã làm nhiều thử nghiệm để có thể ra được mơ hình này có kết quả tốt nhất. Vì vậy, hiệu suất của cấu trúc này rất ổn định và mạng này được sử dụng rộng rãi trong nhiều ứng dụng.
VGGNet
VGGNet [10] được phát triển vào năm 2014 và đã giành chiến thắng trong cuộc thi ILSVRC-2014. Mạng này mạnh hơn mạng AlexNet nhưng rất sâu. Mạng này có 16 đến 19 tầng (Hình 1.21). Mạng này đã được thiết kế với 5 cấu trúc. Sau một số thí nghiệm, D và E là cấu trúc tốt nhất. Hiệu suất của E tốt hơn một chút so với B. Nhưng các tham số trong E lớn hơn D. Vì vậy, người sử dụng có thể chọn một trong số cấu trúc mạng dựa trên những gì họ cần. Đặc điểm của VGGNet là việc áp dụng nhiều lớp chập với kích
thước cửa sổ nhỏ thay vì lớp chập với kích thước cửa sổ lớn, sau đó là lớp gộp. Nó làm cho mạng linh hoạt hơn.