[ML – 20] Convolution Neural Network – Part 3

1. Convolution Layer:

Trong bài trước ta đã nói về convolution (tích chập), nhưng các bạn cũng thấy rằng những nội dung trong bài viết trước vẫn nói về những hàm số liên tục. Tuy nhiên với input là những bức ảnh, thông tin ta cần xử lý là rời rạc nên giờ ta sẽ xem với hàm số rời rạc tích chập được sử dụng như thế nào. Khi đó image và filter chính là 2 hàm số rời rạc. Số chiều của convolution chính là số hướng mà hàm filter có thể di chuyển được. Cụ thể như sau:
+ Convolution 1D: Tích chập 1 chiều sẽ chỉ cho phép hàm filter di chuyển theo 1 chiều, (nghĩa là image của ta phải convert về dạng vector) chính là độ dài của vector
https://www.youtube.com/watch?v=pOxlSDak8UI
+ Convolution 2D: Tích chập 2 chiều sẽ cho phép hàm filter di chuyển theo 2 chiều (theo cả width và height)
https://www.youtube.com/watch?v=ja2GfKHyCuQ
+ Convolution 3D: Tương tự ta cũng có tích chập 3 chiều là khi hàm filter có thể di chuyển thêm cả chiều sâu của ảnh nữa.
Ngoài việc lựa chọn filter của ta slide được theo những chiều nào, ta còn có thể kiểm soát được tốc độ slide của filter. Vì hàm số giờ đây không còn là liên tục nên tốc độ trượt của filter là có thể điều chỉnh. Như trên những hình minh hoạ trên tốc độ trượt là 1, theo mỗi chiều. Ta có thể điều chỉnh tốc độ này trên từng chiều của convolution. Nếu như tốc độ trượt cao, có thể một số nội dung của bức ảnh sẽ không được filter “nhấn mạnh”, nhưng bù lại giúp tốc độ tính toán nhanh hơn (vì số lượng phần ảnh thực hiện tích chập ít đi). Với những bức ảnh lớn, chiều dài và rộng lớn, việc tăng slide sẽ giúp giảm thiểu chi phí tính toán mà data không bị mất mát nhiều.
Sau khi tính tích chập với filter, ta chỉ cần cho kết quả đi qua hàm ReLU để loại bỏ hết những số âm.

2. Pooling Layer:

Pooling layer trong mạng CNN thực hiện công việc loại bỏ bớt những thông tin không cần thiết sau khi thực hiện tích chập. Điều này rất hữu ích khi ta sử dụng mạng cho ảnh có kích cỡ lớn (dimentional reduction). Tuy nhiên nếu lạm dụng loại layer này cũng có thể khiến data đi qua bị mất dữ liệu.
https://www.youtube.com/watch?v=5Hg5HDSUi0Q
Pooling ở đây ta sử dụng 1 “window”, cho window này trượt trên image sau khi convolution, tại mỗi thời điểm ta lấy giá trị lớn nhất của vùng image “nằm” trong window. Cụ thể:
Với Image 20×20, ta sử dụng window có dạng 2×2, thì tức là ta chia bức ảnh thành các ô trong đó mỗi ô gồm 4 pixel (2×2).

Sau khi loại bỏ hết những “pixel” không cần thiết, tại mỗi ô ta chỉ còn 1 giá trị duy nhất, điều này giúp cho kích thước của ảnh giảm xuống đáng kể. Với window có dạng 2×2, cứ mỗi 4 pixel được scale xuống 1 pixel -> giảm 75% số lượng giá trị trên matrix các điểm ảnh. Như hình trên ta có ảnh 20×20 (400 pixel) sau khi áp dụng Pooling sẽ chỉ còn 10×10 (100 pixel)

3. Fully-Connected Layer:

Cũng như khi sử dụng mạng ANN truyền thống để xử lý những data có dạng matrix như image. Ta cần flatten data về dạng vector, sau đó đưa vào ANN như bình thường. Hay nói cách khác phần Fully-Connected Layer (FC Layer) chính là một mạng NN được gắn vào phần cuối của CNNs. Phần FC-Layer này chính là nơi từ các feature được extract bởi phần convolution và pooling tạo ra kết quả cuối cùng (Classification hoặc Regression).

4. Variety of CNNs :

Hiện nay có một số cấu trúc CNN đạt được kết quả khả quan như:
LeNet: Đây là mô hình CNN thành công đầu tiên, đặc biệt là trong việc nhận dạng chứ số, kí tự trong văn bản. Được phát triển bởi Yann Lecun vào cuối nhưng năm 90.
AlexNet: Được phát triển bởi Alex Krizhevsky, Ilya Sutskever và Geoff Hinton. Lần đầu được giới thiệu vào năm 2012 với cấu trúc khá tương tự như LeNet nhưng với số lượng neuron, filter và layer lớn hơn. Được coi là mạng neural đầu tiên phổ biến rộng rãi khả năng của CNNs.
ZF Net: Là mạng CNNs tốt nhất năm 2013 được phát triển bởi Matthew Zeiler và Rob Fergus (ZF là viết tắt của Zeiler và Fergus). Mạng neural này được phát triển từ AlexNet với việc tinh chỉnh các hyperparameter (filter size, stride,…). Với nhưng layer gần input layer, filter size và stride nhỏ hơn.
GoogLeNet: Là mạng CNNs tốt nhất năm 2014 được phát triển bởi Szegedy từ Google. Với một số thay đổi như giảm thiểu số lượng tham số trong AlexNet từ 60 triệu xuống còn 4 triệu, sử dụng Average Pooling thay cho FC-Layer.
VGGNet: Là mạng CNNs tốt nhất năm 2015 được phát triển bởi Karen Simonyan và Andrew Zisserman. Sử dụng filter 3×3 và pooling 2×2 từ đầu tới cuối mạng.
ResNet: Là mạng CNNs tốt nhất năm 2015 được phát triển bởi Kaiming He et al (Viết tắt của Resividual Net). Bỏ qua FC-Layer ở cuối mạng, và sử dụng “special skip connection” và “batch normalization”. Và vẫn được tiếp tục phát triển, với kết quả gần nhất được publish vào tháng 3 năm 2016: Kaiming He et al. Identity Mappings in Deep Residual Networks
Trong bài viết tiếp theo ta sẽ bắt đầu đi vào tìm hiểu tensorflow để bắt tay vào lập trình các mạng neural. Hẹn gặp lại các bạn trong bài viết sau!

Add a Comment

Scroll Up