Convolutional Neural Networks là gì

Convolutional Neural Networks
Convolutional Neural Networks

Những năm gần đây, ta đã chứng kiến được nhiều thành tựu vượt bậc trong ngành Thị giác máy tính (Computer Vision). Các hệ thống xử lý ảnh lớn như Facebook, Google hay Amazon đã đưa vào sản phẩm của mình những chức năng thông minh như nhận diện khuôn mặt người dùng, phát triển xe hơi tự lái hay drone giao hàng tự động.

Convolutional Neural Network (CNNs – Mạng nơ-ron tích chập) là một trong những mô hình Deep Learning tiên tiến giúp cho chúng ta xây dựng được những hệ thống thông minh với độ chính xác cao như hiện nay. Trong bài viết này, tôi sẽ giải thích đơn giản về Convolution (tích chập) cũng như ý tưởng của mô hình CNNs trong phân lớp ảnh (Image Classification).

Convolution (tích chập) là gì

Tích chập được sử dụng đầu tiên trong xử lý tín hiệu số (Signal processing). Nhờ vào nguyên lý biến đổi thông tin, các nhà khoa học đã áp dụng kĩ thuật này vào xử lý ảnh và video số.

Để dễ hình dung, ta có thể xem tích chập như một cửa sổ trượt (sliding window) áp đặt lên một ma trận. Bạn có thể theo dõi cơ chế của tích chập qua hình minh họa bên dưới.

Convolution with 3×3 Filter
Convolution with 3×3 Filter. Source: http://deeplearning.stanford.edu/wiki/index.php/Feature_extraction_using_convolution

Ma trận bên trái là một bức ảnh đen trắng. Mỗi giá trị của ma trận tương đương với một điểm ảnh (pixel), 0 là màu đen, 1 là màu trắng (nếu là ảnh grayscale thì giá trị biến thiên từ 0 đến 255).

Sliding window còn có tên gọi là kernel, filter hay feature detector. Ở đây, ta dùng một ma trận filter 3×3 nhân từng thành phần tương ứng (element-wise) với ma trận ảnh bên trái. Gía trị đầu ra do tích của các thành phần này cộng lại. Kết quả của tích chập là một ma trận (convoled feature) sinh ra từ việc trượt ma trận filter và thực hiện tích chập cùng lúc lên toàn bộ ma trận ảnh bên trái.

Có thể bạn sẽ thắc mắc ứng dụng của phép toán tích chập này là gì. Dưới đây là một vài ví dụ của phép toán tích chập.

  • Ta có thể làm mờ bức ảnh ban đầu bằng cách lấy giá trị trung bình của các điểm ảnh xung quanh cho vị trí điểm ảnh trung tâm.
Blur an image
Blur an image
  • Ngoài ra, ta có thể phát hiện biên cạnh bằng cách tính vi phân (độ dị biệt) giữa các điểm ảnh lân cận.
Edge detection
Edge detection

Bạn có thể tham khảo thêm các ví dụ tại GIMP manual và cơ chế hoạt động của tích chập qua bài viết của Chris Olah.

Convolutional Neural Networks là gì?

Bây giờ, bạn đã biết thế nào là convolution. Vậy CNNs là gì? CNNs chỉ đơn giản gồm một vài layer của convolution kết hợp với các hàm kích hoạt phi tuyến (nonlinear activation function) như ReLU hay tanh để tạo ra thông tin trừu tượng hơn (abstract/higher-level) cho các layer tiếp theo.

Trong mô hình Feedforward Neural Network (mạng nơ-ron truyền thống), các layer kết nối trực tiếp với nhau thông qua một trọng số w (weighted vector). Các layer này còn được gọi là có kết nối đầy đủ (fully connected layer) hay affine layer.

Trong mô hình CNNs thì ngược lại. Các layer liên kết được với nhau thông qua cơ chế convolution. Layer tiếp theo là kết quả convolution từ layer trước đó, nhờ vậy mà ta có được các kết nối cục bộ. Nghĩa là mỗi nơ-ron ở layer tiếp theo sinh ra từ filter áp đặt lên một vùng ảnh cục bộ của nơ-ron layer trước đó.

Mỗi layer như vậy được áp đặt các filter khác nhau, thông thường có vài trăm đến vài nghìn filter như vậy. Một số layer khác như pooling/subsampling layer dùng để chắt lọc lại các thông tin hữu ích hơn (loại bỏ các thông tin nhiễu). Tuy nhiên, ta sẽ không đi sâu vào khái niệm của các layer này.

Trong suốt quá trình huấn luyện, CNNs sẽ tự động học được các thông số cho các filter. Ví dụ trong tác vụ phân lớp ảnh, CNNs sẽ cố gắng tìm ra thông số tối ưu cho các filter tương ứng theo thứ tự raw pixel > edges > shapes > facial > high-level features. Layer cuối cùng được dùng để phân lớp ảnh.

Neural Network
Feedforward Neural Network
Image Classification with CNN
Image Classification with CNN

CNNs có tính bất biến và tính kết hợp cục bộ (Location Invariance and Compositionality). Với cùng một đối tượng, nếu đối tượng này được chiếu theo các gốc độ khác nhau (translation, rotation, scaling) thì độ chính xác của thuật toán sẽ bị ảnh hưởng đáng kể. Pooling layer sẽ cho bạn tính bất biến đối với phép dịch chuyển (translation), phép quay (rotation) và phép co giãn (scaling).

Tính kết hợp cục bộ cho ta các cấp độ biểu diễn thông tin từ mức độ thấp đến mức độ cao và trừu tượng hơn thông qua convolution từ các filter. Đó là lý do tại sao CNNs cho ra mô hình với độ chính xác rất cao. Cũng giống như cách con người nhận biết các vật thể trong tự nhiên. Ta phân biệt được một con chó với một con mèo nhờ vào các đặc trưng từ mức độ thấp (có 4 chân, có đuôi) đến mức độ cao (dáng đi, hình thể, màu lông). Bạn có thể hiểu thêm về triết lý đằng sau Deep Learning ở video bên dưới.

Tham khảo thêm:

12 thoughts on “Convolutional Neural Networks là gì

  1. Cảm ơn anh về những bài viết bổ ích về Convolutional Neural Network. Qua tìm hiểu về Deep Learning , e có thấy còn một mô hình được nhắc đến là Deep Belief Network. Anh có kinh nghiệm về mạng này ko? Em có đọc một vài tài liệu những ko hiểu vấn đề mấy :(. Mong hồi âm của anh

    Like

  2. Cám ơn các bài viết bổ ích của bạn.

    Tôi là người mới nhập môn Deep learning đã đọc các tài liệu nhưng cảm giác hoang mang lan rộng, nhưng tiếp cận được các bài viết của bạn tôi đã rút ngắn được rất nhiều thời gian cho nghiên cứu tìm hiểu của tôi.
    Trân trọng.

    Liked by 1 person

  3. Chào anh,

    Khi mình classify images bằng mô hình CNN thì kích thước ảnh ảnh hưởng như thế nào đến mô hình CNN vậy anh? Width và height của image có cần bằng nhau không anh? Nếu width và height lớn thì mô hình CNN của mình cần phải có nhiều lớp hơn phải không anh (hay mình sẽ resize cho hình bé lại)? Mình thường dùng các thuật toán xử lý ảnh nào vậy anh?

    Câu hỏi này hơi nhiều ý, mong anh thông cảm ^^

    Cám ơn anh.

    Like

    1. Bản chất của CNN là feature engineering tự động, kích thước ảnh không ảnh hưởng nhiều đến độ chính xác của mô hình.
      Trong thực tế, bạn cần detect đối tượng để có thể xử lý (bounding box chẳng hạn). Width và height không cố định có thể vuông đối với khuôn mặt, có thể tứ giác đối với các vật thể. Bạn resize ảnh để dễ dàng lưu trữ và tính toán nhanh.
      Thuật toán xử lý ảnh thì có nhiều (pre-processing, post-processing), bạn có thể tham khảo các hàm trong phần mềm Photoshop đều có. Thông thường ta dùng các hàm filter hay clustering để làm trơn ảnh, phát hiện biên cạnh, vân hoặc dáng.

      Like

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s