AI Cho Mọi Người

AI Cho Mọi Người

Convolution and pooling trong CNN

 

 

CNN được cấu tạo bởi các tầng convolution, non-linear activation, pooling và full connected. Trong bài học này, chúng ta sẽ tìm hiểu chi tiết từng tầng trong CNN.

 

1. Tầng Convolution

Convolution layer thường là lớp đầu tiên trong mô hình CNN. Lớp này có chức năng phát hiện ra các đặc trưng về không gian một cách hiệu quả.

Filter

Filter là một trong những tham quan trọng trong CNN. Kích thước filter trong tầng convolutonal phổ biến hiện nay là 3x3. Kích thước Filter thường là số lẻ, ví dụ như 3x3, 5x5, 7x7.

Kích thước của các Filter thường không quá lớn. Vì với kích thước nhỏ nó có thể trích xuất cục bộ chi tiết hơn, kích thước ảnh giảm chậm hơn; làm cho mạng sâu hơn và số lượng tham số phải học thấp hơn. Sử dụng 2 Filter kích thước 3×3 (có 18 tham số) sẽ tối ưu hơn dùng 1 Filter 5×5 (25 tham số).

2D Convolution

Các bạn có thể đọc lại phép Convolution ở bài trước (Convolution trên ảnh xám), trong bài này sẽ chỉ đưa ra thêm ví dụ Convolution cho ảnh RGB.

Với ảnh RGB có 3 channel red, green, blue thì Filter phải có cùng độ sâu với ảnh (depth). Và nó di chuyển từ trái sang phải, từ trên xuống dưới như minh hoạ trong hình trên.

Đầu ra của ảnh RGB vẫn là 1 tensor 2 chiều bởi sự kết hợp từ việc các phép Convolution trên từng kênh màu một như trong hình dưới đây.

Các bạn cần chú ý về hệ số Bias được cộng thêm trong phép tính tổng bên trên.

 

Stride

Đối với phép convolution hay pooling thì stride (S) là độ dài bước trượt của filter. Như trong hình bên dưới, độ dài bước trượt S = 2

Ví dụ:

  • Bộ filter có kích thước 2x2 với S = 1 trên đầu vào kích thước 4x4

  • Bộ filter có kích thước 2x2 với S = 2 trên đầu vào kích thước 4x4

Padding

Khi dùng convolution, thông tin ở biên bức ảnh bị biến mất và kích thước của ảnh giảm nhanh chóng.

Để khắc phục vấn đề này, chúng ta sử dụng padding. Bằng việc thêm các giá trị 0 vào biên, ta sẽ có zero padding.

Sau khi thêm pPadding chúng ta có một số lợi thế như sau:

  • Không mất mát thông tin viền nên nhận diện sẽ tốt hơn, tìm được chính xác đối tượng hơn.
  • Đầu ra của CNN kích thước sẽ giảm dần nên khi thêm padding sẽ giúp giảm chậm hơn.

 

Vậy, sau khi chúng ta đã tìm hiểu về stride và padding, làm thế nào từ ảnh đầu vào có thể tính được kích thước Feature map?

Với ảnh đầu vào có: kích thước \(W \times H\) , filter \(F \times F\), stride \(S\), padding \(P\) thì feature map có kích thước \(W’ \times H’\) trong đó:

– \(W’ = \frac{W + 2P – F}{S} + 1\)
– \(H’ = \frac{W + 2P – F}{S} + 1\)

Xét ví dụ theo ảnh bên trên ta có:

  • Đầu vào kích thước: 3x3
  • Padding: 1
  • Stride: 1
  • Filter: 3x3

Từ đó ta có Feature Map:
\(W’ = \frac{3 + 2*1 – 3}{1} + 1 = 3$ và $H’ = \frac{3 + 2*1 – 3}{1} + 1 = 3\)

Suy ra feature map kích thước là 3x3

 

Một số loại padding khác

 

Feature detector

Như đã nói ở trên Convolution giúp phát hiện các đặc trưng và được xem như là feature detector.

Trong hình ảnh bên dưới, chúng ta sử dụng một filter 7x7 để tìm vị trí đường cong tương ứng trên con chuột bên trái.

Xét bộ phận ở góc trái với ma trận như ở giữa

 

Thực hiện nhân ma trận này với filter 7x7 ta được kết quả bằng 6000. Vì vậy, trong trường hợp này phát hiện được hình dạng góc cong.

Tương tự xét góc phải bên trên như hình sau

Kết quả bằng 0 nên trong trường hợp này không phát hiện được đặc trưng đường cong như trên filter.

 

Tổng kết về tầng convolution

  • Tensor đầu vào có kích thước \(H \times W \times D\)
  • Siêu tham số
    • Số lượng filter: K
    • Kích thước của một filter: \(F \times F \times D\)
    • Stride của filter: S
    • Padding: P
  • Đầu ra: Tensor có kích thước \(H’ \times W’ \times K\)
    • \(W’ = \frac{W + 2P – F}{S} + 1\)
    • \(H’ = \frac{W + 2P – F}{S} + 1\)

 

2. Tầng Activation

Trong cấu trúc CNN, tầng activation thường theo sau tầng convolution. Hàm activation phổ biến được dùng là ReLU. Một số biến thể khác của ReLU như trong bảng sau:

 

3. Tầng Pooling

Có 2 loại pPooling thường được sử dụng trong CNN

  • Max Pooling
  • Average Pooling

Tầng pooling giúp giảm chiều feature map. Tầng pooling được sử dụng sau tầng convolution và tầng activation.

 

Max Pooling

Thực hiện lấy giá trị lớn nhất trong kích thước Filter mà ta xét.

Như trong hình bên dưới, ta thực hiện max-pooling 2x2.

 

Kết quả thu được sau khi thực hiện max-pooling

 

Average Pooling

Thực hiện lấy giá trị trung bình tổng trong kích thước filter ta xét.

 

Tổng kết về tầng pooling

  • Đầu vào: Tensor có kích thước \(H \times W \times D\)
  • Siêu tham số
    • Kích thước của filter: \(F \times F\)
    • Stride của filter: S
  • Tham số học: tầng pooling không có tham số học
  • Tensor đầu ra có kích thước \(H’ \times W’ \times D\) trong đó
    • \(H’ = \frac{H – F}{S} + 1\)
    • \(W’ = \frac{H – F}{S} + 1\)

 

4. Tầng Fully Connected

Tầng fully connected bản chất chính là multi-layer perceptron chúng ta đã học từ bài tuần trước . Tensor trước khi đưa vào tầng fully connected được thực hiện bước flattening để chuyển đổi tensor 3D thành tensor 1D.

Kết quả sau khi flattening trở thành đầu vào của tầng fully connected, và từ đó dự đoán kết quả.

 

Tổng kết

Như vậy là các bạn đã tìm hiểu lý thuyết về CNN. Một số điều bạn cần nhớ sau khi học xong phần lý thuyết này.

  • Tầng Convolution
    • Filter (thường có kích thước lẻ – ở tầng convolution)
    • 2D convolution
    • Stride
    • Padding
    • Feature detector
  • Tầng activation
  • Tầng pooling
    • Filter (thường có kích thước 2×2, stride bằng kích thước filter)
    • Max pooling
    • Average pooling
  • Tầng Fully Connected