Mặt khác, với đối tượng đầu vào là bức hình, thì các pixel gần nhau hợp lại sẽ mang những thông tin hữu ích, nhưng neural network thì không khai thác được đặc điểm này. Do đó, có một mạng neural mới, được người ta nghiên cứu sáng tạo ra: đó là convolutional neural network (CNN). Vậy CNN khác với ANN như thế nào? Hiểu một cách nôm na thì CNN không đọc từng pixel riêng lẻ như ANN, mà nó sẽ đọc 1 loạt các pixel gần nhau để đưa vào tính toán. Nhưng để hiểu rõ hơn về cách hoạt động của CNN, chúng ta phải đi vào tìm hiểu từng thành phần cấu tạo nên mạng CNN mới rõ đc. Ở đây chúng ta sẽ tìm hiểu các khái niệm mới như Convolutional Layer, Pooling Layer.
Convolutional Layer:
Convolutional Layer là 1 lớp cực kì quan trọng trong CNN, nó đảm nhận hầu hết chức năng tính toán của mạng.Để giải thích về Convolutional Layer, mình sẽ đi thẳng trực tiếp vào ví dụ để giải thích cho trực quan.
Đầu tiên là khái niệm filter map: thay vì kết nối với từng pixel của hình ảnh đầu vào như ANN, CNN có những tấm filter dùng để áp vào những vùng của bức hình. Các filter map này thực chất là một ma trận 3 chiều gồm các con số. Và điều bạn cần phải cực kì lưu ý là các con số này chính là các parameter cần phải học. Filter map có kích thước dài và rộng là hyperparameter ( hyperparameter là gì thì mình có nói trong bài này) , riêng chiều cao ( mình sẽ gọi là depth - chiều sâu ) của filter map sẽ bằng với depth của lớp trước.
Ví dụ nhìn vào hình ví dụ ở trên, chúng ta có 2 filter map màu hồng là W0 và W1. Mỗi filter map có kích thước 3*3*3. Kích thước dài * rộng ( 3*3 ) là hyperparameter, còn chiều sâu (Depth) sẽ bằng với depth của input volumn, tức là bằng 3.
Stride: như đã nói ở trên, filter map được dùng để trượt lên tấm hình đầu vào, vậy trượt ở đây có nghĩa là như thế nào? Rất đơn giản, chỉ cần dịch filter map theo pixel từ trái sang phải theo từng dòng. Mỗi lần dịch như thế sẽ dựa vào 1 giá trị gọi là stride.
Ví dụ, stride = 1, thì mỗi lần dịch filter map sẽ sang phải 1 pixel, khi hết cạnh biên phải thì xuống 1 dòng và dịch tiếp. Còn nếu stride = 2 thì mỗi lần dịch sẽ sang phải 2 pixel, khi hết cạnh thì xuống 2 dòng.
Padding: người ta sẽ thêm những giá trị 0 bao quanh lớp input. Ví dụ như ở trên hình, lớp input của chúng ta ban đầu có kích thước 5*5*3, nhưng vì giá trị padding = 1, nên được bao thêm 1 lớp 0 bên ngoài. Từ đó, kích thước của lớp input = 7*7*3.
Feature map: feature map thực chất là kết quả sau khi lớp input được filter map quét qua hết. Với mỗi lần filter map áp lên input, sẽ có quá trình tính toán xảy ra. Vậy quá trình tính toán này là gì? Thực chất đó là quá trình nhân 2 ma trận.
Ví dụ như trên hình, khi lớp trên cùng của filter map W0 áp vào lớp trên cùng của input volum, ma trận filtermap w0 3*3 sẽ được nhân với ma trận 3*3 của input sau đó cộng thêm bias=1, và đưa ra kết quả = 2 ở feature map. Kích thước feature map được tính như nào? Mỗi lần 1 filter map trượt hết lên input volum sẽ cho ra 1 lớp của feature map. Vậy nên, depth của feature map sẽ bằng số lượng filter map.
Ví dụ như hình trên, depth của feature map = số lượng filter map = 2. Còn chiều dài và chiều rộng của feature map sẽ được tính bằng công thức: (W + 2P - F)/S +1 . Trong đó, W là kích thước input, P là padding, F là kích thước filter map, S là stride.
Ví dụ với hình, W = 5, P =1, F = 3, S =1 , ta tính được kích thước của feature map là 3.
Ta có thể thấy được, nếu với ANN thông thường, 1 bức hình 7*7*3 như trên sẽ cần có 7*7*3 = 147 parameters (nếu lớp thứ 2 chỉ có 1 neural), nhưng với CNN lại cần ít hơn số parameter từ filter map và số lượng parameter này có thể được chúng ta định lượng.
Pooling layer
Thường giữa các lớp Convolutional Layer với nhau người ta sẽ chèn vào 1 lớp Pooling layer để giảm bớt số lượng parameter lại nếu như đầu vào quá lớn. Có nhiều loại pooling layer, nhưng mình chỉ giới thiệu max pooling.ReLU layer
Khái niệm về ReLU mình đã nói trong bài này rồi, các bạn quay lại để xem nhá. Thường thì sau khi feature map được tính ra, người ta sẽ xếp theo sau đó 1 lớp ReLU, lớp này sẽ áp dụng hàm ReLU lên tất cả các giá trị của feature map.Fully Connected Layer
Để đưa ra được kết quả dự đoán thì lớp Neural network sẽ được thêm vào sau một mang CNN. Lớp neural này cũng chỉ là ANN bình thường thôi chứ ko khác gì cả. Vậy một mạng CNN thông thường sẽ có cấu trúc các lớp như thế nào? Sau đây là ví dụ:INPUT -> [[CONV -> RELU]*N -> POOL?]*M -> [FC -> RELU]*K -> FC
0 Nhận xét