Các phương pháp đánh giá mô hình cnn năm 2024
Đây sẽ là một bài giới thiệu sơ lược về các kiến trúc CNN kinh điển nhất bắt đầu từ AlexNet năm 2012, tới những mô hình được cải tiến sau này như VGG, ResNet, Inception, MobileNet, … Mọi người có thể xem đây là một bài review qua những kĩ thuật nổi bật được sử dụng trong các mô hình CNN và có thể áp dụng trong thực tế khi xây dựng các mô hình sau này. I. Giới thiệuĐây sẽ là một bài giới thiệu sơ lược về các kiến trúc CNN kinh điển nhất bắt đầu từ AlexNet năm 2012, tới những mô hình được cải tiến sau này như VGG, ResNet, Inception, MobileNet, … Mô hình CNN qua các năm ở các cuộc thi ImageNet Large Scale Visual Recognition Challenge Nhóm các mô hình này được xây dựng dựa trên các lớp tích chập làm chủ đạo, ban đầu được sử dụng cho các bài toán Phân loại ảnh. Tới năm 2012, sự xuất hiện và thành công của AlexNet đã làm mọi người chú ý tới hướng đi này, lịch sử của nhóm mô hình này chỉ chưa được 10 năm nhưng đã tạo nên một nhánh riêng cho các mô hình máy học - các mô hình Deep learning. Tuy vậy, khởi nguồn của các mô hình CNN đã có từ năm 1998 với mô hình CNN đầu tiên của Yann LeCun, mô hình tuy không quá nổi bật nhưng đã đặt ra nền tảng cho sự ra đời sau này ở năm 2012. Tiếp theo mình sẽ đưa ra sơ lược về các mô hình CNN theo thứ tự thời gian, cũng như các cải tiến của những mô hình sau so với mô hình trước, một số các case study chúng ta có thể áp dụng. Sự phát triển qua các năm và các hướng phát triển chính của mô hình CNN II. Mô hình đầu tiên - LeNet-5:Đây là mô hình do Yann LeCun và cộng sự tạo ra cho bộ dữ liệu MNIST cho chữ số viết tay với kích thước 28x28. Các mô hình trước đây sử dụng các kiến trúc mạng nơ-ron như sử dụng các Multi-layer Peceptron (mạng nơ-ron truyền thẳng) và cuối cùng đưa vào một lớp softmax để phân loại. Yann LeCun đã cải tiến và sử dụng thêm các lớp CNN với 2 mục tiêu sau:
Mọi người có thể tham khảo code mình tự implement tại đây. Một số điểm đáng chú ý ở mô hình LeNet-5 lúc này làm nền tảng cho các mô hình sau như:
Mọi người có thể đọc thêm về paper LeNet-5 tại đây. Có khá nhiều lý giải của tác giả về lý do lựa chọn kiến trúc này. Trong bài báo gốc thực tế tác giả không sử dụng các FC Layer ở cuối, mà sử dụng các kết nối các nơ-ron qua các hàm Gaussian RBF, nhưng ta có thể hiểu nó có tác dụng tương tự các FC Layer với kiến trúc MLP. Tuy nhiên, dù có kết quả trên bộ MNIST khá tốt, nhưng mô hình CNN đầu tiên này vẫn ít nhận được sự chú ý, và với việc có những hạn chế về kĩ thuật lúc đấy nên LeNet-5 vẫn chưa thể vượt qua được các mô hình Machine Learning truyền thống như Support Vectors Machine. Các mô hình Computer Vision lúc đấy đa phần được tạo ra từ những hand-crafted feature (đặc trưng thủ công) như SIFT, HOG, … Cách tạo ra các đặc trưng dựa nhiều vào kinh nghiệm của những người làm khoa học, và cách họ phân tích dữ liệu. Về sau, giới khoa học dần tạo ra một bộ dữ liệu cực lớn và tiến hành kiểm định các mô hình qua các năm, đó là lý do năm 2010 cuộc thi ILSVRC được tạo ra với bộ dữ liệu ImageNet cực lớn với 14 triệu ảnh và hơn 20000 lớp để phân loại. Ngoài ra một nhân tố giúp cho các mô hình CNN cất cánh đó chính là các công cụ tính toán, với sự ra đời của các GPU và Nvidia hỗ trợ đã giúp cho các mô hình tận dụng khả năng tính toán song song mạnh mẽ hơn. III. AlexNet:AlexNet là mô hình chiến thắng tại ILSVRC năm 2012, với một khoảng cách độ lỗi giảm rất lớn so với mô hình năm trước từ 25.8 xuống còn 16.4, đó là một kết quả rất khó tin. Mọi người có thể tham khảo code implement của mình cho mô hình AlexNet tại đây. Một số cải tiến đáng chú ý so với LeNet-5 Nhìn chung AlexNet sử dụng đúng các nền tảng của LeNet từ năm 1998 với 1 số chỉnh sửa đáng chú ý:
Average Pooling Max Pooling Ngoài ra AlexNet còn một vài điểm thay đổi khác:
IV. ZFNet:ZFNet không phải là mô hình vô địch ILSVRC năm 2013, tuy nhiên mô hình vô địch năm đó là Clarifai là một mô hình được phát triển dựa trên ZFNet và cùng chung tác giả với ZFNet. ZFNet nhìn chung là mô hình kế thừa hoàn toàn lại kiến trúc của AlexNet và đưa ra một số chỉnh sửa. ZFNet còn cung cấp một kĩ thuật gọi là deconvnet nhằm visualize các đặc trưng học được và từ đó đưa ra các nhận xét về AlexNet để cải tiến. Kĩ thuật deconvnet cho việc visualization Ta biết rằng các module cơ bản của CNN từ mô hình AlexNet là: Convolution Layer + ReLU + Max Pooling. Kĩ thuật deconvnet sẽ đảo ngược các lớp và thứ tự tính toán đó, sau đó tiến hành và đưa các kết quả lên tương ứng với các pixel, từ đó ta có thể quan sát các giá trị học được và tương tác với vùng điểm ảnh đó. Các lớp nghịch đảo sau tuy không lấy lại đúng các giá trị chính xác tham số học, nhưng cũng cho ta đánh giá phần nào về kết quả huấn luyện. 1. UnPooling: Đưa ra các kết quả đảo ngược từ các lớp Max Pooling 2. Rectification. Hàm kích hoạt là ReLU sẽ giữ các tín hiệu với giá trị dương và các giá trị âm được đưa về 0, với lớp Rectification này chúng ta chỉ có thể tiếp tục áp dụng ReLU 1 lần nữa để lấy các giá trị dương. 3. Deconvolution: Đây là phép tính nghịch đảo với Convolution và được áp dụng để lấy lại các kết quả trước khi Convolution. Visualization một số lớp CNN từ AlexNet Với lớp CNN thứ 1 và 2, tác giả ZFNet đưa ra các kết luận là ở 2 lớp này mô hình học được các đặc trưng cấp thấp. Tuy nhiên ở lớp 2 đang gặp vấn đề là Aliasing Problem, là một vấn đề trong xử lý tín hiệu số khi mà các tần số bị lẫn vào nhau, khó phân biệt được. Lớp thứ 1, 2 của AlexNet khi visualize Lớp CNN thứ 1 chỉ chứa các tần số cao và thấp, hoàn toàn thiếu đi tần số trung bình. Lớp CNN thứ 2 bị hiện tượng Aliasing, tác giả đưa ra lý do vì lớp CNN trước sử dụng stride 4 và các tín hiệu bị thưa đi, không còn rõ ràng. Ở lớp CNN thứ 3, các tham số dần học được các pattern như dạng lưới, dạng chữ, biên cạnh. Lớp 3 của AlexNet Ở lớp CNN thứ 4, 5 ta thấy các tham số hình thành đã học được các đặc trưng phức tạp như khuôn mặt chó mèo, hình dáng của các vật thể trong hình ảnh, … Cải tiến so với AlexNet Từ các visualization từ mô hình AlexNet, tác giả của ZFNet đã đưa ra các cải tiến dựa trên việc chỉnh sửa 1 số hyperparameter như sau: 1. Giảm kernel size của lớp CNN đầu tiên từ 11x11 thành 7x7. Hình b chính là kết quả cải thiện của ZFNet, ta thấy được các đặc trưng học đã gồm nhiều tín hiệu tần số trung bình, ít các tín hiệu tần số cao hoặc thấp đi. 2. Chỉnh sửa stride của lớp CNN đầu tiên từ 4 thành 2, nhìn chung ta thấy các đặc trưng tín hiệu học được đã mượt hơn, dễ tách biệt hơn. Mô hình tổng quát và kết quả thực nghiệm Từ 2 chỉnh sửa nhỏ ở lớp đầu tiên (cũng như 1 số lớp khác), ZFNet đã vượt qua AlexNet. Đạt mức lỗi 16% trên tập validation top-5. Kết quả độ lỗi của ZFNet với nhiều chỉnh sửa ở các lớp so với AlexNet Mô hình tổng quát của ZFNet V. VGG:Sau những thành công của AlexNet và sau đó là ZFNet, giới nghiên cứu bị thuyết phục bởi những kết quả ấn tượng từ CNN. Tuy nhiên các mô hình nhìn chung được chỉnh sửa mang nhiều công đoạn code phức tạp, chưa có một mẫu chung để lựa chọn các tham số cho các lớp như kernel size, stride, padding, … VGG ra đời và đã tạo nên một kiểu mẫu tạo ra mô hình mà chúng ta đều có thể áp dụng được dễ dàng và tạo ra các mô hình large scale với hàng triệu tham số. Cách chọn kernel size, filter, stride, padding cho Convolution Thay vì sử dụng một kernel size lớn, VGG chỉ sử dụng các kernel size 3x3 cho tất cả lớp Convolution, với stride 1 và padding 1. Khi đưa qua các lớp convolution này, kích thước ảnh WxH không thay đổi. Ý tưởng cơ bản của tác giả VGG đưa ra đó là việc sử dụng 3 lớp convolution 3x3 hiệu quả hơn so với sử dụng 1 lớp convolution 7x7 của ZFNet. Đầu tiên về mặt đặc trưng, 3 lớp 3x3 với các channel lớn sẽ tối đa hóa sự đa dạng các đặc trưng học được hơn vì ta sử dụng tới 3 lần biến đổi phi tuyến. Thứ hai, về số lượng tham số kernel, 1 lớp convolution 7x7 có số tham số 1 × (7 × 7) × C = 49C, với C là số lượng filter của convolution, đối với 3 lớp convolution 3x3 ta chỉ có 3 × ( 3 × 3 ) × C = 27C, ít hơn hẳn nhưng vẫn giữ nguyên vùng nhận thức. Max Pooling VGG sử dụng các lớp Convolution để học đặc trưng, và các lớp Max Pooling để downsampling, các lớp Max Pooling có kernel size 2, stride 2. Khi đưa qua lớp Max Pooling này, kích thước của ảnh sẽ giảm đi 1/2. Scale up các đặc trưng Đây là mô hình đầu tiên sử dụng các lớp Convolution liên tiếp nhau trước khi sử dụng Max Pooling, VGG dùng số lượng filter của các lớp Convolution lũy thừa của 2 như 64, 128, 256, 512. Mô hình VGG nhìn chung là một mô hình có số lượng tham số cực lớn với hơn 128 triệu tham số, không gian lưu trữ của mô hình ước tính khoảng trên 600Mb. Kiến trúc tổng quan Từ đây ta thuộc nằm lòng mẫu thiết kế của VGG vì chúng lặp lại nhau, khi đi vào các lớp sâu hơn, kích thước channel sẽ tăng theo lũy thừa 2, và kích thước ảnh sẽ được giảm đi một nửa dần dần. Các cấu hình khác nhau của VGG Mô hình tổng quan khi so sánh VGG16 và VGG19 với AlexNet Mọi người có thể tham khảo code implement các cấu hình của mô hình VGG tại đây. Kết quả thực nghiệm Sau những thành công của AlexNet và sau đó là ZFNet, giới nghiên cứu bị thuyết phục bởi những kết quả ấn tượng từ CNN. Tuy nhiên các mô hình nhìn chung được chỉnh sửa mang nhiều công đoạn code phức tạp, chưa có một mẫu chung để lựa chọn các tham số cho các lớp như kernel size, stride, padding, … Kết quả của mô hình VGG so với các mô hình trước đó Mô hình VGG vượt qua kết quả mô hình Clarifai trước đây với top-5 error giảm một nửa và ngang ngửa với mô hình cùng thời điểm đó là GoogleLeNet (sẽ được giới thiệu sau). Tổng kết cho phần 1Sau phần 1, chúng ta đã biết qua các mô hình CNN đầu tiên với các nhận xét sau:
Bây giờ, người ta chủ yếu chỉ còn sử dụng VGG cho 1 số task như Face Recognition, tuy nhiên vẫn còn hạn chế do kích thước mô hình rất lớn. Các mô hình còn lại như AlexNet, ZFNet không còn được sử dụng làm backbone nữa. |