[ML – 18] Convolution Neural Network – Part 1
Chào các bạn, rất vui được gặp lại các bạn trong bài viết tiếp theo trong loạt bài về Machine Learning. Vì bản thân tôi vừa học vừa viết lại nên không thực sự có một agenda cho lộ trình của series này. Vô tình tới hôm nay tôi nhận ra mình đang tập trung viết nhiều về những kĩ thuật của Deep Learning. Đúng ra series này nên là “From Machine Learning to Deep Learning”, vì thế thay vì lựa chọn viết sang những giải thuật khác của Machine Learning, hôm nay chúng ta sẽ đi tìm hiểu thêm về Deep Learning và cụ thể sẽ là Convolution Neural Network – Mạng NN tích chập.
1. Problem with fully-connected Neural Network (ANN):
Như ta đã được học trong những bài viết trước, mạng NN truyền thống (được dùng với nhiều tên gọi như MLP – Multilayer Perceptron, Regular Neural Net, fully-connected nets) . Nhắc lại một chút rằng MLP hoạt động bằng cách nhận input (là một vector) và biến đổi vector này thông qua các hidden layer. Mỗi hidden layer được tạo bởi một tập các neuron (mỗi neuron trong layer được connect với toàn bộ các neuron của layer liền trước nó), và điểm đặc biệt là các neuron thuộc cùng một layer hoạt động hoàn toàn biệt lập với nhau (các trọng số gắn với các neuron này được sử dụng độc lập và hoàn toàn không liên quan đến nhau)
Bên cạnh đó performance của mạng NN truyền thống cũng không tốt với vấn đề xử lý ảnh. Chẳng hạn với một bức ảnh có kích thước nhỏ: 32x32x3 (width = 32, height = 32, color channels = 3 – Red Green Blue) thì số lượng feature của input sẽ là : 32323 = 3072 -> ở hidden layer đầu tiên, ngay sau input layer mỗi neuron sẽ phải có lượng trọng số (weights) là 3072 -> vẫn kiểm soát được, tuy nhiên nếu với ảnh lớn hơn một chút chỉ vào khoảng 200x200x3 -> mỗi neuron đã cần tới 120,000 weights. Chính vì vậy nên khi sử dụng mạng NN truyền thống trong xử lý ảnh, kích cỡ của ảnh khiến cho số lượng tham số (trọng số) được sử dụng trong mạng tăng lên chóng mặt -> khi số lượng trọng số lớn sẽ khiến chi phí tính toán lớn và dễ dẫn đến overfitting.
2. Solution with weight sharing:
Khi ta nhìn vào một bức ảnh, bản thân các chi tiết trong ảnh giúp ta định hình được nội dung trong bức ảnh, nhưng nếu ta nhận được từng chi tiết riêng lẻ, và phải hình dung toàn bộ nội dung bức ảnh -> công việc trở nên khó khăn hơn. Vấn đề các neuron trên cùng 1 layer hoạt động độc lập với nhau hay chính là việc không sử dụng chung các trọng số khiến cho việc trích xuất những đặc trưng trên input cũng gặp khó khăn hơn -> yêu cầu nhiều neuron hơn, nhiều layer hơn -> chi phí tính toán tăng và dễ vướng vào overfitting. Vì vậy các mạng NN mới liên tiếp ra đời, cố gắng giải quyết vấn đề này. Cụ thể trong các mạng NN mới trọng số được dùng chung giữa các neuron theo nhiều cách, giúp giảm số lượng trọng số, giảm chi phí tính toán, nhưng vẫn đem lại kết quả tốt.
3. Introduction of Convolution Neural Network (CNN):
Điển hình trong số đó là mạng tích chập (Convolution Neural Network – CNN) và mạng hồi quy (Recurrent Neural Network – RNN). Trong bài viết này chúng ta sẽ bắt đầu vào đi tìm hiểu CNN. Cũng giống như mạng NN truyền thống CNN hoạt động theo phương thức nhận input và biến đổi input thông qua các layer, tuy nhiên điểm khác biệt nằm ở cấu trúc của input và cấu trúc bên trong 1 layer.
– Input: Lấy cảm hứng từ xử lý ảnh nên input của CNN có dạng như một bức ảnh chứ không có dạng vector như ANN, cụ thể một bức ảnh sau khi số hoá có dạng width x height x depth (width: số lượng điểm ảnh trên chiều rộng, height: số lượng điểm ảnh trên chiều cao, depth: số lượng kênh chẳng hạn như RGB có 3 kênh đại diện cho mức độ của 3 màu Đỏ, Lục, Lam) nên input của CNN là 1 tensor 3 chiều (tensor là gì ta sẽ cùng tìm hiểu trong phần tiếp theo).
– Layer: ngoài sử dụng layer fully-connected CNN còn sử dụng một số layer đặc biệt như “Convolution Layer” (đây chính là nơi mà các trọng số được share), “ReLU” (sử dụng hàm ReLu chúng ta đã được học), “Pool” (không chứa trọng số hay tham số nhưng lại giúp giảm kích thước của ảnh).
Video này minh hoạ các layer thường được sử dụng trong CNN đã được mô tả ở trên.
4. What is tensor:
Chúng ta đã được biết các khái niệm như:
– Scalar : số vô hướng hay các số trong hệ thập phân ta vẫn sử dụng (5, 10, 7.2,…)
– Vector : là một tập các số vô hướng. Số lượng số vô hướng là số chiều của vector
– Matrix : là một bảng hình chữ nhật được chia ô như bàn cờ, với mỗi ô là một số vô hướng. Một cách định nghĩa khác là matrix gồm nhiều vector có cùng số chiều.
– Tensor : phát triển lên từ các khái niệm trên ta có định nghĩa tensor, mỗi tensor n chiều là 1 tập các tensor n-1 chiều có cùng kích thước. Chẳng hạn Scalar là tensor 0D (0 Dimention – 0 chiều), Vector là tensor 1D, Matrix là tensor 2D…
Trong bài viết tiếp theo ta sẽ tiếp tục tìm hiểu về CNN với Convolution, Backpropagation,… Hẹn gặp lại các bạn trong bài viết sau.